我正在尝试隐藏从 postfix 发送的电子邮件中的客户端 IP。
下面是一个例子来说明我的意思:
Received: from mail.[removed].com (adsl-75-37-61-254.dsl.frs2ca.sbcglobal.net [75.37.61.254])
(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
by mail.[removed].com (Postfix) with ESMTP id D50C7BF185DD
for <[removed]@gmail.com>; Thu, 2 Aug 2012 16:14:21 +0900 (JST)
Date: Thu, 02 Aug 2012 07:14:08 +0000
注意这一行(adsl-75-37-61-254.dsl.frs2ca.sbcglobal.net [75.37.61.254])
我想从电子邮件中删除该行。
我尝试过这样做:
/etc/postfix/main.cf:
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
smtp_header_checks :
/^((.*) [(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])])/ IGNORE
但我的 IP 地址仍然在电子邮件的接收部分内。如果我从本地 smtp 服务器发送电子邮件,则 IP 地址变为localhost.localdomain [127.0.0.1]
我如何从标头中删除客户端 IP?
答案1
在main.cf
:
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
在dynamicmaps.cf
:
# Use your real path to dict_pcre.so, below
pcre /usr/lib/postfix/dict_pcre.so dict_pcre_open
你应该把这个放在你的/etc/postfix/smtp_header_checks
:
/^Received: .*/ IGNORE
/^X-Originating-IP:/ IGNORE
然后运行
# /etc/init.d/postfix reload
答案2
要从新邮件提交的“已接收”标头中删除发件人 IP,请使用密钥header_checks
而不是选项smtp_header_checks
:
header_checks = regexp:/etc/postfix/header_checks_submission
该smtp_header_checks
选项仅适用于从 Postfix 发送到外部服务器的邮件,而该header_checks
选项适用于从您的客户端发送到 Postfix 的传入邮件。
另请参阅Postfix 如何接收邮件在http://www.postfix.org/OVERVIEW.html组件概述如下:邮件从 smtpd -> 清理 -> 传入队列发送。该smtpd
进程接收邮件并将Received
发件人 IP 地址注入邮件头。header_checks(5)
选项由cleanup(8)
清理电子邮件标题的组件。
这是不是header_checks
建议在 main.cf 中全局设置此类选项,因为这将修改全部电子邮件,即使是从外部服务器收到的邮件。相反,您应该将客户端配置为通过端口 587 上的专用提交服务发送电子邮件,并将 Postfix 配置为仅为这些经过身份验证的提交重写标头。
在 中,在行后/etc/postfix/master.cf
添加以下几行:-o
submission
submission inet n - y - - smtpd
# Require SASL authentication
-o smtpd_sasl_auth_enable=yes
# Require TLS transport security, do not leak your credentials in plaintext.
-o smtpd_tls_security_level=encrypt`
# Disallow unauthenticated users from sending mail through this port.
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# Use a different cleanup service (see below)
-o cleanup_service_name=ascleanup
配置时间清理服务A已认证s提交。我选择名称ascleanup
以保持简短和对齐,但任何名称都可以。为此,复制清理服务行在同一个master.cf
文件中,但重命名第一个字段并添加一个新选项来选择过滤器文件:
cleanup unix n - y - 0 cleanup
ascleanup unix n - y - 0 cleanup
-o header_checks=pcre:/etc/postfix/header_checks_submission
(使用该pcre
表需要postfix-pcre
在 Debian 上安装,它将自动负责更新 dynamicmaps.cf 文件。无需对此进行进一步的更改。)
最后一部分是实际的过滤器配置/etc/postfix/header_checks_submission
。您可以使用类似以下内容的内容:
/^Received: .*/ IGNORE
这将删除完整的 Received 标题行,但您也可以只删除该from helo.host (reverse.host.name [192.0.2.1])
部分,同时保留其他信息:
/^Received: from [^ ]+ \([^ ]+ \[[IPv0-9a-f:.]+\]\)\s+(.* \(Postfix\) with .+)$/ REPLACE Received: $1
如果你确实改变了mail_name
选项,请更改Postfix
单词以匹配您的配置。(此模式基于 Postfix 源代码准确,smtpd/smtpd.c。
我在 Debian buster 上使用 postfix 3.4.7-0+deb10u1 测试了此方法。有关使用相同方法的另一个精彩描述,请参阅使用 Postfix 发送电子邮件时,如何在“已接收”标头中隐藏发件人的 IP 和用户名?
经过上述修改,以下内容变为Received: by ...
:
Received: from debian (unknown [IPv6:fe80::b036:2ff:fe6e:73f4])
by mail.example.nl (Postfix) with ESMTPSA id 1571B910B
for <[email protected]>; Sun, 12 Jan 2020 02:23:15 +0000 (UTC)
答案3
打开 /etc/postfix/master.cf 并找到:
cleanup unix n - n - 0 cleanup
在这些行下面添加并变成:
cleanup unix n - n - 0 cleanup -o header_checks=pcre:/etc/postfix/header_checks
编辑 /etc/postfix/header_checks 并添加以下代码:
/^Received:/ IGNORE
现在重新启动 postfix。在 CentOS 上举例:
service postfix restart
答案4
用这个:
/^Received: from .*127.0.0.1**/ IGNORE
*
两端仅使用单端