各位童鞋注意:该实验完成可以使用GNS3与4虚拟机进行桥接,然后在一台物理计算机上完成,不虽要去拿真正的4台服务器或者交换机路由器来连成一个网络,现在大家都使用网络仿真教学与实验!
Linux工程环境应用实训(防火墙、NAT、静态路由)有详细配步骤版
配套演示录像:http://edu.51cto.com/course/course_id-499.html
档案编号ID:sec01
实训重点:因为Linux操作系统(企业版)在现代化的工业环境中应用越来越多、因为它天生具备比Windows更高的开放性、可移植性、安全性。所以在工业环境中网络管理员时常使用Linux来搭建边界网络服务器,比如防火墙、NAT等。在这个实训中的重点任务是使用Redhat Linux Enterprise版本来实现简单状态防火墙和NAT服务器的建设。
支持实训平台的环境:使用虚拟实验完成4个服务器(2台windows服务器)1台Redhat Linux Enterprise服务器、1台Redhat Linux客户端。
实训拓扑及描述:具体网络环境如下图1所示,网络环境被分为企业内部网络与Internet两部分组成,严格区分RFC1918地址和公共IP,在它们之间不能启动任何动态路由协议,因为在真实环境中即便是相互公告路由也没有任何意义,因为电信运营商决不可能让私有网络的路由发向Internet,当然每个企业边界访问Internet的一条必备的路由是允许的。
实训需求:
首先复位防火墙上的已经存在的规则、用户自定义的规则、所有“链”计数器。然后第一次打印iptales filter的状态,再复位NAT的所有规则,然后打印NAT状态(其目标在于实验前和实验后的效果好作对比)
配置基于Linux的NAT服务器,要求该服务器能将192.168.200.0/24子网翻译成out接口202.202.1.1去访问Internet,事实上是去执行一个SNAT的翻译配置,必须验证配置结果,使得企业内主机可以成功的访问Internet上的202.202.2.100的Web服务器。
使用iptables配置基本的防火墙策略:配置默认安全策略拒绝一切从外部世界主动INPUT的数据包,而允许OUTPUT和FORWARD数据包。将服务器的lo接口配置为受信接口,可以接收所有数据包,否则会出现Linux防火墙自己ping不通自己。
在Linux的防火墙上外挂状态模块(state),允许已经建立了连接,或者由防火墙主动发向外部,然后返回的数据包进入防火墙、配置防火墙防御TCP洪水***和ICMP洪水***(调用内核管理功能实现)。
要求Internet主机访问linux防火墙外部接口地址202.202.1.1的Web服务时,防火墙使用DNAT将202.202.1.1转换成192.168.200.100的80号端口应答,事实上,就是让企业内部的Web服务器对外部世界提供伺服功能,只是外部世界的主机看到的服务器IP地址是202.202.1.1而不是真实的192.168.200.100,必须测试外部主机成功访问内部的Web。
再次打印iptales filter和NAT的状态,对比配置前后的区别。
配置与检测过程:
第一步:基于linux操作系统的NAT和防火墙服务器配置IP地址(该服务器应该有两张网卡,一张对内;一张对外),首先保证它与内部网络中的所有主机能够正常的通信,为linux的防火墙配置IP地址,如下图2和图3所示。
当然,除了使用图型化界面来配置Linux服务器的IP地址以外,还可以使用指令和编辑etc/sysconfig/network-scripts/ifcfg-ethx(x表示网卡的编号)来完成IP地址配置。
当完成IP地址配置后,可以使用ifconfig查看两张网卡的IP地址,如下图4所示。
现在到内部主机192.168.200.100上为其配置IP地址及其它TCP/IP参数,如下图5所示,然后在Linux的NAT服务器上ping 192.168.200.100如果配置没有错误,Linux的服务器应该能成功ping通192.168.200.100如下图6所示。
然后如下所述的指令配置该环境中模拟运营商的IPS路由器,注意该路由器上的IP地址全部为公共网络IP(对Internet有效的地址),配置完成后在Linux的NAT服务器上测试与ISP路由器的连通性如下图7所示。至此为止完成了网络环境的基础配置。
ISP路由器的配置:
isp(config)#interface e1/0
isp(config-if)#ip address 202.202.1.2 255.255.255.0
isp(config-if)#no shutdown
isp(config-if)#exit
isp(config)#interface e1/1
isp(config-if)#ip address 202.202.2.1 255.255.255.0
isp(config-if)#no shutdown
isp(config-if)#exit
第二步:简略的分析一下Linux防火墙和NAT的表,Linux防火墙和NAT都是基于iptables组成,如果使用中文直译iptables时,就是“关于IP的表”。事实上也如此,在Linux防火墙上存在多张表,每张表都定义了属于自己的默认安全规则与策略,而且每张talbe的用途都不一样,下面简单描述一下iptables,如下图8所示,iptables存在着三张表,分别是filter(过滤)、NAT(地址翻译)、Mangle(破坏者),每张表里需又分有很多种链(chain)。最常用的是filter和NAT表,下面分别对filter和NAT表做理解:
Filter(过滤表):主要和进入或者穿越Linux防火墙的数据有关,是默认的表,它下面有三个链,分别是INPUT、OUTPUT、FORWARD.INPUT链与进入防火墙的数据有关,先叛断路由再决定是否允许进入,因为是控制数据进入防火墙的链,所以要小心处理;OUTPUT链与防火墙要送向Internet的数据有关,先叛断路由再决定是否允许从本机转发数据报文出去,一般都允许本许向外部发送数据;FORWARD链与防火墙本身的流量没有关系,当防火墙成为路由器需要转发流量时与该链有关,进入防火墙的数据,不是针对防火墙本本的流量,执行路由叛断后直接发给FORWARD链处理,是否转发数据到后端网络由该链决定。
NAT(NAT表):NAT表里面有三个链分别是PREROUTING、OUTPUT、POSTROUTING、其中PREROUTING指示路由判断前需要进行的规则,如下图9所示,通常用在使用公共IP地址的Internet主机通过访问某个目标公共IP就成功的访问处于企业网络内部使用私有网络专用地址的主机,图9正是这样的情况,这种也叫做基于目标的NAT(DNAT),DNAT就会使用PREROUTING,因为它必须在路由之前完成访问目标地址的修改,否则会导致路由无效;POSTROUTING指示完成路由叛断之后再完成NAT规则,如下图10所示,当企业网络使用私有专用IP的内部主机发起对Internet的访问,那么源地址就会被NAT修改为某个公共IP地址,然后才能成功的访问Internet,这种修改源IP地址的NAT叫基于源的NAT(SNAT),SNAT就会使用POSTROUTING。OUTPUT链与发送出去的数据有关。
第三步:首先复位防火墙上的已经存在的规则、用户自定义的规则、所有“链”计数器。然后第一次打印iptales filter的状态,再复位NAT的所有规则,然后打印NAT状态(其目标在于实验前和实验后的效果好作对比),在防火墙上执行如下指令
指令分析:
–F 指示清除所有已经订制的安全规则
-X 指示清除所有用户自定义的表或者链
-Z 将所有链的计数据和流量统计器都归零
-t 指示清除iptables中具体的那张表,默认的filter表就不用指定,如果是nat表就要指定。
查看当前的防火墙策略中的所有表:
Iptables-save是查看当前的防火墙策略中的所有表,执行结果如图11所示。显示filter和NAT表的任何链都被配置为允许。
查看当前的NAT表策略:
Iptables -save-t nat指示查看当前NAT表的策略,因为是查看某张具体的表,所以必须使用参数-t,然后接具体表的名称,来显示该表,显示如下图12所示,指示NAT表关联的各个链都被配置为允许。
第四步:配置基于Linux的NAT服务器,要求该服务器能将192.168.200.0/24子网翻译成out接口IP202.202.1.1去访问Internet,事实上是去执行一个SNAT的翻译配置,必须验证配置结果,使得企业内主机可以成功的访问Internet上的202.202.2.100主机
完成SNAT的配置后,现在来查验配置效果,现在到企业网络内部主机192.168.200.100上ping公共网络IP202.202.2.100,如下图14所示成功ping通202.202.2.100.并让ping 202.202.2.100处于连续ping状态,然后在目标主机202.202.2.100上执行协议分析,捕获ping包,如下图15所示,可明确的看到ping包的源地址根本不是始发主机192.168.200.100的地址,而是Linux NAT服务器的外部接口地址202.202.1.1,证实SNAT成功, 数据包的源IP翻译成202.202.1.1。
第五步:使用iptables配置基本的防火墙策略:配置默认安全策略拒绝一切从外部世界主动INPUT的数据包,而允许OUTPUT链和FORWARD链的数据包。将服务器的lo接口配置为受信接口,可以接收所有数据包,否则会出现Linux防火墙自己ping不通自己。
在没有开始配置前第五步的配置需求之前,任何的外部主机都可以主动的ping到防火墙202.202.1.1,如下图16所示为外部主机202.202.2.100ping 202.202.1.1的效果。
参数解释:
-P定义策略,注意大写,后面紧跟应用该策略的表名或者链名称。
DROP表示直接丢弃
ACCEPT表示直接允许。
上面对Linux防火墙的配置表示对fliter表定义默认策略规则,虽然没有申明是fliter表,但是如果没有使用-t申请表类型,那么默认就是fliter,规则指示任何主动进入防火墙的的数据都会被丢弃,然后防火墙可以直接向外部发送数据,当防火墙是路由器或者NAT设备时也可以直接转发数据。当完成上述配置后,再到外部主机202.202.2.100上,现在不能再ping 202.202.1.1(防火墙外部接口IP),如下图17所示,因为现在进入防火墙的流量被INPUT DROP所拒绝。
参数解释:
-i 指定数据包进入的网络接口,该实例是lo(表示环回接口,就是自己)
-j 指定行为,可以是接受、拒绝、丢弃、或者是记录,该实例是ACCEPT。
再次测试防火墙让自己ping自己,如下图19所示成功ping通自己。
第六步:在Linux的防火墙上外挂状态模块(state),允许已经建立了连接,或者由防火墙主动发向外部,然后返回的数据包进入防火墙、配置防火墙防御TCP洪水***和ICMP洪水***(调用内核管理功能实现)。
首先理解什么是状态模块:
它是一个帮助我们分析,现进入防火墙的数据包,是否是由内部网络或者防火墙本身主动请求的响应数据,如果是响应数据,防火墙就允许进入或者通过防火墙,通常这种数据的具备定的标识信息,比如:TCP标记中的SYN=1 ACK=1。如果是外部主动连接到防火墙或者试图主动穿越防火墙的数据,将其拒绝,通常这种数据也有相关的标记,比如:TCP标记中SYN=1 ACK=0.
注意:建议大家再独立学习一下状态防火墙的相关知识,因为理解了状态防火墙的知识,会更好理解这里所提到的状态模块,而且基于状态进行叛断的防火墙并不是Linux这门课程的专利,现今信息安全市场上所使用的防火墙基本上都集成有状态判断功能,所以这对于推动整个安全技术的学习有很大价值。
参数解释:
-A 针对具体的链新增加一个规则,本例是针对filter表的INPUT链。
-i 申明检测从哪个接口进入的数据,本例是防火墙的外部接口eth2。
-m 申明防火墙外挂模块的类型,本例是外挂防火墙的state模块。
--state 申明检测数据包的状态,一般情况下有INVALID(无效)、 ESTABLISHED (成功连接)、NEW(新连接)、RELATED(关联)几种类型的状态。一定要分别理解这几种状态的特点,这并是Linux的课程,而是网络基础或者协议分析该思考的问题。
-j 执行的行为,是接收还是直接丢弃。
上述配置防火墙状态检测的意思是:在防火墙的eth2接口的进入方向上对数据包进行状态检测,如果被检测出的数据包为关联和成功建立连接的状态就接受,如果是无效状态就直接丢弃。
注意:防火墙iptables的配置脚本默认情况下存放在/etc/sysconfig/iptables,事实上管理员可以使用VIM工具直接编辑该脚本,只是因为本人长期配置路由交换或其它硬件安全设备养成了逐条指令配置,然后最后保存的习惯,至配置方式完全可能由管理员自行选择。但是这里需要提一下的是如果要大量修改防火墙的策略规则,比如交换机策略规则的执行顺序,那么在这种情况下强烈建设使用VIM工具编辑该脚本,而且图型化的更方便,就像操作windows操作系统中的记事本一样的复制粘贴换位即可。
第六步:要求Internet主机访问linux防火墙外部接口地址202.202.1.1的Web服务时,防火墙使用DNAT将202.202.1.1转换成192.168.200.100的80号端口应答,事实上,就是让企业内部的Web服务器对外部世界提供伺服功能,只是外部世界的主机看到的服务器IP地址是202.202.1.1而不是真实的192.168.200.100,必须测试外部主机成功访问内部的Web。
建议首先还是在企业内部网络中架设一台用于测试的Web服务器。本人的Web架设如下图20所示,以方便提供给Internet主机访问来测试配置结果。
有前面iptables指令的配置基础,来分析DNAT的配置就非常简单了,该指令表示将所有访问目标为eth2接口(202.202.1.1)80号端口的流量全部翻译并转发到另一个目标IP地址192.168.200.100(企业内部私网上的Web)的80号端口上,因为这是基于目标IP地址的NAT(DNAT)所以必须使用NAT表的PREROUTING链,关于一点前面第二步有详细描述。
为了进一步的证明DNAT翻译成功,你可以在使用协议分析器完成相关的取证工作,分别对DNAT翻译前和翻译后进行取证,翻译前的取证可以基于Linux防火墙(NAT服务器)eth2接口以外的任何位置取证没有进行NAT翻译的数据帧,如下图21所示,该HTTP数据帧的源地址为公共网络主机202.202.2.100,目标地址为202.202.1.1,当Linux的执行DNAT翻译后,访问目标的202.202.1.1被翻译成192.168.200.100,如下图22所示。