![Postfix / SpamAssassin 完全忽略 SPF](https://linux22.com/image/154144/Postfix%20%2F%20SpamAssassin%20%E5%AE%8C%E5%85%A8%E5%BF%BD%E7%95%A5%20SPF.png)
我目前收到了大量来自“我自己”的电子邮件,并且在过滤它们方面遇到了很大的困难。我将 postfix 配置为检查 SPF 并(大概)在失败时拒绝,并且 SpamAssassin 已安装 SPF 过滤器。但没有任何作用。我可以通过 telnet 连接到 postfix,并以明文形式将一条消息从“我自己”发送给我自己,无需身份验证,它就会到达我的收件箱,就像它应该在那里一样。
$ sudo -u spamd -H spamassassin -D --lint 2>&1 | grep SPF
May 24 10:12:04.282 [15707] dbg: diag: [...] module installed: Mail::SPF, version v2.008
May 24 10:12:04.289 [15707] dbg: plugin: loading Mail::SpamAssassin::Plugin::SPF from @INC
master.cf 的相关位
...
smtp inet n - n - - smtpd -o content_filter=spamassassin
submission inet n - n - - smtpd -o content_filter=spamassassin
smtps inet n - n - - smtpd -o content_filter=spamassassin
policyd-spf unix - n n - - spawn user=nobody argv=/bin/python /usr/libexec/postfix/policyd-spf
spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
...
摘录 main.cf
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
check_policy_service unix:private/policyd-spf,
reject_unauth_destination,
reject_rhsbl_reverse_client dbl.spamhaus.org,
reject_rhsbl_helo dbl.spamhaus.org,
reject_rhsbl_sender dbl.spamhaus.org,
reject_rbl_client zen.spamhaus.org
我在 DNS 的 txt 记录中定义了 SPF(由于网络限制,我通过 mailjet 中继所有邮件):
example.com. 20020 IN TXT "v=spf1 include:spf.mailjet.com ?all"
编辑:根据建议,我更新了我的 DNS,但确切的行为仍然存在:
example.com. 86400 IN TXT "v=spf1 include:spf.mailjet.com -all"
编辑2:我添加了 DMARC 记录以对 100% 的违规行为实施隔离,但它仍然不起作用:
_DMARC.example.com. 86400 IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; pct=100"
我用 mxtoolbox 检查了 SPF 和 DMARC,一切看起来都很好。
但 Postfix 只是直接传递邮件,而 SA 则附加SPF_NEUTRAL
在邮件头中。那么......我该如何进行这项工作?如何防止此类垃圾电子邮件的发送?
编辑:我不在乎 SA 或 Postfix 是否阻止它,我只是不希望它出现在我的收件箱中。我想我可能混淆了尝试整合这两种阻塞,这就是它不起作用的原因?或者我的 DNS 配置错误?
编辑3:根据这里的方法2:https://serverfault.com/questions/905591/receiving-spam-from-my-own-email-address-postfix这应该有效吗? (这个问题比较旧,使用了 perl 模块,而我使用的是较新的 python 模块,但我以相同的方式实现了它。)
答案1
我还发现spamassassin
SPF 的实现是“奇怪的”......而不是postfix-policyd-spf-perl
and postfix-policyd-spf-python
that Works完美。
为此我有
配置 postfix 首先使用 检查 SPF
postfix-policyd-spf-python
,阻止所有违反 SPF 规则的内容然后使用 spamassassin + 其 SPF 规则检查邮件内容
安装:
apt install postfix-policyd-spf-python
然后编辑文件,在 spamassassin 之前/etc/postfix/main.cf
插入spf
过滤(在我的例子中是 amavis):
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policy-spf, check_policy_service inet:127.0.0.1:10023
并添加以下行/etc/postfix/master.cf
policy-spf unix - n n - - spawn user=nobody argv=/usr/bin/policyd-spf
然后重新启动 postfix,一切都会按预期工作!