温馨提示×

如何调试debian iptables

小樊
35
2026-09-25 22:56:08
栏目: 智能运维

在 Debian 上调试 iptables 通常涉及查看规则、跟踪流量、理解链与策略、以及使用日志。下面按实用顺序说明。


一、基础检查

1. 查看当前规则

iptables -L -n -v
  • -L:列出规则
  • -n:不做 DNS 解析(更快)
  • -v:显示流量统计(包数、字节数)

查看 NAT 表:

iptables -t nat -L -n -v

查看所有表:

iptables-save

2. 确认默认策略

iptables -L | grep policy

常见导致“连不上”的原因:

  • INPUT / FORWARD 默认 DROP
  • 没放行回包(ESTABLISHED)

二、确认流量是否命中规则

1. 使用 -v 看计数

iptables -L INPUT -n -v
  • pkts 有增长 → 规则命中
  • 一直是 0 → 流量没走到这条链

2. 临时加一条“允许一切”测试

iptables -I INPUT -j ACCEPT

如果这样能通,说明是规则问题。


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

1. 在规则中加 LOG

iptables -I INPUT -p tcp --dport 22 -j LOG --log-prefix "IPT-SSH: "

然后查看:

dmesg | grep IPT-SSH
# 或
journalctl -k | grep IPT-SSH

2. 常见调试模板

iptables -I INPUT -j LOG --log-prefix "INPUT-DROP: "
iptables -I FORWARD -j LOG --log-prefix "FWD-DROP: "

⚠️ 日志量可能很大,调试完记得删掉。


四、跟踪连接状态

1. 看 conntrack

conntrack -L

或

cat /proc/net/nf_conntrack

确认连接状态:

  • ESTABLISHED
  • SYN_SENT
  • TIME_WAIT

2. 常见错误

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

如果少了这条,回包会被丢。


五、使用 TRACE(高级调试)

1. 开启 raw 表 trace

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

查看:

dmesg -T | grep TRACE

可看到包经过的:

  • 表
  • 链
  • 规则编号

⚠️ 仅用于调试,生产环境勿长期开启。


六、Debian 特有问题

1. iptables 实际是 nftables

Debian 10+ 默认:

iptables -> nft

检查:

iptables --version

如果看到 nf_tables,说明是兼容层。

查看真实规则:

nft list ruleset

2. 服务未持久化

规则重启丢失:

apt install iptables-persistent
netfilter-persistent save

七、常见排错清单

  • [ ] 是否在本机还是转发?
  • [ ] 默认策略是不是 DROP?
  • [ ] 是否放行 ESTABLISHED?
  • [ ] 是否在正确表(filter / nat / raw)?
  • [ ] 是否有 Docker / fail2ban 在改规则?
  • [ ] 是否是 nftables 在接管?

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

  • Debian 版本
  • 想实现什么(端口转发 / 防火墙 / Docker)
  • 当前 iptables-save 输出(可脱敏)

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

0 踩