Linux防火墙设置区域策略方法
Linux防火墙(Firewalld)区域策略配置方法
一、区域基本操作
-
查看所有可用区域
bashCopy Codefirewall-cmd --get-zones # 显示预定义区域列表(如public、internal等):ml-citation{ref="2,5" data="citationList"}
-
查看默认区域
bashCopy Codefirewall-cmd --get-default-zone # 默认通常为public:ml-citation{ref="3,7" data="citationList"}
-
修改默认区域
bashCopy Codesudo firewall-cmd --set-default-zone=internal --permanent # 设置internal为默认区域:ml-citation{ref="2,8" data="citationList"}
二、接口与区域绑定
-
将网卡绑定到指定区域
bashCopy Codesudo firewall-cmd --zone=public --add-interface=eth0 --permanent # 将eth0绑定到public区域:ml-citation{ref="3,6" data="citationList"}
-
查看接口所属区域
bashCopy Codefirewall-cmd --get-zone-of-interface=eth0 # 显示eth0接口关联的区域:ml-citation{ref="5,8" data="citationList"}
-
修改接口区域
bashCopy Codesudo firewall-cmd --zone=work --change-interface=eth1 --permanent # 将eth1从原区域切换到work区域:ml-citation{ref="2,6" data="citationList"}
三、区域策略配置
-
允许服务/端口
bashCopy Codesudo firewall-cmd --zone=public --add-service=http --permanent # 允许public区域的HTTP服务:ml-citation{ref="2,6" data="citationList"} sudo firewall-cmd --zone=internal --add-port=3306/tcp --permanent # 允许internal区域的MySQL端口:ml-citation{ref="6,8" data="citationList"}
-
限制IP访问
bashCopy Code# 允许192.168.1.0/24网段访问SSH sudo firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent :ml-citation{ref="6,8" data="citationList"} # 拒绝所有其他IP访问22端口 sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" reject' --permanent :ml-citation{ref="3,6" data="citationList"}
-
端口转发
bashCopy Code# 将public区域的80端口流量转发到内部服务器8080端口 sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10 --permanent :ml-citation{ref="6,8" data="citationList"}
四、策略生效与验证
-
重载配置
bashCopy Codesudo firewall-cmd --reload # 永久配置需重载生效:ml-citation{ref="3,8" data="citationList"}
-
验证规则
bashCopy Codefirewall-cmd --zone=public --list-all # 查看public区域所有生效规则:ml-citation{ref="2,6" data="citationList"}
五、多区域分层管理案例
场景: 服务器有双网卡(eth0对外,eth1对内)
-
外网接口策略
bashCopy Codesudo firewall-cmd --zone=public --add-interface=eth0 --permanent sudo firewall-cmd --zone=public --add-service=https --permanent # 仅开放HTTPS:ml-citation{ref="6,8" data="citationList"}
-
内网接口策略
bashCopy Codesudo firewall-cmd --zone=internal --add-interface=eth1 --permanent sudo firewall-cmd --zone=internal --add-service=ssh --permanent # 允许内网SSH:ml-citation{ref="3,6" data="citationList"}
注意事项
- 策略优先级: 富规则(rich rules)优先级高于普通服务/端口规则
- 临时测试: 使用
--timeout=300
参数添加临时规则(5分钟后自动失效) - 区域隔离: 不同区域应严格划分信任级别,如public区域默认拒绝所有入站流量