一、firewalld防火墙有几个区域,每个区域有什么作用,每个区域添加或删除规则有什么影响?
firewalld 是 Linux 系统中动态管理防火墙的工具,其核心功能是通过 区域(Zones) 和 服务(Services) 来控制网络流量的访问权限。
Firewalld使用区域来管理不同的网络接口和流量。每个区域有不同的规则集,根据接口的信任级别分配不同的区域。常见的区域包括public、trusted、internal、external、dmz、work、home等。每个区域有不同的预定义规则,适用于不同的网络环境。public区域通常用于公共网络,信任度最低,只允许必要的服务;而trusted区域信任所有流量。
在某个区域中添加服务或端口会允许相应的流量,而删除则会阻止。同时,需要提到区域之间的优先级和规则覆盖的问题,比如一个接口只能属于一个区域,所以规则的改变会影响该接口的流量。再比如,将公共接口放在public区域,并限制SSH访问,而内部网络可能使用home或work区域,允许更多服务。
1、firewalld 的默认区域
firewalld 默认提供 9 个区域,每个区域对应不同的网络信任级别和用途:
区域名称 信任级别 适用场景 默认允许的服务/端口
public 低 公共网络(如互联网) SSH、DHCPv6 Client、dhcpv6(仅限 IPv6)
trusted 最高 信任所有流量(内部网络或物理直连设备) 所有流量
internal 中 内部网络(如企业内网) SSH、HTTP、HTTPS、Samba
external 中 对外暴露的网关或路由器(NAT 转发) SSH、HTTP、HTTPS
dmz 低 隔离区(对外公开的服务器,如 Web 服务器) SSH、HTTP、HTTPS
work 中 工作网络(同事或合作伙伴) SSH、HTTP、HTTPS、CUPS(打印服务)
home 中 家庭网络 SSH、HTTP、HTTPS、Samba、FTP
block 无 阻止所有传入连接 无
drop 无 丢弃所有传入连接(无响应) 无
2、每个区域的作用
(1) public(公共网络)
用途:默认区域,用于面向互联网的接口(如服务器公网网卡)。
特点:仅允许预定义的少量服务(如 SSH、DHCPv6)。
典型场景:Web 服务器、数据库服务器的公网接口。
(2)trusted(信任区域)
用途:信任所有流量,通常用于内部网络或物理直连设备。
特点:允许所有入站和出站流量。
典型场景:内部实验室网络、跳板机。
(3)internal(内部网络)
用途:企业内网或家庭网络,信任部分流量。
特点:允许 SSH、HTTP/HTTPS、Samba 等服务。
典型场景:企业内部服务器的私有接口。
(4)external(外部网络)
用途:对外暴露的网关或路由器(如 NAT 转发)。
特点:允许 SSH、HTTP/HTTPS,通常用于 NAT 和端口转发。
典型场景:家庭路由器的 WAN 接口。
(5)dmz(隔离区)
用途:对外公开的服务器(如 Web 服务器),但与其他内部网络隔离。
特点:仅允许 SSH、HTTP/HTTPS。
典型场景:DMZ 中的 Web 服务器公网接口。
(6)work(工作网络)
用途:同事或合作伙伴的网络,信任程度中等。
特点:允许 SSH、HTTP/HTTPS、CUPS(打印服务)。
典型场景:办公室内部网络。
(7)home(家庭网络)
用途:家庭网络,信任程度较高。
特点:允许 SSH、HTTP/HTTPS、Samba、FTP。
典型场景:家庭NAS或家庭服务器。
(8)block/drop(阻断/丢弃)
用途:完全禁止网络访问(用于隔离或调试)。
特点:无服务或端口开放,直接阻断所有流量。
典型场景:临时禁用网络接口。
3、区域规则的影响
1. 添加规则
允许服务/端口:
例如,在 public 区域添加 http 服务,会开放 TCP 80 端口。
firewall-cmd --zone=public --add-service=http --permanent
影响:公网接口的 HTTP 流量被允许,可能增加攻击面。
删除规则:
例如,从 public 区域删除 ssh 服务:
firewall-cmd --zone=public --remove-service=ssh --permanent
影响:公网接口的 SSH 连接被拒绝,需通过其他区域或端口访问。
2. 区域切换
接口绑定区域:
例如,将网卡 eth0 分配到 dmz 区域:
firewall-cmd --zone=dmz --change-interface=eth0
影响:eth0 接口的流量将遵循 dmz 区域的规则(仅允许 SSH/HTTP/HTTPS)。
3. 规则优先级
区域优先级:
firewalld 按区域优先级(从高到低)处理流量,高优先级区域的规则覆盖低优先级区域。
例如,若网卡同时属于 public 和 trusted 区域(通常不会),以更高优先级的规则为准。
4.操作建议及验证规则
默认区域选择:
服务器公网接口:使用 public 区域,仅开放必要服务(如 SSH、HTTP/HTTPS)。
内部网络接口:使用 internal 或 trusted 区域,开放更多服务。
避免直接使用 trusted 或 drop:
trusted 区域无限制,可能暴露敏感服务。
drop 区域会直接断开现有连接,需谨慎操作。
备份配置:
修改前导出当前配置:
firewall-cmd --runtime-to-permanent
cp /etc/firewalld/zones/*.xml /backup/
#验证规则
查看当前区域规则:
firewall-cmd --zone=public --list-all
测试连接:
telnet <your-server-ip> 80 # 测试 HTTP 是否开放
总结
区域的核心作用:根据网络信任级别,预定义允许的流量规则。
规则操作影响:
添加规则:开放流量,可能引入风险。
删除规则:阻断流量,可能导致服务不可用。
最佳实践:
按网络环境选择合适的区域(如公网用 public,内网用 internal)。
通过富规则(Rich Rules)进一步细化访问控制(如 IP 白名单)
二、文件 /etc/firewalld/zones/public.xml
firewalld使用区域(zones)和服务(services)来管理网络流量。每个区域有不同的规则,服务则是预定义的规则集合,允许特定的端口和协议。
public.xml属于public区域,通常是默认区域,适用于公共网络,如互联网.
直接删除或注释掉或者不包含该服务。无论哪种情况,结果都是public区域不再允许SSH流量。这会导致通过public区域(比如外部网络接口)的SSH连接被拒绝,除非有其他规则允许,比如富规则或直接添加的端口。
但需要注意,如果在另一个区域(如internal)中启用了ssh服务,并且接口被分配到该区域,则SSH仍然可用。
此外,如果手动打开了22端口(比如通过),即使没有服务条目,端口仍然开放。因此,去掉服务条目并不一定完全禁止SSH,还要看其他配置。
服务条目和直接端口开放的差异。服务条目更易于管理,因为它们使用预定义的端口和协议,而手动添加端口需要更多维护。
如果用户删除了服务条目,但后续更新firewalld时重新生成配置,可能会恢复该条目,导致变化被覆盖。
还需要考虑潜在的影响,比如如果用户依赖public区域的SSH访问,去掉服务条目会导致无法远程连接,必须通过其他方式(如本地控制台)恢复配置,建议谨慎操作,确保有备用访问方式或者在修改前备份配置文件。
总结来说,涵盖以下几点:
作用:允许SSH流量通过public区域。
去掉后的影响:public区域不再允许SSH,可能导致远程连接失败。
其他可能允许SSH的情况:其他区域、手动端口开放等。
操作建议:备份配置,检查其他区域设置,确认是否有替代规则。
操作建议
(1) 修改前确保有备用访问方式
在删除 <service name="ssh"/> 前,确保已配置其他访问途径(如密钥认证、跳板机或本地控制台)。
(2) 替代方案:限制而非完全禁用
仅允许特定 IP 访问 SSH:
使用富规则替代直接删除服务,例如:
<!-- 在 public.xml 中添加 -->
<rule family="ipv4">
<source address="192.168.1.0/24"/>
<service name="ssh"/>
</rule>
(3) 检查其他区域配置
确认服务器的其他网络接口是否分配到了其他区域(如 trusted),这些区域可能仍允许 SSH。
(4)验证
查看当前生效的规则:
firewall-cmd --zone=public --list-all
输出中若无 services: ssh,则表示 SSH 服务已从 public 区域移除。
测试 SSH 连接:
从外部设备尝试连接,确认是否被拒绝。