嘿,我来复活一下这个旧帖子,因为某种形式的“从未应用过的邮件接收器补丁”确实最终被合并到了版本控制中。随着时间推移,代码逐渐腐化,我那个打过补丁的容器在某时点停止了工作。
我删除了原来的邮件接收器容器,重新搭建了一个新容器并生成了新的 API 密钥,现在我的 Discourse 实例又能正常接收邮件了……但系统似乎又开始像 2017 年那样,将拒绝的邮件回弹(backscatter)了。
果然,这些拒绝回复都回到了我的收件箱中。尽管“无效目标地址(BadDestinationAddress)”这类邮件本应在 SMTP 层面就被拒绝,根本不该发送到 Discourse 进行后续处理并生成回复邮件。如果有垃圾邮件发送者用虚假邮箱地址攻击这个服务器,就会产生回弹问题。
直接连接 SMTP 服务器测试时,我发现它根本没有尝试拒绝虚假邮件:
root@discourse:/var/discourse# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ESMTP server
HELO sdfsdfsdf
250 discourse-mail-receiver.localdomain
MAIL FROM: sdfsdf@example.com
250 2.1.0 Ok
RCPT TO: sdfsdfsdf@discourse.libsdl.org
250 2.1.5 Ok
……总之,我能看到默认的邮件接收器镜像确实配置了一个快速拒绝脚本,但它似乎并没有真正执行拒绝操作?
/etc/postfix/master.cf:
policy unix - n n - - spawn user=nobody
argv=/usr/local/bin/discourse-smtp-fast-rejection
/etc/postfix/main.cf:
smtpd_recipient_restrictions = check_policy_service unix:private/policy
我是否需要调整某些配置才能让这功能正常工作?或者有没有办法深入排查它为何不生效?其他人遇到类似情况了吗?
谢谢!
