Ubuntu防火墙管理(五)——ufw源规则解读与修改

firewalld与nftables

/etc/firewalld/firewalld.conf 文件中,FirewallBackend 选项用于指定 Firewalld 使用的防火墙后端实现。具体来说:

  • nftables :这是当前的默认选项,表示 Firewalld 将使用 nftables 作为防火墙后端。nftables 是一个现代的防火墙框架,旨在替代旧的 iptables,提供更好的性能和更灵活的配置。

  • iptables :这是一个较旧的防火墙后端,支持 iptablesip6tablesebtablesipset。不过,正如注释中所提到的,iptables 后端已经被标记为过时(deprecated),并将在未来的版本中被移除。

因此,FirewallBackend=nftables 的意思是 Firewalld 将使用 nftables 作为其防火墙后端实现,这是推荐的选择,因为它是现代的、功能更强大的解决方案。如果你没有特别的需求,建议保持这个设置为默认值。

但由于暂时不想学习nftables语法,聚焦于iptables与ufw

iptables VS nftables

nftablesiptables 是 Linux 系统中用于管理网络流量和防火墙规则的两种工具。nftablesiptables 的替代品,旨在提供更现代和灵活的防火墙管理方式。以下是它们之间的一些优缺点比较:

优点

nftables 的优点
  1. 统一的框架

    • nftables 提供了一个统一的框架来处理 IPv4、IPv6、ARP 和其他协议,而 iptables 需要分别使用 iptablesip6tablesebtables 等工具。
  2. 更简洁的语法

    • nftables 的语法更简洁,规则的定义和管理更加直观,减少了复杂性。
  3. 更高的性能

    • nftables 在处理规则时使用了更高效的数据结构(如哈希表),在处理大量规则时性能更好。
  4. 更强大的功能

    • nftables 支持更复杂的匹配条件和操作,例如使用集合(sets)来管理多个地址或端口,支持更灵活的流量控制。
  5. 内置的状态跟踪

    • nftables 提供了更强大的连接跟踪功能,可以更方便地管理状态信息。
  6. 更好的日志记录

    • nftables 提供了更灵活的日志记录选项,可以更方便地记录和管理日志。
iptables 的优点
  1. 成熟和广泛使用

    • iptables 已经存在很长时间,广泛应用于各种 Linux 发行版,许多文档和教程可供参考。
  2. 兼容性

    • 许多现有的脚本和工具依赖于 iptables,在某些情况下,使用 iptables 可能更方便。

缺点

nftables 的缺点
  1. 学习曲线

    • 对于习惯于 iptables 的用户,nftables 可能需要一些时间来适应新的语法和概念。
  2. 支持和文档

    • 尽管 nftables 的文档在不断改进,但相较于 iptables,仍然可能存在一些不足。
iptables 的缺点
  1. 复杂性

    • iptables 的语法和规则管理相对复杂,尤其是在处理大量规则时,可能会变得难以管理。
  2. 性能问题

    • 在处理大量规则时,iptables 的性能可能不如 nftables,因为它使用的是线性链表结构。
  3. 分散的工具

    • iptables 需要分别使用 ip6tablesebtables 等工具来处理不同的协议,增加了管理的复杂性。

总结

  • 选择 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)流量。让我们逐行分析这些规则的含义:

规则解析

  1. 第一条规则:

    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-inputUFW 在处理输入流量之前使用的链。
    • -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 服务发现。

  2. 第二条规则:

    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防火墙在处理输入数据包时的行为。

  1. -A ufw-before-input -j ufw-not-local 这行代码表示将数据包传递到名为ufw-not-local的链。也就是说,所有传入数据包都将按照该链中的规则进行处理。

  2. -A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN 这行代码表示如果数据包的目标类型是LOCAL(本地)地址,则直接返回(允许通过)。这意味着本地目标的数据包将被接受并传递到本地。

  3. -A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN 这行代码表示如果数据包的目标类型是MULTICAST(多播)地址,则直接返回(允许通过)。这意味着多播目标的数据包将被接受并传递到相应的多播组。

  4. -A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN 这行代码表示如果数据包的目标类型是BROADCAST(广播)地址,则直接返回(允许通过)。这意味着广播目标的数据包将被接受并传递到所有主机。

  5. -A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny 这行代码表示如果数据包既不是本地、多播、广播目标,那么将启用日志记录,并限制每分钟只接受3个数据包,超过这个数量的数据包会被丢弃。同时将匹配的数据包传递到ufw-logging-deny链。该链的作用是将被丢弃的数据包进行日志记录。

  6. -A ufw-not-local -j DROP 这行代码表示如果数据包既不是本地、多播、广播目标,且已经超过了日志记录的限制数目,那么直接丢弃该数据包。

总之,这段代码的作用是检查输入的数据包目标地址类型,如果是本地、多播、广播目标则接受通过,如果不是则根据限制条件进行日志记录或丢弃。

  • RETURN
    RETURN是一个iptables规则动作,表示数据包会立即返回到调用链的上一级。在这个特定的规则中,如果数据包的目标类型是MULTICAST(多播)地址,那么该规则会立即返回,不会继续往下执行链中的其他规则。这意味着数据包将被允许通过,不会被防火墙拦截或处理。
相关推荐
liqingdi4371 小时前
WSL+Ubuntu+miniconda环境配置
linux·windows·ubuntu
极客先躯4 小时前
高级java每日一道面试题-2025年4月13日-微服务篇[Nacos篇]-Nacos如何处理网络分区情况下的服务可用性问题?
java·服务器·网络·微服务·nacos·高级面试
soulermax5 小时前
数字ic后端设计从入门到精通2(含fusion compiler, tcl教学)
java·linux·服务器
黑心老人5 小时前
Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿
linux·运维·服务器·macos
Thomas_YXQ5 小时前
Unity3D ILRuntime与Scripting Backend整合指南
服务器·开发语言·unity·unity3d
光算科技6 小时前
服务器在国外国内用户访问慢会影响谷歌排名吗?
运维·服务器·c++
口嗨农民工6 小时前
ubuntu18.04启动不了修复
linux·运维·ubuntu
GalaxyPokemon7 小时前
Muduo网络库实现 [十六] - HttpServer模块
linux·运维·服务器·网络
Huazie7 小时前
在WSL2 Ubuntu中部署FastDFS服务的完整指南
服务器·后端·ubuntu
夏天里的肥宅水8 小时前
解决方案:远程shell连不上Ubuntu服务器
linux·运维·服务器·ubuntu