在 CentOS 上测试 iptables 规则是否生效,可以按下面几个层次来做:查看规则 → 本地验证 → 远程测试 → 日志/抓包验证。下面以 CentOS 7 为例说明(CentOS 6 类似,CentOS 8 以后默认是 nftables,但 iptables 命令仍可兼容)。
systemctl status iptables
如果没启动:
systemctl start iptables
systemctl enable iptables
⚠️ CentOS 7 有时默认用的是
firewalld,要先确认是否关闭:
systemctl status firewalld
如果启用,建议关闭(否则规则可能不生效):
systemctl stop firewalld
systemctl disable firewalld
iptables -L -n -v
常用参数说明:
-L:列出规则-n:不做 DNS 解析(更快)-v:显示流量统计(方便测试)iptables -t filter -L -n -v
iptables -t nat -L -n -v
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -L INPUT -n -v
如果看到 pkts 和 bytes 在变化,说明规则被命中。
telnet 服务器IP 80
或
nc -vz 服务器IP 80
iptables -A INPUT -p icmp -j DROP
然后在另一台机器:
ping 服务器IP
iptables -I INPUT 1 -p tcp --dport 80 -j LOG --log-prefix "IPTABLES-DROP-80: "
tail -f /var/log/messages
或(CentOS 7):
journalctl -f
如果看到类似:
IPTABLES-DROP-80: IN=eth0 OUT= ...
说明规则命中 ✅
yum install -y tcpdump
tcpdump -i eth0 port 80
service iptables save
或
iptables-save > /etc/sysconfig/iptables
| 测试目的 | 方法 |
|---|---|
| 是否拦截端口 | nc -vz IP PORT |
| 是否拦截 ping | ping IP |
| 规则是否命中 | iptables -L -n -v |
| 是否记录日志 | LOG + /var/log/messages |
| 是否真的丢包 | tcpdump |
CentOS 8 默认使用 nftables,iptables 是兼容层:
iptables -L
如果规则不生效,建议:
systemctl stop firewalld
systemctl disable firewalld
如果你愿意,可以把 你的 iptables 规则贴出来,我可以帮你逐条分析是否写错、是否顺序有问题。