iptables防smtp垃圾邮件的核心是网络层粗粒度拦截:限制单ip连接频率、封禁黑名单ip段、仅允许可信源访问25端口,并配合连接状态追踪丢弃异常tcp包,为上层邮件服务减负。

iptables 本身不直接过滤垃圾邮件内容,它工作在网络层和传输层,只能基于 IP、端口、协议、连接状态等特征做粗粒度控制。保护内部邮件服务器(如 Postfix、Sendmail)免受垃圾邮件,核心思路是:用 iptables 在网络入口处拦截明显恶意的连接行为,为上层邮件服务减轻压力,而不是替代 SpamAssassin 或 Rspamd 这类应用层反垃圾工具。
限制 SMTP 连接频率和并发数
大量发信机器人常通过高频短连接试探或投递。iptables 可结合 connlimit 和 limit 模块进行速率控制:
- 限制单个 IP 每分钟最多建立 5 个新 SMTP 连接(目标端口 25):
iptables -A INPUT -p tcp --dport 25 -m connlimit --connlimit-above 5 --connlimit-mask 32 -j DROP - 限制每秒最多接受 3 个新连接请求(防突发扫描):
iptables -A INPUT -p tcp --dport 25 -m limit --limit 3/sec --limit-burst 6 -j ACCEPT - 确保已建立连接能正常通行:
iptables -A INPUT -p tcp --dport 25 -m state --state ESTABLISHED,RELATED -j ACCEPT
封禁已知垃圾邮件源 IP 和网段
定期导入公开黑名单(如 Spamhaus DROP 列表)或内部积累的恶意 IP,批量加入 DROP 规则:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 临时封禁单个 IP:
iptables -A INPUT -s 198.51.100.42 -p tcp --dport 25 -j DROP - 封禁整个 /24 网段:
iptables -A INPUT -s 198.51.100.0/24 -p tcp --dport 25 -j DROP - 建议将这类规则放在链首(用
-I INPUT 1),确保优先匹配
只允许可信网络访问 SMTP 端口
若邮件服务器仅需接收来自特定合作伙伴或中继网关的邮件,可大幅缩小暴露面:
- 默认拒绝所有入站 SMTP 流量:
iptables -P INPUT DROP(谨慎操作,先确保 SSH 等管理端口已放行) - 仅放行指定内网段或合作方公网 IP:
iptables -A INPUT -s 10.10.20.0/24 -p tcp --dport 25 -j ACCEPTiptables -A INPUT -s 203.0.113.17 -p tcp --dport 25 -j ACCEPT - 务必保留本机回环和管理接口(如 eth0 的 SSH)的通行规则,避免锁死
启用连接跟踪并拒绝异常 TCP 行为
利用 netfilter 的连接状态追踪,识别并拦截典型扫描或伪造连接:
- 只允许合法 TCP 握手流程进入 SMTP 端口:
iptables -A INPUT -p tcp --dport 25 --syn -m conntrack --ctstate NEW -j ACCEPT - 显式丢弃非 SYN 的新建连接尝试(常见于端口扫描):
iptables -A INPUT -p tcp --dport 25 --syn ! --syn -j DROP - 拒绝 FIN/RST 扫描等畸形包:
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROPiptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP










