mailq 显示队列有几万封退信(bounce)邮件,怎么快速清理?
mailq 显示队列有几万封退信(bounce)邮件,怎么快速清理?
问题判断:退信队列(bounce)堆积几万封意味着系统在大量发送递送状态通知(DSN),但通知本身也发不出去,形成二次垃圾。常见根因:被用作开放中继后产生反向散射(backscatter),或批量发送给了大量无效收件人。
Step 1 — 紧急止损:先暂停发信服务
postconf -e 'default_transport_rate_delay=30s' 并 postfix reload,留出清理窗口。然后执行 postsuper -d ALL bounce 删除全部退信队列。如果文件系统层面也需要清理,find /var/spool/postfix/bounce -type f -delete。Step 2 — 诊断来源:
grep "status=bounced" /var/log/mail.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head 统计退信的目标地址分布。如果发现大量退信发往不属于你的域的外部地址,那就是反向散射——你的服务器被用作退信放大器。Step 3 — 根因修复:在 main.cf 启用
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination 防止开放中继;增加 reject_unverified_recipient 在 SMTP 阶段就拒绝无效收件人,避免事后生成退信。Step 4 — 恢复与监控:恢复发信参数,持续
watch -n 30 'mailq | tail -5' 观察队列趋势,确认不再增长。📎 Postfix bounce 队列手册;M3AAWG 反向散射防护建议;RFC 5321 §4.5 DSN 递送状态通知
