温馨提示×

centos iptables怎么调试

小樊
62
2026-09-02 16:17:11
栏目: 智能运维

在 CentOS 上调试 iptables,一般可以从规则查看、日志、计数、抓包、模块加载几个层面入手。下面按实战流程给你总结一套常用方法(CentOS 6/7 通用,CentOS 8 以后默认是 nftables,但 iptables 仍可兼容使用)。


一、基础查看与确认

1. 查看当前规则

iptables -L -n -v
iptables -t nat -L -n -v
iptables -t mangle -L -n -v
  • -n:不解析域名
  • -v:显示包/字节计数(非常重要,用于调试)

2. 查看规则编号

iptables -L -n --line-numbers

方便删除/插入规则。

3. 确认 iptables 服务状态

systemctl status iptables      # CentOS 7
service iptables status        # CentOS 6

二、利用计数定位问题(最常用)

1. 观察哪条规则命中

iptables -L -n -v

看 pkts / bytes 是否增长:

  • 为 0 → 流量没到这条规则
  • 一直增长 → 规则生效

2. 在关键位置插入计数规则

iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

然后看计数是否增加。


三、开启 iptables 日志(非常重要)

1. 添加 LOG 规则

iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-prefix "IPTABLES-DROP: "

2. 查看日志

tail -f /var/log/messages
# 或
journalctl -f

日志示例:

IPTABLES-DROP: IN=eth0 OUT= MAC=... SRC=1.2.3.4 DST=5.6.7.8 ...

⚠️ 注意:

  • LOG 不会终止包
  • LOG 要放在 DROP/REJECT 之前

四、DROP / REJECT 调试技巧

1. 先用 REJECT 而不是 DROP

iptables -A INPUT -p tcp --dport 9999 -j REJECT
  • REJECT 会立刻返回错误,便于客户端判断
  • DROP 会导致连接超时,不好排查

2. 临时放行测试

iptables -I INPUT 1 -j ACCEPT

确认是否是 iptables 导致的问题。


五、配合 tcpdump 抓包

1. 抓接口包

tcpdump -i eth0 port 80

2. 对比 iptables 状态

  • tcpdump 能看到 → 包到了机器
  • iptables 计数没涨 → 规则顺序或表不对
  • tcpdump 看不到 → 网络/路由问题

六、常见问题排查清单

✅ 规则顺序问题

iptables 自上而下匹配,第一条匹配即生效。

✅ 表用错

  • filter:默认表(INPUT/OUTPUT/FORWARD)
  • nat:端口映射、SNAT/DNAT
  • mangle:修改包属性

✅ 被 firewalld 干扰(CentOS 7)

systemctl stop firewalld
systemctl disable firewalld

✅ 规则未保存

service iptables save
# 或
iptables-save > /etc/sysconfig/iptables

七、常用调试组合示例

调试 SSH 被拦

iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-prefix "SSH-DEBUG: "
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
tail -f /var/log/messages

八、进阶工具(可选)

  • iptables -C:检查规则是否存在
  • conntrack -L:查看连接跟踪
  • nft list ruleset:CentOS 8+ 底层

如果你愿意,可以告诉我:

  • CentOS 版本
  • 具体问题(连不上?端口不通?NAT 不生效?)
  • 当前 iptables 规则

我可以直接帮你定位。

0 踩