Linux下,用ufw实现端口关闭、流量控制(二)

news2025/2/25 6:36:59

本文是
网安小白的端口关闭实践
的续篇。

海量报文,一手掌握,你值得拥有,让我们开始吧~

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/目录下的不同文件有以下含义:

  1. before.rules:这是ufw防火墙服务在加载之前将要应用的规则文件。它包含了一些系统预定义的规则,可以在这里添加自定义的iptables规则,这些规则将在ufw规则之前被应用。

  2. after.rules:这是ufw防火墙服务在加载之后将要应用的规则文件。它也包含了一些系统预定义的规则,可以在这里添加自定义的iptables规则,这些规则将在ufw规则之后被应用。

  3. user.rules:这是ufw命令行工具自动生成的规则文件。当你使用ufw命令添加或修改防火墙规则时,这些规则会被写入到/etc/ufw/user.rules文件中。这个文件包含了用户自定义的ufw规则,它会在ufw防火墙启动时被读取和加载到iptables规则链中。

需要注意的是,当你使用ufw命令修改防火墙规则时,实际上是修改了/etc/ufw/user.rules文件,然后使用sudo ufw reload命令来重新加载规则,使其生效。而before.rulesafter.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查询的加密传输,以增强隐私和安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 每日一题 290.单词规律

目录 一、问题分析 二、解题思路 三、代码实现 四、复杂度分析 五、总结 在编程的世界里,我们常常会遇到各种有趣的字符串匹配问题。今天要探讨的就是这样一个问题:给定一种规律 pattern 和一个字符串 s,判断 s 是否遵循与 pattern 相同…

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展,旅游已经成为人…

Mybatis-Plus的主要API

一、实体类操作相关API BaseMapper<T>接口 功能&#xff1a;这是 MyBatis - Plus 为每个实体类对应的 Mapper 接口提供的基础接口。它提供了一系列基本的 CRUD&#xff08;增删改查&#xff09;操作方法。例如insert(T entity)方法用于插入一条记录&#xff0c;d…

第一个 JSP 程序

一个简单的 JSP 程序&#xff1a; 使用 IDEA 开发工具新建一个 maven 项目&#xff0c;具体操作如图所示&#xff1a; 配置 Tomcat 服务器 项目结构如下图所示&#xff1a; 3. 修改 index.jsp 页面的代码&#xff1a; <% page language"java" contentType&q…

使用android studio写一个Android的远程通信软件(APP),有通讯的发送和接收消息界面

以下是使用 Android Studio 基于 Java 语言编写一个简单的 Android APP 实现远程通信&#xff08;这里以 TCP 通信为例&#xff09;的代码示例&#xff0c;包含基本的通信界面以及发送和接收消息功能。 1. 创建项目 打开 Android Studio&#xff0c;新建一个 Empty Activity …

记录下nginx接口代理配置问题

其中api和api1是前面定义的upstream&#xff0c;ip相同只是端口不同。 一开始/api1/直接 像api一样 proxy_pass http://api1这样是不行的&#xff0c;因为会代理到 后端的 /api1/...接口&#xff0c;而后端实际接口地址是 /api/..... 所以必须像上面写法才能将外网的 /api…

【项目】基于PaddleOCR的文字检测识别项目

【项目】基于PaddleOCR的文字检测识别项目 简介安装与使用&#xff08;1&#xff09;Paddle环境安装&#xff08;2&#xff09;模型预测&#xff08;文本检测文本识别&#xff09;&#xff08;3&#xff09;文本检测识别模型训练&#xff08;4&#xff09;本地模型训练与预测&a…

mock.js介绍

mock.js http://mockjs.com/ 1、mock的介绍 *** 生成随机数据&#xff0c;拦截 Ajax 请求。** 通过随机数据&#xff0c;模拟各种场景&#xff1b;不需要修改既有代码&#xff0c;就可以拦截 Ajax 请求&#xff0c;返回模拟的响应数据&#xff1b;支持生成随机的文本、数字…

重磅升级:OpenAI o1模型上手实测,从芯片架构分析到象棋残局判断的全能表现

引言 昨日&#xff0c;在圣诞节系列发布会的第一天&#xff0c;OpenAI终于给我们带来了令人振奋的更新&#xff0c;这些更新有望塑造AI互动的未来。备受期待的OpenAI o1正式版的推出&#xff0c;标志着ChatGPT体验的重大进化&#xff0c;宣告了AI驱动应用新时代的开始。o1现已可…

DataSophon集成CMAK KafkaManager

本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件&#xff1a;DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…

【vivado】时序报告--best时序和worst时序

利用vivado进行开发时&#xff0c;生成best时序报告和worst时序报告。 best时序报告 slow选择min_max&#xff0c;fast选择none。 worst时序报告 fast选择min_max&#xff0c;slow选择none。

EasyMedia播放rtsprtmp视频流(flvhls)

学习链接 MisterZhang/EasyMedia - gitee地址 EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式&#xff0c;H5页面播放flv流视频 EasyMedia播放rtsp视频流&#xff08;vue2、vue3皆可用&#xff09; EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式&#xff0c;H5页…

Linux C/C++编程中的多线程编程基本概念

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com…

FPGA工作原理、架构及底层资源

FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称&#xff08;IOB&#xff09;2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …

C语言程序设计P5-3【应用函数进行程序设计 | 第三节】——知识要点:函数的嵌套调用和递归调用

知识要点&#xff1a;函数的嵌套调用和递归调用 视频 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 本任务要求用递归法求 n!。 我们知道n!n(n-1)(n-2)……1n(n-1)!递归公式为&#xff1a; 1.上面公式分解为n!n(n-1)!&#xff0c;即将求n!的问题变为…

word实践:正文/标题/表图等的共用模板样式设置

说在前面 最近使用word新建文件很多&#xff0c;发现要给大毛病&#xff0c;每次新建一个word文件&#xff0c;标题/正文的字体、大小和间距都要重新设置一遍&#xff0c;而且每次设置这些样式都忘记了参数&#xff0c;今天记录一下&#xff0c;以便后续方便查看使用。现在就以…

【工具变量】上市公司企业劳动密集度数据(2008-2023年)

一、测算方式&#xff1a; 参考《数量经济技术经济研究》陈勇兵&#xff08;2023&#xff09;老师的做法&#xff0c;使用员工数量与销售收入的比值作为劳动密集度的度量标准* o/ b% C( e* U我们做的比他完善&#xff0c;分为四类大家可以做核心变量或者稳健性检验Labor1&…

YOLOv11修改推理图片的标签字体大小

先打开ultralytics/utils/plotting.py&#xff0c;并搜索font scale(vscode快捷键ctrlF): 在这行代码动手脚&#xff0c;例如调小分母就是把字改大&#xff1a; self.sf self.lw 完成&#xff0c;可以正常运行&#xff1a;

TCP Analysis Flags 之 TCP Spurious Retransmission

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

在paddle中安装python-bidi出错

翻看网上解决方式&#xff0c;是由于系统中缺少 Rust 及其包管理器 Cargo。python-bidi 依赖 Rust 来编译其扩展&#xff0c;如果没有安装 Rust 和 Cargo&#xff0c;安装过程将无法继续。 解决方式 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh但是我的终端…