温馨提示×

怎样调试debian iptables问题

小樊
37
2026-09-07 18:08:08
栏目: 智能运维

在 Debian 上调试 iptables 问题,通常可以按下面这套思路和系统方法来做。


一、确认环境与基础信息

1. 确认 iptables 是否已安装

which iptables
iptables --version

Debian 10+ 默认可能使用 nftables,但 iptables 通常是兼容层:

ls -l /usr/sbin/iptables
# 可能指向 iptables-nft

2. 查看当前规则

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

重点看:

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

二、常见问题定位方法

1. 确认流量是否到达本机

iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "IPT_TEST: "

然后看日志:

dmesg | grep IPT_TEST
# 或
journalctl -k | grep IPT_TEST

如果 没有日志,说明:

  • 流量没到服务器
  • 被前面的规则丢弃
  • 网络层问题(路由 / 网卡)

2. 确认规则顺序问题

iptables 自上而下匹配,第一条命中即生效

示例错误:

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

✅ 正确:

iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

3. 使用 TRACE 调试(非常有用)

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

查看:

dmesg -w

你会看到包经过的:

  • 表(filter / nat)
  • 链(INPUT / FORWARD)
  • 规则编号

调试完记得删除:

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

4. 检查默认策略

iptables -L | grep policy

如果是:

Chain INPUT (policy DROP)

但没写 ACCEPT,就会全丢。


三、NAT / 转发问题

1. 开启转发

sysctl net.ipv4.ip_forward
# 应为 1

临时:

sysctl -w net.ipv4.ip_forward=1

永久:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

2. NAT 示例检查

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

四、与 nftables 冲突问题(Debian 常见)

查看是否使用 nftables

systemctl status nftables

如果启用:

nft list ruleset

建议:

  • 二选一(iptables 或 nftables)
  • 不要混用

切换回 iptables-legacy:

update-alternatives --config iptables

五、保存 / 恢复规则

保存

iptables-save > /etc/iptables/rules.v4

开机加载

apt install iptables-persistent

六、快速排查清单 ✅

  • [ ] 规则是否存在
  • [ ] 包计数是否增加
  • [ ] 默认策略是否正确
  • [ ] 是否被前面规则拦截
  • [ ] 是否启用 IP 转发(NAT)
  • [ ] 是否 nftables 冲突
  • [ ] 是否网卡 / 路由问题

如果你愿意,可以贴出:

  • iptables -L -n -v
  • 具体现象(连不上 / 丢包 / NAT 失败)
  • Debian 版本

我可以帮你逐条分析规则。

0