Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 会加载默认区的设置,并使其处于活动状态。
设置默认区:
  1. 显示当前的默认区:
    ~]# firewall-cmd --get-default-zone
  2. 设置新的默认区:
    ~]# firewall-cmd --set-default-zone zone-name
注意
按照此流程,设置是一个永久设置,即使没有 --permanent 选项。

5.7.4. 将网络接口分配给区

可以为不同区定义不同的规则集,然后通过更改所使用的接口的区来快速改变设置。使用多个接口,可以为每个具体区设置一个区来区分通过它们的网络流量。
要将区分配给特定的接口:
  1. 列出活跃区以及分配给它们的接口:
    ~]# firewall-cmd --get-active-zones
  2. 为不同的区分配接口:
    ~]# 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 选项,否则命令无法工作。
  1. 创建一个新区:
    ~]# firewall-cmd --permanent --new-zone=zone-name
  2. 重新载入新区:
    ~]# firewall-cmd --reload
  3. 检查是否在您的永久设置中添加了新的区:
    ~]# firewall-cmd --get-zones
  4. 使新设置具有持久性:
    ~]# 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/ 目录中。
以下示例显示了允许 TCPUDP 协议的一个服务(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 流量设置默认行为

对于每个区,您可以设置一种处理尚未进一步指定的传入流量的默认行为。这种行为是通过设置区目标来定义的。有三个选项 - 默认ACCEPTREJECTDROP。通过将目标设置为 ACCEPT,您可以接受所有传入的数据包,除了特定规则禁用的那些数据包。如果将目标设置为 REJECTDROP,您将禁用所有传入的数据包,除了您在特定规则中允许的数据包。拒绝数据包时,会通知源机器,但丢弃数据包时不会发送任何信息。
为区设置目标:
  1. 列出特定区的信息以查看默认目标:
    ~]$ firewall-cmd --zone=zone-name --list-all
  2. 在区中设置一个新目标:
    ~]# firewall-cmd --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>