Linux下,用ufw实现端口关闭、流量控制(二)
本文是
网安小白的端口关闭实践
的续篇。
海量报文,一手掌握,你值得拥有,让我们开始吧~
ufw 与 iptables的关系
理论介绍:
ufw(Uncomplicated Firewall)是一个基于iptables的前端工具,用于简化iptables的配置和管理。它提供了一组简单的命令和规则集,使用户能够更容易地配置和管理防火墙。
iptables是一个内核层的防火墙工具,用于过滤、重定向和修改网络数据包。它提供了非常强大的功能和灵活性,但其命令语法和配置较为复杂。
ufw实质上是对iptables进行了封装,提供了更简单易用的命令和配置接口。用户使用ufw命令时,ufw会自动转化为对iptables的操作命令,并在后台进行配置。因此,ufw在底层还是依赖iptables来实现防火墙规则的生效。
总而言之,ufw是一个基于iptables的简化工具,使用户更方便地配置和管理防火墙。
实践
- 查看ufw的配置文件
cat /etc/ufw/before.rules
cat /etc/ufw/user.rules
可看到如下文件:
river@star:/etc/ufw$ ls
after6.rules before6.rules ufw.conf
after6.rules.20241202_150252 before6.rules.20241202_150252 user6.rules
after.init before.init user6.rules.20241202_150252
after.rules before.rules user.rules
after.rules.20241202_150252 before.rules.20241202_150252 user.rules.20241202_150252
applications.d sysctl.conf
before.rules VS after.rules VS ufw.rules
在Ubuntu系统中,/etc/ufw/
目录下的不同文件有以下含义:
-
before.rules
:这是ufw防火墙服务在加载之前将要应用的规则文件。它包含了一些系统预定义的规则,可以在这里添加自定义的iptables规则,这些规则将在ufw规则之前被应用。 -
after.rules
:这是ufw防火墙服务在加载之后将要应用的规则文件。它也包含了一些系统预定义的规则,可以在这里添加自定义的iptables规则,这些规则将在ufw规则之后被应用。 -
user.rules
:这是ufw命令行工具自动生成的规则文件。当你使用ufw命令添加或修改防火墙规则时,这些规则会被写入到/etc/ufw/user.rules
文件中。这个文件包含了用户自定义的ufw规则,它会在ufw防火墙启动时被读取和加载到iptables规则链中。
需要注意的是,当你使用ufw命令修改防火墙规则时,实际上是修改了/etc/ufw/user.rules
文件,然后使用sudo ufw reload
命令来重新加载规则,使其生效。而before.rules
和after.rules
文件则通常用于添加更底层的iptables规则,以满足特定的需求或配置。
- 执行
sudo ufw deny from any to 127.0.0.1
后,/etc/ufw/user.rules
出现下述规则
### tuple ### deny any any 127.0.0.1 any 0.0.0.0/0 in
-A ufw-user-input -d 127.0.0.1 -j DROP
暂未找到下述规则的对应行:
sudo ufw default deny imcoming
规则制定范例
- /etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
## Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT# quickly process packets for which we already have a connection
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT# drop INVALID packets (logs these in loglevel medium and higher)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT# allow dhcp client to work
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT#
# 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 RETURN# 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# allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
端口关闭实践
规则说明
- 启用ufw后,修改/etc/iptales/rulesv4无效,执行iptables的命令也无效, 比如下面这个
sudo iptables -A OUTPUT -p tcp --dport 5556 -j DROP
- 要想执行iptables,必须关闭ufw
- 但理论上讲,所有iptables能执行的ufw也能执行
方法1:用ufw关闭,不用自己定义基础规则
上面的命令对应的ufw命令如下:
sudo ufw deny from 127.0.0.1 to any port 5556
- 注意,这代表,阻止从本机到任何机器的5556端口
以下才是阻止本机的5556到任何机器的报文
sudo ufw deny from 127.0.0.1 port 5556 to any
方法2:用iptables关闭
- 修改/etc/iptables/rules.v4如下
# Generated by iptables-save v1.8.10 (nf_tables) on Mon Dec 2 23:18:41 2024
*filter
:INPUT ACCEPT [67:23836]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [66:29316]
-A INPUT -p tcp -m tcp --dport 5556 -j DROP
-A OUTPUT -p tcp -m tcp --dport 5556 -j DROP
COMMIT
# Completed on Mon Dec 2 23:18:41 2024
仅允许特定端口流出实践
- 问题:ufw 如何禁止本机从80,443以外的端口 流出的流量?
sudo ufw default deny outgoing
sudo ufw allow out 80/tcp
sudo ufw allow out 443/tcp
sudo ufw allow out 443/udp
sudo ufw allow out 546/udp
sudo ufw allow out 995/tcp
sudo ufw allow out 853/tcp #dns over tls
sudo ufw allow out 853/udp #dns over quic
sudo ufw default deny incoming # 顺便阻止传入,因为本机不是服务器
sudo ufw default deny forward # 顺便阻止转发
真实有效,原来ufw也能让浏览器不能接受报文!!
- 关闭时的防火墙状态;
- 作用效果:
警告
sudo ufw default deny outgoing
可能会导致部分软件无法工作,当然如果不使用某些奇奇怪怪的软件,以上配置大概是足够纯净和安全的!
安全解决方案II
- 当确保所有软件都是安全时,仅仅这样也是足够的
sudo ufw default deny incoming # 顺便阻止传入,因为本机不是服务器
sudo ufw default deny forward # 顺便阻止转发
sudo apt install firewall-config
# 接着在firewall中允许仅仅若干服务
Last Extension: DoH VS DoT
DOH(DNS over HTTPS)和DOT(DNS over TLS)是两种将DNS查询加密的传输协议。
DOH使用HTTPS将DNS查询和响应封装在HTTP请求和响应中,通过常用的端口443进行传输。这意味着DNS查询被加密在TLS隧道中,并且可以与现有的HTTPS流量混合在一起,难以被网络监控或阻止。DOH可以通过使用基于浏览器的解析器或专用的DOH代理来实现。
DOT直接将DNS查询和响应封装在TLS流中,通过指定的端口(默认为853)进行传输。与DOH不同,DOT在应用层提供密钥交换和加密,而不是在HTTP层。它需要专用的DOT代理来将DNS请求发送到加密的DNS服务器进行解析。
总的来说,DOH将DNS查询封装在HTTPS中,可以通过通用的HTTPS端口传输,并且易于与现有的HTTPS流量混合。而DOT直接在TLS流中进行加密,需要专用的DOT代理来处理DNS查询和响应。两者都提供了DNS查询的加密传输,以增强隐私和安全性。
相关文章:

