Firewalld 服务配置

Firewalld 服务配置主要包括两部分,全局配置和服务配置。

全局配置

全局配置文件 firewalld.conf 通常位于 /etc/firewalld,主要用于 Firewalld 在初始化过程中加载一些基本选项,如果该文件不存在,则使用内部默认值。

主要配置选项

# 默认区域设置,在没有明确指定区域时,连接或接口默认使用的区域,默认值为 public。
DefaultZone=public
# 设置 iptables 标记的最小值,高于此值的标记才会被 firewalld 内部使用,默认值为 100。
# 作用是为某些防火墙设置预留标记值,避免与其他应用的标记冲突。比如设置为100,则 0-99 的标记值可以由其他程序自由使用,不会被 firewalld 占用,主要在较早的 Firewalld 版本中使用,但从 0.3.9 版本开始,此选项已被标记为废弃(deprecated)。
MinimalMark=100
# 设置退出时是否清理规则,默认值为 yes,即退出时会清除已经加载的 iptables 规则。
CleanupOnExit=yes
# 设置锁定模式,若启用,则通过 D-Bus 接口对防火墙的修改将被限制在 lockdown 白名单中的应用程序(锁定白名单文件为 lockdown-whitelist.xml),默认值为 no,即不启用。
Lockdown=no
# IPv6 反向路径过滤测试,用于防止 IP 地址欺骗攻击,通过检查进入的数据包的源地址,并确保这些数据包的返回路径与它们到达的路径一致。如果不一致,数据包将被丢弃,默认值为 yes,即开启。
# 启用反向路径过滤会增加系统的处理负担,因为每个数据包都需要进行路由查找和验证,会对系统性能产生一定影响,对于一些多路由或不兼容环境(VPN、隧道)也可能会有丢包问题。
IPv6_rpfilter=yes
# 用于控制 Firewalld 应用防火墙规则的方式,启用单独调用(yes)有助于调试,常用于排查问题,但会增加应用更改的时间;禁用单独调用(no)则提高了效率,适合生产环境,默认值为 no。
IndividualCalls=no
# 用于在防火墙的 INPUT、FORWARD 和 OUTPUT 链中的拒绝和丢弃规则之前添加日志记录规则,方便管理员了解哪些数据包被拒绝以及拒绝的原因。
# 可选值包含:all(记录所有被拒绝的数据包)、unicast(仅记录单播数据包)、broadcast(仅记录广播数据包)、multicast(仅记录组播数据包) 和 off(关闭日志记录),默认值为 off。
LogDenied=off
# 用于控制连接跟踪助手(connection tracking helpers)的自动分配,像一些特殊的网络协议(例如 FTP、SIP 等),这些协议在数据传输过程中会打开额外的端口或需要额外的连接跟踪。自动分配连接跟踪助手可以简化这些协议的处理,但也可能带来安全风险。
# 可选值包含:yes(启用自动分配连接跟踪助手)、no(禁用自动分配连接跟踪助手)、system(根据内核或 sysctl 设置来决定是否启用自动分配),默认值为 system。
AutomaticHelpers=system
# 控制着数据包是否可以在多个防火墙区域之间流动,可选值包含:yes(允许数据包在多个区域之间漂移)、no(禁止数据包在多个区域之间漂移),默认值为 yes。
# 允许数据包在多个区域之间漂移可能导致意外的流量或服务被允许,例如防火墙规则的意外冲突或覆盖,从而引发安全风险,而默认为 yes 是开发者为了保持与早期版本的兼容性,给用户一个适应的过渡期,但从安全角度看还是建议禁止。
AllowZoneDrifting=yes

服务配置

Firewalld 的服务配置,指的是用来定义特定服务防火墙规则的,XML 格式的配置文件。

Firewalld 服务配置主要有两部分:

  • 系统默认服务:位于 /usr/lib/firewalld/services 目录中,该目录包含了随 firewalld 包一起提供的默认服务配置文件。
  • 用户自定义服务:位于 /etc/firewalld/services 目录中,用户可以自行在这个目录中添加或修改服务配置文件。若同名文件在这两个目录中都存在,则以 /etc/firewalld/services 中的文件优先。

主要配置选项

以 http 服务为例,大致配置结构示例如下:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW(HTTP)</short>
  <description>HTTP is the protocal used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>

主要元素:

  • short:服务的简短名称。
  • description:对服务的描述。
  • port:定义服务使用的端口和协议。可以包含多个 <port> 元素。

自定义服务示例

1. 创建服务配置

这里假设配置一个名为 MyService 的自定义服务,使用 TCP 协议的 8080 端口,可以在 /etc/firewalld/services 目录中创建一个名为 myservice.xml 的文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>MyService</short>
  <description>My custom service running on port 8080.</description>
  <port protocol="tcp" port="8080"/>
</service>

2. 应用服务配置

sudo firewall-cmd --reload

3. 将服务添加到特定区域
此处示例为添加到 public 区域。

sudo firewall-cmd --zone=public --add-service=myservice

如果希望永久添加该服务,可以使用 --permanent 选项:

sudo firewall-cmd --zone=public --add-service=myservice --permanent

4. 查看服务配置
可以使用以下命令查看当前区域中已启用的服务。

sudo firewall-cmd --zone=public --list-services
posted @ 2024-07-16 01:05  505donkey  阅读(273)  评论(0)    收藏  举报