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

Linux下工具tc详细讲解及限制IP和端口实例

首先纠正某一篇博客,TC并不是只管发包不管收包,之前我也很纳闷 知道最后看到了14年前一位大佬的帖子。是ingress!

 这里有个非常重要的点就是ingress,如果父类不是他的话是完不成限制源IP的,这个关键词表明你正在添加一个入口队列规则。与传统的egress(数据包离开网络接口时)规则不同,ingress规则是在数据包进入网络接口之前应用的。这意味着它可以过滤或修改入站流量,即便这些流量不是发送到本地主机的。这对于实现防火墙规则、流量监控或者服务质量(QoS)策略非常有用,尤其是在你希望在网络层对数据包进行操作时。但是,网上的教学很少有关于ingress的讲解以及使用,楼主当时也很疑惑为什么限制不住源IP而只能限制住目标IP。

TC (Traffic Control) 是Linux内核中提供的一个用于控制和管理网络流量的强大工具,它允许用户实现QoS(Quality of Service)策略,包括带宽限制、优先级控制、延迟保证等。TC基于内核的队列 discipline (qdisc) 和流量类别(class) 体系结构,允许对进入或离开网络接口的数据流进行复杂的整形和过滤。

输入格式和基本使用流程:

一般来说,TC命令的基本格式如下:

Bash

1tc [ OPTIONS ] OBJECT ACTION [ FILTER ]
  • OPTIONS: 可选参数,比如 -s 显示统计数据,-d 删除对象等。
  • OBJECT: 操作对象,可以是 qdisc(队列规则)、class(流量类别)或 filter(过滤器)。
  • ACTION: 针对对象的操作,如 add(添加)、change(更改)、replace(替换)、delete(删除)等。
  • FILTER: 对象的具体参数,如接口名称(dev eth0)、父级分类ID(parent ...)、qdisc类型(htbpfifo_fast等)、速率限制(rate ...)等。

限制 IP 示例:

1. 设置根qdisc (队列规则)

首先,我们需要在接口上设置一个队列规则作为流量控制的起点。假设我们要在ens192接口上使用HTB(Hierarchical Token Bucket)算法:

Bash

tc qdisc add dev ens192 root handle 1: htb default 20

这条命令将在ens192接口上添加一个根级别的HTB队列,分配给它的handle是1:,default 20意味着所有未经分类的流量将被送到handle为20的类,这里的default相当于switch里面的default,就是说网口默认收到的数据毁到handle为20的子类去处理,大家看到这可能会疑惑为什么会有默认,这是因为下方的过滤器,过滤器是为了更加细腻的去处理网口数据。

生活举例:

例如我现在收到了三颗糖,一个甜的,一个咸的,一个辣的,如果我下面没人要我默认都给了甲,但是如果下面设好了过滤器,也就是规则,比如说乙想要辣的,我就会把辣的给乙,不再给甲了。

2. 创建子类进行带宽限制

接下来,创建一个子类并分配一定速率的带宽:

Bash

tc class add dev ens192 parent 1:0 classid 1:20 htb rate 500kbps ceil 1mbps

这条命令创建了一个新的类,其父级是上面创建的根类(handle为1:),新类的handle为1:20,这里同时也对应了上方基类的default的20,使用HTB算法,基础速率(rate)为500kbps,最高上限(ceil)为1mbps。

3. 创建过滤器以识别特定流量

最后,创建一个过滤器,以便将特定流量路由到上面创建的带宽受限的子类:

Bash

tc qdisc add dev "$intf" handle ffff: ingresstc filter add dev "$intf" protocol ip parent 1:0 prio 0 u32 match ip dst 172.16.0.135 flowid 1:20# "$intf" 代表网口 类似于ens33这种

这条命令创建了一个IP协议的过滤器,将目标地址为ip子网的流量引导至类ID为1:20的流量类别,因此这些流量将受到500kbps的带宽限制。

限制 端口 示例:

​下面的两步操作都跟限制ip相同,主要是第三步过滤器的不同。

1. 设置根qdisc (队列规则)

首先,我们需要在接口上设置一个队列规则作为流量控制的起点。假设我们要在ens192接口上使用HTB(Hierarchical Token Bucket)算法:

Bash

tc qdisc add dev ens192 root handle 1: htb default 20

