跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 安全和强化指南 / 网络安全性 / 伪装和防火墙
适用范围 SUSE Linux Enterprise Server 15 SP6

23 伪装和防火墙

只要在网络环境中使用 Linux,您就可以利用内核功能通过操作网络包将内部网络区域和外部网络区域隔开。Linux netfilter 框架提供了一种建立有效防火墙的方法,可以将不同网络隔开。使用 iptables(用于定义规则集的通用表结构)可以精确控制哪些包能通过网络接口。可以使用 firewalld 及其图形界面 firewall-config 设置此类包过滤器。

SUSE Linux Enterprise Server 15 GA 引入了 firewalld 作为新的默认软件防火墙,以其取代了 SuSEfirewall2。本章为已从旧版 SUSE Linux Enterprise Server 升级的用户提供有关配置 firewalld 以及从 SuSEfirewall2 迁移的指导。

23.1 使用 iptables 过滤包

本节介绍包过滤的具体细节。netfilteriptables 组件负责过滤和操作网络包以及进行网络地址转换 (NAT)。过滤准则及与过滤准则关联的所有操作均储存在链中;各个网络包在到达时,必须依次与这些链进行匹配。要匹配的链存储在表中。使用 iptables 命令可以更改这些表和规则集。

Linux 内核维护以下三个表,分别对应包过滤器的不同功能:

filter

此表存储大多数过滤规则,因为它执行严格意义上的包过滤机制,例如,决定是让包通过 (ACCEPT) 还是将包丢弃 (DROP)。

nat

此表定义对包的源地址和目标地址所做的任何更改。使用这些功能还能实现伪装,这是 NAT 的一个特例,用于将专用网络与互联网链接起来。

mangle

此表中的规则用于操纵 IP 报头中存储的值(如服务类型)。

这些表包含多个用于匹配包的预定义链:

PREROUTING

此链适用于所有传入包。

INPUT

此链适用于发往系统内部进程的包。

FORWARD

此链适用于在系统中路由的包。

OUTPUT

此链适用于从系统自身发出的包。

POSTROUTING

此链适用于所有出站包。

图 23.1 “iptable:包的可能路径”演示了网络包在特定系统中传送时可能经过的路径。为了便于说明,图中将表作为链的各个部分列出,但实际上表本身存储了这些链。

最简单的情况是,发往系统本身的传入包抵达 eth0 接口。包首先转到 mangle 表的 PREROUTING 链,然后转到 nat 表的 PREROUTING 链。随后的步骤(涉及包的路由选择)确定包的实际目标,这是系统自身的过程。在包经过 manglefilter 表的 INPUT 链后,只要 filter 表的规则允许,那么包最终将抵达目标。

iptable:包的可能路径
图 23.1︰ iptable:包的可能路径

23.2 关于伪装的基础知识

伪装是 Linux 专用的 NAT(网络地址转换)形式,可用于将小型 LAN 连接到互联网。LAN 主机使用私用地址范围内的 IP 地址(请参见第 23.1.2 节 “网络掩码和路由”),而在互联网上,使用的是正式 IP 地址。要能够连接到互联网,LAN 主机的私用地址需转换为正式地址。这种转换是在路由器上完成的,路由器充当了 LAN 和因特网之间的网关。其中的原理只有简单的一条:路由器有多个网络接口,通常是一个网卡和与因特网连接的另一个接口。后者将路由器与外部世界链接起来,同时,还会有一个或多个其他网络接口将路由器与 LAN 主机链接起来。在本地网络中的这些主机连接到路由器的网卡(如 eth0)后,它们就可以将发往本地网络之外的所有包发送到其默认网关或路由器。

重要
重要:使用正确的网络掩码

在配置网络时,确保所有本地主机的广播地址和网络掩码都相同。做不到这一点就会导致无法正确路由数据包。

