我们最近在 DMZ 中添加了一个基于 Exim (MailCleaner) 的 MTA,用于向我们的 LAN 电子邮件服务器发送和接收电子邮件。它运行良好,但我对它放置在发送给外部收件人的外发邮件中的一个标头有点担心。
具体来说,它是从我们的 LAN 电子邮件服务器传送到 DMZ 中的 MTA 的“已接收”标头,它看起来像:
Received: from [192.168.XX.XX] (helo=mailserver.localdomain.local) by mail.senderdomain.com stage1 with esmtp with id SomeMessageID for <[email protected]> from sendername <[email protected]>; Tue, 24 Nov 2009 13:06:58
其中 192.168.XX.XX 是局域网邮件服务器的 DMZ 接口,localdomain.local 是我们的局域网域名,senderdomain.com 是我们组织的外部可解析的域名。
是否可以修改此标头,使其不会在每封外发邮件中泄露我们的本地域名和 DMZ 地址范围?我认为我们不能简单地将其删除,因为在已发送邮件中的几个“已接收”标头中,我能够检查的只有它包含“发件人姓名”部分,该部分标识了我们组织中的发件人的电子邮件地址。
如能提供关于如何修改或掩盖这一点的任何提示,我们将不胜感激。
答案1
标头的内容Received:
在 Exim 中由配置选项定义received_header_text
。默认设置(您可以从中看到示例的构造方式)是:
received_header_text = Received: \
${if def:sender_rcvhost {from $sender_rcvhost\n\t}\
{${if def:sender_ident \
{from ${quote_local_part:$sender_ident} }}\
${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}\
by $primary_hostname \
${if def:received_protocol {with $received_protocol}} \
${if def:tls_cipher {($tls_cipher)\n\t}}\
(Exim $version_number)\n\t\
${if def:sender_address \
{(envelope-from <$sender_address>)\n\t}}\
id $message_exim_id\
${if def:received_for {\n\tfor $received_for}}
至于更改或删除标题。请注意,前方有一些最佳实践建议。
您确定要删除此信息吗?它的存在让您可以更轻松地跟踪滥用报告。内部 IP 地址的暴露风险实际上相当有限。
从技术上讲,您可以使用删除这个第一个收到的标题,
headers_remove
但它肯定不符合 RFC 要求,而且有可能造成邮件循环。如果您必须隐藏信息,那么最好通过修改 来实现
received_header_text
。为了可维护性和最小意外原则,即使 MTA 不执行任何其他功能,您可能也希望尽可能具体地进行更改。这将涉及在这些if
语句中为那些您知道始终正确的事实添加一些附加条件,例如发件人是否已验证自己的身份。