温馨提示×

ubuntu iptables怎样排查故障

小樊
49
2026-10-01 01:40:02
栏目: 智能运维

在 Ubuntu 上排查 iptables 故障,通常可以按下面这套思路一步步来:


一、确认 iptables 是否真的在工作

1. 查看当前规则

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

重点看:

  • 包计数(pkts)是否在增长
  • 规则顺序是否正确
  • 是否有 DROP / REJECT

2. 确认 iptables 后端

Ubuntu 可能用 iptables-legacy 或 nftables:

sudo iptables --version
ls -l /usr/sbin/iptables

如果是 nftables 环境:

sudo nft list ruleset

二、确认流量是否真的到 iptables

1. 检查网卡和 IP

ip addr
ip route

确认:

  • 服务监听的 IP 是否正确
  • 是否有多网卡路由问题

2. 确认服务是否在监听

sudo ss -tulnp

三、用日志定位被哪条规则拦了

1. 在 DROP 前加日志规则

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

然后看日志:

sudo dmesg | grep IPTABLES-DROP
sudo journalctl -k | grep IPTABLES-DROP

四、常见故障点排查

1. 规则顺序错误(最常见)

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

2. 默认策略是 DROP

sudo iptables -P INPUT DROP

如果你没显式放行,所有流量都会被丢。


3. 回环接口被拦

sudo iptables -A INPUT -i lo -j ACCEPT

4. 连接跟踪问题(NAT / 状态)

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

查看连接跟踪:

sudo conntrack -L

5. Docker / K8s 干扰

Docker 会自动写 iptables 规则:

sudo iptables -L DOCKER-USER -n -v

五、临时排障技巧

1. 临时清空规则(谨慎)

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

2. 用 tcpdump 确认流量

sudo tcpdump -i eth0 port 80

六、持久化问题(规则丢失)

Ubuntu 常用:

sudo apt install iptables-persistent
sudo netfilter-persistent save

七、快速排查清单 ✅

  • [ ] iptables -L -n -v 看计数
  • [ ] 规则顺序对不对
  • [ ] 默认策略是不是 DROP
  • [ ] 是否加了 LOG 规则
  • [ ] 服务是否监听正确 IP
  • [ ] 是否被 Docker / nftables 影响

如果你愿意,可以把 具体现象 + iptables 规则(iptables-save) 发出来,我可以帮你精确分析是哪一条规则的问题。

0 踩