这条命令将在ens192接口上添加一个根级别的HTB队列,分配给它的handle是1:,default 20意味着所有未经分类的流量将被送到handle为20的类,这里的default相当于switch里面的default,就是说网口默认收到的数据毁到handle为20的子类去处理,大家看到这可能会疑惑为什么会有默认,这是因为下方的过滤器,过滤器是为了更加细腻的去处理网口数据。

2. 创建子类进行带宽限制

接下来,创建一个子类并分配一定速率的带宽:

Bash

tc class add dev ens192 parent 1:0 classid 1:20 htb rate 500kbps ceil 1mbps

这条命令创建了一个新的类,其父级是上面创建的根类(handle为1:),新类的handle为1:20,这里同时也对应了上方基类的default的20,使用HTB算法,基础速率(rate)为500kbps,最高上限(ceil)为1mbps。

​3. 创建端口过滤器

Bash

tc filter add dev ens192 parent 1:0 protocol ip handle 20 fw flowid 1:20
tc filter add dev ens192  parent 1:0 protocol ip u32 match ip sport 2049 0xffff flowid 1:20

这里第一步是将ipv4类型的接口都归于20的子类去处理,这一步也是为了添加容错,主要是第二步,u32是一种过滤器类型,但它提供了具体的匹配条件——match ip sport 2049 0xffff,这意味着只有源端口号(sport)等于2049的流量(这里范围是精确匹配,0xffff是因为u32匹配方式需要指定掩码长度)才会被这个过滤器捕获,并将其流量导向类ID为1:20的类去处理这个数据。

相关文章:

Linux下工具tc详细讲解及限制IP和端口实例

首先纠正某一篇博客,TC并不是只管发包不管收包,之前我也很纳闷 知道最后看到了14年前一位大佬的帖子。是ingress! 这里有个非常重要的点就是ingress,如果父类不是他的话是完不成限制源IP的,这个关键词表明你正在添加一个入口队列规…...

