iptables是linux内核级包过滤工具,需依次执行查看规则、添加入站规则、插入高优先级规则、删除替换规则及保存持久化等五步操作。

如果您在Linux系统中需要对网络流量进行精细化控制,iptables作为内核级的包过滤工具,提供了灵活而强大的规则管理能力。以下是配置iptables防火墙规则的具体操作步骤:
一、查看当前iptables规则状态
在修改规则前,需先确认当前生效的规则链及策略,避免误删关键规则导致服务中断。默认情况下,iptables有INPUT、FORWARD、OUTPUT三条链,每条链具有默认策略(ACCEPT或DROP)。
1、执行命令列出所有规则及其详细计数:sudo iptables -L -n -v
2、使用带表名的参数显示nat和mangle等扩展表:sudo iptables -t nat -L -n -v
3、查看默认策略(Policy)及规则编号,便于后续按序号删除:sudo iptables -L -n --line-numbers
二、添加基础入站访问规则
通过追加(-A)方式在INPUT链末尾插入新规则,适用于允许特定服务端口或来源IP的场景,不影响已有规则执行顺序。
1、允许本地回环接口通信:sudo iptables -A INPUT -i lo -j ACCEPT
2、允许已建立连接的返回流量:sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
3、开放SSH服务(端口22)供指定网段访问:sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
4、开放HTTP(80)与HTTPS(443)端口供任意地址访问:sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
三、插入高优先级规则并限制非法访问
使用插入(-I)命令可在规则链头部添加规则,确保其优先于后续规则匹配,常用于快速拦截恶意源或设置默认拒绝策略。
1、在INPUT链最顶端插入拒绝来自某IP的全部连接:sudo iptables -I INPUT -s 203.0.113.45 -j DROP
2、限制单IP对SSH端口的连接频率(防暴力破解):sudo iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
3、对超出限速的SSH新连接直接丢弃:sudo iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -j DROP
四、删除与替换现有规则
当规则配置错误或需更新策略时,可通过编号或完整匹配方式精准移除或覆盖原规则,避免清空整条链引发服务中断。
1、根据行号删除INPUT链中第2条规则:sudo iptables -D INPUT 2
2、精确匹配并删除某条允许ICMP的规则:sudo iptables -D INPUT -p icmp -j ACCEPT
3、将INPUT链默认策略由ACCEPT改为DROP:sudo iptables -P INPUT DROP
4、替换OUTPUT链第1条规则为允许DNS查询:sudo iptables -R OUTPUT 1 -p udp --dport 53 -j ACCEPT
五、保存与持久化iptables规则
iptables规则默认仅存在于内存中,系统重启后会丢失。需将当前规则保存至磁盘文件,并配置开机自动加载。
1、在Debian/Ubuntu系统中保存规则到默认路径:sudo iptables-save > /etc/iptables/rules.v4
2、在CentOS/RHEL 7+系统中安装iptables-services并启用服务:sudo yum install iptables-services && sudo systemctl enable iptables
3、手动保存规则至自定义文件(兼容所有发行版):sudo sh -c "iptables-save > /etc/sysconfig/iptables"
4、验证规则是否可被正确恢复:sudo iptables-restore










