似乎最新的 Self-hosted mail-receiver update following Let's Encrypt root certificate change 邮件接收器更新不再将 IP 地址解析为主机名。这导致之前正常工作的 Postfix 客户端访问限制出现问题,该限制是通过在 mail-receiver.yml 中添加以下行启用的:
POSTCONF_smtpd_client_restrictions: 'regexp:/etc/postfix/shared/client_access_regex'
以下是邮件接收器日志中的一段片段,显示了一个入站连接:
Oct 01 17:38:11 discourse-mail-receiver postfix/master[1]: reload -- version 3.5.6, configuration /etc/postfix
Oct 01 17:41:58 discourse-mail-receiver postfix/smtpd[151]: connect from unknown[167.71.160.115]
Oct 01 17:41:59 discourse-mail-receiver postfix/smtpd[151]: disconnect from unknown[167.71.160.115] ehlo=2 starttls=1 mail=1 quit=1 commands=5
原本应解析为发起客户端主机名 www11-do.checktls.com[167.71.160.115] 的内容,现在无法解析并被标记为 unknown[167.71.160.115]。
这与 client_access_regex 文件中的正则表达式条目产生冲突,该文件旨在拒绝所有没有有效 PTR 记录的主机(基本上是所有垃圾邮件中继),以及所有来自动态 IP 范围的主机(主要是虚拟主机,也基本上是所有垃圾邮件中继)。
由于没有任何 IP 被解析为主机名,所有规则都失效了。更糟糕的是,/unknown/ REJECT 这一行现在阻断了所有入站邮件。我不得不暂时禁用该规则以使入站连接成为可能,而其他所有规则也因解析问题而失效,这导致服务器再次面临垃圾邮件威胁(在实施这些规则之前,我的论坛曾被垃圾邮件淹没;实施之后,我几乎没再收到过任何垃圾邮件)。
由于 Let’s Encrypt 相关问题,我无法回退到旧版本作为临时解决方案,而新版本又重新打开了垃圾邮件泛滥的大门。因此,我非常希望能得到修复(我曾尝试研究如何在 Docker 镜像中手动启用 DNS 解析,但未能成功)。
以下是 client_access_regex 文件供参考,如果您也遇到类似的重复性垃圾邮件问题并希望尝试使用(请使用 Customize direct-delivery Postfix configuration 来配置 /etc/postfix/shared 和 mail-receiver.yml):
# regex dns: ([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-zA-Z]{2,}
# regex ip: ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
#
# dyn-ip-dns:
/((\\.|-|x)(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){2}((\\.|-)[a-zA-Z0-9]+)+\\.[a-zA-Z]{2,}/ REJECT
/unknown/ REJECT
/sample-spam\\.domain\\.com/ REJECT