Linux iptables详解

news2024/9/21 12:33:30

前言:事情是这样的。最近部门在进行故障演练,攻方同学利用iptables制造了一个故障。演练最终肯定是取得了理想的效果,即业务同学在规定时间内定位了问题并恢复了业务(ps:你懂得)。

对我个人来讲一直知道iptables的存储,但是说起来使用还真有些陌生,为此专门做个记录。

1、iptables介绍

1.0、iptables基本介绍 

        iptables是Linux防火墙系统的重要组成部分,其主要功能是实现对网络数据包进出设备及转发的控制。

        iptables是集成在Linux内核中的包过滤防火墙系统。使用iptables可以添加、删除具体的过滤规则,iptables默认维护着4个表(table)和5个链(chain),所有防火墙策略规则都被分别写入这些表与链中。如下图所示为数据包到达linux主机网卡后,内核处理数据包的大致流程。

1.1、什么是规则?

        规则就是管理员对数据包制定的触发机制,简单来说就是当数据包满足某种条件就执行指定的动作。对于网络协议这里的条件显然就是"五元组"那些东西:例如数据包源地址、目的地址、协议的给。动作:可以是拒绝、接受、丢弃等。ps:后面会详细介绍。

        iptables基本语法格式如下:

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

各参数含义如下(各取值后面会有介绍):

  • -t:指定需要维护的防火墙规则表(filter/nat/mangle/raw等),不指定默认filter。
  • COMMAND:子命令,定义对规则的管理。
  • chain:指明链表。
  • CRETIRIA:匹配参数。
  • ACTION:触发什么动作(ACCEPT/DROP/等)。

       下面提供一个iptables命令规则,便于直观理解。

iptables -t filter -A INPUT -i eth0 -p tcp -s 192.23.2.0/24 -m multiport --dports 443,80 -j ACCEPT

#-t:操作filter表
#-A:在表末追加规则;-I为表首插入规则、-D为删除规则
#INPUT:链名称;该规则在那条链上生效
#-j:数据包处理动作;比如接受、拒绝等

命令解释:允许经过本机网卡eth0,访问协议是TCP,源地址是192.23.2.0/24段的数据包访问本地端口80和443的服务。

1.2、什么是表?

        表主要是用来存放具体的防火墙规则的。规则就是为了达到某种约束目的,比如修改数据包源/目的ip、拒绝来自某个网段的数据包访问本机等;我们可以对规则进行分类,不同的功能存入不同的表。分类如下:

  • filter表:主要用于过滤流入和流出的数据包,根据具体的规则决定是否放行该数据包;
  • nat表:主要用于修改数据包的源地址和目的地址、端口号等信息(实现网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT);
  • raw表:主要决定数据包是否被状态跟踪机制处理;
  • mangle表:主要用于超姐报文修改数据包的IP头信息;
  • security表:最不常用的表,用在SELinux上;用于强制访问控制(MAC)网络规则,由Linux安全模块(SELinux)实现其中nat表和filter表最常用。

1.3、什么是链?

        "链"是指内核中控制网络定义的几个规则链。根据上图我觉得可以简单的理解为规则生效的时机(表中存放了具体的规则,那规则什么时候生效呢?)。其实就是一条链路链接在一起的规则。 由上图我们知道有如下五个数据链:

  • INPUT(入站数据过滤):路由判断后确定数据包流入本机,此时应用这里的规则;
  • OUTPUT(出站数据过滤):本机应用向外发出数据包时,应用这里的规则;
  • FORWARD(转发数据过滤):路由判断之后确定数据包要转发给其他主机,应用此规则;注:linux主机需要开启ip_forward功能才支持转发,在/etc/sysctl.conf文件中配置参数net.ipv4.ip_forward=1
  • PREROUTING(路由前过滤):数据包到达防火墙时,进行路由判断之前指定的规则;
  • POSTROUTING(路由后过滤):在数据包离开防火墙时候进行路由判断之后执行的规则。规则按照从上到下的顺序进行匹配,当一个数据包与某个规则匹配成功后就会按照规则的动作处理,即后续的规则不再会被考虑。

