iptables 速查表

5 阅读3分钟

排查场景分类的iptables实用速查表。


一、基础巡检类(先看现状)

场景核心指令关键参数说明
查看当前所有规则iptables -L -v -n --line-numbers-v显示统计, -n反解DNS加速, --line-numbers显示规则序号便于删除
查看NAT表规则iptables -t nat -L -v -nNAT问题必须加-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-numberspkts计数器是否在增长,定位哪条规则拦截
检查连接追踪表溢出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 -nSNAT/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.v4Debian/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的完整路径

# 方法:添加带注释的TRACE规则(需raw表支持)
iptables -t raw -A PREROUTING -s 192.168.1.100 -j TRACE
iptables -t raw -A OUTPUT -s 192.168.1.100 -j TRACE
# 然后查看dmesg或/var/log/kern.log看包在iptables中的完整流经路径

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}'
# 显示所有pkts为0的DROP规则,考虑删除以提升性能

八、排查 checklist(故障时按序执行)

  1. 先看状态iptables -L -n -v 检查各规则计数器(确认规则是否被命中)
  2. 确认表范围:是filter问题还是nat问题?加-t nat查看
  3. 检查默认策略iptables -L \| grep policy 看是否为DROP且未允许必要流量
  4. 验证转发开关cat /proc/sys/net/ipv4/ip_forward(涉及转发时必须)
  5. 查看连接追踪conntrack -L \| wc -l 确认是否溢出
  6. 临时加LOG:在怀疑的DROP规则前插入LOG目标,查看/var/log/messages确认
  7. 比对持久化iptables-save/etc/iptables/rules.v4差异(防止重启后"复发")

这份速查表的核心逻辑是:先定位表(filter/nat/raw)→ 再定位链(INPUT/FORWARD/PREROUTING)→ 看计数器确认命中 → 加LOG验证 → 最后处理。在实际生产环境排查时,配合watch -n1 'iptables -L -v -n'实时观察计数器变化是最有效的手段。