firewalld(2)安装、配置文件、规则查询

安装firewalld

        我使用的操作系统是debian 12,并没有安装firewalld。

        

通过apt install firewalld安装firewalld
firewalld 本身是一个服务(firewalld.service),可以通过 systemctl 进行启动、停止和重启,而iptables 本身并不是一个服务,而是一个用户空间工具,被用来配置底层的防火墙规则。
通过firewall-cmd --state可以看到firewall已经是running状态了

firewalld配置文件

默认和回退配置

/usr/lib/firewalld 目录包含了Firewalld提供的默认和回退配置,这些配置是关于ICMP类型(icmptypes)、服务(services)和区域(zones)的。这些文件是随着firewalld包一起安装的,并且通常不应该被修改,因为当firewalld包更新时,这些更改可能会丢失。

如果你需要添加额外的ICMP类型、服务或区域,你可以通过安装额外的包或者在这个目录下创建新的文件来实现。

系统特定配置

/etc/firewalld 目录用于存储系统或用户特定的配置。这些配置可能由系统管理员创建,或者通过Firewalld的配置界面进行定制,也可能是手动创建的。这些文件会覆盖默认配置文件中的设置。

手动更改预定义配置

如果你想要手动更改预定义的ICMP类型、区域或服务的设置,你应该从默认配置目录(/usr/lib/firewalld)复制相应的文件到系统配置目录(/etc/firewalld)的相应位置,并进行相应的修改。

默认配置和firewalld.conf

如果/etc/firewalld目录不存在,或者该目录下没有任何配置,那么Firewalld将使用默认配置,并且对于firewalld.conf文件(它通常位于/etc/firewalld/目录下),也将使用默认设置。

Runtime 和Permanent配置

运行时配置(Runtime Configuration)

  • 运行时配置是实际生效的配置,它直接应用于内核中的防火墙。
  • 当Firewalld服务启动时,它会加载永久配置并将其作为当前的运行时配置。
  • 对运行时配置所做的更改不会自动保存到永久配置中。
  • 如果Firewalld服务停止,运行时配置将会丢失。
  • 通过执行firewalld服务的重新加载(reload)操作,会将永久配置重新加载为新的运行时配置。在重新加载后,之前更改的策略也会被恢复。

永久配置(Permanent Configuration)

  • 永久配置存储在配置文件中,每次系统启动或Firewalld服务重新加载/重启时,它都会被加载并成为新的运行时配置。
  • 永久配置文件通常位于/etc/firewalld/目录下