如下梳理几个典型场景数据链路情况:

(1)外部主机发送数据包给防火墙主机:数据会经过PREROUTING链与INPUT链。

(2)防火墙本机发送数据包到外部主机:数据会经过OUTPUT链与POSTROUTING链;

(3)防火墙备机作为路由负责转发数据:数据经过PREROUTING链、FORWARD链以及POSTROUTING链。

2、iptables的语法规则

2.1、iptables基本语法格式

(1)语法格式 

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

各参数含义如下:

  • -t:指定需要维护的防火墙规则表(filter/nat/mangle/raw等),不指定默认filter。
  • COMMAND:子命令,定义对规则的管理。
  • chain:指明链表。
  • CRETIRIA:匹配参数。
  • ACTION:触发什么动作(ACCEPT/DROP/等)。

(2)规则表

见上述规则表的介绍。这里知道不指定的时候回默认为filter就可以了。

(3)命令COMMAND

-A 添加防火墙规则
-D 删除防火墙规则
-I 插入防火墙规则
-F 清空防火墙规则
-L 列出添加防火墙规则
-R 替换防火墙规则
-Z 清空防火墙数据表统计信息
-P 设置链默认规则

(4)chain

参见上述链的介绍

(5)标准criteria(其实就是匹配条件)

参 数    功 能
[!]-p  匹配协议,! 表示取反
[!]-s  匹配源地址
[!]-d  匹配目标地址
[!]-i  匹配入站网卡接口
[!]-o  匹配出站网卡接口
[!]--sport  匹配源端口
[!]--dport  匹配目标端口
[!]--src-range  匹配源地址范围
[!]--dst-range  匹配目标地址范围
[!]--limit  四配数据表速率
[!]--mac-source  匹配源MAC地址
[!]--sports  匹配源端口
[!]--dports  匹配目标端口
[!]--stste  匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
[!]--string  匹配应用层字串

(6)触发动作(其实就是行为)

触发动作   功 能
ACCEPT  允许数据包通过
DROP  丢弃数据包
REJECT  拒绝数据包通过
LOG  将数据包信息记录 syslog 曰志
DNAT  目标地址转换
SNAT  源地址转换
MASQUERADE  地址欺骗
REDIRECT  重定向

2.2、看个具体的例子

下面提供一个iptables命令规则,便于直观理解。

iptables -t filter -A INPUT -i eth0 -p tcp -s 192.23.2.0/24 -m multiport --dports 443,80 -j ACCEPT

#-t:操作filter表
#-A:在表末追加规则;-I为表首插入规则、-D为删除规则
#INPUT:链名称;该规则在那条链上生效
#-j:数据包处理动作;比如接受、拒绝等

命令解释:允许经过本机网卡eth0,访问协议是TCP,源地址是192.23.2.0/24段的数据包访问本地端口80和443的服务。

3、iptables常用指令

3.1、查看规则

iptables -nvL   #查看默认的filter表
iptables -nvL -t nat  #指定查看nat表
iptables -nvL --line-number  #显示规则行号(可用于指定行号删除规则)

各参数含义如下:

-L表示查看当前表的所有规则,默认查看的是filter表;如果要查看nat表需追加"-t nat"指定;

-n表示不对IP进行反查,加上这个参数显式速度会更快;

-v表示输出详细信息,包含通过改规则的数据包数据量、总字节数以及相应的网络接口;

iptables -nL --line-number

如下图所示圆框部分即为规则号、方框部分即为一条具体的规则。

注:可以看到这个规则作用filter表的INPUT链,对于来源是9.137.22.127的数据包直接drop。

3.2、添加规则

