我的问题与此类似,但我正在运行更新版本的 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
如果大多数教程只提到or ,其他
_restrictions
用途是什么?smtpd_client_restrictions
smtpd_recipient_restrictions
我想要实现的是:
- 阻止以发送垃圾邮件而闻名的 MTA 客户端(例如,动态 IP 或黑名单中列出的其他客户端)和/或不符合 RFC(例如,非 FQDN 地址等)。
- 同时允许某些客户端基于白名单绕过这个
- 仅允许经过 SASL 身份验证的客户端将邮件中继到其他服务器,而不是每个列入白名单的域
- 阻止冒充其他服务器的客户端(即 SPF),包括那些以前列入白名单的客户端(换句话说,让列入白名单的服务器只传送他们的邮件)
- 为新服务器添加延迟以进一步增强垃圾邮件保护 (Postgrey)。这已经很有效了,我还为它创建了必要的白名单。
现在,如果您以任何一种方式回答问题 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。
这些
_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)
手册页。如果 action 是 ACCEPT 或其任何同义词,评估将进入下一阶段的规则集。如果 action 是 REJECT(或其兄弟),则会向发送者返回一个错误,并且不会进行进一步的处理。
您的规则集看起来不错,但限制性太强且容易出错 - 例如,发件人的 DNS 服务器关闭,不会接受来自他们的邮件,HELO/EHLO 限制将禁止配置不当的 Exchange 服务器和其他一些深奥的邮件程序,等等。
根据我的经验,我建议将其设置为最低限度,并将所有 RBL、HELO 检查和反向检查替换为评分策略服务守护进程,例如
postfwd2
. 在那里,您可以微调应用于所有这些小事情的策略,并根据复杂的参数而不是单一的命中采取不同的行动。