1、Linux系统中的防火墙
Linux系统中防火墙有两大角色:iptables和netfilter。iptables是Linux系统下应用层内置控制防火墙的工具,netfilter则是防火墙功能的具体实现,是内核空间的功能模块。所谓iptables“控制”防火墙,就是用户利用iptables将防火墙规则设置给内核的netfilter功能模块。
2、iptables如何控制防火墙
这里涉及到一个概念,叫做“四表五链”,”四表五链”其实是对用户设置规则的管理,是看待用户设置的规则的两个维度。
怎么理解”四表五链”呢?我们首先得知道是哪四个表?哪五条链?这里四个表是指:Filter表、Nat表、Mangle表和Raw表,五条链是指:INPUT链、OUTPUT链、FORWARD链、PREROUTING链和POSTROUTING链。
下面是这”四表”的作用
Filter表:过滤数据包
NAT表:用于网络地址转换(IP、端口)
Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表:决定数据包是否被状态跟踪机制处理
下面是”五链”的作用
INPUT链:进来的数据包应用此规则链中的规则
OUTPUT链:外出的数据包应用此规则链中的规则
FORWARD链:转发的数据包应用此规则链中的规则
PREROUTING链:对数据包作路由选择前应用此链中的规则
POSTROUTING链:对数据包作路由选择后应用此链中的规则
那这”四表五链”怎么起作用呢?
举个例子,假如服务器就是一个大院,大院里面的房间就是各种应用软件,假如有人要进入这个大院,那么“四表”就相当于四个保安队,“五链”就相当于每个保安队里面的具体某个保安,用户进到大门,会有一个队的一个保安(PREROUTING链)过来问一下是谁,干啥的,如果这个保安收到了房主(用户)的命令不允许张三进入,如果是那个人刚好是张三,则会拦在门口不能进入。
假如用户进入了大门,想要进入某个房间(也就是访问某个应用)此时就会有另一个保安队(表)某个保安(INPUT链)来核查身份,用户拜访完后从房间里出来也会有另一个保安队(表)某个保安(OUTPUT链)来核查身份,用户出大门也会有另一个保安队(表)某个保安(POSTROUTING链)来核查身份。
加入用户只是进入大门,然后从另一个大门出去,那么此时也会有一个保安队(表)某个保安(FORWARD链)来核查身份。
上面的例子中:大院相当于服务器,大门相当于网卡,房间相当于服务器里面的应用,保安队相当于”表”,保安相当于”链”。用户相当于访问者,设置规则的人相当于房主也就是服务器的所有者。
下面是网络上的一张经典”四表五链”架构图:
上面的图就是一个Linux服务器
数据包从网络A进入这台服务器,会先抵达PREROUTING链,此时nefilter程序会依次从Raw表、Mangle表和NAT表中取出针对PREROUTING链的用户规则并执行相应操作;
若是通过,则通过路由选择,若是该数据包为转发的数据包则nefilter程序会依次从Mangle表和Filter表取出针对FORWARD链的用户规则并执行相应操作,若是该数据包会进入到本机的应用程序,则filter程序会依次从Filter表和Mangle表取出针对INPUT链的用户规则并执行相应操作;
若是通过则经过路由选择,filter程序会依次从Raw表、Mangle表、NAT表和Filter表取出针对OUTPUT链的用户规则并执行相应操作;
最后filter程序会依次从Mangle表和Nat表取出针对POSTROUTING链的用户规则并执行相应操作.
对上面的表和链归类下则为:
可以看到,正常情况下我们只需要关注Filter表和Nat表就可以了覆盖到所有出入口了。