Iptables深入浅出

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.mzph.cn/bicheng/28242.shtml

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

相关文章

C++中全局变量、函数与静态变量、函数的区别

1、全局变量、局部变量、静态全局变量、静态局部变量的区别 (1)从作用域看: 1)全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用 extern 关键字再次声明这个全局变量。 2)…

05-5.3.1_1 二叉树的先中后序遍历

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

大家来决定:python-office运行时的提示信息,要不要删除?

​ 大家好&#xff0c;这里是程序员晚枫&#xff0c;今天想请大家投票决定一下&#xff1a;运行python-office时的下面这种中文提示信息&#xff0c;要不要全部都取消了&#xff1f;&#x1f447; 为什么加这个提示&#xff1f; 我是在2022年发布的这个开源项目&#xff0c;并…

算法排序之冒泡排序及优化

public class Bubbling {public static void main(String[] args) {// 定义需要排序的数组int[] arr {0,1,21,2,31,12,5,8};// 冒泡排序方法bubbleSort(arr);bubbleOptSort(arr);}/*** 冒泡排序* param arr 数组*/public static void bubbleSort(int[] arr){// i0&#xff0c;…

cmake aux_source_directory详解

在 CMake 中&#xff0c;aux_source_directory 命令用于将指定目录中的源文件列表添加到一个变量中。这对于需要自动发现目录中所有源文件的情况非常有用&#xff0c;特别是在构建测试或动态加载模块时。 基本语法 aux_source_directory(dir variable)dir&#xff1a;源文件所…

Lua 只读表

Lua 的 table 建立只读机制&#xff0c;保护 table 不能被随意修改。 建立只读机制 Lua 的 table 通常情况下是可以随意修改字段的值&#xff0c;或者新增字段。 如果想要建立只读机制&#xff0c;保护表只能读取&#xff0c;而不能被随意修改&#xff0c;可以利用元表。 禁…

Python编程环境搭建

简介&#xff1a; Python环境安装比较简单&#xff0c;无需安装其它依赖环境&#xff0c;主要步骤为&#xff1a; 1. 下载并安装Python对应版本解释器 2. 下载并安装一个ide编码工具 一、下载并安装Python解释器 1.1 下载 官网地址&#xff1a;Welcome to Python.org 选择…

一次数据库连接泄漏导致的响应迟缓

数据库连接池泄漏其实非常普遍&#xff0c;本文简单记一次数据库连接池泄漏问题&#xff0c;排查和思考。 问题与分析 问题&#xff1a;服务器上的负载激增&#xff0c; Postgres 查询的时间和CPU消耗都异常飙升。 分析&#xff1a;经过调试&#xff0c;得出以下分析&#x…

Java云HIS医院管理系统源码 B/S架构 一体化电子病历系统源码 基于云端SaaS平台源码,采用B/S(Browser/Server)架构

“云”指系统采用云计算的技术和建设模式&#xff0c;具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生&#xff0c;由原来医院 (Hospital)到现在的医疗卫生 (Healthcare)&#xff0c;拓展了 H的内涵与外延。云 HIS 重新定义了医院信息系统…

[Python学习篇] Python条件语句

if 语法&#xff1a; if 条件: 条件成立执行的代码1 条件成立执行的代码2 ...... 示例&#xff1a; if False:print("条件成立我执…

【笔记】为什么不同硬件的1T实际硬盘容量硬盘是954GB或者931GB?

问题描述 不管是电脑还是移动硬盘&#xff0c;厂家描述的1T硬盘容量都不是计算机知识领域内真正的1T大小&#xff0c;硬盘容量实际是小于1TB的。 另外还发现对于1TB的不同厂家设备有着实际不同的磁盘容量&#xff0c;比如为什么有的1T电脑硬盘是954GB&#xff0c;而移动硬盘是…

9、Spring之Bean生命周期~依赖注入(总)

9、Spring之Bean生命周期~依赖注入&#xff08;总&#xff09; 依赖注入spring有几种依赖注入方式源码解析 依赖注入 spring有几种依赖注入方式 从类型角度区分&#xff0c;分两种&#xff1a;手动和自动 手动注入&#xff1a;通过XML中定义Bean时&#xff0c;可手动注入 &l…

用Python分析《三国演义》中的人物关系网

用Python分析《三国演义》中的人物关系网 三国演义获取文本文本预处理分词与词频统计引入停用词后进行词频统计构建人物关系网完整代码 三国演义 《三国演义》是中国古代四大名著之一&#xff0c;它以东汉末年到晋朝统一之间的历史为背景&#xff0c;讲述了魏、蜀、吴三国之间…

git 删除已经不存在于远程仓库中的本地分支

git 删除远程仓库中已经不存在的本地远程分支跟踪副本 git fetch --prune 是一个Git命令&#xff0c;它用于从远程仓库获取并更新所有分支的引用&#xff0c;同时删除那些已经不存在于远程仓库中的本地分支。请注意&#xff0c;这个命令不会直接删除你正在工作的本地分支&…

流行跨链桥总结

本贴主要总结出现的新跨链桥&#xff0c;简介&#xff0c;及其项目主页&#xff0c;持续更新 1.Cbridge cBridge引入了一流的跨链Token桥接体验&#xff0c;为用户提供了深度流动性&#xff0c;为不想运营cBridge节点的cBridge节点运营商和流动性提供商提供了高效且易于使用的…

zabbix自定义监控mysql状态和延迟

zabbix自定义监控mysql状态和延迟 文章目录 zabbix自定义监控mysql状态和延迟zabbix自定义监控mysql状态配置主从配置自定义监控添加监控项添加触发器模拟测试异常 zabbix自定义监控mysql延迟配置自定义监控添加监控项添加触发器测试 zabbix自定义监控mysql状态 配置主从 1.安…

Java 面试题:Java 中接口和抽象类有什么区别

在 Java 编程中&#xff0c;接口&#xff08;Interface&#xff09;和抽象类&#xff08;Abstract Class&#xff09;是面向对象编程的重要组成部分。它们都提供了一种机制&#xff0c;允许开发者定义抽象的、可以在具体类中实现的行为。然而&#xff0c;接口和抽象类在结构和用…

FreeRTOS简单内核实现5 阻塞延时

文章目录 0、思考与回答0.1、思考一0.2、思考二0.3、思考三 1、创建空闲任务2、实现阻塞延时3、修改任务调度策略4、提供延时时基4.1、SysTick4.2、xPortSysTickHandler( )4.3、xTaskIncrementTick( ) 5、实验5.1、测试5.2、待改进 0、思考与回答 0.1、思考一 为什么 FreeRTO…

C++移动语义

C语言如何实现类似C移动语义 在 C 语言中&#xff0c;没有直接支持移动语义的语法或特性&#xff0c;因为 C 语言相对于 C 来说更为底层&#xff0c;缺乏像 C 那样的语言特性和标准库。然而&#xff0c;你可以通过手动管理内存来实现类似移动语义的效果。 移动语义的主要目的…

Web前端设计工程师:挑战与机遇并存的职业探索

Web前端设计工程师&#xff1a;挑战与机遇并存的职业探索 在数字化浪潮的推动下&#xff0c;Web前端设计工程师成为了互联网行业的核心力量。他们不仅需要掌握深厚的技术功底&#xff0c;还需具备出色的设计思维与创新能力。本文将从四个方面、五个方面、六个方面和七个方面&a…