iptables之四扩展匹配及网络防火墙功能

1、开放被动模式的ftp服务

  若是想开放被动模式的ftp服务,大致上要经过链接追踪中的RELATED这么一个状态来实现,也就是说对于21号端口开放NEW和ESTSBLESHED。(命令链接通常是经过21号端口实现的),而对于数据链接因为它经过没法固定的模式时,工做在非固定的随机端口上,因此咱们只须要检查这个链接的状态是不是RELATED的,若是是RELATED,不管入栈仍是出栈通通给予放行便可。前端

  由此,要想开放被动模式的ftp服务大致上要三个步骤便可实现:docker

(1)、装载ftp追踪时专用的模块;(实际上是叫RELATED状态追踪时的专用模块,只不过对于应用来说,它也的确是专用ftp的)后端

  nf_conntrack_ftp是专门为ftp追踪RELATED链接的专用模块;服务器

  须要注意的是有可能须要手动装载此模块;网络

(2)、放行请求报文;负载均衡

  全部的数据链接都是那些链接状态为RELATED状态的链接,因此它的请求报文只跟21号命令链接相关,由于咱们全部的ftp请求也必定是先跟命令链接先创建一个链接。工具

  命令链接:放行NEW、ESTABLISHED测试

  数据链接:放行RELATED、ESTABLISHED刚链接时即第一次请求时不叫NEW而叫RELATED,可是一旦链接创建起来全部的后续的通讯也叫ESTABLISHED)优化

(3)、放行响应报文;spa

    ESTABLISHED

测试:

  先改ACCEPT再改规则,再看没有规则时访问是否有问题:

  保存此前规则:

  从新装载刚才保存的规则:

  刚才清空的主要目的就是为了测试ftp正常状况下咱们不加防火墙规则是OK的。

  若加了防火墙规则若未放行ftp访问显然是访问不到的,此时放行ftp服务依然能够访问到:

 

 

  注意:在iptables使用领域当中,到此为止,至少说这已经能够达到中等规模的使用规格了。

 

2、保存或重载规则

  如何保存及重载规则?

保存规则至指定文件:

  iptables-save >/PATH/TO/SOMEFILE   (将须要保存的规则重定向并指明将当前内核中生效的规则保存在何处便可)

 

 

 

 

 

 

 

 

 

 

 

 

  这种保存方式对于某些系统来说可能还有其余的用法:

 

    如CentOS 6可使用service iptables save来保存,至关于执行iptables-save>/etc/sysconfig/iptables

 

从指定文件重载(从新载入)规则:

 

  iptables-restore < /PATH/TO/SOMEFILE

 

  而另外重载规则CentOS 6还可使用:

 

    service iptables restart至关于iptables-restore < /etc/sysconfig/iptables(restart至关于把现有的规则全清了,而后把这个文件再读进来)

 

  可是对于CentOS 7来说,它对于整个防火墙规则的管理,引入了一个新服务,即引入了新的iptables前端管理服务工具:firewalld。firewalld有不少工具单独使用:

 

    他有本身的专用命令叫firewalld-cmd,

 

    还有前端工具,基于图形的:firewalld-config

 

    并且在firewalld中,它将整个防火墙分为DMZ区、非军事化管理区等。

 

  firewalld首先它是以iptables为基础来生成规则的,来管理实现防火墙的,但它有引入了一些新概念,在有些环境中,好比像docker或openstack这样的云,不管是IAAS或PAAS云这样的环境中,它是的确有那么必定的做用的,的确引入了不少新概念。不过对于简单的本机防火墙的实现,其实firewalld目前来说他确定引入了新的机制会使得整个规则管理会更加复杂,为了使得在CentOS 6和CentOS 7上使用风格统一,咱们不建议你们非得使用firewalld,能够仍然使用iptables。不过要在CentOS 7上使用iptables,得首先去禁用firewalld。如:

 

    禁用服务,关闭开机启动:

    关闭服务:

 

 

    发现规则已清空:

 

 

指望之后本身写的规则开机后能自动被重载:

 

    启动iptables服务:

 

    其实启动这个服务至关于使用:

 

 

    但若是此前禁用了iptables这个文件是不存在的,由于没有任何规则能够载入。

 

    即使是空规则,依然是能够保存的:

  保存后能够启动了:

  其实依然没有规则:

  /etc/sysconfig/iptables文件中生成的是默认规则:

 

 

  因此只有这么一个文件存在时,通常来说,它在保存时才有真正的意义;

 

    这个服务脚本也能帮咱们重启,而它重启的主要意义在于咱们写的规则一旦保存下来后,而iptables设置为开机自动启动。即只要在2,3,4,5级别开机自启:

 

 

  这就意味着这些规则在启动时可以被载入,可让其生效了。而从哪载入呢?默认状况下是经过/etc/rc.d/init.d/iptables这个服务脚本指明的:

    因此这就是为何它是独立一个文件,保存也是默认保存在这个文件中,其实是靠脚原本控制的。咱们使用iptables-save时能够保存在任何咱们所重写的文件中而未必是非得是这个文件,但这个脚本使用了这个文件。

    再次说明个,这个脚本不是启动任何服务,它虽然叫服务也支持start但没有启动任何进程,仅仅是让那些规则生效而已,可是除此以外这个服务脚本还有另一个做用,好比咱们让跟ftp相关的规则可以生效,还得去装载ftp相关的专用模块nf_controlc_ftp,而这个配置脚本是可以让咱们在启动服务时自动把咱们某些所须要的模块给装载进来的,那装载哪些模块?他依赖于这么一个配置文件:/etc/sysconfig/iptables-config

    若是想启动服务时自动装载nf_controlc_ftp,直接将其添加至IPTABLES_MODULES便可。启动时它会自动使用modprobe把这里给定的模块转载进来,若是有多个模块须要装入,中间使用空格分开便可。

    这是CentOS 6上使用的是iptables服务脚本,但它事实上没启动任何服务,再次提醒,仅仅是在内核中生效规则或从内核中清空规则的。

    那对CentOS 7而言,启动对CentOS 6兼容的服务:

    这也是使用相似的服务实现相应的功能的,不过多是将iptables禁用了,再也不启用了,咱们本身去写一个iptables的Unit便可,未来用到的时候再用便可。

    对于iptables没有服务脚本是没有任何妨碍的;

 

若想去了解CentOS 7上的firewalld,可到以下地址了解:

 

3、构建网络防火墙

  咱们前面演示和讲解的都是关于主机防火墙的,那咱们要想将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服务:

    清空规则,从新创建:

    不容许内网主机访问外网,固然内网主机响应外网是能够的:(即只要容许请求进来就容许它出去)

    请求是从外网请求的:

    从外到内的全部已创建的链接都放行了,而内网主机假设都是服务器不可能主动链接别人(此处只是假设)。

    外网主机访问验证:

    那么到此实现的功能就是网络防火墙所实现的功能了!

 

假如内网主机安装有ftp服务器,如何开放它呢?

  CentOS 6.5-i386安装vsftpd;

  测试让网关本身去访问,访问正常,但外网主机没法访问:

  打开ftp访问的请求:

  外网主机测试访问:

固然,若想让规则永久有效,须要将规则保存下来,服务启动时自动装载便可!

相关文章
相关标签/搜索