按排查场景分类的iptables实用速查表。
一、基础巡检类(先看现状)
| 场景 | 核心指令 | 关键参数说明 |
|---|
| 查看当前所有规则 | iptables -L -v -n --line-numbers | -v显示统计, -n反解DNS加速, --line-numbers显示规则序号便于删除 |
| 查看NAT表规则 | iptables -t nat -L -v -n | NAT问题必须加-t nat,默认只显示filter表 |
| 查看RAW/Mangle表 | iptables -t raw/mangle -L -v -n | 排查QoS、连接追踪(conntrack)问题时使用 |
| 查看特定链 | iptables -L INPUT -v -n | 只查看INPUT链,减少输出干扰 |
| 查看规则被命中次数 | iptables -L -v -n | grep DROP | 检查哪些拒绝规则正在被触发 |
二、连接故障排查类(连不上/访问异常)
| 问题场景 | 诊断指令 | 分析要点 |
|---|
| 连接被隐式拒绝 | iptables -L INPUT | grep policy | 检查默认策略是否为DROP且最后没有允许规则 |
| 定位具体拦截规则 | iptables -L INPUT -v --line-numbers | 看pkts计数器是否在增长,定位哪条规则拦截 |
| 检查连接追踪表溢出 | conntrack -L | wc -l
cat /proc/sys/net/netfilter/nf_conntrack_max | 如果当前连接数接近max,新连接会被丢弃 |
| 检查状态匹配问题 | iptables -L | grep ESTABLISHED | 确认是否有允许ESTABLISHED,RELATED的规则,否则回包会被拦 |
| 端口转发不生效 | iptables -t nat -L PREROUTING -v -n | 检查DNAT规则是否命中(看pkts计数器) |
三、NAT/转发类问题(端口映射、网关场景)
| 场景 | 诊断指令 | 排查逻辑 |
|---|
| PREROUTING不生效 | iptables -t nat -L PREROUTING -v -n | 检查规则是否匹配(pkts是否有增长) |
| POSTROUTING源地址转换失败 | iptables -t nat -L POSTROUTING -v -n | SNAT/Masquerade规则是否正确 |
| 转发功能是否开启 | sysctl net.ipv4.ip_forward | 必须为1,否则包到不了FORWARD链 |
| 检查转发链拦截 | iptables -L FORWARD -v -n | 即使NAT正确,FORWARD链DROP也会阻断 |
| 内网访问外网异常 | iptables -t nat -L POSTROUTING | 确认SNAT出口网卡是否正确 |
四、性能与日志类(卡顿、丢包、高负载)
| 场景 | 指令 | 说明 |
|---|
| 记录被丢弃的包 | iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP:" | 添加LOG目标记录被丢弃的包到syslog |
| 查看日志输出 | tail -f /var/log/messages | grep IPTABLES | 实时查看被拦截的流量详情 |
| 统计各链流量 | iptables -L -v -n | awk '/Chain/{print $2}' | xargs -I{} iptables -L {} -v -n | head -2 | 快速查看各链的packet计数 |
| 检查规则冗余 | iptables-save | grep -v "^#" | sort | uniq -d | 查找重复规则(性能杀手) |
| 连接追踪内存占用 | cat /proc/slabinfo | grep conntrack | 连接追踪表占用过高会导致系统卡顿 |
五、特定协议深度排查
| 协议/场景 | 专用指令 | 关键检查点 |
|---|
| FTP被动模式失败 | iptables -L | grep ftp
lsmod | grep ftp | 检查ip_conntrack_ftp模块是否加载 |
| ICMP被禁ping不通 | iptables -L | grep icmp | 检查是否有DROP icmp-type echo-request |
| DNS解析慢/失败 | iptables -L | grep "dpt:53" | 检查UDP 53端口是否被限制 |
| MTU问题导致TCP卡顿 | iptables -L | grep MSS
iptables -L | grep clamp | 检查是否有TCPMSS目标设置 |
| WebSocket/长连接断 | iptables -L | grep timeout | 检查自定义的conntrack timeout是否过短 |
六、持久化与配置类(重启后失效)
| 场景 | 指令 | 说明 |
|---|
| 保存当前规则 | iptables-save > /etc/iptables/rules.v4 | Debian/Ubuntu通用路径 |
| CentOS/RHEL保存 | service iptables save 或iptables-save > /etc/sysconfig/iptables | 不同版本路径不同 |
| 恢复规则 | iptables-restore < /etc/iptables/rules.v4 | 从文件恢复 |
| 检查启动加载 | systemctl status netfilter-persistent
cat /etc/network/if-up.d/iptables | 确认重启自动加载机制 |
七、高级调试组合技
1. 追踪特定IP的完整路径
iptables -t raw -A PREROUTING -s 192.168.1.100 -j TRACE
iptables -t raw -A OUTPUT -s 192.168.1.100 -j TRACE
2. 快速清空所有规则(紧急恢复)
iptables -F && iptables -X && iptables -t nat -F && iptables -t nat -X && iptables -t mangle -F && iptables -t mangle -X && iptables -P INPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -P OUTPUT ACCEPT
3. 对比运行配置与保存配置
diff <(iptables-save \| sort) <(cat /etc/iptables/rules.v4 \| sort)
4. 查找无匹配包的空规则(清理优化)
iptables -L -v -n \| awk '/Chain/{chain=$2} /0\s*0\s*DROP/{print chain ": " $0}'
八、排查 checklist(故障时按序执行)
- 先看状态:
iptables -L -n -v 检查各规则计数器(确认规则是否被命中)
- 确认表范围:是filter问题还是nat问题?加
-t nat查看
- 检查默认策略:
iptables -L \| grep policy 看是否为DROP且未允许必要流量
- 验证转发开关:
cat /proc/sys/net/ipv4/ip_forward(涉及转发时必须)
- 查看连接追踪:
conntrack -L \| wc -l 确认是否溢出
- 临时加LOG:在怀疑的DROP规则前插入LOG目标,查看
/var/log/messages确认
- 比对持久化:
iptables-save与/etc/iptables/rules.v4差异(防止重启后"复发")
这份速查表的核心逻辑是:先定位表(filter/nat/raw)→ 再定位链(INPUT/FORWARD/PREROUTING)→ 看计数器确认命中 → 加LOG验证 → 最后处理。在实际生产环境排查时,配合watch -n1 'iptables -L -v -n'实时观察计数器变化是最有效的手段。