Iptables深入浅出

news2024/11/24 14:11:11

1、iptables的基本概念

众所周知iptables是Linux系统下自带免费的包过滤防火墙。其实不然,iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter。

netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  1. 网络地址转换(Network Address Translate)
  2. 数据包内容修改
  3. 数据包过滤的防火墙功能(最常用的功能

2、iptables规则、表和链

我们知道iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

这些规则在iptables中都是(tables)和链(chains)来描述的,iptables的规则表和链:
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现以下功能。

  1. filter表:负责过滤功能,防火墙;内核模块:iptables_filter
  2. nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
  3. mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
  4. raw表:关闭nat表上启用的连接追踪机制;iptable_raw

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

表和链的关系:

1、每个链上的规则都具有一定的功能, 相同功能的规则存在于特定的表中。

2、每个表中都都具有很多规则,这些规则可以被那些链使用。

3、iptables的转发流程

根据实际情况的不同,报文经过”链”可能不同。如果报文不需要转发,则经过input链进入本地的服务,本地服务处理之后再经过output链转发出来。如果报文需要转发,那么报文则不会经过input链发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去的。

所以,根据上图,我们能够想象出某些常用场景中,报文的流向:

到本机某进程的报文:PREROUTING –> INPUT

由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING

由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING

结合上述所有的描述,我们可以将数据包通过防火墙的流程总结为下图:

4、iptables的相关命令

4.1 查询命令

# iptables -L  默认不指定的话是filter表

# iptables -t raw -L、iptables -t mangle -L、iptables -t nat -L、iptables -t filter -L

# iptables -L INPUT  查询filter表中的指定链

# iptables -nvL INPUT  查询filter表中指定链的详细信息。v参数表示详细信息,n参数表示不对IP地址进行名称解析

# iptables --line-number -nvL INPUT   显示规则行号查询

4.2 清除规则

# iptables -F

# iptables -F INPUT 清除filter表中的指定链

根据行号删除指定规则, 先查询出行号然后根据行号删除

# iptables --line-number -nvL INPUT

# iptables -D INPUT 3

根据具体的匹配条件与动作删除规则

# iptables -t filter -D INPUT -s 2.2.2.2 -j drop

4.3 增加规则

在filter表的INPUT链的最前面插入一条规则,对于来自源IP是2.2.2.2的数据包全部丢弃

# iptables -t filter -I INPUT -s 2.2.2.2 -j drop

在filter表的INPUT链的最后追加一条规则,对于来自源IP是2.2.2.2的数据包全部接受

# iptables -t filter -A INPUT -s 2.2.2.2 -j accept

在filter表的INPUT链的的指定行增加规则,即第二行

#  iptables -t filter -A INPUT  2 -s 2.2.2.2 -j accept

对端口进行限制

# iptables -t filter -A INPUT -p udp --dport 123 -j REJECT

思考?两条规则都是对源地址是2.2.2.2的地址进行处理,第一条是丢弃,第二条是接受,实际第二条是不生效的。如果报文已经被前面的规则匹配到,iptables则会对报文执行对应的动作,即使后面的规则也能匹配到当前报文,也没有机会再对报文执行相应的动作了。

参数:

-A 追加

-D 删除

-j  执行动作ACCEPT/DROP/REJECT等

-p 指定协议

-s 源地址

-d 目标地址

-i 输入接口

-o 输出接口

-sport 源端口

-dport 目的端口

4.4 修改规则

# iptables -t filter -R INPUT -s 2.2.2.2 -j drop

修改指定链的默认策略(此处一定要谨慎)

# iptables -t filter -P INPUT DROP

4.5 保存规则

在默认的情况下,我们对”防火墙”所做出的修改都是”临时的”,换句话说就是,当重启iptables服务或者重启服务器以后,我们平常添加的规则或者对规则所做出的修改都将消失,为了防止这种情况的发生,我们需要将规则”保存”。

# service iptables save   该命令即可保存规则,规则默认保存在/etc/sysconfig/iptables文件中

# iptables-save > /etc/sysconfig/iptables

重载规则

# iptables-restore < /etc/sysconfig/iptables

或者

# iptables-save > /etc/iptables.cfg.save

# echo "iptables-restore -n < /etc/iptables.cfg.save >/dev/null 2>&1" >> /etc/init.d/boot.local

5、iptables一般的添加原则

1、先添加白名单

# iptables -A INPUT -s 127.0.0.1 -j ACCEPT

# iptables -A INPUT -p icmp -j ACCEPT

# iptables -A INPUT -s XX.XX.XX.XX/24 -j ACCEPT

2、再添加黑名单

# iptables -A IPUT -j REJECT --reject-with icmp-port-unreachable

iptables详解(1):iptables概念-朱双印博客 (zsythink.net)icon-default.png?t=N7T8https://www.zsythink.net/archives/1199

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

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

相关文章

【Oracle APEX开发小技巧1】转换类型实现显示小数点前的 0 以 及常见类型转换

在 apex 交互式式网格中&#xff0c;有一数值类型为 NUMBER&#xff0c;保留小数点后两位的项&#xff0c;在 展示时小数点前的 0 不显示。 效果如下&#xff1a; 转换前&#xff1a; m.WEIGHT_COEFFICIENT 解决方案&#xff1a; 将 NUMBER&#xff08;20&#xff0c;2&#xf…

Python进阶:从函数到文件的编程艺术!!!

第二章&#xff1a;Python进阶 模块概述 函数是一段可重复使用的代码块&#xff0c;它接受输入参数并返回一个结果。函数可以用于执行特定的任务、计算结果、修改数据等&#xff0c;使得代码更具模块化和可重用性。 模块是一组相关函数、类和变量的集合&#xff0c;它们被封…

Android Media Framework(六)插件式编程与OMXStore

OpenMAX IL Spec阅读到上一节就结束了&#xff0c;这一节开始正式进入到Framework阅读阶段&#xff0c;我们将了解OpenMAX框架是如何与Android Framework连接的。 1、插件式编程 插件式编程&#xff08;Plugin-based Programming&#xff09;是一种软件开发模式&#xff0c;它…

docker login 报错: http: server gave HTTP response to HTTPS client

环境&#xff1a; 自建 Harbor、Docker 1. 问题分析 # 命令&#xff0c;这里用的是 IP&#xff0c;可以为域名 docker login -u test 172.16.51.182:31120 # 输入密码 Password:# 报错如下&#xff1a; Error response from daemon: Get "https://172.16.51.182:31120/…

Flutter IOS 打包上架踩坑

前言 Flutter 作为一款跨平台的移动应用开发框架&#xff0c;凭借其高效、灵活和美观的特性&#xff0c;受到了越来越多开发者的青睐。 然而&#xff0c;当开发者们倾注心血完成 Flutter iOS 应用开发后&#xff0c;如何将应用成功上架至苹果商店&#xff08;App Store&#…

关于QTcreator,19年大学时写的文章了,之前写在印象笔记现在拉过来,往事如烟呐

1.初来乍到&#xff0c;先按照书本写一个基础列程理解一下原理。 这里创建工程的时候选择Qdialog基类&#xff0c;dialog.h头文件&#xff0c;并且勾选了创建界面 &#xff08;勾选之后可以通过手动添加组块并且可以自生成他们的函数定义&#xff0c;如果没有勾选&#xff0c;…

R 初级教程之一

IT的发展目前已经相当的内卷&#xff0c;到处都在说24年是将来4年最难的一年&#xff01;确实是&#xff0c;眼下各大厂商都在疯狂的裁员砍掉不营利的业务&#xff0c;收紧业务&#xff0c;不再盲目的扩张。小公司更是水深火热&#xff0c;无以言表。近期有个医院联系让使用R给…

uniapp中unicloud接入支付宝订阅消息完整教程

经过无数次的尝试,终于还是让我做出来了 准备工作 设置接口加签方式 使用支付宝小程序订阅消息,首先要设置接口加签方式,需要下载支付宝开放平台密钥工具,按照步骤生成秘钥,然后按照支付宝设置密钥加签方式添加接口加签方式。 有一点需要注意的,因为要在云函数中使用,…

MyBatis源码--04:MyBatis缓存实现

缓存作用&#xff1a; 在程序访问数据库这个过程中&#xff0c;存在几个性能瓶颈&#xff1a; 网络通信非关系型数据库将数据存储在硬盘当中&#xff0c;需要进行硬盘操作Java对象复用问题&#xff08;Connection连接池&#xff0c;Statement对象&#xff09; 缓存在程序和数…

Python猫周刊赠书规则与书单

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。在创作《Python潮流周刊》一年多的时间里&#xff0c;我已累计通过抽奖赠书 80 本&#xff01;早期周刊是免费分享&#xff0c;所以参与人数很多&#xff0c;现在周刊转为付费后&#xff0…

Vue50-mixin混入

一、为什么要使用 mixin混入 两个组件共享一个配置。 二、使用 mixin混入 2-1、创建一个混合js文件 2-2、引入混合js文件 1、局部混合 在每个组件中都引入混合js文件 注意&#xff1a; 混合就是复用配置&#xff0c;vm实例中的所有的配置项&#xff0c;都能在混合.js文件中写…

springboot与flowable(10):网关服务(排他网关)

一、绘制流程图 排他网关用于对流程中的决策建模。当执行到这个网关时&#xff0c;会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件为true的顺序流继续流程。例如员工请假时&#xff0c;小于等于3天由组长审批&#xff0c;大于3天由总监审批。流程案例&#xff…

前端:鼠标点击实现高亮特效

一、实现思路 获取鼠标点击位置 通过鼠标点击位置设置高亮裁剪动画 二、效果展示 三、按钮组件代码 <template><buttonclass"blueBut"click"clickHandler":style"{backgroundColor: clickBut ? rgb(31, 67, 117) : rgb(128, 128, 128),…

0614,表达式,语句

题目一&#xff1a; 许多简单的交互式程序都是基于菜单的&#xff1a;它们向用户显示可供选择的命令列表&#xff1b;一旦用户选择了某条命令&#xff0c;程序就执行相应的操作&#xff0c;然后提示用户输入下一条命令&#xff1b;这个过程一直会持续到用户选择 "退出&qu…

SqlSugar使用DbFirst对象根据数据库表结构创建实体类-C#

本文所述开发环境&#xff1a;.C#、NET8、Visual Studio2022 1. 在项目中安装SqlSugar 在Visual Studio2022中新建一个 C# 的控制台应用程序&#xff0c;框架选择 .Net8。新建后如下图所示&#xff1a; 然后打开NuGet程序包管理器 搜索 SqlSugarCore 并安装 安装后在解决方案…

微服务开发与实战Day09 - Elasticsearch

一、DSL查询 Elasticsearch提供了DSL&#xff08;Domain Specific Language&#xff09;查询&#xff0c;就是以JSON格式来定义查询条件。类似这样&#xff1a; DSL查询可以分为两大类&#xff1a; 叶子查询&#xff08;Leaf query clauses&#xff09;&#xff1a;一般是在特…

【C++提高编程-06】----C++之STL-函数对象、谓词、仿函数

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

表面声波滤波器——SAW 基本介绍(1)

声表面波特点与应用 声表面波&#xff0c;也称为表面声波&#xff08;surface acoustic wave&#xff09;&#xff0c;是指在弹性体的自由表面上产生并沿着表面或界面传播的各种模式的波&#xff0c;包括瑞利波(Rayleighwave)&#xff0c;勒夫波(Lovewave)等。 具有以下特点:…

快消品经销商需要注意哪些仓库管理细节,才能提效降本

仓库管理是快消品经销商必须重视的环节&#xff0c;只有仓库管理做好了&#xff0c;整体效率才能得到提升&#xff0c;成本才能降低&#xff0c;客户订单更快地交付&#xff0c;而在仓库管理中有很多细节需要经销商注意。 01仓库布局与设计&#xff1a;合理的仓库布局可以极大地…

13.泛型、trait和生命周期(下)

目录 6. 生命周期与引用有效性6.1 生命周期引入6.2 得到长度最大的String值6.3 生命周期标注语法1&#xff09;说明2&#xff09;普通标注示例3&#xff09;函数参数中的生命周期标注 6.4 深入理解生命周期6.5 结构体定义中的生命周期标注6.6 生命周期省略 6.7 方法定义中的生命…