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(多播)地址,那么该规则会立即返回,不会继续往下执行链中的其他规则。这意味着数据包将被允许通过,不会被防火墙拦截或处理。
相关推荐
2301_8010670929 分钟前
如何通过修改hosts文件、启动Apache服务器、修改httpd.conf文件、配置虚拟主机、创建站点目录和文件等步骤来配置虚拟主机并发布PHP站点
服务器·php·apache
阿湯哥1 小时前
ES的预置分词器
linux·服务器·elasticsearch
开开心心就好1 小时前
能一站式搞定远程操作需求的实用工具
java·服务器·python·spring·pdf·电脑·软件
wanhengidc1 小时前
物理服务器的作用都有哪些?
运维·服务器
張萠飛1 小时前
Apache Doris中都用了哪些开发语言,编译过程中用到了哪些编译器,以及用到了哪些成熟的技术框架
开发语言·apache
功德+n1 小时前
Apache POI详解
java·开发语言·maven·apache
waicsdn_haha3 小时前
Kubeflow 2025 全栈式机器学习平台部署指南(云原生+量子混合计算)
python·神经网络·云原生·开放原子·apache·量子计算·kubeflow
独行soc4 小时前
2025年渗透测试面试题总结-字某跳动-安全研究实习生(三面)(题目+回答)
linux·服务器·安全·web安全·面试·职场和发展
爱吃烤鸡翅的酸菜鱼5 小时前
Java【网络原理】(3)网络编程续
java·运维·服务器·网络
daizikui5 小时前
LVS+Nginx接入层架构图
服务器·nginx·lvs