温馨提示×

如何调试ubuntu iptables

小樊
52
2026-10-18 14:50:13
栏目: 智能运维

在 Ubuntu 上调试 iptables 通常需要从规则本身、流量路径、日志、工具辅助几个层面入手。下面按实用顺序说明。


一、先确认基础状态

1. 查看当前规则

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

说明:

  • -n:不解析域名
  • -v:显示流量统计(很关键)
  • 不同表:
    • filter(默认)
    • nat
    • mangle

2. 确认 iptables 是否生效

sudo iptables -S

或用 nft 检查是否被 nftables 接管(Ubuntu 20.04+ 常见):

sudo nft list ruleset

如果系统使用 nftables,iptables 可能只是兼容层。


二、确认流量是否经过 iptables

1. 检查是否被 DROP / REJECT

sudo iptables -L -n -v | grep -E "DROP|REJECT"

2. 检查转发是否开启(如果是路由器/容器)

cat /proc/sys/net/ipv4/ip_forward

若为 0:

sudo sysctl -w net.ipv4.ip_forward=1

三、使用日志定位问题(最重要)

1. 添加 LOG 规则

例如在 INPUT 链前加:

sudo iptables -I INPUT 1 -j LOG --log-prefix "IPT-INPUT: " --log-level 4

查看日志:

sudo dmesg -T | grep IPT-INPUT
# 或
sudo tail -f /var/log/syslog

2. 精确调试某类流量

例如调试 22 端口:

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

四、使用 TRACE(最强调试手段)

1. 开启 raw 表 trace

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

查看:

sudo dmesg -T

会显示:

  • 经过的表
  • 链
  • 规则号
  • 最终动作

⚠️ 调试完一定要删掉:

sudo iptables -t raw -F

五、常见调试场景

1. 端口不通

  • 是否 DROP?
  • 是否策略为 DROP?
sudo iptables -L INPUT --line-numbers
  • 是否 nat 没做?
sudo iptables -t nat -L -n -v

2. Docker / Kubernetes 干扰

Docker 会写大量 iptables 规则:

sudo iptables -L DOCKER-USER -n -v

建议:

  • 自定义规则放在 DOCKER-USER
  • 不要直接改 DOCKER 链

3. 规则顺序问题

iptables 是顺序匹配:

sudo iptables -L INPUT --line-numbers

调整:

sudo iptables -I INPUT 1 ...
sudo iptables -D INPUT 5

六、持久化与恢复

保存规则

sudo apt install iptables-persistent
sudo netfilter-persistent save

清空所有(调试时)

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

七、推荐调试工具

  • iptables -v(看流量)
  • tcpdump(看是否到本机)
sudo tcpdump -i eth0 port 80
  • conntrack
sudo conntrack -L

八、快速排查清单 ✅

  1. 规则是否生效?
  2. 是否被 DROP / REJECT?
  3. 表是否正确(nat / filter)?
  4. 是否开了 ip_forward?
  5. 是否被 Docker 覆盖?
  6. 是否规则顺序错误?
  7. 有没有 TRACE 日志?

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

  • Ubuntu 版本
  • 具体现象(端口不通 / 无法上网 / 容器问题)
  • 当前 iptables 规则

我可以直接帮你分析。

0 踩