如上所述,只要有某台 LAN 主机要向互联网地址发送包,这个包就会发送到默认路由器。但是,必须先配置路由器,然后才能转发这些包。由于安全原因,默认安装中未启用它。要启用此功能,请在 /etc/sysctl.conf 文件中添加 net.ipv4.ip_forward = 1 行。或者通过 YaST 执行此操作,例如通过调用 yast routing ip-forwarding on

连接的目标主机可以看到路由器,但对内部网络中发出包的那台主机却毫不知情。伪装技术就是因此而得名的。由于要进行地址转换,路由器自然成为所有回复包首先到达的目标。路由器必须能够识别这些入站包并转换其目标地址,这样才能将包转发给本地网络中的正确主机。

由于入站流量的路由选择取决于伪装表,所以从外部根本无法打开与内部主机的连接。对于这种连接,伪装表中不会有任何对应项。此外,所有已建立的连接在该表中都被分配了一个状态项,所以其他连接无法再使用该项。

受以上各种因素影响,在使用一些应用程序协议(如 ICQ、cucme、IRC(DCC、CTCP)和 FTP(采用 PORT 模式))时,您可能会遇到一些问题。Web 浏览器、标准 FTP 程序和许多其他程序都使用 PASV 方式。就包过滤和伪装而言,这种被动方式不容易出问题。

23.3 防火墙基础知识

在描述用于控制网络间数据流的机制时,防火墙也许是用得最广泛的一个术语。严格地说,本节所述的机制应该叫做包过滤器。包过滤器根据特定准则(如协议、端口和 IP 地址)来控制数据流。这样您就可以根据包的地址来拦截不应该发送到您网络中的包。举例来说,若允许对 Web 服务器进行公共访问,应明确打开相应的端口。不过,包过滤器并不扫描有合法地址的包的内容(例如那些要发送到该 Web 服务器的包)。例如,即使是在入站包想要破坏 Web 服务器上的 CGI 程序的情况下,包过滤器仍然允许它们通过。

一种更有效但同时也更复杂的机制是将多种系统结合起来使用,例如让包过滤器与应用程序网关或代理进行交互。在这种情况下,包过滤器将拒绝所有发往禁用端口的包,系统接受发往应用程序网关的包。此网关或代理伪装成服务器的实际客户端。从某种意义上说,可以将这种代理视为应用程序使用的协议级的伪装主机。此类代理的一个示例就是 Squid(一种 HTTP 和 FTP 代理服务器)。要使用 Squid,必须将浏览器配置为通过代理通讯。代理缓存将提供请求的任何 HTTP 页面或 FTP 文件,在缓存中找不到的对象将由代理从互联网提取。

下一节重点介绍 SUSE Linux Enterprise Server 随附的包过滤器。有关包过滤和防火墙设置的更多信息,请查看 Firewall HOWTO

23.4 firewalld

注意
注意:firewalld 取代了 SuSEfirewall2

SUSE Linux Enterprise Server 15 GA 引入了 firewalld 作为新的默认软件防火墙,以其取代了 SuSEfirewall2。如果您是从早于 SUSE Linux Enterprise Server 15 GA 的版本升级,SuSEfirewall2 将不会有变化,并且您必须手动升级到 firewalld(请参见第 23.5 节 “从 SuSEfirewall2 迁移”)。

firewalld 是一个守护程序,它可维护系统的 iptables 规则,并提供一个 D-Bus 接口用于操作这些规则。它随附了命令行实用程序 firewall-cmd 以及图形用户界面 firewall-config 与其交互。由于 firewalld 在后台运行并提供明确定义的接口,因此它允许其他应用程序请求对 iptables 规则进行更改,例如,设置虚拟机网络。

firewalld 实现不同的安全区域。存在多个预定义区域,如 internalpublic。管理员可根据需要定义其他自定义区域。每个区域包含自身的 iptables 规则集。每个网络接口只能是一个区域的成员。也可以根据源地址将单个连接分配到某个区域。

