在 Ubuntu 上调试 iptables 通常需要从规则本身、流量路径、日志、工具辅助几个层面入手。下面按实用顺序说明。
sudo iptables -L -n -v
sudo iptables -t nat -L -n -v
sudo iptables -t mangle -L -n -v
说明:
-n:不解析域名-v:显示流量统计(很关键)filter(默认)natmanglesudo iptables -S
或用 nft 检查是否被 nftables 接管(Ubuntu 20.04+ 常见):
sudo nft list ruleset
如果系统使用
nftables,iptables 可能只是兼容层。
sudo iptables -L -n -v | grep -E "DROP|REJECT"
cat /proc/sys/net/ipv4/ip_forward
若为 0:
sudo sysctl -w net.ipv4.ip_forward=1
例如在 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
例如调试 22 端口:
sudo iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-prefix "SSH-DEBUG: "
sudo iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE
查看:
sudo dmesg -T
会显示:
⚠️ 调试完一定要删掉:
sudo iptables -t raw -F
sudo iptables -L INPUT --line-numbers
sudo iptables -t nat -L -n -v
Docker 会写大量 iptables 规则:
sudo iptables -L DOCKER-USER -n -v
建议:
DOCKER-USERDOCKER 链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
conntracksudo conntrack -L
如果你愿意,可以告诉我:
我可以直接帮你分析。