Red Hat Training

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

第 5 章 使用防火墙

5.1. firewalld入门

防火墙是保护机器不受来自外部的不需要的流量的一种方式它允许用户通过定义一组防火墙规则来控制主机上的传入网络流量。这些规则用于对进入的流量进行排序,并可以阻断或允许流量。
firewalld 是一个防火墙服务守护进程,通过 D-Bus 接口提供动态可定制的主机防火墙。如果是动态的,它可在每次修改规则时启用、修改和删除规则,而不需要在每次修改规则时重启防火墙守护进程。
firewalld 使用区域和服务 的概念来简化流量管理。zones 是预定义的规则集。网络接口和源可以分配给区。允许的流量取决于您计算机连接到的网络,并分配了这个网络的安全级别。防火墙服务是预定义的规则,覆盖了允许特定服务进入流量的所有必要设置,并在区中应用。
服务使用一个或多个端口或 地址进行网络通信。防火墙会根据端口过滤通讯。要允许服务的网络流量,必须打开其端口firewalld 会阻止未明确设置为打开的端口上的所有流量。默认情况下,某些区(如可信区 )允许所有流量。

图 5.1. 防火墙堆栈

防火墙堆栈

5.1.1. Zones

firewalld 可以用来根据用户决定放置在该网络中的接口和流量级别的信任级别将网络划分为不同的区域。一个连接只能是一个区的一部分,但一个区可以被用来进行很多网络连接。
NetworkManager 通知接口区域的 firewalld您可以使用 firewall-config 工具或 firewall -cmd 命令行工具为接口分配区域。后两个仅编辑适当的 NetworkManager 配置文件。如果您使用 firewall-cmd 或 firewall-config 更改接口区域,则请求将转发到 NetworkManager,且不由 ⁠firewalld 处理
预定义区域存储在 /usr/lib/firewalld/zones/ 目录中,并可立即应用于任何可用的网络接口。只有在修改后,这些文件才会复制到 /etc/firewalld/zones/ 目录中。下表描述了预定义区的默认设置:
block
对于 IPv6,任何传入的网络连接都将通过 aicmp-host-prohibited 消息来拒绝,用于 IPv4 和icmp6-adm-prohibited 的消息。只有从系统启动的网络连接才能进行。
dmz
对于您的非企业化区里的计算机来说,这些计算机可以被公开访问,且有限访问您的内部网络。只接受所选的入站连接。
drop
所有传入的网络数据包都会丢失,没有任何通知。只有外发网络连接也是可行的。
external
适用于启用了伪装的外部网络,特别是路由器。您不信任网络中的其他计算机不会损害您的计算机。只接受所选的入站连接。
home
用于家用,因为您可以信任其他计算机。只接受所选的入站连接。
internal
当您主要信任网络中的其他计算机时,供内部网络使用。只接受所选的入站连接。
public
可用于您不信任网络中其他计算机的公共区域。只接受所选的入站连接。
trusted
所有网络连接都被接受。
work
可用于您主要信任网络中其他计算机的工作。只接受所选的入站连接。
这些区中的一个被设置为默认区域。当接口连接添加到 NetworkManager 时,它们会被分配给默认区域。安装时,firewalld 中的默认区域设置为 public 区域。默认区可以被修改。
注意
已选择网络区名称进行自我解释,并允许用户快速做出合理的决定。要避免安全问题,请查看默认区配置并根据您的需要和风险禁用任何不必要的服务。

5.1.2. 预定义的服务

服务可以是本地端口、协议、源端口和目的地列表,并在启用了服务时自动载入防火墙帮助程序模块列表。使用服务可节省用户时间,因为它们可以完成一些任务,如打开端口、定义协议、启用数据包转发等等,而不必在另外的步骤中设置所有任务。
firewalld.service(5) man page 中介绍了服务配置选项和通用文件信息。服务通过单独的 XML 配置文件来指定,这些文件采用以下格式命名:service-name.xml.协议名称优先于 firewalld 中的服务或应用程序名称。

5.1.3. 运行时和永久设置

运行时模式中提交的任何更改都仅在 firewalld 运行时应用。firewalld 重启后,设置将恢复为其永久值
要使更改在重新引导后继续生效,请使用 --permanent 选项再次应用它们。或者,若要在 firewalld 运行时持久保留更改,可使用 --runtime-to-permanent firewall-cmd 选项。
如果在 firewalld 仅使用 --permanent 选项运行规则时设置了规则,则在重新启动 firewalld 之前,它们不会生效。不过,重新启动 firewalld 会关闭所有打开的端口,并停止网络流量。

5.1.4. 使用 CLI 修改运行时和永久配置中的设置

使用 CLI,您不会同时修改这两种模式的防火墙设置。您只能修改运行时模式或永久模式。要在永久模式中修改防火墙设置,请将 --permanent 选项与 firewall-cmd 命令搭配使用。
~]# firewall-cmd --permanent <other options>
如果没有这个选项,命令将修改运行时模式。
要更改这两种模式的设置,您可以使用以下两种方法:
  1. 更改运行时设置,然后将其持久化,如下:
    ~]# firewall-cmd <other options>
    ~]# firewall-cmd --runtime-to-permanent
  2. 设置永久性设置并将设置重新载入运行时模式:
    ~]# firewall-cmd --permanent <other options>
    ~]# firewall-cmd --reload
第一种方法允许您在将设置应用到永久模式前测试这些设置。
注意
特别是在远程系统中,不正确的设置可能会导致用户锁定其自身的机器。要防止这种情况,请使用 --timeout 选项。在指定时间后,任何更改都会恢复到之前的状态。使用此选项将排除 --permanent 选项。
例如,将 SSH 服务添加 15 分钟:
~]# firewall-cmd --add-service=ssh --timeout 15m