每个区域代表一个特定的信任级别。例如,public 区域不受信任,因为此网络中的其他计算机不受您的控制(适合互联网或无线热点连接)。另一方面,internal 区域用于受您控制的网络,类似于家庭或公司网络。以这种方式利用区域,主机能够以定义的方式向可信网络和不可信网络提供不同种类的服务。

有关 firewalld 中的预定义区域及其含义的详细信息,请参见其手册:https://www.firewalld.org/documentation/zone/predefined-zones.html

注意
注意:不分配区域的行为

网络接口的初始状态是完全未分配到任何区域。在此情况下,将在默认区域(可通过调用 firewall-cmd --get-default-zone 来确定)中隐式处理网络接口。如果未配置为其他值,默认区域是 public 区域。

firewalld 包过滤模型允许任何传出连接通过。传出连接是指由本地主机主动建立的连接。如果相关区域中不允许相应的服务,则会阻止远程主机建立的传入连接。因此,具有传入流量的每个接口必须放在适当的区域,以使所需的服务可供访问。对于每个区域,请定义所需的服务或协议。

firewalld 的一个重要概念是划分了两个不同的配置:运行时配置和永久配置。运行时配置代表当前处于活动状态的规则,而永久配置代表重启动 firewalld 时将应用的已保存规则。这样,就可以添加在重启动 firewalld 后将丢弃的临时规则,并且在试验新规则时能够还原到原始状态。当您更改配置时,需要知道您正在编辑哪个配置。第 23.4.3.2 节 “运行时配置与永久配置”中介绍了如何做到这一点。

要使用图形用户界面 firewall-config 执行 firewalld 配置,请参见其documentation。下一节将介绍如何在命令行上使用 firewall-cmd 执行典型的 firewalld 配置任务。

23.4.1 使用 NetworkManager 配置防火墙

NetworkManager 支持通过选择区域来对 firewalld 进行基本配置。

编辑有线或无线连接时,请在配置窗口中转到身份选项卡,然后使用Firewall Zone下拉框。

23.4.2 使用 YaST 配置防火墙

yast firewall 模块支持 firewalld 的基本配置。它提供区域选择器、服务选择器和端口选择器。它不支持创建自定义 iptables 规则,并将区域创建和自定义操作局限于选择服务和端口。

注意
注意:在运行模式下更改设置

YaST 遵循 /etc/firewalld/firewalld.conf 中的设置运行,其中 FlushAllOnReload 的默认值设置为 no。因此,YaST 不会在运行模式下更改设置。例如,如果您使用 YaST 将接口分配给了不同的区域,请重新启动 firewalld 守护程序以使更改生效。

23.4.3 在命令行上配置防火墙

23.4.3.1 防火墙启动

系统默认会安装并启用 firewalld。它是一个普通的 systemd 服务,可以通过 systemctl 或 YaST 服务管理器进行配置。

重要
重要:自动配置防火墙

安装后,YaST 会自动启动 firewalld,并将所有接口保留在默认的 public 区域中。如果在系统上配置并激活了某个服务器应用程序,YaST 可通过服务器配置模块中的在防火墙中打开所选接口上的端口在防火墙中打开端口选项调整防火墙规则。某些服务器模块对话框包含防火墙细节按钮,用于激活其它服务和端口。

23.4.3.2 运行时配置与永久配置

所有 firewall-cmd 命令默认都是对运行时配置运行。您可以通过添加 --permanent 参数来对永久配置应用大多数操作。如果这样做,更改会影响永久配置,而不会在运行时配置中立即生效。目前无法通过单次调用将规则同时添加到运行时配置和永久配置。要实现此目的,可将所有必要更改应用到运行时配置,并在一切符合预期时发出以下命令:

# firewall-cmd --runtime-to-permanent

