新手防smtp垃圾邮件攻击的核心是精准控制发信行为、阻断异常连接路径,通过端口管控、ip限制和协议层拦截三步实现:只开放必要smtp端口并禁用高危外连,限制发信ip范围并封禁恶意源,配合postfix启用helo/spf校验及灰名单,并定期检查日志建立响应流程。

新手配置服务器防火墙防SMTP垃圾邮件攻击,核心不是“堵死所有SMTP”,而是精准控制发信行为、阻断异常连接路径。重点在端口管控、IP限制和协议层拦截三步走,不需要复杂工具也能见效。
只开放必要SMTP端口,禁用高危外连
默认情况下,很多服务器允许任意程序通过25/465/587端口向外发信——这正是垃圾邮件机器人(bots)批量外发的入口。新手应立即收紧:
- 用 firewalld 或 iptables 默认拒绝所有出站SMTP流量:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="25" protocol="tcp" reject'
同样处理端口 465 和 587; - 仅允许本机邮件服务(如Postfix)自身监听入站,不允许多余进程外连;
- 若服务器不承担发信功能(比如纯Web服务器),直接关闭25端口出站并禁止postfix服务启动。
限制发信IP范围,封禁已知恶意源
大量垃圾邮件来自被黑主机或扫描器,它们常从固定IP段发起连接。新手可快速落地两件事:
- 在防火墙中加入实时黑名单(RBL)IP段:例如 Spamhaus 的 DROP 列表,用脚本定期下载并导入 firewalld;
- 对入站SMTP连接设置速率限制,防止暴力试探:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="25" protocol="tcp" limit value="5/m" accept'
超过每分钟5次新连接即丢弃; - 检查 /var/log/maillog,发现高频尝试HELO或AUTH失败的IP,手动封禁:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.100.44" reject'
配合邮件服务做协议层防护,不单靠防火墙
防火墙只能拦连接,不能识别伪造发件人或钓鱼内容。必须与邮件软件联动:
- 在Postfix的 /etc/postfix/main.cf 中启用基础校验:
smtpd_helo_restrictions = reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_unauth_pipelining - 强制启用SPF验证(需DNS同步配置TXT记录),让防火墙+MTA共同拒绝伪造域名的邮件;
- 安装 postgrey 实现灰名单,首次发信自动延迟,多数垃圾邮件器不会重试。
定期检查日志,建立简易响应流程
新手最容易忽略的是“看见异常却不知如何响应”。建议每周花10分钟执行:
- 运行 awk '/reject/ && /helo|auth/ {print $NF}' /var/log/maillog | sort | uniq -c | sort -nr | head -10 查看高频被拒原因;
- 用 ss -tlnp | grep :25 确认只有postfix在监听25端口;
- 将 /var/log/firewalld 中REJECT日志按IP聚合,导出TOP10并加入永久封禁规则。











