第 5 章 使用防火墙
5.1. firewalld
入门
防火墙是保护机器不受来自外部的、不需要的网络数据的一种方式。它允许用户通过定义一组防火墙规则 来控制主机上的入站网络流量。这些规则用于对进入的流量进行排序,并可以阻断或允许流量。
firewalld
是一个防火墙服务守护进程,通过 D-Bus
接口提供动态可自定义的基于主机的防火墙。如果是动态的,它可在每次修改规则时启用、修改和删除规则,而不需要在每次修改规则时重启防火墙守护进程。
firewalld
使用 区域和服务 的概念来简化流量管理。zones 是预定义的规则集。网络接口和源可以分配给区。允许的流量取决于您计算机连接到的网络,并分配了这个网络的安全级别。防火墙服务是预定义的规则,覆盖了允许特定服务进入流量的所有必要设置,并在区中应用。
服务使用一个或多个 端口或 地址进行 网络通信。防火墙会根据端口过滤通讯。要允许服务的网络流量,必须打开 其端口。
firewalld
会阻止未明确设置为打开的端口上的所有流量。一些区(如 可信 区)默认允许所有流量。
图 5.1. 防火墙堆栈
[D]
5.1.1. Zones
可以根据用户对该网络中的接口和流量设置的信任程度,使用
firewalld
来将网络划分为不同的区。一个连接只能是一个区的一部分,但一个区可以被用来进行很多网络连接。
NetworkManager 通知接口区的
firewalld
。您可以使用 firewall-config 工具或 firewall-cmd 命令行工具为 NetworkManager 分配区域。后两个只编辑适当的 NetworkManager 配置文件。如果您使用 firewall-cmd 或 firewall-config 更改接口区,则请求会转发到 NetworkManager,且不会由firewalld
处理。
预定义的区存储在
/usr/lib/firewalld/zones/
目录中,并可立即应用到任何可用的网络接口。只有在修改后,这些文件才会被拷贝到 /etc/firewalld/zones/
目录中。下表描述了预定义区的默认设置:
block
- 任何传入的网络连接都会被拒绝,并显示
IPv4
的 icmp-host-prohibited 消息,对于IPv6
的 icmp6-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>
如果没有这个选项,命令将修改运行时模式。
要更改这两种模式的设置,您可以使用以下两种方法:
- 更改运行时设置,然后将其持久化,如下:
~]# firewall-cmd <other options> ~]# firewall-cmd --runtime-to-permanent
- 设置永久性设置并将设置重新载入运行时模式:
~]# firewall-cmd --permanent <other options> ~]# firewall-cmd --reload
第一种方法允许您在将设置应用到永久模式前测试这些设置。
注意
特别是在远程系统中,不正确的设置可能会导致用户锁定其自身的机器。要防止这种情况,请使用
--timeout
选项。在指定时间后,任何更改都会恢复到之前的状态。使用此选项排除 --permanent
选项。
例如,将
SSH
服务添加 15 分钟:
~]# firewall-cmd --add-service=ssh --timeout 15m