iptables和nftables的使用
文章目录
- 前言
- iptable简介
- iptable命令使用
- iptables的四表五链
- nftables简介
- nftables命令的时候
- nftables与iptables的区别
- iptables-legacy和iptables-nft
- 实例
- 将指定`protocol:ip:port`的流量转发到本地指定端口
前言
本文展示了,iptables和nftable命令的使用。
# 实验环境
5.15.0-58-generic #64~20.04.1-Ubuntu x86_64 GNU/Linux
iptable简介
iptable命令使用
参考:iptables 命令,Linux iptables 命令详解:Linux上常用的防火墙软件 - Linux 命令搜索引擎、IptablesHowTo - Community Help Wiki
详细见上方连接,命令结构如下:
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
下方是一个简单的demo,阻断指定(域名)地址的访问。
# 列出filter表中(不同链的)已经设置的规则
## -t参数不指定,默认是filter表
## sudo iptables-legacy -L
sudo iptables-legacy -t filter -nvL# 禁止访问百度
sudo iptables-legacy -t filter -A OUTPUT -d www.baidu.com -j REJECT# 删除添加的规则
## 查看规则的序号
sudo iptables-legacy -t filter -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination Chain FORWARD (policy ACCEPT)
num target prot opt source destination Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere 180.101.50.188 reject-with icmp-port-unreachable
2 REJECT all -- anywhere 180.101.50.242 reject-with icmp-port-unreachable## 删除规则
sudo iptables-legacy -t filter -D OUTPUT 1
sudo iptables-legacy -t filter -D OUTPUT 1# 清空整个fitter表所有链的规则
sudo iptables-legacy -t filter -F
iptables的四表五链
参考:来,今天飞哥带你理解 Iptables 原理!-51CTO.COM
上面命令的使用过程,可以让我们对iptables这个命令,混个脸熟。
但是想要使用好iptbles规则,我们必须知道:1)明白规则,链,表之间的关系;2)数据的流向(即,经过哪些点,哪些规则会起作用)
总的来说,逻辑理解上应该是这样:
-
协议栈上存在钩子函数,数据在流经协议栈的过程中,执行相应的钩子函数。而这些钩子函数,即是规则,通过用户层执行iptables命令的方式放入。当条件匹配的时候,执行相应的动作。
-
这些规则,根据目的/功能的不同,在不同的表中。表分为四种,raw,mangle,nat,filter。nat和filter比较常用,分别是地址转换和包过滤。
-
流量流经不同的位置,存在不同的链。一个链,可以将不同表中不同的规则串联起来。钩子函数顺着该链,执行规则。
下面这两张图来自上面连接,我复制过来。

上图:数据接收过程走的是 1 和 2,发送过程走的是 4 、5,转发过程是 1、3、5。有了这张图,我们能更清楚地理解 iptables 和内核的关系。
下图:在每一个链上都可能是由许多个规则组成的。在 NF_HOOK 执行到这个链的时候,就会把规则按照优先级挨个过一遍。如果有符合条件的规则,则执行规则对应的动作。而这些规则根据用途的不同,又可以raw、mangle、nat 和 filter。从整体上看,四链五表的关系如下图。

