You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postfix的check_sender_access无法拦截特定域名ional.co.uk的垃圾邮件

Postfix的check_sender_access无法拦截特定域名ional.co.uk的垃圾邮件

首先得提醒你:Postfix的check_sender_access检查的是信封发件人(envelope sender,也就是MAIL FROM地址),而不是你在邮件客户端里看到的头信息里的From地址。很多垃圾邮件会伪造头From,但实际的信封发件人可能完全不一样,这是最常见的问题根源。

你可以按下面的步骤一步步排查:

1. 查看邮件日志,确认实际的信封发件人

先去查Postfix的日志文件(通常是/var/log/mail.log或者/var/log/maillog),搜索包含ional.co.uk的记录,找到对应的邮件条目,重点看里面的sender=字段到底是什么。比如执行:

grep 'ional.co.uk' /var/log/mail.log

如果日志里的sender不是你预期的xxx@ional.co.uk格式(比如是空白、或者其他奇怪的地址),那你的MySQL查询自然匹配不到。

2. 验证数据库记录的准确性

你的查询用INSTR('%s', Email)来做匹配,先确认数据库里的Email字段没有多余的空格或者特殊字符。登录MySQL执行:

SELECT Email FROM Blocklist WHERE Id = 52;

看看输出是不是严格的ional.co.uk,没有前后空格或者隐藏字符——要是有多余字符,匹配肯定会失败。

3. 检查Postfix配置的执行顺序

你的smtpd_sender_restrictions里第一条是permit_mynetworks,如果发送垃圾邮件的IP正好在mynetworks配置的范围内,Postfix会直接允许这个邮件,根本不会走到后面的check_sender_access步骤。你可以在日志里找到对应的client=字段,对比main.cf里的mynetworks配置,确认这个IP不在列表里。

4. 确认Postfix已经重载了配置

如果你最近修改过main.cf或者MySQL查询配置,记得执行:

postfix reload

很多时候配置改了但没重载,Postfix还是在用旧规则,导致设置不生效。

5. 检查其他限制规则是否干扰

看看你的main.cf里有没有其他限制模块,比如smtpd_recipient_restrictions或者smtpd_relay_restrictions,有没有配置permit_all或者其他优先级更高的允许规则,导致邮件在sender检查之前就被放行。

另外,你可以用日志里实际的信封发件人来测试postmap命令,比如如果日志里的sender是spam@fake.ional.co.uk,就执行:

postmap -q "spam@fake.ional.co.uk" mysql:/etc/postfix/mariadb-vblocklist.cf

要是返回结果不是REJECT,那就是查询逻辑的问题,你可以考虑把查询改成用LIKE匹配,比如:

SELECT Action FROM Blocklist WHERE '%s' LIKE CONCAT('%%', Email, '%%')

这种方式匹配更直观,也不容易出问题。

备注:内容来源于stack exchange,提问作者Sarazil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:53:19