当前位置: 首页 > GNU/Linux, Linux系统, 安全工具, 网络安全 > 正文

iptables学习笔记(2)

 上一篇blog:iptables学习笔记(1)中记录了Netfilter基本结构以及对数据包的处理方式,算是对iptables有个大概的了解,本篇blog将继续iptables的原理及其使用方法。

一、iptables结构简介

前面提到Netfilter在内核内存中的配置表:XXtables,这个表是由表(tables)、链(chains)、规则(rules)组成的。

表(tables)iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。每一个表中都有若干条链,以处理不同的数据包。

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

规则(rules):网络管理员预先定义的条件,其对数据包的处理就是上面说的处理方式,比如放行(accept)、拒绝(reject)和丢弃(drop)等。防火墙的配置也主要就是配置添加、修改和删除这些规则。

上面三者在iptables中的结构如下图表示:

iptables-1

二、filter、nat、mangle、raw表

filter表

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

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

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

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

nat表

网络地址转换,主要用于修改数据包的IP地址、端口号等信息(如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次。其后余下的包都会自动地被做相同的操作,而不会再通过这个表。表对应的内核模块为 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表

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

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

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

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

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

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

三、INPUT、FORWARD等规则链

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

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

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

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

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

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

四、ACCEPT、DROP等规则

ACCEPT允许数据包通过

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

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

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

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

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

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

iptables-2

参考资料:

iptables指南  https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html

 



这篇博文由 s0nnet 于2016年01月13日发表在 GNU/Linux, Linux系统, 安全工具, 网络安全 分类下, 通告目前不可用,你可以至底部留下评论。
如无特别说明,独木の白帆发表的文章均为原创,欢迎大家转载,转载请注明: iptables学习笔记(2) | 独木の白帆
关键字: ,

iptables学习笔记(2):等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter