Linux之iptables原理详解

本文和大家分享的主要是linux中iptables原理相关内容,一起来看看吧,希望对大家学习linux有所帮助。

目录:

一、netfilter与iptables

二、filter、nat、mangle等规则表

三、INPUT、FORWARD等规则链和规则

四、Linux数据包路由原理

五、iptables编写规则

一 、netfilter与iptables

(1)Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。Iptables/Netfilter的这些规则可以通过灵活组合,形成非常多的功能、涵盖各个方面,这一切都得益于它的优秀设计思想。

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

. 网络地址转换(Network Address Translate)

. 数据包内容修改

. 数据包过滤防火墙

(2)Netfilter 平台中制定了数据包的五个挂载点(Hook Point,我们可以理解为回调函数点,数据包到达这些位置的时候会主动调用我们的函数,使我们有机会能在数据包路由的时候改变它们的方向、内容),这5个挂载点分别是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。

(3)Netfilter 所设置的规则是存放在内核内存中的,而 iptables 是一个应用层的应用程序,它通过 Netfilter 放出的接口来对存放在内核内存中的 XXtables(Netfilter的配置表)进行修改。这个XXtables由表tables、链chains、规则rules组成,iptables在应用层负责修改这个规则文件。类似的应用程序还有 firewalld 。

二、filter、nat、mangle等规则四表

(1)table有 filter、nat、mangle等规则表;

filter表

主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG)。filter 表对应的内核模块为iptable_filter,包含三个规则链:

. INPUT链: INPUT针对那些目的地是本地的包

. FORWARD链: FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的

. OUTPUT链: OUTPUT是用来过滤所有本地生成的包

nat表

主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过

这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。表对应的内核模块为 iptable_nat,包含三个链

. PREROUTING链: 作用是在包刚刚到达防火墙时改变它的目的地址

. OUTPUT链: 改变本地产生的包的目的地址

. POSTROUTING链: 在包就要离开防火墙之前改变其源地址

mangle表

主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等

应用,由于需要相应的路由设备支持,因此应用并不广泛。包含五个规则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

raw表

是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链——OUTPUT、PREROUTING

(2)iptables中数据包和 4种被跟踪连接 的4种不同 状态:

. NEW: 该包想要开始一个连接(重新连接或将连接重定向)

. RELATED: 该包是属于某个已经建立的连接所建立的新连接。例如:FTP的数据传输连接就是控制连接所 RELATED出来的连接。–icmp-type 0 ( ping 应答) 就是–icmp-type 8 (ping 请求)所RELATED出来的。

. ESTABLISHED : 只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包。

. INVALID: 数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。

三、INPUT、FORWARD等规则五链和规则

(1)在处理各种数据包时,根据防火墙规则的不同介入时机,iptables供涉及5种默认规则链,从应用时间点的角度理解这些链:

. INPUT链: 当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。

. OUTPUT链: 当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

. FORWARD链: 当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。

. PREROUTING链: 在对数据包作路由选择之前,应用此链中的规则,如DNAT。

. POSTROUTING链: 在对数据包作路由选择之后,应用此链中的规则,如SNAT。

(2)其中中INPUT、OUTPUT链更多的应用在“主机防火墙”中,即主要针对服务器本机进出数据的安全控制;而FORWARD、PREROUTING、POSTROUTING链更多的应用在“网络防火 墙”中,特别是防火墙服务器作为网关使用时的情况。

四、Linux数据包路由原理

(1)理解了Netfilter和Iptables的架构和作用,并且学习了控制Netfilter行为的Xtables表的结构,那么这个Xtables表是怎么在内核协议栈的数据包路由中起作用的呢?

工作流程:网口数据包由底层的网卡NIC接收,通过数据链路层的解包之后(去除数据链路帧头),就进入了TCP/IP协议栈(本质就是一个处理网络数据包的内核驱动)和Netfilter混合的数据包处理流程中了。数据包的接收、处理、转发流程构成一个有限状态向量机,经过一些列的内核处理函数、以及Netfilter Hook点,最后被转发、或者本次上层的应用程序消化掉。

如图:

从上图中,我们可以总结出以下规律:

. 当一个数据包进入网卡时,数据包首先进入 PREROUTING链 ,在PREROUTING链中我们有机会修改数据包的DestIP(目的IP),然后内核的”路由模块”根据”数据包目的IP”以及”内核中的路由表”判断是否需要转送出去(注意,这个时候数据包的DestIP有可能已经被我们修改过了)

. 如果数据包就是进入本机的(即数据包的目的IP是本机的网口IP),数据包就会沿着图向下移动,到达 INPUT链 。数据包到达INPUT链后,任何进程都会-收到它

. 本机上运行的程序也可以发送数据包,这些数据包经过 OUTPUT链, 然后到达 POSTROTING链输出 (注意,这个时候数据包的SrcIP有可能已经被我们修改过了)

. 如果数据包是要转发出去的(即目的IP地址不再当前子网中),且内核允许转发,数据包就会向右移动,经过 FORWARD链 ,然后到达 POSTROUTING链输出 (选择对应子网的网口发送出去)

在写iptables规则的时候,要时刻牢记这张路由次序图,根据所在Hook点的不同,灵活配置规则

五、iptables编写规则

命令格式:

示例:

1 iptables -I INPUT -s 0/0 -d 192.168.42.153 -p tcp -m multiport –dports 22,80,3306 -j ACCEPT

1 iptables -t filter -I INPUT -d 192.168.42.153 -p tcp –dport 80 -j ACCEPT