添加规则有两个命令,分别是-A添加到规则的末尾) 和 -I 插入指定位置(如果没有指定的话就默认插入到规则的首部)。

//丢弃来自特定IP的所有数据包。
//filter表的INPUT链插入一条规则。规则为:来源是9.137.22.127/192.168.1.5的请求全部丢弃。
iptables -A INPUT -s 9.137.22.127 -j DROP
iptables -A INPUT -s 192.168.1.5 -j DROP


//丢弃某个端口的所有tcp数据包
//filter表的INPUT链超如一条规则。规则为:来自22端口的任何TCP数据包都直接丢弃。
iptables -A INPUT -p tcp --dport 22 -j DROP

//允许tcp协议目标端口22的数据包进入
iptables -A INPUT -p tcp --dport=22 -j ACCEPT

//允许tcp协议来源ip是1.2.3.4的数据包的进入
iptables -A INPUT -p tcp -s 1.2.3.4 -j ACCEPT

查看规则如下:

3.3、修改规则

修改规则时候需要使用 -R 参数。

//修改上述规则号为1的规则,修改成"s 9.137.22.127 -j ACCEPT"
iptables -R INPUT 1 -s 9.137.22.127 -j ACCEPT

#修改上述规则好为6的规则,修改成"-s 1.3.4.2 -j DROP"
iptables -R INPUT 5 -p tcp -s 1.3.4.2 --dport=9380 -j DROP

执行两条指令后,查看iptables效果如下。

3.4、删除规则

修改规则有两种方法,但都必须使用-D参数。

#指定规则号及规则删除(太麻烦)



#仅指定规则号删除
iptables -D INPUT 5
iptables -D INPUT 4

删除后再次查看规则,如下就只剩下三个规则了:

iptables -nvL --line-number

4、验证效果

4.1、限制某个IP不能访问

初始状态。工具机 9.137.22.127上执行脚本访问mongo_proxy服务所在的机器(30.169.0.179)。

如下图,显然可以正常访问到数据:

接下来在mongo_proxy所在机器上限制来自ip 9.137.22.127的访问,即添加如下规则:

iptables -A INPUT -s 9.137.22.127 -j DROP

 然后就访问不通了。

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

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

相关文章

树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习:读取窗口鼠标状态坐标_TrackBar滑动条控件的使…

【MySQL】(基础篇五) —— 排序检索数据

排序检索数据 本章将讲授如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据。 排序数据 还是使用上一节中的例子,查询employees表中的last_name字段 SELECT last_name FROM employees;输出结果: 发现其输出并没有特定的顺序。其实&#xf…

速卖通店铺防关联该怎么做?

大家都知道,想要进行多账号操作必须一再小心,否则会有很大的关联风险,而账号关联所带来的后果是卖家绝对不能轻视的,严重的话会导致封号,这样一来自己前期的辛苦运营就全都打水漂了,因此防关联很重要&#…

卷积神经网络 convolution neural network

1.数学卷积:滑动窗口 2.图像具有局部相关性和平移不变性,有许多冗余的特征点,如果用全连接的神经网络会很浪费时间。 3.卷积nn:减少参数,滑动提取特征,特征作为下层卷积的输入,然后放到全连接…

PythonX.X、pipX的关系

PythonX.X、pipX的关系 Python2.x 与 3.x Python 的 3.0 版本,相对于 Python 的早期版本,是一个大的升级。许多针对早期 Python2.x 版本设计的程序都无法在 Python 3.x 上正常执行。为了照顾大量的历史遗留项目,Python 2.6 作为一个过渡版本…

常用的通信协议

