iptables和nftables的使用

news2024/9/24 15:20:36

文章目录

    • 前言
    • 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 OUTPUT

table inet filter {
	chain OUTPUT { # handle 4
		type filter hook output priority filter; policy accept;
		ip daddr 180.101.50.188 drop # handle 5
		ip 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

可以看到,我上面并没有使用iptablesiptables-nft命令。

那么iptablesiptables-legacynftiptables-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-legacyiptables-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#53

Non-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

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

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

相关文章

win10 安装rabbitMQ详细步骤

win10 安装rabbitMQ详细步骤 win10 安装rabbitMQ详细步骤win10 安装rabbitMQ详细步骤一、下载安装程序二、安装配置erlang三、安装rabbitMQ四、验证初始可以通过用户名&#xff1a;guest 密码guest来登录。报错&#xff1a;安装RabbitMQ出现Plugin configuration unchanged.问题…

力扣SQL刷题10

目录标题618. 学生地理信息报告--完全不会的新题型1097. 游戏玩法分析 V - 重难点1127. 用户购买平台--难且不会618. 学生地理信息报告–完全不会的新题型 max()函数的功效&#xff1a;&#xff08;‘jack’, null, null&#xff09;中得出‘jack’&#xff0c;&#xff08;nul…

基于微信小程序图书馆座位预约管理系统

开发工具&#xff1a;IDEA、微信小程序服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8项目构建&#xff1a;maven数据库&#xff1a;mysql5.7前端技术&#xff1a;vue、uniapp服务端技术&#xff1a;springbootmybatis本系统分微信小程序和管理后台两部分&#xff0c;项目采用…

索引的基本介绍

索引概述-优缺点 索引介绍&#xff1a;索引是一种高效获取数据的数据结构&#xff1b; 索引优点&#xff1a;提供查询效率&#xff1b;降低IO成本&#xff1b;怎么减低IO成本呢&#xff1f;因为数据库的数据是存放在磁盘的&#xff0c;你要操作数据就会涉及到磁盘IO&#xff0…

Windows11 安装Apache24全过程

Windows11 安装Apache24全过程 一、准备工作 1、apache-httpd-2.4.55-win64-VS17.zip - 蓝奏云 2、Visual Studio Code-x64-1.45.1.exe - 蓝奏云 二、实际操作 1、将下载好的zip文件解压放到指定好的文件夹。我的是D:\App\PHP下 个人习惯把版本号带上。方便检测错误。 2…

数组常使用的方法

1. join (原数组不受影响)该方法可以将数组里的元素,通过指定的分隔符,以字符串的形式连接起来。返回值:返回一个新的字符串const arr[1,3,4,2,5]console.log(arr.join(-)&#xff1b;//1-3-4-2-52. push该方法可以在数组的最后面,添加一个或者多个元素结构: arr.push(值)返回值…

(考研湖科大教书匠计算机网络)第四章网络层-第一、二节:网络层概述及其提供的服务

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;网络层概述&#xff08;1&#xff09;概述&#xff08;2&#xff09;学习内容二&#xff1a;网络层提供的两种服务&#xff08;1&#xff09;面向连…

nginx越界读取缓存漏洞(CVE-2017-7529)

range格式: Range: <unit><range-start>- Range: <unit><range-start>-<range-end> Range: <unit><range-start>-<range-end>, <range-start>-<range-end> range事例&#xff1a; Range: bytes500-999 //表示第…

Spring Security简介

前面我们已经完成了传智健康后台管理系统的部分功能&#xff0c;例如检查项管理、检查组管理、套餐管理、预 约设置等。接下来我们需要思考2个问题&#xff1a; 问题1&#xff1a;在生产环境下我们如果不登录后台系统就可以完成这些功能操作吗&#xff1f; 答案显然是否定的&am…

微前端-模块联邦

一、 Module Federation 模块联邦概述 Module Federation 即为模块联邦&#xff0c;是 Webpack 5 中新增的一项功能&#xff0c;可以实现跨应用共享模块。 二、快速上手 需求 通过模块联邦在容器应用中加载微应用。 应用结构 products ├── package-lock.json ├──…

程序的机器级表示part3——算术和逻辑操作

目录 1.加载有效地址 2. 整数运算指令 2.1 INC 和 DEC 2.2 NEG 2.3 ADD、SUB 和 IMUL 3. 布尔指令 3.1 AND 3.2 OR 3.3 XOR 3.4 NOT 4. 移位操作 4.1 算术左移和逻辑左移 4.2 算术右移和逻辑右移 5. 特殊的算术操作 1.加载有效地址 指令效果描述leaq S, DD…

【项目实战】32G的电脑启动IDEA一个后端服务要2min!谁忍的了?

一、背景 本人电脑性能一般&#xff0c;但是拥有着一台高性能的VDI&#xff08;虚拟桌面基础架构&#xff09;&#xff0c;以下是具体的配置 二、问题描述 但是&#xff0c;即便是拥有这么高的性能&#xff0c;每次运行基于Dubbo微服务架构下的微服务都贼久&#xff0c;以下…

使用太极taichi写一个只有一个三角形的有限元

公式来源 https://blog.csdn.net/weixin_43940314/article/details/128935230 GAME103 https://games-cn.org/games103-slides/ 初始化我们的三角形 全局的坐标范围为0-1 我们的三角形如图所示 ti.kernel def init():X[0] [0.5, 0.5]X[1] [0.5, 0.6]X[2] [0.6, 0.5]x[0…

每天10个前端小知识 【Day 12】

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端各领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端…

I.MX6ULL内核开发9:kobject-驱动的基石

目录 一、摘要 二、重点 三、驱动结构模型 四、关键函数分析 kobject_create_and_add()函数 kobject_create()函数 kobject_init&#xff08;&#xff09;函数 kobject_init_internal(&#xff09;函数 kobject_add&#xff08;&#xff09;函数 kobject_add_varg&am…

JAVA集合专题4 ——ArrayDeque + BlockingQueue

目录ArrayDeque的特点BlockingQueue什么是BlockingQueue?什么叫阻塞队列?阻塞队列的应用场景是什么?BlockingQueue的阻塞方法是什么?BlockingQueue的四类方法codecode2ArrayDeque的特点 ArrayDeque是Deque接口子实现ArrayDeque数据结构可以表示为: 队列、双端队列、栈Arra…

C语言学习笔记(三): 选择结构程序设计

if语句 if(){} if (a1){printf("hehe");} //单独一个ifif(){}else{} int a 1, b 2;if (a b) {printf("haha"); //if else}else{printf("hehe");}if(){}else if(){} int a 1, b 2;if (a b) {printf("haha");}else if (a …

io的基本原理-nio

io的基本原理-nioio读写的基本原理io的模型1.同步阻塞IO2. 同步非阻塞IO3. IO多路复用4. 异步IO5.半同步半阻塞半异步IOnio是什么&#xff1f;NIO 的核心原理&#xff1a;java版代码cpp版本I/O&#xff08;Input/Output&#xff09;是计算机科学中指计算机和外部设备进行数据交…

Java Set集合

7 Set集合 7.1 Set集合的概述和特点 Set集合的特点 不包含重复元素的集合没有带索引的方法&#xff0c;所以不能使用普通for循环 Set集合是接口通过实现类实例化&#xff08;多态的形式&#xff09; HashSet&#xff1a;添加的元素是无序&#xff0c;不重复&#xff0c;无索引…

线程和QObjects

QObject的可重入性&#xff1a; QThread继承了QObject&#xff0c;它发出信号以指示线程开始或完成执行&#xff0c;并提供一些插槽。 QObjects可以在多个线程中使用发出调用其他线程中槽的信号&#xff0c;并将事件发布到在其他线程中“活动”的对象。这是可能的&#xff0…