这会将所有当前运行时规则写入永久配置。您或其他程序在其他环境中可能对防火墙所做的任何临时修改都将以这种方式变成永久修改。如果您不确信这一点,保险起见,您也可以采取相反的方法:将新规则添加到永久配置,然后重新加载 firewalld 以使这些规则成为活动规则。

注意
注意

某些配置项(例如默认区域)由运行时配置和永久配置共享。对这些项的更改会立即体现在这两个配置中。

要将运行时配置还原为永久配置,从而丢弃所有临时更改,可以采用以下两种做法:通过 firewalld 命令行界面或通过 systemd

# firewall-cmd --reload
# systemctl reload firewalld

为简洁起见,下列章节中的示例始终对运行时配置运行(如果适用)。要使其适用于永久配置,请进行相应调整。

23.4.3.3 将接口分配到区域

您可按如下所示列出当前分配到某个区域的所有网络接口:

# firewall-cmd --zone=public --list-interfaces
eth0

同样,您可以查询特定的接口分配到了哪个区域:

# firewall-cmd --get-zone-of-interface=eth0
public

以下命令行将一个接口分配到某个区域。如果 eth0 尚未分配到其他区域,使用 --add-interface 的变体就会起作用。使用 --change-interface 的变体始终起作用,在必要时会从其当前区域中去除 eth0

# firewall-cmd --zone=internal --add-interface=eth0
# firewall-cmd --zone=internal --change-interface=eth0

任何不带明确 --zone 参数的操作将对默认区域隐式运行。此命令对可用于获取和设置默认的区域分配:

# firewall-cmd --get-default-zone
dmz
# firewall-cmd --set-default-zone=public
重要
重要

任何未明确分配到区域的网络接口会自动成为默认区域的一部分。如果更改默认区域,会立即为永久配置和运行时配置重新分配所有这些网络接口。切勿使用 internal 区域这样的可信区域作为默认区域,以免意外曝露于威胁之中。例如,在这种情况下,USB 以太网接口等热插拔网络接口将自动成为可信区域的一部分。

不明确属于任何区域的接口不会显示在区域接口列表中。目前没有任何命令可列出未分配的接口。因此,在常规操作期间,最好避免使用未分配的网络接口。

23.4.3.4 使网络服务可供访问

firewalld 存在服务的概念。服务由端口和协议的定义构成。在给定网络服务(例如 Web 或邮件服务器协议)的环境中,这些定义在逻辑上合为一体。您可以使用以下命令获取有关预定义服务的信息及其细节:

# firewall-cmd --get-services
[...] dhcp dhcpv6 dhcpv6-client dns docker-registry [...]
# firewall-cmd --info-service dhcp
dhcp
  ports: 67/udp
  protocols:
  source-ports:
  modules:
  destination:

使用这些服务定义可以轻松使相关的网络功能在区域中可供访问。例如,下面的命令行会打开内部区域中的 HTTP Web 服务器端口:

# firewall-cmd --add-service=http --zone=internal

要去除区域中的服务,则需使用对应的命令 --remove-service。您还可以使用 --new-service 子命令定义自定义的服务。有关如何执行此操作的更多细节,请参见 https://www.firewalld.org/documentation/howto/add-a-service.html

如果您只想按编号打开单个端口,可使用以下方法。这会打开内部区域中的 TCP 端口 8000:

# firewall-cmd --add-port=8000/tcp --zone=internal

要去除端口,请使用对应的命令 --remove-port

提示
提示:临时打开服务或端口

firewalld 支持使用 --timeout 参数将服务或端口打开一段有限的时间。在进行快速测试时,此参数可能很有用,它可以确保测试人员不会忘记关闭该服务或端口。要允许打开 internal 区域中的 imap 服务 5 分钟,可以调用

# firewall-cmd --add-service=imap --zone=internal --timeout=5m

23.4.3.5 锁定模式

