7.8. 使用 firewalld 控制网络流量
firewalld
软件包安装大量预定义的服务文件,您可以添加更多或自定义它们。然后,您可以使用这些服务定义为服务打开或关闭端口,而无需了解这些服务使用的协议和端口号。
7.8.1. 使用 CLI 控制预定义服务的流量
控制流量的最简单的方法是在 firewalld
中添加预定义的服务。这会打开所有必需的端口并根据 服务定义文件 修改其他设置。
前提条件
-
firewalld
服务正在运行。
流程
检查
firewalld
中的服务是否没有被允许:# firewall-cmd --list-services ssh dhcpv6-client
命令列出默认区域中启用的服务。
列出
firewalld
中的所有预定义服务:# 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 ...
命令显示默认区域的可用服务列表。
将服务添加到
firewalld
允许的服务列表中:# firewall-cmd --add-service=<service_name>
命令将指定的服务添加到默认区域中。
使新设置具有持久性:
# firewall-cmd --runtime-to-permanent
命令将这些运行时更改应用到防火墙的永久配置。默认情况下,它会将这些更改应用到默认区的配置。
验证
列出所有永久防火墙规则:
# firewall-cmd --list-all --permanent public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
使用默认防火墙区域 的永久防火墙规则(
公共
)显示完整的配置。检查
firewalld
服务的永久配置的有效性。# firewall-cmd --check-config success
如果永久配置无效,命令会返回带有更多详情的错误:
# firewall-cmd --check-config Error: INVALID_PROTOCOL: 'public.xml': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}
您还可以手动检查永久配置文件以验证设置。主配置文件为
/etc/firewalld/firewalld.conf
。特定于区的配置文件位于/etc/firewalld/zones/
目录中,策略位于/etc/firewalld/policies/
目录中。
7.8.2. 使用 GUI 使用预定义服务控制流量
您可以使用图形用户界面控制预定义服务的网络流量。防火墙配置应用程序提供对命令行工具的可访问和用户友好的替代选择。
前提条件
-
firewall-config
软件包已安装 。 -
firewalld
服务正在运行。
流程
启用或禁用预定义或自定义服务:
- 启动 firewall-config 工具,并选择要配置其服务的网络区。
-
选择
Zones
选项卡,然后选择下面的Services
选项卡。 - 选中您要信任的每种服务类型的复选框,或者清除复选框以阻止所选区域中的服务。
编辑服务:
- 启动 firewall-config 工具。
-
从标有
Configuration
的菜单中选择Permanent
。其它图标和菜单按钮会出现在 窗口底部。 - 选择您要配置的服务。
Ports
、Protocols
和 Source Port
选项卡支持添加、更改和删除所选服务的端口、协议和源端口。模块选项卡是用于配置 Netfilter 助手模块的。Destination
选项卡允许将流量限制到特定的目标地址和互联网协议(IPv4
或 IPv6
)。
在 Runtime
模式下无法更改服务设置。
验证
- 按 Super 键进入活动概览。
选择 Firewall Configuration 工具。
-
您还可以通过输入
firewall-config
命令,使用命令行启动图形防火墙配置实用程序。
-
您还可以通过输入
查看防火墙配置列表:
此时会打开 Firewall Configuration
窗口。请注意,这个命令可以以普通用户身份运行,但偶尔会提示您输入管理员密码。
7.8.3. 使用 Web 控制台在防火墙中启用服务
默认情况下,服务添加到默认防火墙区。如果在更多网络接口中使用更多防火墙区,您必须首先选择一个区域,然后添加带有端口的服务。
RHEL 8 web 控制台显示预定义的 firewalld
服务,您可以将其添加到活跃的防火墙区。
RHEL 8 web 控制台配置 firewalld 服务。
Web 控制台不允许没有在 web 控制台中列出的通用 firewalld
规则。
前提条件
已安装 RHEL 8 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Networking。
点
按钮。如果没有看到
按钮,使用管理员权限登录到 web 控制台。在 Firewall 部分,选择要添加该服务的区,然后点击 Add Services。
- 在 Add Services 对话框中,找到您要在防火墙中启用的服务。
根据您的场景启用服务:
- 点 Add Services。
此时,RHEL 8 web 控制台在区域的服务列表中显示该服务。
7.8.4. 使用 Web 控制台配置自定义端口
您可以通过 RHEL web 控制台为服务添加自定义端口。
前提条件
已安装 RHEL 8 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
firewalld
服务正在运行。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Networking。
点
按钮。如果没有看到
按钮,使用管理员权限登录到 web 控制台。在 Firewall 部分,选择要配置自定义端口的区域,并点 Add Services。
- 在 Add services 对话框中,点 单选按钮。
在 TCP 和 UDP 字段中,根据示例添加端口。您可以使用以下格式添加端口:
- 端口号,如 22
- 端口号范围,如 5900-5910
- 别名,比如 nfs, rsync
注意您可以在每个字段中添加多个值。值必须用逗号分开,且没有空格,例如: 8080、8081、http
在 TCP 文件、UDP 文件或两者中添加端口号后,在 Name 字段中验证服务名称。
Name 字段显示保留此端口的服务名称。如果您确定这个端口可用,且不需要在该端口上通信,则可以重写名称。
- 在 Name 字段中,为服务添加一个名称,包括定义的端口。
点
按钮。
要验证设置,请进入防火墙页面,并在区域的服务列表中找到该服务。
7.8.5. 配置 firewalld 以允许托管安全 Web 服务器
端口是逻辑服务,使操作系统能够接收和区分网络流量并将其转发到系统服务。系统服务由侦听端口的守护进程表示,并等待任何进入此端口的流量。
通常,系统服务侦听为它们保留的标准端口。例如,httpd
守护进程监听 80 端口。但是,系统管理员可以直接指定端口号,而不是服务名称。
您可以使用 firewalld
服务配置对托管数据的安全 Web 服务器的访问。
前提条件
-
firewalld
服务正在运行。
流程
检查当前活跃的防火墙区:
# firewall-cmd --get-active-zones
在适当的区中添加 HTTPS 服务:
# firewall-cmd --zone=<zone_name> --add-service=https --permanent
重新载入防火墙配置:
# firewall-cmd --reload
验证
检查
firewalld
中是否打开端口:如果您通过指定端口号来打开端口,请输入:
# firewall-cmd --zone=<zone_name> --list-all
如果您通过指定服务定义来打开端口,请输入:
# firewall-cmd --zone=<zone_name> --list-services
7.8.6. 关闭未使用的或不必要的端口以增强网络安全性
当不再需要开放端口时,您可以使用 firewalld
实用程序关闭它。
关闭所有不必要的端口,以减少潜在的攻击面,并最大程度降低未授权访问或利用漏洞的风险。
流程
列出所有允许的端口:
# firewall-cmd --list-ports
默认情况下,此命令列出了默认区域中启用的端口。
注意此命令只为您提供作为端口打开的端口列表。您将无法看到作为服务打开的任何开放端口。在这种情况下,请考虑使用
--list-all
选项而不是--list-ports
。从允许的端口列表中删除端口,为传入的流量关闭它:
# firewall-cmd --remove-port=port-number/port-type
这个命令从区中删除端口。如果没有指定区域,它将从 default 区域中删除端口。
使新设置具有持久性:
# firewall-cmd --runtime-to-permanent
如果没有指定区域,这个命令会对默认区域的永久配置应用运行时更改。
验证
列出活跃区并选择要检查的区:
# firewall-cmd --get-active-zones
列出所选区中当前打开的端口,以检查未使用的或不必要的端口是否已关闭:
# firewall-cmd --zone=<zone_to_inspect> --list-ports
7.8.7. 通过 CLI 控制流量
您可以使用 firewall-cmd
命令:
- 禁用网络流量
- 启用网络流量
例如,您可以增强系统防御,确保数据隐私或优化网络资源。
启用 panic 模式可停止所有网络流量。因此,只有当您具有对机器的物理访问权限或使用串行控制台登录时,才应使用它。
流程
要立即禁用网络流量,请切换 panic 模式:
# firewall-cmd --panic-on
关闭 panic 模式会使防火墙恢复到其永久设置。要关闭 panic 模式,请输入:
# firewall-cmd --panic-off
验证
要查看是否打开或关闭 panic 模式,请使用:
# firewall-cmd --query-panic
7.8.8. 使用 GUI 控制协议的流量
如果想使用某种协议允许流量通过防火墙,您可以使用 GUI。
前提条件
-
firewall-config
软件包已安装
流程
- 启动 firewall-config 工具,并选择要更改其设置的网络区。
-
选择
Protocols
选项卡,然后点击右侧的Add
按钮。此时会打开协议
窗口。 -
从列表中选择协议,或者选择
Other Protocol
复选框,并在字段中输入协议。