数据包通过防火墙时的情况分为三种:
1、以本地为目标的包
当一个数据包进入防火墙后,如果目的地址是本机,被防火墙进行检查的顺序如下:
如果在某一个步骤数据包被丢弃,就不会执行后面的检查
步骤 | 表 | 链 | 说明 |
1 | 数据包在链路上进行传输 | ||
2 | 数据包进入网络接口 | ||
3 | mangle | PREROUTING | 这个链路用来mangle数据包,如对包进行改写或做标记 |
4 | nat | PREROUTING | 这个链主要用来做DNAT |
5 | 路由判断,如包是发往本地的还是要转发的 | ||
6 | mangle | INPUT | 在路由之后,被送往本地程序之前如对包进行改写或做标记 |
7 | filter | INPUT | 所有以本地为目的的包都需要经过这个链,包的过滤规则设置在此 |
8 | 数据包到达本地程序,如服务程序或客户程序 |
2、以本地为源的包
本地应用程序发出的数据包,被防火墙进行检查的顺序如下:
步骤 | 表 | 链 | 说明 |
1 | 本地程序,如服务程序或客户程序 | ||
2 | 路由判断 | ||
3 | mangle | OUTPUT | 用来mangle数据包,如对包进行改写或标记 |
4 | nat | OUTPUT | 对发出的包进行DNAT操作 |
5 | filter | OUTPUT | 对本地发出的包过滤,包的过滤规则设置在此 |
6 | mangle | POSTROUTING | 进行数据包的修改 |
7 | filter | POSTROUTING | 在这里做SNAT |
8 | 数据包离开网络接口并在链路上传输 |
3、被转发的数据包
需要通过防火墙转发的数据包,被防火墙进行检查的顺序如下;
步骤 | 表 | 链 | 说明 |
1 | 数据包在链路上传输 | ||
2 | 进入网络接口 | ||
3 | mangle | PREROUTING | mangle数据包,对包进行改写或做标记 |
4 | nat | PREROUTING | 这个链主要做DNAT |
5 | 路由判断,如包是发往本地的,还是要转发 | ||
6 | mangle | FORWARD |
包继续被发送至mangle表的FORWARD链,这是非常特殊的情况 下才会用到的,在这里,包被mangle。这次mangle发生在最初 的路由判断之后,在最后一次更改包的目的之前 |
7 | filter | FORWARD |
FORWARD包断续被发送到这条FORWARD链,只有需要转发的包 才会走到这里,并且针对这些包的所有过滤也在这里进行,注意,所有 转发的包都要经过这里 |
8 | mangle | POSTROUTING |
这个链也是针对一些特殊类型的包,这一步mangle是在所有更改 包的目的地址的操作完成之后做的,但这时包还在本地上 |
9 | nat | POSTROUTING |
这个链就是用来做SNAT的,不推荐在此处过滤,因为某些包即使 不满足条件也会通过 |
10 | 离开网络接口 | ||
11 | 数据包在链路上传输 |
在对包进行过滤时,常有以下3个动作。
(1)ACCEPT:一旦数据包满足了指定的匹配条件,数据包就会被ACCEPT,并且不会再去匹配当前链中的其他的规则或
同一个表内的其他规则,但数据仍然需要通过其他表中的链
(2)DROP:如果包符合条件,数据包被会丢掉,并且不会向发送者返回任何信息,也不会向路由返回信息
(3)REJECT: 和DROP基本一样,区别在于除了将包丢弃并且向发送者返回错误信息。
示例如下:
其中“ policy DROP " 表示该链的默认规则为DROP操作,如现有一数据包,源地址为
192.168.1.58,目的地址为137.254.60.6,协议为TCP,目的的端口为80,当该数据包通过FORWARD链时,
从上往下开始匹配,过程如下:
(1) 与第1条规则:源为192.168.100.0/24,源地址不匹配
(2) 与第2条规则:目的为69.147.0.0/24,目标不匹配
(3)与第3条规则: 源为172.16.0.0/16,源不匹配
(4)与第4条规则:源为10.0.0.0/24, 源不匹配
由于经过匹配以上所有规则都不符合,数据包则转交给默认规则处理,由于本示例默认的规则为DROP,
因为该数据包被丢弃,
再看另一个数据包,源地址为192.168.1.58,目的地址为69.147.83.199,协议为TCP,目的端口为80,当该
数据包通过FORWARD链时,从上往下开始匹配:
(1)与第1条规则:源为192.168.100.0/28, 源不匹配
(2)与第2条规则:源地址为任意(0.0.0.0/0),匹配;目的地址为67.147.0.0/24
因为69.147.83.199在范围内,匹配;源端口和目的端口为任意,匹配;协议为任意(all),匹配:规则链对该
数据包的动作为ACCEPT,因此该数据包通过。
如果数据包的源地址为10.0.0.35,目的地址为69.147.83.199,协议为TCP,目的端口为80,当该数据包
通过FORWARD链时,从上往下开始匹配,当匹配到第4条规则时匹配,动作为mychain,此时数据包会被
转到用户自己定义的规则链mychain进行处理
原文地址:https://www.cnblogs.com/myworld5218/p/9790331.html