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

5.1.2. 预定义的服务

服务可以是本地端口、协议、源端口和目的地列表,并在启用了服务时自动载入防火墙帮助程序模块列表。使用服务可节省用户时间,因为它们可以完成一些任务,如打开端口、定义协议、启用数据包转发等等,而不必在另外的步骤中设置所有任务。
服务配置选项和通用文件信息在 firewalld.service (5) 手册页中进行了描述。服务通过单独的 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,您不会同时修改这两种模式的防火墙设置。您只能修改运行时模式或永久模式。要在永久模式下修改防火墙设置,请在 firewall-cmd 命令中使用 --permanent 选项。
~]# 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