当前位置: 首页 > news >正文

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监听

-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. 第一条规则:

    -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. 第二条规则:

    -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 报文的处理

# 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(多播)地址,那么该规则会立即返回,不会继续往下执行链中的其他规则。这意味着数据包将被允许通过,不会被防火墙拦截或处理。

相关文章:

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

firewalld与nftables 在 /etc/firewalld/firewalld.conf 文件中,FirewallBackend 选项用于指定 Firewalld 使用的防火墙后端实现。具体来说: nftables:这是当前的默认选项,表示 Firewalld 将使用 nftables 作为防火墙后端。nftab…...

Docker如何运行一个python脚本Hello World

Docker如何运行一个python脚本Hello World 1、编写Python的Hello World:script.py #!/usr/bin/python #_*_coding:utf-8_*_ print("Hello World") 2、Dockerfile文件 #拉取Docker环境 FROM python #设置工作目录 WORKDIR /app #将dockerfile同级文件copy到…...

人工智能-自动驾驶领域

目录 引言自动驾驶与人工智能的结合为什么自动驾驶领域适合发表文章博雅智信的自动驾驶辅导服务结语 引言 自动驾驶技术的崛起是当代交通行业的一场革命。通过结合先进的人工智能算法、传感器技术与计算机视觉,自动驾驶不仅推动了技术的进步,也使得未来…...

[ubuntu18.04]ubuntu18.04安装json-c操作说明

ubuntu18.04安装json-c 代码下载 rootw1804-virtual-machine:/home/w1804/tr069# git clone https://github.com/json-c/json-c.git Cloning into /opt/git/json-c... remote: Enumerating objects: 6398, done. remote: Counting objects: 100% (1067/1067), done. remote:…...

华为eNSP:VRRP

一、VRRP背景概述 在现代网络环境中,主机通常通过默认网关进行网络通信。当默认网关出现故障时,网络通信会中断,影响业务连续性和稳定性。为了提高网络的可靠性和冗余性,采用虚拟路由冗余协议(VRRP)是一种…...

Linux--top系统资源命令查看--详解

top命令用法 图: top命令用法: top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。 top的使用方式: top [-d number] | top [-bnp] top参数解释: -…...

es的join是什么数据类型

在 Elasticsearch 中,parent 并不是一个独立的数据类型,而是与 join 数据类型一起使用的一个概念。join 数据类型用于在同一个索引中建立父子文档之间的关系,允许你在一个索引内表示层级结构或关联关系。通过 join 字段,你可以定义不同类型的文档(如父文档和子文档),并指…...

KV Shifting Attention Enhances Language Modeling

基本信息 📝 原文链接: https://arxiv.org/abs/2411.19574👥 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen🏷️ 关键词: KV shifting attention, induction heads, language modeling📚 分类: 机器学习, 自然语言处…...

软错误防护技术在车规MCU中应用

在大气层内,宇宙射线粒子与大气分子发生核反应生成大气中子。大气中子入射微电子器件或电路将会诱发单粒子效应(SEE),效应类型主要有单粒子翻转(SEU)、单粒子瞬态(SET)、单粒子锁定&…...

遥感图像处理二(ENVI5.6 Classic)

1 实验目的和内容 1.1 实验目的 本次上机旨在继续深入了解ENVI软件的基本使用,并对提供的实验数据进行基本的图像分割和地物分类等操作并分析结果。 1.2 实验内容 1.2.1 图像分割 对教材示例数据“C7图像分割”中的风景图、兰花图和娃娃图分别进行图像分割操作…...

经典文献阅读之--A Fast Dynamic Point Detection...(用于驾驶场景中的动态点云剔除方法)

0. 简介 现有的基于3D点的动态点检测和移除方法存在显著的时间开销,使其难以适应激光雷达-惯性测程系统。《A Fast Dynamic Point Detection Method for LiDAR-Inertial Odometry in Driving Scenarios》提出了一种基于标签一致性的动态点检测和移除方法&#xff0…...

百度搜索应适用中文域名国家标准,修复中文网址展示BUG

