Linux防火墙自定义规则指南(iptables与firewalld)
Linux系统中,iptables(传统工具,适用于所有发行版)和firewalld(现代动态工具,适用于CentOS/RHEL/Fedora等)是两种主流防火墙管理工具,均支持通过自定义规则实现精准的流量控制。以下是具体操作方法:
iptables通过“规则链(Chain)”和“规则(Rule)”实现流量过滤,核心命令结构为iptables [-t 表名] 选项 [匹配条件] -j 动作。
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT-A INPUT表示追加到INPUT链,-p tcp指定TCP协议,--dport 22匹配目标端口,-j ACCEPT允许流量)sudo iptables -A INPUT -s 192.168.1.100 -j DROP-s 192.168.1.100匹配源IP,-j DROP静默丢弃流量)sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3000:3100 -j ACCEPT--dport 3000:3100匹配端口范围)sudo iptables -P INPUT DROP-P INPUT DROP将INPUT链默认策略设为DROP,需提前允许必要流量,避免锁死系统)当默认链规则过多时,可通过自定义链优化管理:
sudo iptables -N MY_CHAINsudo iptables -A MY_CHAIN -s 10.0.0.0/8 -p tcp --dport 80 -j ACCEPTsudo iptables -A INPUT -j MY_CHAINsudo iptables -F MY_CHAIN && sudo iptables -X MY_CHAINiptables规则默认重启后失效,需通过以下命令保存:
sudo iptables-save > /etc/iptables/rules.v4sudo service iptables saveiptables-persistent工具(sudo apt install iptables-persistent)自动保存。firewalld采用“区域(Zone)”和“服务(Service)”模型,支持动态更新,无需重启即可生效。
sudo firewall-cmd --permanent --add-port=8080/tcp--permanent表示永久生效,需配合--reload应用)sudo firewall-cmd --permanent --add-source=192.168.1.100sudo firewall-cmd --permanent --remove-service=ftp富规则支持更复杂的匹配条件(如IP段、端口范围、协议),语法为:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" [条件] [动作]'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3000-3100" accept'sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" reject'sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" icmp-type name="echo-request" accept'若需开放非标准服务(如自定义端口12345),可创建自定义服务文件:
/etc/firewalld/services/myservice.xml,内容如下:<?xml version="1.0" encoding="utf-8"?>
<service>
<short>MyCustomService</short>
<description>My custom service on port 12345</description>
<port protocol="tcp" port="12345"/>
</service>
sudo firewall-cmd --reloadsudo firewall-cmd --permanent --add-service=myservice--permanent规则需通过sudo firewall-cmd --reload应用;--permanent)立即生效,但重启后失效。sudo iptables-save > ~/iptables_backup.txt(iptables)或sudo cp /etc/firewalld/zones/(firewalld)备份,便于恢复。通过以上方法,可根据实际需求灵活定制Linux防火墙规则,实现精准的流量管控。