为什么还学 iptables?
nftables、firewalld 喊了多年,但线上老系统依旧跑 iptables。
会翻规则、能救急,是运维的基本尊严。
1. 看清现状:列出所有规则
iptables -L -n --line-numbers-n 不把端口解析成服务名,速度翻倍。
2. 永久保存 & 重载
CentOS 7 之前:
service iptables save # 保存
service iptables restart # 重载Debian/Ubuntu:
apt install iptables-persistent
netfilter-persistent save
netfilter-persistent reload3. 允许 SSH(22)——先保命
iptables -A INPUT -p tcp --dport 22 -j ACCEPT远程操作前,先写一条允许当前会话的规则,再开默认 DROP,否则直接失联。
4. 回环口全开
iptables -A INPUT -i lo -j ACCEPT本地进程通信被误杀,会出各种玄学 bug。
5. 已建立连接放行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT让服务器“出去”的流量能回来。
6. 禁 ping(可选)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP防扫描,但排障时别忘关掉。
7. 放行 Web 端口
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPTmultiport 一次写多个端口,简洁。
8. 限制 SSH 来源
iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 22 -j ACCEPT只允许内网登录,暴力破解直接归零。
9. 防 SYN Flood
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT超出速率的 SYN 包丢弃,轻量级抗 D。
10. 封杀单 IP
iptables -I INPUT -s 1.2.3.4 -j DROP-I 插到最前,立即生效。
11. 端口转发(DNAT)
把公网 8080 转到内网 192.168.1.10:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j MASQUERADE别忘了开 net.ipv4.ip_forward = 1
12. 屏蔽常见扫描
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP干掉 NULL 包与 SYN/FIN 畸形包。
13. 限速 SSH 暴力破解
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP60 秒内同一 IP 新建连接 ≥4 直接拉黑。
14. 日志记录(调试神器)
iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP: " --log-level 4配合 journalctl -k -f 实时看命中情况。
15. 一键清空白链(慎点)
iptables -F
iptables -X
iptables -Z本地终端执行,远程慎用!
小结速查表
| 场景 | 关键选项 |
|---|---|
| 放行端口 | -A INPUT -p tcp --dport N -j ACCEPT |
| 封 IP | -I INPUT -s IP -j DROP |
| 已建立连接 | -m state --state ESTABLISHED,RELATED |
| 端口转发 | -t nat -A PREROUTING … DNAT |
| 限速 | -m limit --limit 1/s |
| 永久保存 | service iptables save / netfilter-persistent |