我的问题类似于这个,但我正在运行较新版本的 Postfix,那里的答案并没有真正回答我的问题。
我正在运行带有 Postfix 2.11 的 Debian Jessie 服务器。
到目前为止,我了解 Postfix 有以下检查:
smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_sender_restrictions
smtpd_relay_restrictions
smtpd_recipient_restrictions
从我读,Postfix 将按照上述顺序处理它们。
现在我的问题是,当任何限制中的条目匹配到时会发生什么
OK
?这是否意味着 Postfix 将跳过剩余的检查那个特定的*_restriction
或者会跳过全部*_restrictions
全部一起?除此以外还会出现其他结果吗
OK
?REJECT
或者这些检查的适当值是什么?如果大多数教程只提到或,那么其他的
_restrictions
用于什么?smtpd_client_restrictions
smtpd_recipient_restrictions
我想要实现的是:
- 阻止已知发送垃圾邮件(例如动态 IP 或黑名单中列出的其他客户端)和/或不符合 RFC(例如非 FQDN 地址等)的 MTA 客户端。
- 同时允许某些客户端根据白名单绕过此问题
- 仅允许经过 SASL 验证的客户端将邮件中继到其他服务器,并且不是所有列入白名单的域名
- 阻止冒充其他服务器(即 SPF)的客户端,包括之前列入白名单的客户端(换句话说,只允许列入白名单的服务器递送其邮件)
- 对新服务器添加延迟以进一步增强垃圾邮件防护(Postgres)。这已经运行得很好了,我也为它创建了必要的白名单。
现在,如果您以任何方式回答问题 1,那么将所有检查放入上面提到的检查之一*_restrictions
很可能不会起作用,因为白名单会覆盖 SPF 检查。
因此,我的配置看起来像这样:
# basic configuration (myorigin, mydomain, etc.)
smtpd_helo_required = yes
smtpd_client_restrictions = check_client_access hash:/etc/postfix/blackwhitelists/whitelisted_client_addresses,
check_reverse_client_hostname_access hash:/etc/postfix/blackwhitelists/blacklisted_reverse_hostnames,
reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.sorbs.net, reject_unknown_client
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks,
reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname,
reject_unknown_helo_hostname, reject_unauth_pipelining
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks,
check_sender_access hash:/etc/postfix/blackwhitelists/blacklisted_sender_addresses
smtpd_relay_restrictions = permit_sasl_authenticated, permit_mynetworks,
reject_unauth_destination
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks,
reject_unauth_destination, reject_unauth_pipelining,
check_sender_access hash:/etc/postfix/blackwhitelists/whitelisted_sender_addresses, reject_non_fqdn_sender,
reject_unknown_sender_domain, check_policy_service unix:private/policyd-spf,
check_policy_service unix:/var/spool/postfix/postgrey/socket
smtpd_etrn_restrictions = permit_sasl_authenticated, permit_mynetworks, reject
# more basic configuration
如您所见,现在许多选项都重复了,因为我不确定是否在其他限制中也需要它们。总而言之,我认为这也相当混乱。
我还对通过所有这些检查的邮件运行 SpamAssassin。
答案1
这些_restrictions
适用于 SMTP 对话特定阶段期间可用的信息,即:
smtpd_client_restrictions
应用于初始连接 (IP/FQDN)smtpd_helo_restrictions
应用于客户端HELO/EHLO 命令smtpd_sender_restrictions
应用于 MAIL FROM 命令smtpd_recipient_restrictions
适用于 RCPT TO 命令
smtpd_relay_restrictions
控制中继到第三方域。
按照给定顺序评估每个限制中的所有项目,如果任何项目与此限制序列匹配,则停止处理并采取指定的操作。access(5)
手册页提供了可能的操作的完整列表。
如果操作为 ACCEPT 或其同义词,则评估将进入下一阶段的规则集。如果操作为 REJECT(或其同类操作),则将向发送者返回错误,并且不会进行进一步处理。
您的规则集看起来不错,但是限制太多而且容易出错 - 例如发件人的 DNS 服务器关闭,将不会接受来自他们的任何邮件,HELO/EHLO 限制将禁止配置不当的 Exchange 服务器和其他一些深奥的邮件程序,等等。
根据我的经验,我建议将其设置为最低限度,并用评分策略服务守护进程替换所有 RBL、HELO 检查和反向检查,例如postfwd2
。在那里,您可以微调应用于所有这些小事情的策略,并根据一组复杂的参数而不是单一的命中采取不同的行动。