nftables简介
nftables命令的时候
ubuntu20默认没有安装nftables,需要我们手动安装下。参考:nftables - Debian Wiki
sudo apt install nftables
# sudo systemctl enable nftables.service
关于命令的使用,可以参考:Nftables HOWTO in Chinese、nftables 配置与使用记录 - StarryVoid - Blog、nftables - ArchWiki、8.3.4. 使用 nft 命令管理表、链和规则 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
# 目标:和上一节一样,禁止访问百度(ipv4)# 创建表
## 列出所有存在的表
sudo nft list tables
## 添加一个inet类型(family)的表,表名为filter
sudo nft add table inet filter# 创建链
## 从zsh切换到bash,否则语句中的shell执行会报语法错误
bash
## 在inet类型的filter表中,添加一个名为OUTOUT的基础链
## 这个基础链是filter类型,挂在在output钩子上,优先级是filter类型(0),默认的策略是放行
sudo nft add chain inet filter OUTPUT { type filter hook output priority filter\; policy accept \; }## 列出指定表中的链
sudo nft list table inet filter
table inet filter {chain input {type filter hook input priority filter; policy accept;}chain forward {type filter hook forward priority filter; policy accept;}chain output {type filter hook output priority filter; policy accept;}chain OUTPUT {type filter hook output priority filter; policy accept;}
}# 添加规则
## 禁止访问百度(ip)
# sudo nft add rule inet filter OUTPUT ip daddr {180.101.50.242, 180.101.50.242} drop
sudo nft add rule inet filter OUTPUT ip daddr 180.101.50.188 drop
sudo nft add rule inet filter OUTPUT ip daddr 180.101.50.242 drop
## 查看表中的规则
sudo nft -a list chain inet filter OUTPUTtable inet filter {chain OUTPUT { # handle 4type filter hook output priority filter; policy accept;ip daddr 180.101.50.188 drop # handle 5ip daddr 180.101.50.242 drop # handle 6}
}## 删除规则
sudo nft delete rule inet filter OUTPUT handle 5
## 清空链
sudo nft flush chain inet filter OUTPUT
## 删除链
sudo nft delete chain inet filter OUTPUT
## 清空表
sudo nft flush table inet filter
## 删除表
sudo nft delete table inet filter
nftables与iptables的区别
关于两者在使用上的区别,
-
nftables 使用教程(如果打不开这篇连接,可以参考CentOS 8 都发布了,你还不会用 nftables? - 掘金,内容是一样的。)
-
继iptables之后的新一代包过滤框架是nftables_dog250的博客-CSDN博客
总的来说,nftables写起来,更加灵活。(至于内核中的区别,母鸡)
iptables-legacy和iptables-nft
可以看到,我上面并没有使用iptables和iptables-nft命令。
那么iptables、iptables-legacy、nft、iptables-nft,这之间有什么区别?
可以阅读:iptables - Debian Wiki、iptables: The two variants and their relationship with nftables | Red Hat Developer、Using iptables-nft: a hybrid Linux firewall
总的来说:
-
iptables-legacy命令就是我们熟知的iptables,背后是iptables的框架。 -
nft背后使用的是nftables框架。 -
iptables-nft在使用命令上,和iptables-legacy相同,只是背后是nftables。(iptables-translate命令,可以将iptables命令转换成nft命令) -
iptables是个软连接,可以在iptables-legacy和iptables-nft之间切换。
实例
将指定protocol:ip:port的流量转发到本地指定端口
去年(2022年),谷歌关闭了在中国的翻译服务。我是google翻译的重度用户,不得不去寻找其他替代品。如果可以将谷歌翻译的流量转发到本地的指定端口,或许对于继续使用谷歌翻译有帮助。我尝试了下,流量确实转发了,但是如何继续这个流量似乎是个问题。
我们以这个例子,来事件下iptable/nftables的使用。
首先,进行DNS查找。
nslookup translate.googleapis.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53Non-authoritative answer:
Name: translate.googleapis.com
Address: 142.251.42.234
将google翻译的流量转发到本地端口。
# 创建一个新链transparent,被OUTPUT链引用
sudo iptables-legacy -t nat -N transparent
sudo iptables-legacy -t nat -I OUTPUT -p tcp -j transparent# 将tcp 142.251.42.234:443的流量转发到1089端口
sudo iptables-legacy -t nat -A transparent -p tcp -d 142.251.42.234 --dport 443 -j REDIRECT --to-ports 1089
sudo iptables-legacy -t nat -nvL# 清空并删除transparent链
sudo iptables-legacy -t nat -F transparent
sudo iptables-legacy -t nat -X transparent
至于如何使用nft命令该如何去写,这里不实现。但,我们看下转发的哪条规则该如何写。
$ iptables-translate -t nat -A transparent -p tcp -d 142.251.42.234 --dport 443 -j REDIRECT --to-ports 1089
# 在这之前,需要先行创建一个名为nat的ip类型表。表中添加一个名为transparent的链。
## 链的类型为nat,hook为OUTPUT
nft add rule ip nat transparent ip daddr 142.251.42.234 tcp dport 443 counter redirect to :1089
相关文章:
iptables和nftables的使用
文章目录前言iptable简介iptable命令使用iptables的四表五链nftables简介nftables命令的时候nftables与iptables的区别iptables-legacy和iptables-nft实例将指定protocol:ip:port的流量转发到本地指定端口前言 本文展示了,iptables和nftable命令的使用。 # 实验环…...
中小学信息学相关编程比赛清单及报名网站汇总(C++类)
1、NOI系列比赛(CSP-J CSP-S NOIP NOI APIO CTSC IOI ISIJ等) NOI官网 NOI全国青少年信息学奥林匹克竞赛https://www.noi.cn/ 2、蓝桥杯青少年创意编程大赛 https://www.lanqiaoqingshao.cn/home 3、中国电子协会考评中心...
06Makefile
Makefile 1、Makefile简介 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂…...
【C++】模板初阶
🍅讨厌废话,直接上车 ☃️1.泛型编程 void Swap(int& left, int& right) { int temp left; left right; right temp; } void Swap(double& left, double& right) { double temp left; left right; right temp; } void Swap(char&…...
vue+nodejs考研资料分享系统vscode - Visual Studio Code
前端技术:nodejsvueelementui,视图层其实质就是vue页面,通过编写vue页面从而展示在浏览器中,编写完成的vue页面要能够和控制器类进行交互,从而使得用户在点击网页进行操作时能够正常。 Express 框架于Node运行环境的Web框架, 目 …...
LeetCode_单周赛_332
6354. 找出数组的串联值 题意 将数组首尾元素接在一起,就是串联值。 串联之后删除,如果只剩下一个元素,加上这个元素即可 双指针,从首和尾向中间移动即可 code **注意:**用 long 没看题目用了 int wa了一发 clas…...
[LeetCode周赛复盘] 第 332 场周赛20230212
[LeetCode周赛复盘] 第 332 场周赛20230212 一、本周周赛总结二、 [Easy] 6354. 找出数组的串联值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6355. 统计公平数对的数目1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6356. 子字符串异或查询1. 题目描述2. 思路分析3. 代…...
C++轻量级RPC库RpcCore
C轻量级的RPC库,可用于任何项目中,甚至单片机。 方便平台直接相互进行功能调用。 基于asio的实现 asio_net 也可用在esp32适用于ESP32/ESP8266的实现 esp_rpc 目前也有一些轻量的库,参考了protobuf(或者依赖它)&…...
Mysql的视图
视图的特点: 1.视图可以看做一个虚拟的表,本身是不存储数据的。 视图的本质可以看作是存储起来的select语句 2.视图中涉及到的表都统称为基表 3.针对视图多DML操作,会影响到对应基表中的数据。反之亦然 4.视图本身的删除,不会…...
2/12考试总结
时间安排 8:30–8:50 读题,T1 不知道是个啥,T2是个dp ,T3可能也是 dp 之类的。 8:50–9:30 T1,读了好几遍才理解了题意,对于部分分有爆搜。考虑正解,想到预处理后O(1) 查询,问题是如何由已知的信息得到所有…...
第三章虚拟机的克隆,快照,迁移删除
1.虚拟机的克隆 如果你已经安装了一台linux操作系统,你还想再更多的,没有必要再重新安装,你只需要克 隆就可以,看演示。 方式1,直接拷贝一份安装好的虚拟机文件,再用虚拟机打开这个文件方式2,使用vmware的…...
华为OD机试 - 任务总执行时长(Python)| 真题含思路
任务总执行时长 题目 任务编排服务负责对任务进行组合调度。 参与编排的任务又两种类型, 其中一种执行时长为taskA, 另一种执行时长为taskB。 任务一旦开始执行不能被打断,且任务可连续执行。 服务每次可以编排 num 个任务。 请编写一个方法,生成每次编排后的任务所有可…...
LeetCode 热题 C++ 114. 二叉树展开为链表
给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1…...
Spring的事务控制-基于AOP的声明式事务控制
Spring的事务控制-基于AOP的声明式事务控制 Spring事务编程概述 事务是开发中必不可少的东西,使用JDBC开发时,我们使用connection对事务进行控制,使用MyBatis时,我们使用SqlSession对事务进行控制,缺点就是ÿ…...
SSO(单点登陆)
Single Sign On 一处登陆、处处可用 0、前置概念: 1)、单点登录业务介绍 早期单一服务器,用户认证。 缺点:单点性能压力,无法扩展 分布式, SSO(single sign on)模式 解决 : 用户身份信息独…...
线程和QObjects
QObject的可重入性: QThread继承了QObject,它发出信号以指示线程开始或完成执行,并提供一些插槽。 QObjects可以在多个线程中使用发出调用其他线程中槽的信号,并将事件发布到在其他线程中“活动”的对象。这是可能的࿰…...
最新中文版FL Studio21水果软件下载安装图文教程
FL Studio是目前流行广泛使用人数最多音乐编曲制作软件,这款软件相信广大网友并不陌生,今天带来的是FL中文版本,所有的功能都能在线编辑,用户直接就能操作,同时因为是21水果是最新版,所以增加了新的功能&am…...
pandas数据分析35——多个数据框实现笛卡尔积
什么是笛卡尔积。就是遍历所有组合的可能性。 比如第一个盒子有[1,2,3]三个号码球,第二个盒子有[4,5]两个号码球。那么从每个盒子里面分别拿一个球共有3*2两种可能性,其集合就是{[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]},这个就是笛卡尔积。 三个盒子也是…...
【C语言学习笔记】:数组倒序排列,数组倒置
数组倒置就是将数组元素中的数据倒过来! 举个例子,比如下面程序: #include <stdio.h>int main(void) { int a[5] {1, 2, 3, 4, 5}; int b[5]; //用来存放倒置后的数据 int i, j; for (i0, j4; i<5, j>0; i, --j)…...
sni+tomcat漏洞复现
sni SNI产生背景 SSL以及TLS(SSL的升级版)为客户端与服务器端进行安全连接提供了条件。但是,由于当时技术限制,SSL初期的设计顺应经典的公钥基础设施 PKI(Public Key Infrastructure)设计,PKI 认为一个服务器只为一个…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
