mic*_*hau 5 postfix spam spf rbl whitelist
我想接受所有通过 RBL 和 SPF 检查(可能还有一些检查,但这些是我的最低要求)的客户,并将那些没有通过的客户列入灰名单。当客户端通过 SPF 检查(存在 SPF 记录,没有失败,没有软失败)时,我们可以非常确定它不是僵尸网络僵尸,而是会重试交付的 MTA,因此将此类客户端列入灰名单毫无意义。
到目前为止,我一直在使用Whitelister,它可以实现这个规则,但它在过去 10 年左右没有得到维护,并且在现代发行版中不可用,所以我正在寻找替代方案。据我了解,Postfix 只能拒绝 RBL 中的客户端,但不能将 RBL 用作更复杂条件的一部分,所以我reject_rbl_client在这里看不到任何使用方法。是否有可以进行此类检查的策略守护程序?
我在 main.cf 中的收件人限制如下。我不知道我可以用什么代替???:
smtpd_recipient_restrictions =
check_sender_access regexp:/etc/postfix/sender_access_regexp,
permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_unauth_destination,
???,
check_policy_service unix:postgrey/postgrey.sock
Run Code Online (Sandbox Code Playgroud)
我不知道我可以用什么来代替
???
A:check_policy_service
长答案:
我希望后缀源实现应该可以reject_rbl_client在
那里添加另一个函数,该函数实现具有逆逻辑的函数的副本 - 不是回复而是成功检查。smtpd/smtpd_check.creject_rbl_addrDUNNOOK
--- a/postfix/src/smtpd/smtpd_check.c
+++ b/postfix/src/smtpd/smtpd_check.c
rbl = find_dnsxl_addr(state, rbl_domain, addr);
if (!SMTPD_DNSXL_STAT_OK(rbl)) {
- return (SMTPD_CHECK_DUNNO);
+ return (SMTPD_CHECK_OK);
} else {
Run Code Online (Sandbox Code Playgroud)
然后您可以在 postfix' 配置中使用它而不是reject_rbl_client.
但这意味着额外的、持续的维护以保持更新;当新版本出现时修补您的源代码。所以我不希望有人走那条路。
相反,您将需要使用外部策略检查,就像该whitelister程序为您所做的那样。这意味着您可以check_policy_service在这里使用,您只需要正确的工具/程序即可进行交互。(顺便说一句,考虑从那里升级是件好事,因为它被丢弃是有原因的。它无法检查任何 IPv6 地址。)
检查替代方案,有(据我所知,在 debian 存储库中)
所有这些都是 Python 实现 - 因此虽然它们可能无法立即执行您想要的操作(我没有检查过),但它们应该相当容易适应。
进一步的还有
可能还有更多。您甚至可以根据许多可用的 SPF 库编写自己的代码。
有关的文档check_policy_service有点简单,只有示例代码简介解释了期望的值check_policy_service:
结果可以是 Postfix access(5) 映射中允许的任何操作。
因此,访问是下一站,这(也许)解释了更改DUNNOforOK会将“可能通过,首先运行进一步检查”(> 灰名单)逻辑转换为“邮件已通过,在此停止规则处理”。
现在您知道如何将任何策略服务器转变为白名单系统,即使它不是开箱即用的。
附录:如何设置策略服务器,来自policyd-spf自述文件(尽管我希望您知道这一点,基于 postgrey 上的白名单)。
Installing
----------
1. Add the following to /etc/postfix/master.cf:
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
2. Configure the Postfix policy service in /etc/postfix/main.cf:
smtpd_recipient_restrictions =
...
reject_unauth_destination
check_policy_service unix:private/policyd-spf
...
policyd-spf_time_limit = 3600
NOTE: Specify check_policy_service AFTER reject_unauth_destination or
else your system can become an open relay.
3. Reload Postfix.
Run Code Online (Sandbox Code Playgroud)