最近在做项目,用到了一些通信协议,这里详细整理一下相关的通信协议,方便以后查阅。 常用的通信协议 单工 半双工 全双工单工通信(Simplex Communication)半双工(Half-duplex Communication)全双工(Full-dup…

网络网络层之(6)ICMPv6协议

网络网络层之(6)ICMPv6协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…

免费!GPT-4o发布,实时语音视频丝滑交互

We’re announcing GPT-4o, our new flagship model that can reason across audio, vision, and text in real time. 5月14日凌晨,OpenAI召开了春季发布会,发布会上公布了新一代旗舰型生成式人工智能大模型【GPT-4o】,并表示该模型对所有免费…

JDBC简介以及快速入门

这些都是JDBC提供的API 简介 每一个数据库的底层细节都不一样 不可能用一套代码操作所有数据库 我们通过JDBC可以操作所有的数据库 JDBC是一套接口 我们自己定义了实现类 定义实现类 然后就能用Java操作自己的数据库了 MySQL对于JDBC的实现类 就是驱动 快速入门 创建新的项…

芒果YOLOv10改进31:特征融合Neck篇:改进特征融合网络 BiFPN 结构,融合更多有效特征

💡只订阅这一个专栏即可阅读:芒果YOLOv10所有改进内容 芒果改进YOLOv10系列:改进特征融合网络 BiFPN 结构,融合更多有效特征 在这篇文章中,将 BiFPN 思想加入到 YOLOv10 结构中 该版本为高效简洁版,涨点多、还速度快(实际效果反馈) 文章目录 一、BiFPN 论文理论二、…

angular2开发知识点

目录 文章目录 一、API 网关地址 配置二、服务注册使用三、模块组件注册使用四、html中style类动态绑定1. 单个类的绑定:[class.special]"isSpecial"2. 多个类的绑定:[ngClass]"{selected:status ,saveable: this.canSave,}"3. 单个…

理解我的积木编程思想

1 学习教程,至少7139手册2 编程实践,遇到实际问题后,在技术资料中查找关键词3 选择适合的条目找到代 码。修正,组合。

C语言详解(文件操作)1

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

手写mybatis-预编译前的sql语句

sql表 mybatis数据库中的gxa_user表 /*Navicat Premium Data TransferSource Server : rootSource Server Type : MySQLSource Server Version : 80028Source Host : localhost:3306Source Schema : mybatisTarget Server Type : MySQLTarget…

论文略读:Onthe Expressivity Role of LayerNorm in Transformers’ Attention

ACL 2023 研究了LayerNorm在 Transformers 中对注意力的作用LayerNorm为Transformer的Attention提供了两个重要的功能: 投影,projection LayerNorm 帮助 Attention 设计一个注意力查询,这样所有的Key都可以平等地访问通过将Key向量投影到同一…

域内攻击 ----> DCSync

其实严格意义上来说DCSync这个技术,并不是一种横向得技术,而是更偏向于权限维持吧! 但是其实也是可以用来横向(配合NTLM Realy),如果不牵强说得话! 那么下面,我们就来看看这个DCSyn…

Vue学习|Vue快速入门、常用指令、生命周期、Ajax、Axios

什么是Vue? Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写 基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网:https://v2.cn.vuejs.org/ Vue快速入门 打开页面&#xff0…

rce漏洞试试看 buuctf的pingpingping 试试ctf的rce怎么样

打开靶机开始操作 然后我们先知道一些知识点:下面这些是常用的 |这个管道符也就是上一条的命令的输出结果作为下一条命令的输入;这个是跟sql的堆叠注入是一样的|| || 当前面的执行出错时(为假)执行后面的 & 将任务置于后台执…

R语言绘图 --- 桑基图(Biorplot 开发日志 --- 5)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…

从Log4j和Fastjson RCE漏洞认识jndi注入

文章目录 前言JNDI注入基础介绍靶场搭建漏洞验证注入工具 log4j RCE漏洞分析漏洞靶场检测工具补丁绕过 Fastjson RCE漏洞分析漏洞靶场检测工具补丁绕过 总结 前言 接着前文的学习《Java反序列化漏洞与URLDNS利用链分析》,想了解为什么 Fastjson 反序列化漏洞的利用…