1.[-t 表名] :该规则所操作的哪个表,可以使用filter、nat等,如果没有指定则默认为filter

. -A:新增一条规则,到该规则链列表的最后一行

. -I:插入一条规则,原本该位置上的规则会往后顺序移动,没有指定编号则为1

. -D:从规则链中删除一条规则,要么输入完整的规则,或者指定规则编号加以删除

. -R:替换某条规则,规则替换不会改变顺序,而且必须指定编号。

. -P:设置某条规则链的默认动作

. -nL:-L、-n,查看当前运行的防火墙规则列表

2.chain名:指定规则表的哪个链,如INPUT、OUPUT、FORWARD、PREROUTING等

. [规则编号]:插入、删除、替换规则时用,–line-numbers显示号码

. [-i|o 网卡名称]:i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出

. [-p 协议类型]:可以指定规则应用的协议,包含tcp、udp和icmp等

. [-s 源IP地址]:源主机的IP地址或子网地址

. [–sport 源端口号]:数据包的IP的源端口号

. [-d目标IP地址]:目标主机的IP地址或子网地址

. [–dport目标端口号]:数据包的IP的目标端口号

3.-m :extend matches,这个选项用于提供更多的匹配参数,如:

. -m state –state ESTABLISHED,RELATED

. -m tcp –dport 22

. -m multiport –dports 80,8080

. -m icmp –icmp-type 8

4.<-j 动作> :处理数据包的动作,包括ACCEPT、DROP、REJECT等

. ACCEPT: 允许数据包通过

. DROP: 直接丢弃数据包,不给任何回应信息

.REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息。

SNAT:源地址转换。在进入路由层面的route之后,出本地的网络栈之前,改写源地址,目标地址不变,并在本机建立NAT表项,当数据返回时,根据NAT表将目的地址数据改写为数据发送出去时候的源地址,并发送给主机。解决内网用户用同一个公网地址上网的问题。

MASQUERADE,是SNAT的一种特殊形式,适用于像adsl这种临时会变的ip上

DNAT:目标地址转换。和SNAT相反,IP包经过route之前,重新修改目标地址,源地址不变,在本机建立NAT表项,当数据返回时,根据NAT表将源地址修改为数据发送过来时的目标地址,并发给远程主机。可以隐藏后端服务器的真实地址。(感谢网友提出之前这个地方与SNAT写反了)

REDIRECT:是DNAT的一种特殊形式,将网络包转发到本地host上(不管IP头部指定的目标地址是啥),方便在本机做端口转发。

LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

除去最后一个LOG,前3条规则匹配数据包后,该数据包不会再往下继续匹配了,所以编写的规则顺序极其关键。

来源: 运维部落

时间: 2024-08-23 04:12:39

Linux之iptables原理详解的相关文章

linux下IPTABLES配置详解 (防火墙命令)

linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT-A RH-Firewall-1-INPUT -s 121.10.120.24 -p tcp -m tcp --dport 18612 -j ACCEPT 如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的

Java网络编程和NIO详解6:Linux epoll实现原理详解

Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2pl/ Linux epoll实现原理详解 在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者pol

Linux防火墙iptables基础详解

原文来自于:https://www.linuxidc.com/Linux/2017-01/140073.htm(引用自) 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关.

Linux下IPtables命令详解

Linux下IPtables命令图解 Linux下IPtables命令剖析 1.命令:-A 顺序添加,添加一条新规则-I 插入,插入一条新规则 -I 后面加一数字表示插入到哪行-R 修改, 删除一条新规则 -D 后面加一数字表示删除哪行-D 删除,删除一条新规则 -D 后面加一数字表示删除哪行-N 新建一个链-X 删除一个自定义链,删除之前要保证次链是空的,而且没有被引用-L 查看@1.iptables -L -n 以数字的方式显示@2. iptables -L -v显示详细信息@3. ipta

linux下IPTABLES配置详解

iptables 配置 如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [[email protected] ~]# iptables -L -nChain INPUT (policy ACCEPT)target       prot opt source                 destination Chain FORWARD (policy ACCEPT)target     

linux 下iptables配置详解

转自http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html 如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [[email protected] ~]# iptables -L -nChain INPUT (policy ACCEPT)target       prot opt source                

Linux防火墙iptables命令详解和举例

网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能有所帮助. iptables -Fiptables -Xiptables -F -t mangleiptables -t mangle -Xiptables -F -t natiptables -t nat -X首先,把三个表清空,把自建的规则清空. iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD ACCEPT设定INPUT.OUTPUT的默

linux下iptables防火墙详解

Linux网络防火墙基础知识 工作在主机或网络的边缘,对于进出的数据报文按照事先定义好的规则中的匹配标准进行检查,并做出对应的处理办法的机制称作防火墙. IP报文首部:主要包含源IP,目标IP TCP报文首部:主要包含源端口,目标端口,标志位SYN,ACK,RST,FIN 匹配标准解释: IP: 源IP,目标IP TCP: 源端口,目标端口 TCP三次握手三个阶段表示: 第一阶段:  SYN=1,FIN=0,RST=0,ACK=0; 第二阶段: SYN=1,ACK=1,FIN=0,RST=0;

[转]linux下IPTABLES配置详解

如果你的IPTABLES基础知识还不了解,建议先去看看.开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况[[email protected] ~]# iptables -L -n Chain INPUT (policy ACCEPT) target       prot opt source                 destination          Chain FORWARD (policy ACCEPT) target       pr