您的位置 首页 ADAS

你了解Linux中的iptables原理?

你了解Linux中的iptables原理?-Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。

一、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条规矩匹配数据包后,该数据包不会再往下持续匹配了,所以编写的规矩次序极端要害。

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/89553.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部