firewalld 提供了一种锁定模式来防止对处于活动状态的防火墙规则进行更改。由于应用程序可以通过 D-Bus 接口自动更改防火墙规则,并且普通用户也有可能可以执行该操作(取决于 PolicyKit 规则),因此,锁定在某些情况下有助于防止此类更改发生。https://fedoraproject.org/wiki/Features/FirewalldLockdown 上提供了有关此模式的详细信息。

请务必注意,锁定模式功能不提供真正的安全性,而只是防范有人意外或者无恶意地尝试更改防火墙。目前,如 https://seclists.org/oss-sec/2017/q3/139 中所述,在 firewalld 中实现锁定模式无法针对恶意企图提供安全保护。

23.4.3.6 添加自定义 iptables 规则

firewalld 声明对主机的 netfilter 规则拥有排它控制权。切勿使用其他工具(例如 iptables)修改防火墙规则。否则可能会造成 firewalld 的混乱并破坏安全性或功能。

如果您需要添加 firewalld 功能未涵盖的自定义防火墙规则,可通过两种方式实现目的。要直接传递原始 iptables 语法,可以使用 --direct 选项。此选项预期使用表、链和优先级作为初始参数,命令行的其余部分将按原样传递给 iptables。下面的示例将添加一个用于转发过滤器表的连接跟踪规则:

# firewall-cmd  --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 \
    -p tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

此外,firewalld 实施了所谓的富规则,这是一种扩展语法,用于更轻松地指定 iptables 规则。https://www.firewalld.org/documentation/man-pages/firewalld.richlanguage.html 上提供了相应语法规范。下面的示例将丢弃来自特定源地址的所有 IPv4 包:

# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" \
    source address="192.168.2.4" drop'

23.4.3.7 路由、转发和伪装

firewalld 并不是设计用来作为功能完备的路由器。它可提供典型家庭路由器设置的基本功能,但对于公司生产环境的路由器,则不应使用 firewalld,而应使用专用路由器和防火墙设备。下面仅提供了利用 firewalld 中的路由时需要考虑的几点提示:

  • 首先,需要按第 23.2 节 “关于伪装的基础知识”中所述启用 IP 转发。

  • 要启用 IPv4 伪装(例如,在 internal 区域中),请发出以下命令。

    # firewall-cmd --zone=internal --add-masquerade
  • firewalld 还可以启用端口转发。以下命令会将端口 80 上的本地 TCP 连接转发到另一主机:

    # firewall-cmd --zone=public \
        --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10

23.4.4 访问侦听动态端口的服务

某些网络服务不会侦听预定义的端口号,而是基于 portmapperrpcbind 协议运行。从现在开始,我们将使用术语 rpcbind。当其中一项服务启动时,它会选择一个随机本地端口,并与 rpcbind 通讯以使端口号变为已知。rpcbind 本身正在侦听已知的端口。然后,远程系统可以向 rpcbind 查询该协议已知的网络服务,以及它们正在侦听哪些端口。现今还在使用此方法的程序不是很多。常见示例包括网络信息服务(NIS;ypservypbind)以及网络文件系统 (NFS) 版本 3。

注意
注意:关于 NFSv4

较新的 NFSv4 需要单个已知的 TCP 端口 2049。对于协议版本 4.0,可能需要将内核参数 fs.nfs.nfs_callback_tcpport 设置为静态端口(请参见例 23.1 “/etc/modprobe.d/60-nfs.confnfs 内核模块的回调端口配置”)。从协议版本 4.1 开始,此项设置也变得没有必要。

由于 rpcbind 协议具有动态性质,要使防火墙后面的受影响服务可供访问变得很困难。firewalld 本身并不支持这些服务。如需手动配置,请参见第 23.4.4.1 节 “配置静态端口”。此外,SUSE Linux Enterprise Server 提供了一个助手脚本。有关详细信息,请参见第 23.4.4.2 节 “使用 firewall-rpcbind-helper 配置静态端口”

23.4.4.1 配置静态端口

