文章目录
- 1. Iptables的链
- 2.Iptables的表
- 3.数据包过滤的匹配流程
- 3.1 规则表之间的顺序
- 3.2 规则链之间的顺序
- 3.3 规则链内部各条防火墙规则之间的顺序
- 3.4如何应用
每个
规则表
,其实就相当于一个内核空间的容器,
按照规则集
的不同用途进行划分为默认的四个表,
在每个规则表
中包含不同的规则链
,处理数据包的不同时机分为
五种链
,决定是否过滤或处理数据包的各种规则并按照先后顺序存放在
各规则链
中。
- 规则的作用:对数据包进行过滤或处理;
- 链的作用:容纳多种防火墙规则;
1. Iptables的链
input 链
:当收到访问防火墙本机地址的数据包时,将应用此链中的规则;output 链
:当防火墙本机向外发送数据包时,将应用此链中的规则;forward 链
:当收到需要通过防火墙中转发给其他地址的数据包时,将应用此链中的规则;prerouting 链
:在对数据包做路由选择之前,将应用此链中的规则;postrouting 链
:在对数据包做路由选择之后,将应用此链中的规则;
input 链 和 output 链主要用在主机型防火墙,是针对服务器本机进行保护的防火墙;
forward 链、prerouting 链、postrouting 链主要用在网络型防火墙,是针对公司内网与 Internet 之间进行安全控制。
2.Iptables的表
iptables
管理着四个不同的规则表,分别由独立的内核模块实现。
-
filter 表
:用来对数据包进行过滤,具体的规则要求决定如何处理一个数据包。对应的内核模块为:
iptable_filter
,其表内包括三个链:input
、forward
、output
; -
nat 表
:nat 全称:network address translation 网络地址转换,主要用来修改数据包的 IP 地址、端口号信息
。对应的内核模块为:
iptable_nat
,其表内包括三个链:prerouting
、postrouting
、output
; -
mangle 表
:主要用来修改数据包的服务类型,生存周期
,为数据包设置标记,实现流量整形、策略路由等。对应的内核模块为:
iptable_mangle
,其表内包括五个链:prerouting
、postrouting
、input
、output
、forward
; -
raw 表
:主要用来决定是否对数据包进行状态跟踪。对应的内核模块为:
iptable_raw
,其表内包括两个链:output
、prerouting
;
3.数据包过滤的匹配流程
3.1 规则表之间的顺序
当数据包到达防火墙时,如果对应的链内有规则存在,将按照顺序依次从raw 表
→mangle 表
→nat 表
→filter 表
。
3.2 规则链之间的顺序
-
流入数据流向
:如果是外边的数据包到达防火墙后,要先通过prerouting 链
:对数据包做路由选择之后,将应用此链中的规则,然后将进行路由选择,确认数据包的目标地址是否是防火墙本机,结合内核传送给input
链做处理,确认通过之后,便可以交给服务器端来进行响应。流入本机:PREROUTING --> INPUT --> PROCESS
-
转发数据流向
:如果是外边的数据包到达防火墙后,要先通过prerouting 链
做相关处理,随后进行路由选择,数据包的目标地址是任何其他地址的话,则将通过内核传给forward
来进行处理是否需要通过或直接丢弃,最后将交给postrouting 链
来查看是否有需要修改的数据包信息来进行处理。经过本机:PREROUTING --> FORWARD --> POSTROUTING
-
流出出数据流向
:出流量,其实就是防火墙本机向外的地址发送数据包,首先被output 链
处理,然后选择路由,然后在postrouting 链
查看是否修改数据包的信息来进行处理。从本机流出:PROCESS --> OUTPUT --> POSTROUTING
3.3 规则链内部各条防火墙规则之间的顺序
数据包经过每条规则链时,将按照第一条规则、第二条规则……的顺序进行匹配和处理。
- 将按照从
匹配到停止
的方式,如找到一条匹配的规则,将不再执行本链中后续的其他规则; - 如果对比整个链也找不到与数据包相匹配的规则时,将按照该规则链的默认策略进行处理;
3.4如何应用
- 问题1:来自于10.0.0.1的地址,访问本机的web服务请求都不允许,应该在哪个表的哪个链上设定规则?
PREROUTING ( nat、mangle、raw ) --》 INPUT ( filter、nat、mangle )
要做过滤,只能需要filter表,所以是INPUT链
- 问题2:所有由本机发往10.0.0.0/24网段的TCP服务都不允许?
OUTPUT ( filter ) --> POSTROUTING ( nat mangle )
要做过滤,只能需要filter表,所以是OUTPUT链
- 问题3:所有来自己本地内部网络的主机,像互联网发送web服务器请求都允许?
PREROUTING --> FORWARD ( filter ) --> POSTROUTING
要做过滤,只能需要filter表,所以是FORWARD链
应用总结
1.实现的功能是什么: 操作哪个表 filter
2.报文经过哪些路线: 判断规则添加到哪个链上 OUTPUT