firewall-cmd --permanent [RULE]
firewall-cmd --reload
运行时(runtime):修改规则马上生效,但是临时生效
持久配置(permanent): 修改后需要重载才会生效
注意:一旦使用了--permanent会将配置写入到/etc/firewalld/{services,zones}/*.xml对应的文件中,配置完成后一定要reload,否则只能待防火墙重启后这些配置才能生效。

从运行时迁移到永久(Runtime to Permanent)

  • 一旦在运行时配置中完成了所需的防火墙设置并且它正在正常工作,可以将这些更改从运行时迁移到永久配置中,以确保在系统重启或Firewalld服务重新加载/重启后,这些更改仍然生效。
  • 可以使用firewall-config(图形界面工具)或firewall-cmd(命令行工具)来执行此操作。
firewall-cmd --runtime-to-permanent
注意,此命令可能需要与--reload选项一起使用,以确保所有更改都立即生效并且不丢失任何状态信息。
如果迁移后的防火墙设置不工作,可以通过简单地重新加载或重启Firewalld服务来重新应用有效的永久配置。

注意事项

  • 在对防火墙配置进行更改时,建议先在运行时配置中进行测试,以确保更改不会对系统的正常运行造成负面影响。
  • 一旦对运行时配置确认无误,再将其迁移到永久配置中。
  • 在执行任何更改之前,最好备份现有的配置文件,以防万一需要回滚更改。

firewalld.conf配置文件

root@debian:~# cat /etc/firewalld/firewalld.conf
# firewalld config file

# default zone
# The default zone used if an empty zone string is used.
# Default: public
DefaultZone=public
#这定义了默认的防火墙区域。当一个网络接口或服务没有被明确指定到一个特定的区域时,它将使用这个默认区域。在这个例子中,默认区域是 public

# Clean up on exit
# If set to no or false the firewall configuration will not get cleaned up
# on exit or stop of firewalld.
# Default: yes
CleanupOnExit=yes
#当 firewalld 退出或停止时,这个选项决定了是否要清理防火墙配置。设置为 yes 表示在退出时会清理配置,而 no 或 false 则表示不会清理。

# Clean up kernel modules on exit
# If set to yes or true the firewall related kernel modules will be
# unloaded on exit or stop of firewalld. This might attempt to unload
# modules not originally loaded by firewalld.
# Default: no
CleanupModulesOnExit=no
#这个选项决定了在 firewalld 退出或停止时是否卸载与防火墙相关的内核模块。
设置为 yes 或 true 意味着将尝试卸载这些模块,但请注意,这可能会尝试卸载不是由 firewalld 最初加载的模块。
默认情况下,这个选项是关闭的(no),以避免意外卸载其他服务或功能所需的模块。

# Lockdown
# If set to enabled, firewall changes with the D-Bus interface will be limited
# to applications that are listed in the lockdown whitelist.
# The lockdown whitelist file is lockdown-whitelist.xml
# Default: no
Lockdown=no
#如果启用(设置为 enabled),那么通过 D-Bus 接口进行的防火墙更改将仅限于在锁定白名单(由 lockdown-whitelist.xml 文件定义)中列出的应用程序。这增加了安全性,但可能会限制某些应用程序的功能。

# IPv6_rpfilter
# Performs a reverse path filter test on a packet for IPv6. If a reply to the
# packet would be sent via the same interface that the packet arrived on, the
# packet will match and be accepted, otherwise dropped.
# The rp_filter for IPv4 is controlled using sysctl.
# Note: This feature has a performance impact. See man page FIREWALLD.CONF(5)
# for details.
# Default: yes
IPv6_rpfilter=yes
#这启用了 IPv6 的反向路径过滤测试。当数据包的回复将通过相同的接口发送(即数据包到达的接口)时,数据包将被接受,否则将被丢弃。这有助于防止某些类型的 IP 欺骗攻击。

# IndividualCalls
# Do not use combined -restore calls, but individual calls. This increases the
# time that is needed to apply changes and to start the daemon, but is good for
# debugging.
# Default: no
IndividualCalls=no
#这个选项决定了 firewalld 是否应该使用单独的调用而不是组合的 -restore 调用来应用更改或启动守护进程。设置为 yes 会增加应用更改和启动守护进程所需的时间,但有助于调试。

# LogDenied
# Add logging rules right before reject and drop rules in the INPUT, FORWARD
# and OUTPUT chains for the default rules and also final reject and drop rules
# in zones. Possible values are: all, unicast, broadcast, multicast and off.
# Default: off
LogDenied=off
#这个选项决定了是否应为默认规则和区域中的最终拒绝和丢弃规则在 INPUT、FORWARD 和 OUTPUT 链中添加日志记录规则。可能的值包括 all(记录所有被拒绝的数据包)、unicast(仅记录单播被拒绝的数据包)、broadcast(仅记录广播被拒绝的数据包)、multicast(仅记录多播被拒绝的数据包)和 off(不记录)。

# FirewallBackend
# Selects the firewall backend implementation.
# Choices are:
#       - nftables (default)
#       - iptables (iptables, ip6tables, ebtables and ipset)
# Note: The iptables backend is deprecated. It will be removed in a future
# release.
FirewallBackend=nftables
#这个选项决定了 firewalld 使用的后端实现。目前有两个选择:nftables(默认)和 iptables(包括 iptables, ip6tables, ebtables 和 ipset)。注意,iptables 后端已被弃用,并将在未来的版本中移除。在大多数情况下,nftables 是更好的选择,因为它提供了更强大和灵活的功能集。


# FlushAllOnReload
# Flush all runtime rules on a reload. In previous releases some runtime
# configuration was retained during a reload, namely; interface to zone
# assignment, and direct rules. This was confusing to users. To get the old
# behavior set this to "no".
# Default: yes
FlushAllOnReload=yes
#这个选项决定了在重新加载 firewalld 配置时是否要清除所有运行时规则。在以前的版本中,一些运行时配置(如接口到区域的分配和直接规则)在重新加载时会被保留,这可能会导致用户混淆。
设置为 yes(默认)意味着在重新加载时将清除所有运行时规则,从而获得更清晰的配置状态。


# RFC3964_IPv4
# As per RFC 3964, filter IPv6 traffic with 6to4 destination addresses that
# correspond to IPv4 addresses that should not be routed over the public
# internet.
# Defaults to "yes".
RFC3964_IPv4=yes
#这个选项决定是否根据 RFC 3964 过滤具有 6to4 目标地址的 IPv6 流量,这些地址对应于不应通过公共互联网路由的 IPv4 地址。
设置为 yes(默认)意味着将执行这种过滤,以提高安全性。

firewalld配置命令

只有firewalld服务启动了,才能使用相关工具:

firewall-config(图形界面)

 firewall-cmd

这里我们主要介绍命令行方式的配置

再次回顾一下,friewalld的配置有两种状态:

        运行时(runtime):修改规则马上生效,但是临时生效

        持久配置(permanent: 修改后需要重载才会生效

firewall-cmd --permanent [RULE]
firewall-cmd --reload

fmrewall-cmd常用查询参数

firewall-cmd

       --permanent                   --配置写入到配置文件,否则临时马上生效

    --reload                      --重载配置文件,永久生效

       --get-default-zone             --获取默认区域

    --get-zones                   --获取所有可用的区域

    --get-active-zones            --获取当前激活(活跃)的区域

    --list-services               --显示指定区域内允许访问的所有服务

    --list-ports                  --显示指定区域内允许访问的所有端口号

        --zone=public --query-port=22/tcp  --查询指定端口

    --list-all                              --列出激活使用的区域的配置
        
       --list-all --zone=work          --查看区域配置信息

    --list-all-zones              --列出所有区域的配置

    --get-zone-of-interface=        --获取指定接口所在的区域

    --list-icmp-blocks             --显示指定区域内拒绝访问的所有ICMP类型

    --list-protocols               --列出在指定区域中允许通过的协议

       --list-sources                  --查询放通IP段

    --get-target                  --获取区域中的默认target

       --get-services                  --查看所有服务

如上图所示,通过--list-all-zones命令获取所有zone信息

查看zone信息

通过--info-zone= zone名称,可以显示对应zone的信息
public:这是zone的名称,public zone是 firewalld 中的一个默认zone。

target: default:这定义了当流量不符合任何其他规则时如何处理它。default 通常表示使用zone的默认目标(可能是 ACCEPT、DROP、REJECT 等),但这取决于 firewalld 的配置和版本。

icmp-block-inversion: no:这表示ICMP的阻塞规则不是反转的。如果设置为 yes,那么未明确允许的ICMP类型将被阻塞,而不是未明确阻塞的ICMP类型被允许。

interfaces: 这里应该列出与该zone关联的网络接口名称。

sources: 这里应该列出允许或拒绝访问的源IP地址或网络。

services: dhcpv6-client ssh:这定义了允许通过此zone的服务,包括DHCPv6客户端和SSH。

ports, protocols: 这些字段用于定义允许通过此zone的特定端口或协议。

forward: yes:这表示允许通过此zone的数据包转发。

masquerade: 这个选项用于控制是否启用IP伪装(NAT),如果允许,它将允许 IP 转发,它可以让你的计算机作为一个路由器

forward-ports, source-ports: 这些字段用于定义端口转发规则。

icmp-blocks: 这里应该列出要阻塞的ICMP消息类型。

rich rules:  富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。

firewalld应急模式

打开应急模式可切断全部网络通信来应对网络攻击,而不用像之前那样通过物理拔除网线来进行断网操作,防止了系统在多网口环境中一次性插拔所有网线可能带来的混乱以及由此引发的系统恢复后延续问题。


–panic-on 打开应急模式(切断全部流量)
firewall-cmd --panic-on 开启应急模式,阻断所有网络连接

–panic-off 关闭应急模式
firewall-cmd --panic-off 关闭应急模式

–query-panic 查询应急模式状态
firewall-cmd --query-panic 查看应急模式的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值