一种可行的做法是将所有相关网络服务配置为使用固定端口号。完成此操作后,可以在 firewalld 中打开固定端口,然后一切会正常进行。实际使用的端口号由您决定,但不应与分配给其他服务的任何已知端口号相冲突。有关 NIS 和 NFSv3 服务的可用配置项列表,请参见表 23.1 “静态端口配置的重要 sysconfig 变量”。您的设置不一定需要所有这些端口,具体取决于您的实际 NIS 或 NFS 配置。

表 23.1︰ 静态端口配置的重要 sysconfig 变量

文件路径

变量名

示例值

/etc/sysconfig/nfs MOUNTD_PORT 21001
STATD_PORT 21002
LOCKD_TCPPORT 21003
LOCKD_UDPPORT 21003
RQUOTAD_PORT 21004
/etc/sysconfig/ypbind YPBIND_OPTIONS -p24500
/etc/sysconfig/ypserv YPXFRD_ARGS -p24501
YPSERV_ARGS -p24502
YPPASSWDD_ARGS --port 24503

您需要重启动受这些静态端口配置影响的所有相关服务才能使更改生效。可以使用 rpcinfo -p 命令查看当前分配的 rpcbind 端口。如果成功,输出中应该会显示静态配置的端口。

使用 NFS 时,除了为用户空间中运行的网络服务配置端口以外,还需要配置 Linux 内核直接使用的端口。其中一个端口是 nfs_callback_tcpport。仅在早于 4.1 的 NFS 协议版本中才需要此端口。名为 fs.nfs.nfs_callback_tcpport 的 sysctl 可用于配置此端口。仅当 NFS 挂载处于活动状态时,此 sysctl 节点才会动态显示。因此,最好通过内核模块参数来配置该端口。可以按例 23.1 “/etc/modprobe.d/60-nfs.confnfs 内核模块的回调端口配置”中所示创建一个文件来实现此目的。

例 23.1︰ /etc/modprobe.d/60-nfs.confnfs 内核模块的回调端口配置
options nfs callback_tcpport=21005

要使此项更改生效,最简单的方法是重引导计算机。如果采用其他方法,将需要停止所有 NFS 服务并重新加载 nfs 内核模块。要校验活动的 NFS 回调端口,请检查 cat /sys/module/nfs/parameters/callback_tcpport 的输出。

要轻松处理现已静态配置的 RPC 端口,创建新的 firewalld 服务定义会很有用。例如,此服务定义可将所有相关端口分组,这样您可以轻松将这些端口设置为供特定区域的用户访问。在例 23.2 “用来为 NFS 定义新 firewalld RPC 服务的命令”中,对 NFS 端口就采取了这种做法,因为在配套的示例中已对这些端口进行配置。

例 23.2︰ 用来为 NFS 定义新 firewalld RPC 服务的命令
# firewall-cmd --permanent --new-service=nfs-rpc
# firewall-cmd --permanent --service=nfs-rpc --set-description="NFS related, statically configured RPC ports"
# add UDP and TCP ports for the given sequence
# for port in 21001 21002 21003 21004; do
    firewall-cmd --permanent --service=nfs-rpc --add-port ${port}/udp --add-port ${port}/tcp
done
# the callback port is TCP only
# firewall-cmd --permanent --service=nfs-rpc --add-port 21005/tcp

# show the complete definition of the new custom service
# firewall-cmd --info-service=nfs-rpc --permanent -v
nfs-rpc
  summary:
  description: NFS and related, statically configured RPC ports
  ports: 4711/tcp 21001/udp 21001/tcp 21002/udp 21002/tcp 21003/udp 21003/tcp 21004/udp 21004/tcp
  protocols:
  source-ports:
  modules:
  destination:

# reload firewalld to make the new service definition available
# firewall-cmd --reload

# the new service definition can now be used to open the ports for example in the internal zone
# firewall-cmd --add-service=nfs-rpc --zone=internal