12月1日中文域名国家标准正式实施。该标准“明确了中文域名在编码、解析、注册、字表等方面的技术要求,适用于中文域名注册管理机构、注册服务机构、网络软硬件服务商及终端用户”。 00:23 显然,百度作为网络软硬件服务商,是包括在国家标准的…...

设计模式学习之——适配器模式

适配器模式(Adapter Pattern),又称作变压器模式(因为这两者都体现了“转换”或“适配”的核心概念),是一种结构型设计模式。它将一个类的接口转换成客户端所期望的另一种接口,从而使得原本因接口…...

服务器数据恢复—热备盘上线过程中硬盘离线导致raid5阵列崩溃的数据恢复案例

服务器数据恢复环境: 两组分别由4块SAS接口硬盘组建的raid5阵列,两组raid5阵列划分LUN并由LVM管理,格式化为EXT3文件系统。 服务器故障: RAID5阵列中一块硬盘未知原因离线,热备盘自动激活上线替换离线硬盘。在热备盘上…...

MetaGPT源码 (Memory 类)

目录 MetaGPT源码:Memory 类例子 MetaGPT源码:Memory 类 这段代码定义了一个名为 Memory 的类,用于存储和管理消息(Message)对象。Memory 提供了多种操作消息的功能,包括添加单条或批量消息、按角色或内容筛选消息、删除最新消息…...

数据结构与算法复习AVL树插入过程

环境 $ cat /proc/version Linux version 6.8.0-45-generic (builddlcy02-amd64-115) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 #include <std…...

小迪笔记第 五十天 文件包含漏洞 远程包含 本地包含 ctf练习题实战

前言 文件包含漏洞 原理就是包含的文件如果可控就会造成这个漏洞 php文件包含的特征 &#xff1a; PHP&#xff1a;include、require、include_once、require_once等 一共是分为了2 种 一个就是 远程文件包含 这个的前提是php开启了 远程文件上传这个选项 原理应用就是…...

单片机:实现点阵汉字平滑滚动显示(附带源码)

单片机实现点阵汉字平滑滚动显示 点阵显示技术是嵌入式系统中的常见显示技术之一&#xff0c;广泛应用于LED矩阵显示屏、广告牌、电子时钟等设备。在本项目中&#xff0c;我们将实现一个基于单片机的点阵汉字平滑滚动显示系统&#xff0c;使用LED点阵显示屏来实现动态滚动的汉…...

C# 实现 10 位纯数字随机数

本文将介绍如何用 C# 实现一个生成 10 位纯数字随机数的功能。以下是完整的代码示例&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace RandomTset {class Program{// 使用GUID作为种子来创建随机数生成器static…...

分布式全文检索引擎ElasticSearch-基本概念介绍

一、索引类型 索引&#xff0c;可以理解是我们的目录&#xff0c;看一本书的时候&#xff0c;可以根据目录准确快速定位到某一页&#xff0c;那么索引就可以帮我们快速定位到某条数据在庞大的数据表的哪一个位置。 我们常见的索引包括正排索引和倒排索引 1、正排索引 正排索…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

CTF show 数学不及格

拿到题目先查一下壳&#xff0c;看一下信息 发现是一个ELF文件&#xff0c;64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断&#xff0c;第一个argc ! 5这个判断并没有起太大作用&#xff0c;主要是下面四个if判断 ​ 根据题目…...

GitHub 常见高频问题与解决方案(实用手册)

1.Push 提示权限错误&#xff08;Permission denied&#xff09; 问题&#xff1a; Bash Permission denied (publickey) fatal: Could not read from remote repository. 原因&#xff1a; 没有配置 SSH key 或使用了 HTTPS 而没有权限…...

js 比较两个对象的值,不相等就push对象的key

在JavaScript中&#xff0c;比较两个对象&#xff08;object&#xff09;的值并找出不相等的key&#xff0c;可以通过多种方法实现。下面是一些常用的方法&#xff1a; 方法1&#xff1a;使用JSON.stringify 这种方法适用于简单的对象&#xff0c;其中对象的值是基本类型或可…...