linux系统之iptables其一原理

本文涉及的产品
云防火墙,500元 1000GB
公网NAT网关,每月750个小时 15CU
简介:

之前的博文己说明了ip、tcp封包格式,深入了解其报文格式,对于这次说明 iptables的原理将有很大帮助。

前言
如果你运行的是linux操作系统,那么很有可以遇到过iptables防火墙,因为iptables提供了一个有效的手断来控制谁可以且如何通过网络连接到linux系统。部署一个严格的iptables过滤策略是维护一个强大实体的第一步。
一、iptables与netfilter
如果一说iptables就表示防火墙,其实这样说并不准确;iptables防火墙由Netfilter项目开发,自2001年1月linux2.4内核发布以来,它就成了linux的一部分了。由linux提供的所有包过虑和包修改设施的官方项目名为Netfilter,但这个术语同时也指linux内核中的一个框架,它可以用于在不同的阶段将函数挂接进网络栈。另一个方面,iptables使用netfilter框架旨在将对数据包执行操作(如过虑)的函数挂进网络栈,你可以认为netfilter提供了一框架,iptables在它之上建立了防火墙功能。nterfilter本身并不对数据包进行过虑---------它只是允许可以过虑数据包的函数挂接到内核中适当的位置。netfilter项目还在内核中提供了一些基础设施,如连接跟踪和志记录,任何iptables策略都可以使用这些设施来执行对特定的数据包处理。
二、iptables过滤
iptables的策略是如何定义的?其实iptabels就是一个过滤器,它可根据数据来源和去向进定限定。ip过虑主要工作于tcp/ip的协议的第二层,当然iptables有工作在第三层的能力。iptables严格按照tcp/ip协议处理报文流,但iptables是基于逐包的原则上处理的,它跟踪的序列号,端口号等等,来确定了一个唯一的流,这个就是所谓的连接跟踪,在连接的跟踪的基础之上,我们就可以做一些其它的操作,例如NAT,或者是基于状态的包过虑。
三、ip过滤的术语
1、DROP
当一个报文被丢弃或者拒绝的时个,它是被简单的释放,没有更多的后续工作,不会发送一个回应告诉主机这个报文被丢弃了,接收主机也不会被告知这个报文丢弃了,这个报文从此消失。
2、REJECT
从根本上来说,这个动作和上面的 DROP一样,只是REJECT 还会发送一个应答给发送主机,通知他这个报文被丢弃了。
3、APPECT
接受一个报文并且让他从防火墙的规则里面透过,它和DROP/REJECT 是相对的。

4、 Policy

我们讲策略的时候,主要有两重含义。第一是假如报文通过防火墙规则链检查的时候,不匹配任何规则我们应该怎么做,这个是我们讲的主要关注点。另外一个策略的含义就是我们通常讲的宽泛的安全策略。

5、Rule
在 Iptables 的实现里面,一个规则就是一个基本匹配加上可能存在的几个扩展匹配以及唯一的一个动作。我们已经提供了很多的动作或者匹配,他们都可以被应用到规则里面。
6、Target
通常而言,在规则集合里面的每一条规则都有一个自己的目标,换句我们更容易理解的话就是动作。假如一个报文匹配这个规则,那么这个动作就要被执行。例如这个动作可能是丢弃或者接收报文,还有可能是地址转换,每一个规则的 Target 都是可选的。
7、State
一个报文的状态是相对于一组报文来说的。例如,一个报文是防火墙第一次见到或者是已知的,那么他们的状态分别就是新建或者稳定流。状态可以通过连接跟踪系统获取到,在连接跟踪系统里面保存了所有的会话。
8、Table
每一个表都有特定的目的,在 iptables 里面有四个表,分别是raw,mang,net,filter.例如,filter表专门用来完成报文过滤,nat表专门用来完成地址转化等等。
9、Chain

一个链其实就是一组规则集合,在iptables里有五条链,分别是PREROUTING,INPUT,OUTP POSTROUTING,FORWORD这个规则会被应用到所有经过这个链的报文。每一个链都有其特定的含义,例如它关联到哪个表,它能够做什么事情。

四、表与链

1、规则表

注:表的优先级同下顺序

(1)、raw表

属性 说明
相关链 OUTPUT、PREROUTING
作用 raw表的一个主要用途就是为了一件事情,那就是对报文设置一个标志,决定数据包是否被状态跟踪机制处理
内核模块 iptable_raw

(2) 、mangle表

属性 说明
相关链 PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用 修改数据包的服务类型、TTL、并且可以配置路由实现QOS。
内核模块 iptable_mangle

(3)、nat表

属性 说明
相关链 PREROUTING、POSTROUTING、OUTPUT
作用

只能用来完成源/目的地址的转换。需要注意的是,只有第一个报文会经过这个表,这个连接的其他报文会自动完成转换。这个表的 target 有: DNAT、SNAT、MASQUERADE、REDIRECT

内核模块 iptable_nat

(4)、filter表

属性 说明
相关链 INPUT、FORWARD、OUTPUT
作用 报文过滤
内核模块 iptables_filter

2、规则链

说明
PREROUTING 对数据包作路由选择前应用此链中的规则。(所有的数据包进来的时侯都先由这个链处理)
INPUT 进来的数据包应用此规则链中的策略
OUTPUT 外出的数据包应用此规则链中的策略
FORWARD 转发数据包时应用此规则链中的策略
POSTROUTING 对数据包作路由选择后应用此链中的规则。(所有的数据包出来的时侯都先由这个链处理)

五、iptables传输数据包的过程

wKioL1M2AJKS-sb-AAMUt0c4-nE289.jpg

简单解释一下上面这个图,例如一个报文到了第一个需要做路由决定的点,如果它的目的不是本机,则会被转发到 FORWARD 链,反之,目的地址正是本机所监听的,那么就会通过 INPUT 链把报文送给本机。 还需要指出的是,报文的目的地址是本机,但是它的地址可能会在PREROUTING 链里被 NAT 修改。因为这个发生在第一次路由前,报文在修改后才能路由。请注意,所有报文都会经过上面的至少一条链。如果你把你一个报文做 DNAT,然后把它发回它原来来的网络,这样它就会沿着余下的链表,直到它被发送回原来的网络。

数据包流向情况分析

第一种情况:目标是本地主机

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),路由决定,例如决定报文是发向本机还是转发或者其他地方,如果数据包的目标主机是本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(所有送往本机的报文都会进行过滤,决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

第二冲情况:转发报文
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问web站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理

第三种情况:本地主机发送报文

本地进程或者应用程序(例如服务器或者客户端程序)向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址(SNAT)等)进行处理。

===================================未完========================================

PS:

   1、下篇将说明iptables的命令格式,基本用法











本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1386349,如需转载请自行联系原作者
目录
打赏
0
0
0
0
235
分享
相关文章
|
1月前
|
【Linux】阻塞信号|信号原理
本教程从信号的基本概念入手,逐步讲解了阻塞信号的实现方法及其应用场景。通过对这些技术的掌握,您可以更好地控制进程在处理信号时的行为,确保应用程序在复杂的多任务环境中正常运行。
134 84
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
83 24
|
3天前
|
Linux系统下快速批量创建和删除文件的方法
总的来说,使用shell脚本来批量处理文件是一种非常强大的工具,只要你愿意花时间学习和实践,你会发现它能大大提高你的工作效率。
40 19
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
60 2
Linux系统之su命令的基本使用
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
49 17
|
27天前
|
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
113 27
|
1月前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
133 10
|
2月前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
127 24
Linux系统之whereis命令的基本使用
|
1月前
|
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
157 8
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等