23.4.4.2 使用 firewall-rpcbind-helper 配置静态端口

您可以使用 SUSE 助手工具 firewall-rpc-helper.py 来简化上一节中所述的静态端口配置步骤。请使用 zypper in firewalld-rpcbind-helper 安装该工具。

该工具允许以交互方式配置上一节中所述的服务模式。它还可以显示当前端口分配,并可用于编写脚本。有关详细信息,请参见firewall-rpc-helper.py --help

23.5 从 SuSEfirewall2 迁移

注意
注意:为 AutoYaST 创建 firewalld 配置

请参见《AutoYaST 指南》的“Firewall Configuration”一节,了解如何为 AutoYaST 创建 firewalld 配置。

SUSE Linux Enterprise Server 12 的任何服务包升级到 SUSE Linux Enterprise Server 15 SP6 时,SuSEfirewall2 都不会更改,并会保持活动状态。它不会自动迁移,因此您必须手动迁移到 firewalldfirewalld 包含助手迁移脚本 susefirewall2-to-firewalld。该脚本可能会完美执行迁移,也可能失败,具体取决于 SuSEfirewall2 配置的复杂性。它很可能会部分成功,在此情况下,您必须检查新的 firewalld 配置并做出调整。

最终的配置会使 firewalld 的行为在一定程度上类似于 SuSEfirewall2。要充分利用 firewalld 的功能,您可以选择创建新的配置,而不要尝试迁移旧配置。可以安全运行不带任何选项的 susefirewall2-to-firewalld 脚本,因为它不会对您的系统做出永久性更改。但是,如果您正在远程管理系统,则可能会被锁定。

安装并运行 susefirewall2-to-firewalld

# zypper in susefirewall2-to-firewalld
# susefirewall2-to-firewalld
INFO: Reading the /etc/sysconfig/SuSEfirewall2 file
INFO: Ensuring all firewall services are in a well-known state.
INFO: This will start/stop/restart firewall services and it's likely
INFO: to cause network disruption.
INFO: If you do not wish for this to happen, please stop the script now!
5...4...3...2...1...Lets do it!
INFO: Stopping firewalld
INFO: Restarting SuSEfirewall2_init
INFO: Restarting SuSEfirewall2
INFO: DIRECT: Adding direct rule="ipv4 -t filter -A INPUT -p udp -m udp --dport 5353 -m pkttype
  --pkt-type multicast -j ACCEPT"
[...]
INFO: Enabling direct rule=ipv6 -t filter -A INPUT -p udp -m udp --dport 546 -j ACCEPT
INFO: Enabling direct rule=ipv6 -t filter -A INPUT -p udp -m udp --dport 5353 -m pkttype
  --pkt-type multicast -j ACCEPT
INFO: Enable logging for denied packets
INFO: ##########################################################
INFO:
INFO: The dry-run has been completed. Please check the above output to ensure
INFO: that everything looks good.
INFO:
INFO: ###########################################################
INFO: Stopping firewalld
INFO: Restarting SuSEfirewall2_init
INFO: Restarting SuSEfirewall2

这会生成大量输出,您可能需要将其复制到某个文件以方便查看:

# susefirewall2-to-firewalld | tee newfirewallrules.txt

该脚本支持下列选项:

-c

提交更改。脚本会对系统进行更改,因此,请务必在您确实对建议的更改感到满意时才使用此选项。这重置当前的 firewalld 配置,因此请务必进行备份!

-d

超级繁琐。请使用此选项来提交 bug 报告,但务必小心屏蔽敏感信息。

-h

此消息。

-q

无输出。也不会列显错误!

-v

冗长方式。会列显警告和其他信息性消息。

23.6 更多信息

/usr/share/doc/packages/firewalld 中可以找到有关 firewalld 软件包的最新信息和其他文档。netfilter 和 iptables 项目的主页 https://www.netfilter.org 以多种语言提供了大量有关 iptables 一般信息的文档。