iptables网络防火墙

iptables可以作为主机防火墙,同时还可以作为网络防火墙
网络防火墙往往处于网络的入口或者边缘,那么,如果想要使用iptables充当网络防火墙,iptables所在的主机则需要处于网络入口处,示意图如下。

当外部网络中的主机与网络内部主机通讯时,不管是由外部主机发往内部主机的报文,还是由内部主机发往外部主机的报文,都需要经过iptables所在的主机,由iptables所在的主机进行"过滤并转发",所以,防火墙主机的主要工作就是"过滤并转发",那么,说到这里,我们则不得不再次回顾之前的iptables报文流程图了,如下:

iptables作为"主机防火墙"的角色出现的,只用到了上图中的INPUT链与OUTPUT链,因为拥有"过滤功能"的链只有3条,INPUT、OUTPUT、FORWARD,当报文发往本机时,如果想要过滤,只能在INPUT链与OUTPUT链中实现,而此时,iptables的角色发生了转变,我们想要将iptables所在的主机打造成"网络防火墙",而刚才已经说过,网络防火墙的职责就是"过滤并转发",要想"过滤",只能在INPUT、OUTPUT、FORWARD三条链中实现,要想"转发",报文则只会经过FORWARD链(发往本机的报文才会经过INPUT链),所以,综上所述,iptables的角色变为"网络防火墙"时,规则只能定义在FORWARD链中。

环境准备


我已经准备了3台虚拟机,A、B、C,虚拟机A与虚拟机B的网卡2都使用了桥接模式。
由于B主机现在的角色是10.1.0.0中的"网络防火墙",那么,我们直接将C主机的网关指向B主机的内部网络IP,如下图所示

同时,为了尽量简化路由设置,我们直接将A主机访问10.1网络时的网关指向B主机的网卡2上的IP,如下图所示。

现在A不能ping通C,但是已经可以ping通B了,需要修改B的转发功能

net.ipv4.ip_forward = 1

现在,我们同时将A主机与C主机中的web服务启动,以便进行测试。

网络防火墙测试

iptables作为网络防火墙时,主要负责"过滤与转发",既然要过滤,则需配置filter表,既然要转发,则需在FORWAED链中定义规则,所以,我们应该在filter表中的FORWARD链中配置规则。
在主机B中FORWARD链的末端添加一条默认拒绝的规则,然后将"放行规则"设置在这条"默认拒绝规则"之前即可。

配置完上述规则后,主机A与主机C已经无法通讯了,因为它们之间如果想要通讯,则需要靠主机B进行转发,而上述规则设置完成后,所有报文都无法通过FORWARD链了,所以任何经过转发的报文在经过FORWARD链时都会被拒绝,外部主机的报文无法转发到内部主机中,内部网主机的报文也无法转发到外部主机中,因为主机B已经拒绝转发所有报文。

配置内部的主机能够访问外部主机的web服务:需要在FORWARD链中放行内部主机对外部主机的web请求,同时也要配置外部能响应的回应报文。只需如下配置即可


这样C就可以访问A了

优化上述规则配置进行,比如,不管是由内而外,还是由外而内,只要是"响应报文",我们统统放行,配置如下

如上图所示,先将"web响应报文放行规则"删除,同时增加了上图中的规则,只需要在网络防火墙主机的FORWARD链中添加如上一条规则,就可以将绝大多数响应报文放行了,不管是外部响应内部,还是内部响应外部,一条规则就能搞定,当iptables作为网络防火墙时,每次配置规则时都要考虑"双向"的问题,但是配置完上述规则后,我们只要考虑请求报文的方向就行了,而回应报文,上述一条规则就能搞定,这样配置,即使以后有更多服务的响应报文需要放行,我们也不用再去针对响应报文设置规则了,应该会让我们省去不少规则吧。

posted @ 2019-03-27 23:03  reaperhero  阅读(143)  评论(0编辑  收藏  举报