温馨提示×

ubuntu iptables怎样调试

小樊
48
2026-10-06 21:30:54
栏目: 智能运维

在 Ubuntu 上调试 iptables 通常包含 查看规则、跟踪报文、日志、定位顺序问题、常见工具 等几类方法。下面按实战方式说明。


一、基础查看(先确认规则本身)

1. 查看当前规则

sudo iptables -L -n -v
  • -n:不解析域名(更快)
  • -v:显示数据包/字节统计(很有用)
  • 推荐指定表:
sudo iptables -t nat -L -n -v
sudo iptables -t filter -L -n -v

2. 查看规则编号

sudo iptables -L -n -v --line-numbers

调试必备,方便删除/插入规则。


二、确认报文“走哪条链 / 哪条规则”

1. 看计数器(最重要)

sudo iptables -L -n -v
  • pkts / bytes 在增长 → 规则命中
  • 一直 0 → 没命中(顺序或条件问题)

2. 插入“测试规则”

在怀疑位置前后插入:

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

再观察统计变化。


三、使用 LOG 定位(强烈推荐)

1. 添加 LOG 规则

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

2. 查看日志

Ubuntu(非容器)一般:

sudo dmesg | grep IPTABLES
# 或
sudo tail -f /var/log/syslog

⚠️ 注意:

  • LOG 不会终止报文
  • 通常放在 ACCEPT / DROP 之前

四、使用 TRACE(高级调试)

适合“包到底去了哪里”。

1. 加载模块

sudo modprobe ipt_LOG

2. 添加 trace 规则

sudo iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE

3. 查看

sudo dmesg -T | grep TRACE

会显示:

  • 经过哪个表
  • 哪个链
  • 哪条规则

五、常见调试思路

1. 规则顺序问题(最常见)

iptables 自上而下匹配,命中即停

❌ 错误示例:

iptables -A INPUT -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

✅ 正确:

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

2. 忘记 RELATED,ESTABLISHED

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

3. 本地回环被挡

iptables -A INPUT -i lo -j ACCEPT

4. NAT 不生效

检查:

cat /proc/sys/net/ipv4/ip_forward

若为 0:

sudo sysctl -w net.ipv4.ip_forward=1

六、临时清空(调试用,谨慎)

sudo iptables -F
sudo iptables -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

⚠️ 会断 SSH,仅本地或测试环境使用。


七、推荐工具

1. iptables-save / restore

sudo iptables-save > rules.txt
sudo iptables-restore < rules.txt

2. 使用 nftables(Ubuntu 新版本)

sudo nft list ruleset

八、典型调试流程(总结)

  1. iptables -L -n -v --line-numbers
  2. 看计数器是否增长
  3. 加 LOG / TRACE
  4. 检查规则顺序
  5. 确认接口 / 状态 / 转发

如果你愿意,可以贴出:

  • iptables -L -n -v
  • 你想实现的功能(如:禁止某 IP、做 NAT、端口转发)

我可以直接帮你分析规则哪里有问题。

0 踩