firewalld与nftables
在 /etc/firewalld/firewalld.conf
文件中,FirewallBackend
选项用于指定 Firewalld 使用的防火墙后端实现。具体来说:
-
nftables :这是当前的默认选项,表示 Firewalld 将使用
nftables
作为防火墙后端。nftables
是一个现代的防火墙框架,旨在替代旧的iptables
,提供更好的性能和更灵活的配置。 -
iptables :这是一个较旧的防火墙后端,支持
iptables
、ip6tables
、ebtables
和ipset
。不过,正如注释中所提到的,iptables
后端已经被标记为过时(deprecated),并将在未来的版本中被移除。
因此,FirewallBackend=nftables
的意思是 Firewalld 将使用 nftables
作为其防火墙后端实现,这是推荐的选择,因为它是现代的、功能更强大的解决方案。如果你没有特别的需求,建议保持这个设置为默认值。
但由于暂时不想学习nftables语法,聚焦于iptables与ufw
iptables VS nftables
nftables
和 iptables
是 Linux 系统中用于管理网络流量和防火墙规则的两种工具。nftables
是 iptables
的替代品,旨在提供更现代和灵活的防火墙管理方式。以下是它们之间的一些优缺点比较:
优点
nftables 的优点
-
统一的框架:
nftables
提供了一个统一的框架来处理 IPv4、IPv6、ARP 和其他协议,而iptables
需要分别使用iptables
、ip6tables
、ebtables
等工具。
-
更简洁的语法:
nftables
的语法更简洁,规则的定义和管理更加直观,减少了复杂性。
-
更高的性能:
nftables
在处理规则时使用了更高效的数据结构(如哈希表),在处理大量规则时性能更好。
-
更强大的功能:
nftables
支持更复杂的匹配条件和操作,例如使用集合(sets)来管理多个地址或端口,支持更灵活的流量控制。
-
内置的状态跟踪:
nftables
提供了更强大的连接跟踪功能,可以更方便地管理状态信息。
-
更好的日志记录:
nftables
提供了更灵活的日志记录选项,可以更方便地记录和管理日志。
iptables 的优点
-
成熟和广泛使用:
iptables
已经存在很长时间,广泛应用于各种 Linux 发行版,许多文档和教程可供参考。
-
兼容性:
- 许多现有的脚本和工具依赖于
iptables
,在某些情况下,使用iptables
可能更方便。
- 许多现有的脚本和工具依赖于
缺点
nftables 的缺点
-
学习曲线:
- 对于习惯于
iptables
的用户,nftables
可能需要一些时间来适应新的语法和概念。
- 对于习惯于
-
支持和文档:
- 尽管
nftables
的文档在不断改进,但相较于iptables
,仍然可能存在一些不足。
- 尽管
iptables 的缺点
-
复杂性:
iptables
的语法和规则管理相对复杂,尤其是在处理大量规则时,可能会变得难以管理。
-
性能问题:
- 在处理大量规则时,
iptables
的性能可能不如nftables
,因为它使用的是线性链表结构。
- 在处理大量规则时,
-
分散的工具:
iptables
需要分别使用ip6tables
、ebtables
等工具来处理不同的协议,增加了管理的复杂性。
总结
- 选择
nftables
:如果您正在设置新的防火墙或需要更高效、更灵活的规则管理,nftables
是一个更好的选择。 - 选择
iptables
:如果您已经有大量基于iptables
的配置或脚本,或者需要与现有系统兼容,继续使用iptables
可能更方便。
总的来说,nftables
是一个现代化的解决方案,提供了许多优于 iptables
的功能,但在某些情况下,iptables
仍然是一个有效的选择。
Ufw源规则解读
- 在
/etc/ufw/before.rules
1-MDNS监听
shell
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j DROP
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j DROP
在 /etc/ufw/before.rules
文件中,您看到的这两行是 iptables
规则的定义,具体用于允许特定的多播(multicast)流量。让我们逐行分析这些规则的含义:
规则解析
-
第一条规则:
bash-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT
-A ufw-before-input
:这表示将规则添加到名为ufw-before-input
的链中。ufw-before-input
是UFW
在处理输入流量之前使用的链。-p udp
:指定协议为 UDP(用户数据报协议)。-d 224.0.0.251
:指定目标地址为224.0.0.251
,这是用于多播 DNS(mDNS)的地址。--dport 5353
:指定目标端口为5353
,这是 mDNS 服务使用的端口。-j ACCEPT
:表示如果流量匹配上述条件,则接受该流量。
总结:这条规则允许所有发送到多播地址
224.0.0.251
的 UDP 流量,目标端口为5353
,以支持 mDNS 服务发现。 -
第二条规则:
bash-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT
-A ufw-before-input
:同样表示将规则添加到ufw-before-input
链中。-p udp
:指定协议为 UDP。-d 239.255.255.250
:指定目标地址为239.255.255.250
,这是用于通用即插即用(UPnP)服务的多播地址。--dport 1900
:指定目标端口为1900
,这是 UPnP 服务使用的端口。-j ACCEPT
:表示如果流量匹配上述条件,则接受该流量。
总结:这条规则允许所有发送到多播地址
239.255.255.250
的 UDP 流量,目标端口为1900
,以支持 UPnP 服务发现。
总结
这两条规则的目的是允许特定的多播流量,以支持服务发现功能。mDNS 和 UPnP 是常用的网络服务发现协议,允许设备在网络上自动发现彼此。通过在 ufw-before-input
链中添加这些规则,UFW
确保这些多播流量不会被防火墙阻止,从而使相关服务能够正常工作。
2- ufw-not-local 报文的处理
shell
# ufw-not-local
-A ufw-before-input -j ufw-not-local
# if LOCAL, RETURN
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
# if MULTICAST, RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j DROP
# if BROADCAST, RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
# all other non-local packets are dropped
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
这段代码是iptables规则,用于配置ufw防火墙在处理输入数据包时的行为。
-
-A ufw-before-input -j ufw-not-local
这行代码表示将数据包传递到名为ufw-not-local
的链。也就是说,所有传入数据包都将按照该链中的规则进行处理。 -
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
这行代码表示如果数据包的目标类型是LOCAL(本地)地址,则直接返回(允许通过)。这意味着本地目标的数据包将被接受并传递到本地。 -
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
这行代码表示如果数据包的目标类型是MULTICAST(多播)地址,则直接返回(允许通过)。这意味着多播目标的数据包将被接受并传递到相应的多播组。 -
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
这行代码表示如果数据包的目标类型是BROADCAST(广播)地址,则直接返回(允许通过)。这意味着广播目标的数据包将被接受并传递到所有主机。 -
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
这行代码表示如果数据包既不是本地、多播、广播目标,那么将启用日志记录,并限制每分钟只接受3个数据包,超过这个数量的数据包会被丢弃。同时将匹配的数据包传递到ufw-logging-deny
链。该链的作用是将被丢弃的数据包进行日志记录。 -
-A ufw-not-local -j DROP
这行代码表示如果数据包既不是本地、多播、广播目标,且已经超过了日志记录的限制数目,那么直接丢弃该数据包。
总之,这段代码的作用是检查输入的数据包目标地址类型,如果是本地、多播、广播目标则接受通过,如果不是则根据限制条件进行日志记录或丢弃。
- RETURN
RETURN
是一个iptables规则动作,表示数据包会立即返回到调用链的上一级。在这个特定的规则中,如果数据包的目标类型是MULTICAST(多播)地址,那么该规则会立即返回,不会继续往下执行链中的其他规则。这意味着数据包将被允许通过,不会被防火墙拦截或处理。