在 Debian 系统上测试 iptables 是否正常工作,通常可以从 规则是否生效、网络是否按预期被控制、以及连通性验证 三个方面来做。下面给你一套常用、实用的测试方法(从基础到进阶)。
iptables --version
如果没有安装:
sudo apt update
sudo apt install iptables
sudo iptables -L -n -v
-L:列出规则-n:不做 DNS 解析(更快)-v:显示详细信息(包计数)sudo iptables -A INPUT -p tcp --dport 80 -j DROP
sudo iptables -L INPUT -n -v
你应该能看到类似:
DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
在另一台机器上执行:
curl http://<服务器IP>
或
telnet <服务器IP> 80
✅ 如果连接失败,说明 iptables 生效。
iptables 会统计匹配到的包数量。
sudo iptables -L INPUT -n -v
观察 pkts 和 bytes 是否增加:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
然后测试 SSH 是否能连接:
ssh user@<服务器IP>
sudo iptables -P INPUT DROP
⚠️ 注意:这会立刻断开所有连接(包括 SSH)
建议先允许 SSH:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -P INPUT DROP
测试:
sudo iptables -t nat -L -n -v
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
测试:
tcpdump 看源地址是否变化sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
测试:
ping <服务器IP>
✅ ping 不通说明规则生效。
Debian 默认 重启后 iptables 规则会丢失。
sudo iptables-save > /etc/iptables/rules.v4
sudo apt install iptables-persistent
开机自动加载:
sudo netfilter-persistent save
sudo netfilter-persistent reload
sudo iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "IPTABLES-DROP: "
查看日志:
sudo dmesg | grep IPTABLES
# 或
sudo tail -f /var/log/kern.log
sudo tcpdump -i eth0 port 80
✅ 能加规则
✅ 能看到规则
✅ 包计数在增长
✅ 端口/ping 行为符合预期
✅ 重启后规则是否还在
如果你愿意,可以告诉我:
我可以给你一套 完全贴合你场景的 iptables 测试方案。