5.7. 使用区域
zones 代表一种更透明管理传入流量的概念。这些区域连接到联网接口或者分配一系列源地址。您可以独立为每个区管理防火墙规则,这样就可以定义复杂的防火墙设置并将其应用到流量。
5.7.1. 列出区域
查看系统中有哪些可用区:
~]# firewall-cmd --get-zones
firewall-cmd --get-zones 命令显示系统上所有可用的区,但不显示特定区的详情。
查看所有区的详细信息:
~]# firewall-cmd --list-all-zones
查看特定区的详细信息:
~]# firewall-cmd --zone=zone-name --list-all
5.7.2. 为 Certain Zone 修改 firewalld
设置
第 5.6.3 节 “使用 CLI 使用预定义的服务控制流量” 和 第 5.6.6 节 “使用 CLI 控制端口” 解释了如何在当前工作区范围内添加服务或修改端口。有时,需要在不同区内设置规则。
要在其他区域中工作,请使用
--zone=zone-name
选项。例如,要允许在区 public 中使用 SSH
服务:
~]# firewall-cmd --add-service=ssh --zone=public
5.7.3. 更改默认区域
系统管理员在其配置文件中为网络接口分配区域。如果接口没有被分配给指定区,它将被分配给默认区。每次重启
firewalld
服务后,firewalld
会加载默认区的设置,并使其处于活动状态。
设置默认区:
- 显示当前的默认区:
~]# firewall-cmd --get-default-zone
- 设置新的默认区:
~]# firewall-cmd --set-default-zone zone-name
注意
按照此流程,设置是一个永久设置,即使没有
--permanent
选项。
5.7.4. 将网络接口分配给区
可以为不同区定义不同的规则集,然后通过更改所使用的接口的区来快速改变设置。使用多个接口,可以为每个具体区设置一个区来区分通过它们的网络流量。
要将区分配给特定的接口:
- 列出活跃区以及分配给它们的接口:
~]# firewall-cmd --get-active-zones
- 为不同的区分配接口:
~]# firewall-cmd --zone=zone-name --change-interface=<interface-name>
注意
您不必使用
--permanent
选项在重启后保留设置。如果您设置了新的默认区,则设置将变为 permanent。
5.7.5. 将默认区域分配给网络连接
当连接由 NetworkManager 管理时,必须了解它使用的区。为每个网络连接指定区域,根据计算机有可移植设备的位置提供各种防火墙设置的灵活性。因此,可以为不同的位置(如公司或家)指定区域和设置。
要为互联网连接设置默认区,请使用 NetworkManager GUI 或编辑
/etc/sysconfig/network-scripts/ifcfg-connection-name
文件,并添加一个将区分配给此连接的行:
ZONE=zone-name
5.7.6. 创建新区域
要使用自定义区,创建一个新的区并使用它像预定义区一样。
注意
新区需要
--permanent
选项,否则命令无法工作。
- 创建一个新区:
~]# firewall-cmd --permanent --new-zone=zone-name
- 重新载入新区:
~]# firewall-cmd --reload
- 检查是否在您的永久设置中添加了新的区:
~]# firewall-cmd --get-zones
- 使新设置具有持久性:
~]# firewall-cmd --runtime-to-permanent
5.7.7. 使用配置文件创建新区域
区也可以通过区配置文件创建。如果您需要创建新区,但想从不同区重复使用设置,这种方法就很有用了。
firewalld
区配置文件包含区的信息。这些区描述、服务、端口、协议、icmp-blocks、masquerade、forward-ports 和丰富的语言规则采用 XML 文件格式。文件名必须是 zone-name.xml
,其中 zone-name 的长度限制为 17 个字符。区域配置文件位于 /usr/lib/firewalld/zones/
和 /etc/firewalld/zones/
目录中。
以下示例显示了允许
TCP
和 UDP
协议的一个服务(SSH
)和一个端口范围的配置:
<?xml version="1.0" encoding="utf-8"?> <zone> <short>My zone</short> <description>Here you can describe the characteristic features of the zone.</description> <service name="ssh"/> <port port="1025-65535" protocol="tcp"/> <port port="1025-65535" protocol="udp"/> </zone>
要更改那个区的设置,请添加或者删除相关的部分来添加端口、转发端口、服务等等。如需更多信息,请参阅
firewalld.zone
手册页。
5.7.8. 使用区目标为 Incoming 流量设置默认行为
对于每个区,您可以设置一种处理尚未进一步指定的传入流量的默认行为。这种行为是通过设置区目标来定义的。有三个选项 -
默认
、ACCEPT
、REJECT
和 DROP
。通过将目标设置为 ACCEPT
,您可以接受所有传入的数据包,除了特定规则禁用的那些数据包。如果将目标设置为 REJECT
或 DROP
,您将禁用所有传入的数据包,除了您在特定规则中允许的数据包。拒绝数据包时,会通知源机器,但丢弃数据包时不会发送任何信息。
为区设置目标:
- 列出特定区的信息以查看默认目标:
~]$ firewall-cmd --zone=zone-name --list-all
- 在区中设置一个新目标:
~]# firewall-cmd --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>