Linux iptables详解

前言:事情是这样的。最近部门在进行故障演练,攻方同学利用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.mzph.cn/pingmian/25966.shtml

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

相关文章

Linux信号基础

一、信号概念 信号是事件发生时对进程的通知机制,也可以把它称为软件中断。信号与硬件中断的相似之处在于能够 打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号达到的准确时间,…

pyqt opengl 小黑块

目录 OpenGLWidget_g初始化函数: 解决方法:把初始化函数的parent去掉 pyqt opengl 小黑块 原因: 创建OpenGLWidget_g的时候把main_window作为父类(self)传进去了, self.opengl_widget OpenGLWidget_g(…

Java面向对象-方法的重写、super

Java面向对象-方法的重写、super 一、方法的重写二、super关键字1、super可以省略2、super不可以省略3、super修饰构造器4、继承条件下构造方法的执行过程 一、方法的重写 1、发生在子类和父类中,当子类对父类提供的方法不满意的时候,要对父类的方法进行…

网站安全性评估中应该关注哪些关键指标?

在进行网站安全性评估时,您应该关注以下关键指标: 1. 服务器安全性 -操作系统安全性:检查服务器操作系统是否及时更新,是否存在已知的安全漏洞。 -服务端软件安全性:评估服务器上安装的各种服务端软件,如W…

已解决Error || KeyError: ‘The truth value of a Series is ambiguous‘

已解决Error || KeyError: ‘The truth value of a Series is ambiguous’ 🚀 原创作者: 猫头虎 作者微信号: Libin9iOak 作者公众号: 猫头虎技术团队 更新日期: 2024年6月6日 博主猫头虎的技术世界 &#x1f3…

设计模式 —— 观察者模式

设计模式 —— 观察者模式 什么是观察者模式观察者模式定义观察者模式的角色观察者模式的使用场景观察者模式的实现 被观察者(Subject)观察者(Observer)通知(notify)更新显示(update&#xff09…

C++ BFS相关题目

目录 图像渲染 岛屿数量 图像渲染 733. 图像渲染 vis就是标记1有没有被用过 符合条件的都放到队列里,每次出队列一个,判四个, 如果要改的值与当前的值相同直接返回 注意:image[x][y] prev要放在坐标判断的后面&#xff…

我的mybatis学习笔记之二

第一版学习笔记 1,接口是编程: 原生: Dao > DaoImpl mybatis: Mappper > XXXMapper.xml 2,SqlSession代表和数据库的一次会话:用完必须关闭 3,SqlSession和connection一样是非线程安全的.每次使用都必须去获取新的对象 4,mapper接口没有是一类,但是mybtis会为这个接口生…

Linux启动KKfileview文件在线浏览时报错:启动office组件失败,请检查office组件是否可用

目录 1、导论 2、报错信息 3、问题分析 4、解决方法 4.1、下载 4.2、安装步骤 1、导论 今天进行项目部署时,遇到了一个问题。在启动kkfileview时,出现了报错异常: 2024-06-09 06:36:44.765 ERROR 1 --- [ main] cn.keking.service.Of…

运维小妙招:如何让系统信息随登录自动展现?

在日常运维工作中,及时获取系统的基本信息对于维护系统的稳定性和安全性至关重要。通过一个简单的登录脚本,我们可以在用户每次登录时自动显示系统的关键信息,这不仅提高了工作效率,还能快速定位问题。本文将介绍如何编写这样一个…

设计模式七大原则-接口隔离原则InterfaceSegregation

接口隔离原则: 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 案例: 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类c来说不是最小…

k8s-CCE使用node节点使用VIP--hostNetworkhostPort

CCE使用node节点使用VIP 背景:想在节点上使用VIP,将nodeport服务做到高可用。启动VIP后发现访问失败 部署 ! Configuration File for keepalived global_defs { router_id master-node }vrrp_instance VI_1 {state BACKUPinterface eth0mcast_src_ip 10.1.0.60virtual_rou…

写给大数据开发的,要给领导汇报什么?

上篇:写给大数据开发,如何去掌握数据分析 就像说经济学家不炒股一样,有些数据开发不喜欢讲数据📊,就很离谱…自己不讲数据,不相信数据,别人也不敢用了~ 所以找上级汇报&#xff0…

KUKA机器人KRC5控制柜面板LED显示

对于KUKA机器人新系列控制柜KRC5控制柜来说,其控制柜面板LED布局如下图: 其中①②③④分别为: 1、机器人控制柜处于不同状态时,LED显示如下: 2、机器人控制柜正在运行时: 3、机器人控制柜运行时出现的故障…

C# BindingSource 未完BindingNavigator

数据绑定导航事件数据验证自定义示例示例总结 在 C#中, BindingSource 是一个非常有用的控件,它提供了数据绑定的基础设施。 BindingSource 允许开发者将数据源(如数据库、集合、对象等)与用户界面控件(如文本框、下…

01、Linux网络设置

目录 1.1 查看及测试网络 1.1.1 查看网络配置 1、查看网络接口地址 2、查看主机状态 3、查看路由表条目 4、查看网络连接qing 1.1.2 测试网络连接 1.测试网络连接 2.跟踪数据包的路由路径 3.测试DNS域名解析 1.2 设置网络地址参数 1.2.1 使用网络配置命令 1.修改网卡…

11_1 Linux NFS服务与触发挂载autofs

11_1 Linux NFS服务与触发挂载服务 文章目录 11_1 Linux NFS服务与触发挂载服务[toc]1. NFS服务基础1.1 示例 2. 触发挂载autofs2.1 触发挂载基础2.2 触发挂载进阶autofs与NFS 文件共享服务:scp、FTP、web(httpd)、NFS 1. NFS服务基础 Netwo…

在Linux or Windows中如何优雅的写出对拍

在Linux or Windows中如何优雅的写出对拍 一、前言二、结论1、对拍 三、对拍详解1、什么是对拍呢?🧐2、对拍的组成部分3、输入数据生成4、对拍程序5、操作流程 四、最后 一、前言 网上的对拍程序层出不穷,大多Linux和Windows中的对拍程序都是…

MySQL 函数与约束

MySQL 函数与约束 文章目录 MySQL 函数与约束1 函数1.1 字符串函数1.2 数值函数1.3 日期函数1.4 流程函数 2 约束2.1 概述2.2 约束演示2.3 外键约束2.4 删除/更新行为 1 函数 函数是指一段可以直接被另一程序调用的程序或代码。 1.1 字符串函数 MySQL中内置了很多字符串函数&…

【面试】什么是字节码指令

目录 1. 说明2. 定义3. 组成3.1 操作码(Opcode)3.2 操作数(Operands) 4. 特点5. 与数据类型的关系6.作用 1. 说明 1.字节码指令是Java虚拟机(JVM)执行的基本单元,它由操作码(Opcode…