温馨提示×

ubuntu iptables怎么调试

小樊
45
2026-09-28 03:42:42
栏目: 智能运维

在 Ubuntu 上调试 iptables 通常可以从查看规则、日志、流量跟踪、常见坑点几个方面入手。下面按实用顺序给你一套调试方法。


一、先确认 iptables 是否真的在生效

1. 查看当前规则

sudo iptables -L -n -v
sudo iptables -t nat -L -n -v
sudo iptables -t mangle -L -n -v

说明:

  • -n:不解析域名(更快)
  • -v:显示流量统计(pkts / bytes)
  • 看 pkts 是否在增长,可判断规则是否命中

2. 查看指定链

sudo iptables -L INPUT -n -v
sudo iptables -L FORWARD -n -v

二、确认默认策略(最常见问题)

sudo iptables -S

重点看:

-P INPUT DROP
-P FORWARD DROP

⚠️ 如果是 DROP,但没写放行规则,就会“莫名其妙不通”。


三、用 LOG 规则调试(非常推荐)

1. 在规则前加 LOG

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

然后观察日志:

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

2. 在关键位置加多个 LOG

例如:

iptables -A INPUT -j LOG --log-prefix "INPUT-START: "
iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP-IN: "
iptables -A INPUT -j LOG --log-prefix "INPUT-END: "

通过日志顺序判断规则走到哪一步。


四、用 TRACE 精确跟踪(最强调试)

1. 开启 trace

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

2. 查看 trace 日志

sudo tail -f /var/log/kern.log

你会看到类似:

TRACE: raw:PREROUTING:rule:1
TRACE: filter:INPUT:rule:3

✅ 可以清楚看到包走了哪些表、链、规则


五、确认 Ubuntu 是否用 nftables

Ubuntu 20.04+ 默认可能用 nftables:

sudo iptables -V

如果看到:

iptables v1.8 (nf_tables)

说明 iptables 只是 nftables 的兼容层。

查看真实规则:

sudo nft list ruleset

六、常见调试场景

1. 端口不通

sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

并确认:

sudo ufw status

Ubuntu 默认可能用 ufw:

sudo ufw disable

2. NAT 不生效

sudo sysctl net.ipv4.ip_forward

如果不是 1:

sudo sysctl -w net.ipv4.ip_forward=1

3. 规则顺序错误

iptables 自上而下匹配,例如:

❌ 错误:

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

✅ 正确:

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

七、临时清空(调试用)

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

⚠️ 生产环境谨慎


八、推荐调试流程(总结)

  1. iptables -L -n -v 看是否命中
  2. iptables -S 看策略
  3. 加 LOG 规则
  4. 必要时用 TRACE
  5. 检查 ufw / nftables
  6. 检查 ip_forward

如果你愿意,可以把:

  • Ubuntu 版本
  • iptables -S 输出
  • 具体“什么不通”

发给我,我可以直接帮你定位问题。

0 踩