首先确认iptables服务是否正常运行及规则加载情况。Debian系统下,可使用以下命令:
sudo /etc/init.d/iptables status:查看iptables服务状态(部分系统可能需替换为systemctl status iptables);iptables -L -n -v:列出当前所有规则(-n显示数字格式IP/端口,-v显示详细信息,如数据包计数);iptables -h:查看iptables帮助信息(确认命令语法是否正确);iptables -V:查看iptables版本(确保安装正确)。sudo systemctl start iptables)或启用开机自启(sudo systemctl enable iptables)。规则错误是常见故障原因,需重点排查以下几点:
DROP所有流量),后面规则无法生效。使用iptables -L -n --line-number查看规则编号,通过iptables -D INPUT <编号>删除错误规则,或用iptables -I INPUT <位置> <规则>调整顺序(如将放行SSH的规则放在前面);-p指定协议、--dport指定端口、-j指定动作)。例如,放行SSH的正确规则为iptables -A INPUT -p tcp --dport 22 -j ACCEPT;filter表(过滤数据包),若需配置NAT(端口转发、地址转换),需切换至nat表(如iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.100:80);INPUT(进入本机)、OUTPUT(本机发出)、FORWARD(转发流量),确保规则应用于正确链。系统日志会记录iptables拦截或错误信息,是排查故障的关键依据:
tail -f /var/log/syslog实时查看最新日志(含iptables拦截记录,如DROP动作);dmesg | grep iptables查看内核层iptables相关日志(如规则加载失败);journalctl -u iptables(若systemd管理)查看iptables服务详细日志。通过工具测试网络连通性,确认规则是否符合预期:
ping <目标IP>测试网络是否可达(若被拦截,需放行ICMP或调整规则);telnet <目标IP> <端口>或nc -zv <目标IP> <端口>测试端口是否开放(如nc -zv example.com 80);tcpdump -i eth0 port 22抓取指定端口(如SSH)的数据包,查看是否被iptables拦截(如DROP动作)。Debian系统重启后,默认会丢失iptables规则,需确保规则持久化:
iptables-save > /etc/iptables/rules.v4(或/etc/iptables/rules)保存当前规则;iptables-persistent包(sudo apt-get install iptables-persistent),安装时会提示是否保存当前规则,选择“是”即可;或手动创建自启动脚本(/etc/network/if-pre-up.d/iptables),内容如下:#!/bin/sh
/sbin/iptables-restore < /etc/iptables/rules.v4
赋予执行权限(sudo chmod +x /etc/network/if-pre-up.d/iptables)。iptables -A INPUT -p tcp --dport 22 -j ACCEPT,并允许已建立的连接iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT;echo 1 > /proc/sys/net/ipv4/ip_forward)及DNAT规则(如iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.100:80);iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 5/s -j ACCEPT),记录超限请求(iptables -A INPUT -p icmp -j LOG --log-prefix "ICMP_Attack: "),丢弃过量请求(iptables -A INPUT -p icmp -j DROP)。通过以上步骤,可系统排查Debian iptables故障。操作前建议备份当前规则(iptables-save > ~/iptables_backup.v4),避免误操作导致网络中断。