转载 :https://www.cnblogs.com/long-cnblogs/p/10711146.html
我们要想将iptables这台主机扮演成网络防火墙怎么办呢?iptables FORWARD,更重要的是需要打开核心转发,而且我们在本机内部后端应该有内网中的其它主机,那因此为了演示效果,接下来我们构建这么一个拓扑来看看网络防火墙怎么实现。
我们假设防火墙主机有两个接口,一个面向内网用户,一个面向外网主机。我们就以192.168.241这个网络作为外网,那另一边我们构建一个内网,添加第二块网卡,内部我们再添加一台虚拟机,这两个接口可以通过一个内部的虚拟通道像WMNET2或VMNET3,它们配置同一个地址并且第一个接口内网这个主机的接口它访问的网关应该指向网关的内网网卡地址。
规划:内网主机网络使用192.168.20.0,网关使用192.168.20.1,外网主机192.168.241.7,外网网关192.168.241.6,内网主机192.168.20.2或192.168.20.3。
此处使用三台虚拟主机进行演示,CentOS 7作为网关,CentOS 6.5-i386作为内网主机,CentOS 6.5-x86_64作为外网主机。
具体实现:
在CentOS 7上添加两块网卡:
内网CentOS 6.5-i386主机:
对于另一台主机CentOS 6.5-x86_64将其当做外网主机使用。
再次说明,CentOS 6.5-x86_64是外网主机,CentOS 7是网关,CentOS 6.5-i386是内网主机。
调整CentOS 7的地址:
ping一下外网地址:
调整内网主机CentOS 6.5-i386网络地址:
添加默认网关:
要想使用CentOS 7.1转发报文,需要打开其转发功能:
此时没有打开转发,意味着要去ping其它主机是ping不通的,如CentOS 6.5-x86_64为例:
使用CentOS 6.5-i386去ping 192.168.241.7不通:
但是网关CentOS 7去ping192.168.241.7是可以通的:
此时打开CentOS 7的转发功能:
再使用CentOS 6.5-i386 ping依然不通:
此时还是不通是因为,外网主机在收到报文后,发送响应报文时,因为外网主机与内网主机不在同一个网络中,外网主机需要发送报文给网关进行转发,而此时外网主机的网关设置为192.168.241.2因此响应报文无法响应给内网主机。此时可在外网主机添加一个路由解决:
此时CentOS 6.5-i386:
此时内外网都可以互相通信了!
在内网主机上启动Web服务:
外网主机访问Web服务,访问正常:
添加防火墙规则控制访问这个Web服务:(在Cent OS 7上实现)
分析:所有的转发都会经过本机的FORWARD链,此前的ping操作和Web请求都是通过FORWARD来转发的。
现在要求只能访问内网主机的Web服务:
一DROP外网的ping操作马上就不通了,Web也访问不到了:
放行Web服务,要考虑请求和响应:
此时外网主机可访问Web服务,但依然无法ping通:(因此有时候ping不通并不意味着对方主机不在线)
放行SSH使得能够远程连接内网主机:
此时优化这两条规则,假设一开始就知道需要放行SSH和Web服务:
清空规则,重新建立:
不允许内网主机访问外网,当然内网主机响应外网是可以的:(即只要允许请求进来就允许它出去)
请求是从外网请求的:
从外到内的所有已建立的连接都放行了,而内网主机假设都是服务器不可能主动连接别人(此处只是假设)。
外网主机访问验证:
那么到此实现的功能就是网络防火墙所实现的功能了!