在 Messaging Server 中,有多种不同的方法可以确保所接受的要传送或转发的所有邮件均来自具有有效 DNS 名称的地址。最简单的方法是将 mailfromdnsverify 通道关键字放在 tcp_local 通道上。
Messaging Server 还提供了 dns_verify 程序,它使您可以使用 ORIG_MAIL_ACCESS 中的以下规则,确保接受的要传送和转发的所有邮件均来自具有有效 DNS 名称的地址:
ORIG_MAIL_ACCESS TCP|*|*|*|*|SMTP*|MAIL|*|*@*|*|* \ $[msg-svr-base/lib/dns_verify.so, \ dns_verify,$7|$$y|$$NInvalid$ host:$ $$7$ -$ %e]
从句法上来说,以上示例中的换行符在此类映射条目中很显著。反斜杠字符是一种合法地继续到下一行的方法。
dns_verify 映像也可用于根据 RBL(Realtime Blackhole List,实时黑洞名单)、MAPS(Mail Abuse Prevention System,邮件滥用防止系统)、DUL(Dial-up User List,拨号用户列表 )或 ORBS(Open Relay Behavior-modification System,开放中继修改系统)列表检查外来连接,作为保护系统免受 UBE 影响的另一种尝试。使用新的 mailfromdnsverify 关键字,还可以使用一种单独的“更易于配置”的方法进行这样的检查,而不必执行 dns_verify 调用。这种更简单的方法是使用 dispatcher.cnf 文件中的 DNS_VERIFY_DOMAIN 选项。例如,在 [SERVICE=SMTP] 部分中,将选项的实例设置为要检查的各个列表:
[SERVICE=SMTP] PORT=25 ! ...rest of normal options... DNS_VERIFY_DOMAIN=sbl-xbl.spamhaus.org. DNS_VERIFY_DOMAIN=list.dsbl.org. ...etc... |
在这种情况下,邮件在 SMTP 级别被拒绝(即,邮件在 SMTP 对话期间被拒绝),因此永远不会被发送到 MTA。这种简单方法的缺点在于,它将对所有正常的外来 SMTP 邮件(包括那些来自内部用户的邮件)执行检查。这种方法效率较低,并且在 Internet 连接性降低的情况下可能会发生问题。另一种方法是从 PORT_ACCESS 映射表或 ORIG_MAIL_ACCESS 映射表调用 dns_verify。在 PORT_ACCESS 映射表中,您可以使初始条目不检查本地内部 IP 地址或邮件提交者,而使较后的条目对其他所有人员执行所需的检查。或者,在 ORIG_MAIL_ACCESS 映射表中,如果只将检查应用于从 tcp_local 通道进入的邮件,则对于来自内部系统/客户端的邮件将跳过检查。使用了指向 dns_verify 的条目的示例,如下所示。
PORT_ACCESS ! Allow internal connections in unconditionally *|*|*|*|* $C$|INTERNAL_IP;$3|$Y$E ! Check other connections against RBL list TCP|*|25|*|* \ $C$[msg-svr-base/lib/dns_verify.so,\ dns_verify_domain_port,$1,sbl-xbl.spamhaus.org.]EXTERNAL$E ORIG_MAIL_ACCESS TCP|*|25|*|*|SMTP*|*|tcp_local|*@*|*|* \ $C$[msg-svr-base/lib/dns_verify.so,\ dns_verify_domain,$1,sbl-xbl.spamhaus.org.]$E
dns_verify 程序支持基于 DNS 的数据库,该数据库用于确定可能发送未经许可的批量邮件的外来 SMTP 连接。某些公用 DNS 数据库不包含通常用于此用途的 TXT 记录。而是,他们只包含 A 记录。
在典型设置中,DNS 中针对特定 IP 地址找到的 TXT 记录包含一个在拒绝邮件时可返回 SMTP 客户端的错误消息。但是,如果未找到 TXT 记录,而是找到 A 记录,则 Messaging Server 5.2 之前的 dns_verify 版本将返回消息 "No error text available"
dns_verify 目前支持在无可用 TXT 记录时指定使用默认文本的选项。例如,以下 PORT_ACCESS 映射表显示了如何启用此选项:
PORT_ACCESS *|*|*|*|* $C$|INTERNAL_IP;$3|$Y$E \ TCP|*|25|*|* \ $C$[<msg-svr-base/lib/dns_verify.so \ ,dns_verify_domain_port,$1,dnsblock.siroe.com,Your$ host$ ($1)$ \ found$ on$ dnsblock$ list]$E * $YEXTERNAL
在此示例中,如果在对域 dnsblock.siroe.com 的查询中找到了远程系统,但没有可用的 TXT 记录,则系统将返回以下消息 "Your host a.b.c.d found on dnsblock list"