Java | Leetcode Java题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean flagCol0 false;for (int i 0; i < m; i) {if (matrix[i][0] 0) {flagCol0 true;}for (int j 1; j < n; j) {if (…...

MySQL#MySql表的操作

目录 一、创建表 二、查看表结构 三、修改表 1.修改表的名字 2.新增一个列 3.修改列 4.删除列 5.修改列的名称 四、删除表 一、创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校…...

git修改版本发布时间

一、场景 发现git版本发布时&#xff0c;服务器时间有误&#xff0c;需要修改。 二、解决 &#xff08;1&#xff09;准备 时间戳转换网址&#xff1a;http://shijianchuo.wiicha.com/ &#xff08;2&#xff09;SQLite 数据库 连接到安装git的服务器&#xff0c;修改版本表…...

【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计

前言 从今天开始&#xff0c;我们详解介绍制作实时天气时钟项目的方法步骤&#xff0c;主要分以下几个专题分别进行&#xff1a;&#xff08;1&#xff09;连接点亮SPI-TFT屏幕和UI布局设计&#xff1b;&#xff08;2&#xff09;NodeMCU的WIFI模式设置及连接&#xff1b;&…...

国内首发 | CSA大中华区启动《AI安全产业图谱(2024)》调研

在人工智能&#xff08;AI&#xff09;技术的快速发展浪潮中&#xff0c;AI安全已成为全球关注的焦点。为应对AI安全带来的挑战&#xff0c;确保AI技术的健康发展&#xff0c;全球范围内的研究机构、企业和技术社区都在积极探索解决方案。 在这一背景下&#xff0c;CSA大中华区…...

web页面与原生android通信,调用原生android方法

注册初始化方法JsBridge //JS注册事件监听 function connectWebViewJavascriptBridge(callback) {if (window.WebViewJavascriptBridge) {callback(WebViewJavascriptBridge)} else {document.addEventListener(WebViewJavascriptBridgeReady,function() {callback(WebViewJav…...

Linux的编译器

程序编译的过程 程序的编译过程是将源代码转换为可执行文件的一系列步骤。这个过程涉及多个阶段&#xff0c;主要包括预处理、编译、汇编和链接。下面详细介绍每个阶段&#xff1a; 1. 预处理&#xff08;Preprocessing&#xff09; 在实际编译之前&#xff0c;源代码文件首…...

redis--安装

简介 官网&#xff1a;RedisInsight - The Best Redis GUI 各个版本官网下载地址&#xff1a;http://download.redis.io/releases/ Redis和Memcached是非关系型数据库也称为NoSQL数据库&#xff0c;MySQL、Mariadb、SQL Server、PostgreSQL Oracle 数据库属于关系型数据 应用…...

魔法程序员的奥妙指南:Java基本语法

作为一名魔法程序员&#xff0c;精通Java语言是至关重要的。Java作为一种强大的编程语言&#xff0c;在编写优质代码和开发强大应用程序时发挥着重要作用。让我们深入探讨Java基本语法的关键要点&#xff0c;从注释到变量&#xff0c;无所不包&#xff01; Java基本语法的神秘魔…...

SpringMVC传递参数

1.RequestMapping RequestMapping本身可以处理&#xff0c;get或post,指定了get或post之后&#xff0c;就只能处理对应的请求。 RequestMapping(value{"haihiyo","goodMoring"},methodRequestMethod.POST)2.RestFul风格 RestFul是一种风格 比如:网站的访…...

【Scala---04】函数式编程 『 函数 vs 方法 | 函数至简原则 | 函数式编程』

文章目录 1. 函数 vs 方法1.1 方法(1) 定义方法(2) 运算符即方法 1.2 函数(1) 定义函数(2) 匿名函数 1.3 方法转为函数1.4 可变参数&默认参数 2. 函数至简原则3. 函数式编程3.1 函数式编程思想3.3 函数柯里化&闭包3.5 递归 & 尾递归 4. 补充4.1 访问元祖元素4.2 &g…...

[华为OD] B卷 树状结构查询 200

题目&#xff1a; 通常使用多行的节点、父节点表示一棵树&#xff0c;比如 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后&#xff0c;请打印出来树中他的所有下层节点 输入描述 第一行输入行数&#xff0c;下面是多行数据&#xff0c;每行以空…...

基于机器学习的学生学习行为自主评价设计与实现

管理员功能&#xff1a; a)学生学习数据管理&#xff1a;可查看学生学习的详情&#xff0c;编辑学生学习的内容&#xff0c;删除和添加学生学习&#xff0c;设置学生学习库存。 b)角色管理&#xff1a;增加删除学生用户&#xff0c;分配学生用户权限&#xff0c;查看学生用户…...

toml与json联系对比

前言 本文简单介绍toml&#xff1b;并且和json转化做对比&#xff0c;以及我对toml设计的理解。 参考&#xff1a; TOML: 简体中文 v1.0.0 json和toml转化工具 在线JSON转toml-toml转JSON - bejson在线工具 正文 数组 说白了&#xff0c;就是一个变量名&#xff0c;有多个…...

(已解决)org.springframework.amqp.rabbit.support.ListenerExecutionFailedException

报错截图 解决方案 1、登录rabbitMQ网址&#xff0c;删除所有队列 2、重启rabbitMQ 亲测有效&#xff01;&#xff01;&#xff01;亲测有效&#xff01;&#xff01;&#xff01;亲测有效&#xff01;&#xff01;&#xff01;...

基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)

1、前言 在逻辑设计中&#xff0c;为了保证运算结果的正确性&#xff0c;常常需要对结果的位宽进行扩展。比如2个3bits的无符号数相加&#xff0c;只有将结果设定为4bits&#xff0c;才能保证结果一定是正确的。不然&#xff0c;某些情况如77 14(1110)&#xff0c;如果结果只…...

基于STM32的宠物箱温度湿度监控系统毕业设计

基于STM32的宠物箱温度湿度监控系统毕业设计 一、项目背景与意义 随着人们生活水平的提高&#xff0c;养宠物已经成为一种流行趋势。然而&#xff0c;对于宠物的居住环境&#xff0c;尤其是温度与湿度的控制&#xff0c;是确保宠物健康的关键。本项目旨在设计一款基于STM32微…...

Linux sudo 指令

sudo命令 概念&#xff1a; sudo是linux下常用的允许普通用户使用超级用户权限的工具&#xff0c;允许系统管理员让普通用户执行一些或者全部的root命令&#xff0c;如halt&#xff0c;reboot&#xff0c;su等。这样不仅减少了root用户的登录和管理时间&#xff0c;同样也提高…...

【NumPy数组】:深入了解numpy.linspace()函数

一、numpy.linspace()函数的原理 numpy.linspace()函数的核心原理是在指定的起始值和终止值之间&#xff0c;按照给定的元素个数&#xff0c;生成等间隔的数值序列。与numpy.arange()函数不同&#xff0c;numpy.linspace()生成的是等间隔的数值&#xff0c;而不是等差的数值&a…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...