Red Hat Training

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

5.6. 控制流量

5.6.1. 预定义的服务

可使用图形化的 firewall-config 工具、firewall-cmdfirewall-offline-cmd 来添加和删除服务。
或者,您可以编辑 /etc/firewalld/services/ 目录中的 XML 文件。如果用户没有添加或更改服务,则在 /etc/firewalld/services/ 中找不到相应的 XML 文件。如果要添加或更改服务,则 /usr/lib/firewalld/services/ 目录中的文件可用作模板。

5.6.2. 使用 CLI 禁用发生时的所有流量

在紧急情况下,如系统攻击,可以禁用所有网络流量并关闭攻击者。
要立即禁用网络流量,请切换 panic 模式:
~]# firewall-cmd --panic-on
关闭 panic 模式会使防火墙恢复到其永久设置。关闭 panic 模式:
~]# firewall-cmd --panic-off
要查看是否打开或关闭 panic 模式,请使用:
~]# firewall-cmd --query-panic

5.6.3. 使用 CLI 使用预定义的服务控制流量

控制流量的最简单的方法是在 firewalld 中添加预定义的服务。这会打开所有必需的端口并根据 服务定义文件 修改其他设置。
  1. 检查该服务是否还未被允许:
    ~]# firewall-cmd --list-services
    ssh dhcpv6-client
  2. 列出所有预定义的服务:
    ~]# firewall-cmd --get-services
    RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ...
    [output truncated]
  3. 在允许的服务中添加服务:
    ~]# firewall-cmd --add-service=<service-name>
  4. 使新设置具有持久性:
    ~]# firewall-cmd --runtime-to-permanent

5.6.4. 使用 GUI 使用预定义服务控制流量

要启用或禁用预定义或自定义服务,请启动 firewall-config 工具并选择要配置其服务的网络区。选择 Services 选项卡,再选中您要信任的每种服务类型的复选框。清除复选框以阻止服务。
要编辑服务,请启动 firewall-config 工具,然后从标记为 Configuration 的菜单中选择 Permanent。其它图标和菜单按钮会出现在服务窗口底部。选择您要配置的服务。
PortsProtocolsSource Port 选项卡支持添加、更改和删除所选服务的端口、协议和源端口。模块选项卡是用于配置 Netfilter 助手模块的。Destination 选项卡允许将流量限制到特定的目标地址和互联网协议(IPv4IPv6)。
注意
Runtime 模式下无法更改服务设置。

5.6.5. 添加新服务

可使用图形化的 firewall-config 工具、firewall-cmdfirewall-offline-cmd 来添加和删除服务。或者,您可以编辑 /etc/firewalld/services/ 中的 XML 文件。如果用户没有添加或更改服务,那么 /etc/firewalld/services/ 中没有相应的 XML 文件。如果要添加或更改服务,则可以使用 /usr/lib/firewalld/services/ 文件作为模板。
要在终端中添加新服务,请在未激活 firewalld 的情况下使用 firewall-cmdfirewall-offline-cmd。输入以下命令来添加新的和空服务:
~]$ firewall-cmd --new-service=service-name
要使用本地文件添加新服务,请使用以下命令:
~]$ firewall-cmd --new-service-from-file=service-name.xml
您可以使用额外的 --name=service-name 选项来更改服务名称。
更改服务设置后,服务的更新副本放在 /etc/firewalld/services/ 中。
作为 root 用户,您可以输入以下命令来手动复制服务:
~]# cp /usr/lib/firewalld/services/service-name.xml /etc/firewalld/services/service-name.xml
firewalld 首先从 /usr/lib/firewalld/services 加载文件。如果文件放在 /etc/firewalld/services 中,并且有效,则这些文件将覆盖 /usr/lib/firewalld/services 中的匹配文件。在 /etc/firewalld/services 中的匹配文件已被删除,或者要求 firewalld 加载服务的默认值时,就会使用 /usr/lib/firewalld/services 中的 overriden 文件。这只适用于永久性环境。要在运行时环境中获取这些回退,则需要重新载入。

5.6.6. 使用 CLI 控制端口

端口是可让操作系统接收和区分网络流量并将其转发到系统服务的逻辑设备。它们通常由侦听端口的守护进程来表示,它会等待到达这个端口的任何流量。
通常,系统服务侦听为它们保留的标准端口。例如,httpd 守护进程监听 80 端口。但默认情况下,系统管理员会将守护进程配置为在不同端口上侦听以便增强安全性或出于其他原因。

打开端口

通过打开端口,系统可从外部访问,这代表了安全风险。通常,让端口保持关闭,且只在某些服务需要时才打开。
要获得当前区的打开端口列表:
  1. 列出所有允许的端口:
    ~]# firewall-cmd --list-ports
  2. 在允许的端口中添加一个端口,以便为入站流量打开这个端口:
    ~]# firewall-cmd --add-port=port-number/port-type
  3. 使新设置具有持久性:
    ~]# firewall-cmd --runtime-to-permanent
端口类型为 tcpudpsctpdccp。这个类型必须与网络通信的类型匹配。

关闭端口

当打开的端口不再需要时,在 firewalld 中关闭此端口。强烈建议您尽快关闭所有不必要的端口,因为端口处于打开状态会存在安全隐患。
要关闭某个端口,请将其从允许的端口列表中删除:
  1. 列出所有允许的端口:
    ~]# firewall-cmd --list-ports
    [WARNING]
    ====
    This command will only give you a list of ports that have been opened as ports. You will not be able to see any open ports that have been opened as a service. Therefore, you should consider using the --list-all option instead of --list-ports.
    ====
  2. 从允许的端口中删除端口,以便对传入的流量关闭:
    ~]# firewall-cmd --remove-port=port-number/port-type
  3. 使新设置具有持久性:
    ~]# firewall-cmd --runtime-to-permanent

5.6.7. 使用 GUI 打开端口

要允许流量通过防火墙到某个端口,请启动 firewall-config 工具并选择您要更改的网络区。选择 Ports 选项卡,然后点击右侧的 Add 按钮。此时会打开 端口和协议 窗口。
输入要允许的端口号或者端口范围。从列表中选择 tcpudp

5.6.8. 使用 GUI 控制协议的流量

要允许使用特定协议通过防火墙的流量,请启动 firewall-config 工具并选择您要更改的网络区。选择 Protocols 选项卡,然后点击右侧的 Add 按钮。此时会打开 协议 窗口。
从列表中选择协议,或者选择 Other Protocol 复选框,并在字段中输入协议。

5.6.9. 使用 GUI 打开源端口

要允许来自某个端口的流量通过防火墙,请启动 firewall-config 工具并选择您要更改的网络区。选择 Source Port 选项卡,然后点击右侧的 Add 按钮。源端口 窗口将打开。
输入要允许的端口号或者端口范围。从列表中选择 tcpudp