Postfix中如何阻止反向DNS归属指定域名的所有客户端?
嘿,针对你遇到的这个反向DNS归属googleusercontent.com的垃圾邮件问题,我来给你捋清楚怎么解决~
首先得明确:直接把googleusercontent.com放进rbl_override是没用的。因为rbl_override这个哈希表是用来针对单个IP/网段做RBL规则的覆盖(比如某个IP被误判进RBL你想放行,或者某个IP要手动拒绝),它没法识别域名后缀匹配反向DNS的情况,所以这个思路走不通。
接下来,正确的做法是用Postfix的check_client_access结合PCRE正则表,来匹配客户端的反向DNS名称,具体步骤如下:
创建PCRE规则文件
新建/etc/postfix/reverse_dns_block.pcre文件,写入以下规则:/\.googleusercontent\.com$/ REJECT 本服务器已阻止反向DNS归属googleusercontent.com的客户端连接REJECT后面的自定义提示可以按需修改,方便你在日志里快速识别拦截原因。
确认Postfix支持PCRE
运行命令postconf -m | grep pcre,如果输出里有pcre,说明你的Postfix已经支持正则表,没问题;如果没有,需要安装对应的扩展包(比如Debian/Ubuntu上的postfix-pcre,CentOS上的postfix-pcre)。调整Postfix配置顺序
打开main.cf找到smtpd_relay_restrictions配置段,规则顺序非常重要——Postfix按顺序执行规则,一旦匹配就停止后续检查。参考你的现有配置,调整后大概是这样:smtpd_relay_restrictions = permit_mynetworks check_recipient_access hash:/etc/postfix/recipient permit_sasl_authenticated reject_unauth_destination check_client_access pcre:/etc/postfix/reverse_dns_block.pcre check_client_access hash:/etc/postfix/rbl_override check_sender_access pcre:/etc/postfix/domains reject_rbl_client <你的RBL列表行>把反向DNS拦截规则放在
reject_unauth_destination之后,是因为先确保拦截未授权的转发请求,再处理恶意反向DNS的客户端;放在RBL检查之前也可以,能提前拦截这类IP,减少后续规则的处理压力。让配置生效
修改完配置后,运行postfix reload重载配置(无需重启服务),或者用systemctl restart postfix重启Postfix即可。
之前你提到垃圾邮件能进来是因为reject_unauth_destination在RBL后面,现在调整顺序加上反向DNS拦截,应该能有效阻止这类垃圾邮件了。
备注:内容来源于stack exchange,提问作者Pierre Abbat