Linux下,用ufw实现端口关闭、流量控制(二)
本文是 网安小白的端口关闭实践 的续篇。 海量报文,一手掌握,你值得拥有,让我们开始吧~ ufw 与 iptables的关系 理论介绍: ufw(Uncomplicated Firewall)是一个基于iptables的前端工具…...

C#开发-集合使用和技巧(九)Join的用法
在C#中,IEnumerable 的 Join 方法用于根据键将两个序列中的元素进行关联。Join 方法通常用于执行类似于 SQL 中的内连接操作。以下是 Join 方法的基本用法: 基本语法 public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult…...

Dockerfile容器镜像构建技术
文章目录 1、容器回顾1_容器与容器镜像之间的关系2_容器镜像分类3_容器镜像获取的方法 2、其他容器镜像获取方法演示1_在DockerHub直接下载2_把操作系统的文件系统打包为容器镜像3_把正在运行的容器打包为容器镜像 3、Dockerfile介绍4、Dockerfile指令1_FROM2_RUN3_CMD4_EXPOSE…...

Github 2024-12-01 开源项目月报 Top20
根据Github Trendings的统计,本月(2024-12-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目9Go项目2HTML项目1Shell项目1Jupyter Notebook项目1屏幕截图转代码应用 创建周期:114 天开发语言:TypeScript, Py…...
Spring Boot 3项目集成Swagger3教程
Spring Boot 3项目集成Swagger3教程 ?? 前言 欢迎来到我的小天地,这里是我记录技术点滴、分享学习心得的地方。?? ?? 技能清单 编程语言:Java、C、C、Python、Go、前端技术:Jquery、Vue.js、React、uni-app、EchartsUI设计: Element-u…...

NISP信息安全一级考试200道;免费题库;大风车题库
下载链接:大风车题库-文件 大风车题库网站:大风车题库 大风车excel(试题转excel):大风车excel...

Android ConstraintLayout 约束布局的使用手册
目录 前言 一、ConstraintLayout基本介绍 二、ConstraintLayout使用步骤 1、引入库 2、基本使用,实现按钮居中。相对于父布局的约束。 3、A Button 居中展示,B Button展示在A Button正下方(距离A 46dp)。相对于兄弟控件的约束…...
在网安中什么是白帽子
在网络安全领域,白帽子是指那些专门从事网络安全研究,帮助企业或个人发现并修复安全漏洞的专家。以下是对白帽子的详细解释: 一、定义与角色 白帽子是网络安全领域的术语,通常指那些具备专业技能和知识的网络安全专家。他们的工作…...
软件专业科目难度分级 你输在了哪里?
感想: 我把我们现在软件专业学的东西分了个难度级别 级别描述视角服务对象例子0 基本软件的使用用户-Photoshop wps ssms等1 软件的原理开发者用户各种编程语言2软件的原理的原理开发者开发者各种函数的深层定义,数据结构等 0级就是咱们平时用的那些软…...

微信小程序实现图片拖拽调换位置效果 -- 开箱即用
在编写类似发布朋友圈功能的功能时,需要实现图片的拖拽排序,删除图片等功能。 博主的小程序首页也采用了该示例代码,可以在威信中搜索: 我的百宝工具箱 或者复制后面的🔗在手机打开: #小程序://百宝工具箱/…...
关于“浔川AI翻译”使用情况的调研报告
关于“浔川 AI 翻译”使用情况的调研报告 随着全球化进程加速及外语学习需求攀升,AI 翻译工具愈发普及。“浔川 AI 翻译”作为行业产品之一,为了解其市场表现与用户反馈,特开展本次问卷调查,现将关键结果汇报如下。 一、样本概…...
《芯片:科技之核,未来之路》
《芯片:科技之核,未来之路》 一、芯片的定义与重要性二、芯片的应用领域(一)新能源领域(二)信息通讯设备领域(三)4C 产业(四)智能电网领域(五&…...

️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南20241206
🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南 📝 引言 随着大语言模型(LLM)和人工智能的飞速发展,越来越多的开发者尝试在本地环境中部署大模型进行实验。然而,由于资源需求高、网络限制多…...

使用Tomcat搭建简易文件服务器
创建服务器 1. 复制一个tomcat服务器,并命名为file-service(好区分即可) 2.在webapp里面新建一个文件夹 uploadfiles ,用于存储上传的文件 3. 修改conf/service.xml,配置文件服务器的端口与上传文件夹的访问 在Host标签之间加入一个Context标签 docBase"uploa…...
《C++赋能:构建智能工业控制系统优化算法新引擎》
在工业 4.0 的浪潮汹涌澎湃之际,传统工业控制系统正面临着前所未有的挑战与机遇。如何借助人工智能的强大力量,实现工业控制系统的深度优化,已成为工业领域乃至整个科技界关注的焦点。而 C语言,以其卓越的性能、高效的执行效率和对…...

node.js中跨域请求有几种实现方法
默认情况下,出于安全考虑,浏览器会实施同源策略,阻止网页向不同源的服务器发送请求或接收来自不同源的响应。 同源策略:协议、域名、端口三者必须保持一致 <!DOCTYPE html> <html lang"en"> <head>&l…...

Node.js新作《循序渐进Node.js企业级开发实践》简介
《循序渐进Node.js企业级开发实践》由清华大学出版社出版,已于近期上市。该书基于Node.js 22.3.0编写,提供26个实战案例43个上机练习,可谓是目前市面上最新的Node.js力作。 本文对《循序渐进Node.js企业级开发实践》一书做个大致的介绍。 封…...
常见排序算法总结 (四) - 快速排序与随机选择
快速排序 算法思想 每一轮在数组相应的范围上随机找一个元素进行划分,将不大于它的所有元素都放到左边,将大于它的元素都放到右边。在左右两个子数组上不断地递归,直到整个数组上有序。 注意:实现时选择的时参考荷兰国旗问题优化…...

Doris的基础架构
Doris的基础架构 Frontend(FE):主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。Backend(BE):主要负责数据存储、查询计划的执行。 我的Github地址,欢迎大家加入我的开…...
python录制鼠标键盘操作循环播放
依赖 pip install pynput 程序: from pynput import mouse, keyboard import time import threading# 用于存储录制的鼠标和键盘事件 mouse_events [] keyboard_events []# 定义事件处理函数# 处理鼠标事件 def on_move(x, y):mouse_events.append((move, x, y))def on_cl…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...