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

关闭Postfix中继后服务器仍发送垃圾邮件的排查方法求助

关闭Postfix中继后服务器仍发送垃圾邮件的排查方法求助

看起来你的服务器确实遇到了未授权发信的问题,结合你贴出的Postfix配置和邮件日志,咱们一步步来定位问题根源:

先抓日志里的关键线索

从你提供的mail.log片段能看到核心信息:

May 30 06:16:47 Ubuntu-T postfix/pickup[35351]: 87478220358: uid=33 from=

uid=33对应的是Linux系统里的www-data用户——也就是运行Nginx/PHP-FPM的Web服务用户,这说明垃圾邮件是从你服务器内部的Web进程发出来的,不是外部攻击者通过中继漏洞发的,你之前配置的中继限制(smtpd_relay_restrictions)是生效的,问题出在本地进程的未授权调用。

第一步:排查Web服务进程(重点是WordPress站点)

既然是www-data在发信,大概率是某个WordPress站点被入侵了,先做这些检查:

  • 逐个检查所有WordPress站点的wp-content/plugins、wp-content/themes目录,找有没有陌生文件名(比如乱码、带奇怪后缀的PHP文件),或者最近被修改过的可疑文件(用ls -lt按修改时间排序查看)。
  • 登录每个WordPress后台,检查用户列表,有没有新增的陌生管理员账号,或者原有账号的权限被篡改。
  • 打开wp-config.php文件,看末尾有没有被添加恶意代码(比如隐藏的eval、base64_decode之类的内容)。
  • 查看Nginx的访问日志(/var/log/nginx/access.log),找有没有大量异常请求:比如频繁访问xmlrpc.php的暴力破解请求、访问可疑路径(比如/wp-admin/xxxx.php)的请求。

第二步:追踪具体发信的进程

要精准定位是哪个脚本在调用Postfix发信,可以用系统监控工具:

  • 用auditd追踪:先安装auditd(sudo apt install auditd),然后添加追踪规则:
    sudo auditctl -a exit,always -F uid=33 -F comm=sendmail
    
    之后实时查看audit日志:
    tail -f /var/log/audit/audit.log
    
    当再有垃圾邮件发送时,日志里会显示触发sendmail的进程路径和PID,顺着这个线索就能找到恶意脚本。
  • 用strace临时监控:先找出所有www-data的进程:
    ps aux | grep www-data
    
    对可疑的PHP-FPM进程(比如PID比较新的)执行strace,监控它的系统调用:
    sudo strace -p <进程PID> -e execve
    
    如果这个进程在发信,就能捕捉到它调用sendmail的行为,进而定位到对应的脚本文件。

第三步:修复Postfix配置的小问题

你贴的main.cf里有个语法错误:

smtpd_recipient_restrictions = reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_non_fqdn_recipient,>

最后那个,>是不完整的,先把这个修复成合法的配置(比如补全规则或者删掉多余的符号),避免Postfix加载配置时出现异常。

另外,检查/etc/postfix/sasl/sasl_passwd的权限,必须设置为600且属主是root,防止其他用户读取你的Gmail认证信息:

sudo chmod 600 /etc/postfix/sasl/sasl_passwd
sudo postmap /etc/postfix/sasl/sasl_passwd
sudo systemctl reload postfix

第四步:临时止损(可选)

如果垃圾邮件发得很频繁,想先止住的话,可以临时限制www-data发信,但注意这会影响WordPress的正常邮件(比如密码重置、订单通知):
在main.cf里添加:

smtpd_sender_login_maps = hash:/etc/postfix/sender_login_maps
smtpd_sender_restrictions = reject_sender_login_mismatch, permit_sasl_authenticated, permit_mynetworks

然后创建/etc/postfix/sender_login_maps文件,只允许需要发信的用户(比如你的合法邮箱):

your-legit-email@gmail.com your-legit-email@gmail.com

生成哈希文件并重启Postfix:

sudo postmap /etc/postfix/sender_login_maps
sudo systemctl restart postfix

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:13:11