192.168.1.1-路由器设置 > 192.168.1.1 > 192.168.1.100 >

如何测试防火墙规则正确与否

文章摘要

《Linux网络安全技术与实现(第2版)》第2章Netfilter/iptables,本章将循序渐进地介绍Linux防火墙的核心部分,并采用深入浅出的方式完整描述Linux防火墙的四大功能,分别是:filter、nat、mangle及raw,最后再结合我所设计的实际示例进行讨论。 设置完防火墙上的规则后请看如下

 

  《Linux网络安全技术与实现(第2版)》第2章Netfilter/iptables,本章将循序渐进地介绍Linux防火墙的核心部分,并采用深入浅出的方式完整描述Linux防火墙的四大功能,分别是:filter、nat、mangle及raw,最后再结合我所设计的实际示例进行讨论。

  设置完防火墙上的规则后,就可以开始测试单机防火墙的设定值是否符合自己的需要,而整个测试流程则分为“网络上任意主机对服务器的访问测试”及“服务器主机对网络上其他主机的访问测试”两个阶段。

  1.网络上任意主机对服务器的访问测试

  这个测试过程并不难,我们只需在192.168.0.100及192.168.0.200这两台主机上,分别对服务器主机192.168.0.1提出各种不同的服务请求即可。如果请求有得到回应,那就表示防火墙上对该项服务是的;如果没有得到回应,就代表防火墙对该项服务是没有的,在此请注意以下几点:

  当客户端访问一个防火墙没有的服务时,因为默认策略状态为DROP,因此客户端的应用程序将会有卡住的现象而不会立即断线,如果要等到断线,通常需要等一段时间,而这段时间约为3分钟左右。

  在这个试验中,如果你在客户端主机,尝试去访问服务器上防火墙有的服务时,有可能在等很久之后,服务器才会给你应答,这个问题并不是每一台服务器都会如此,所以当你在客户端主机上连接服务器时,服务器如果没有立即应答,就请耐心等候。为何会有此类现象?解决办法是什么?稍后会有完整且详细的说明,现阶段请暂时把这个现象视为正常。

  如果网络状态机防火墙的参数设置都没有问题,那么这项测试应该可以很顺利地完成,并且符合我们的需求。图2-26为笔者实际的测试流程,首先可以看到.....五个服务的测试,其分别指代表2-4显示的内容。

  表2-4标注与测试服务的对应表

  192.168.1.110

  第1阶段测试说明:

  在SMTP的测试中,笔者使用Telnet客户端工具去连接192.168.0.1主机的端口25②,接下来需要一些时间来等待服务器的应答;当看到服务器有应答之后,就代表防火墙是允许这个连接操作的。接着输入quit命令,以终止与SMTP服务的连接②。

  第2阶段测试说明:

  在HTTP的测试中,笔者使用wget工具去下载服务器上的index.html文件③,接着,我们可以从标注④的地方清楚看到,index.html文件已经成功被下载回来了,由此也可以确定防火墙是允许这个连接操作的。

  第3阶段测试说明:

  在POP3的测试中,笔者使用Telnet客户端工具去连接192.168.0.1主机的端口110⑤,并且即刻就可以得到服务器的应答,由此可以证明防火墙是允许这个连接请求操作,接着可以输入quit命令来终止与POP3服务的连接⑥。

  第4阶段测试说明:

  在这个项目中,我们测试的是SSH服务,因此使用SSH客户端工具来连接192.168.0.1服务器的SSH服务⑦,接着,大约需要约三分钟时间等待结果,最后会看到⑦中的“ssh:connecttohost192.168.0.1port22:Connectiontimedout”错误信息,这可以证明防火墙不允许这个连接请求操作。

  第5阶段测试说明:

  在这个项目中,我们测试的是TELNET服务,因此使用Telnet客户端工具来连接192.168.0.1服务器的TELNET服务⑧,接着,约需三分钟的时间等待结果,最后就会看到⑧的“telnet:connecttoaddress192.168.0.1:Connectiontimedout;telnet:Unabletoconnecttoremotehost:Connectiontimedout”错误信息,这也可以证明防火墙是不允许这个连接操作的。

  2.服务器对网络上其他主机的访问测试

  在测试完“网络上任意主机对服务器的访问测试”项目之后,接着要做的是“服务器对网络上其他主机的访问测试”。表2-3是我们在服务器上所设置的规则条件,请问在这个规则条件下,如果我们在服务器上使用SSH客户端去连接192.168.0.100主机上的SSH服务(该主机并没有设置任何的防火墙参数),这个SSH的连接请求操作是否可以成功?

  当你看完表2-3之后,可能很快就能回答“可以”,因为服务器上并没有对OUTPUT链任何,乍看之下好像蛮有道理的,但可惜答案是“行不通”。我们以图2-27来解释“行不通”的理由。首先,我们假设客户端主机上的SSH服务已经正常启动,并且在TCPPort22正确运行,接着在服务器上启动SSH客户端,我们假设SSH客户端这次使用的是TCPPort12345;然后,服务器上的SSH客户端从端口12345发出服务请求数据包给客户端主机的端口22,而这个请求包一定可以成功送达客户端主机,因为服务器上的OUTPUT链并没有设置任何规则,但此时收到请求包的客户端主机,自然会回应数据包给这个SSH客户端,不过,这个数据包将会从192.168.0.100的TCPPort22回送到192.168.0.1的TCPPort12345.

  试问,服务器的INPUT链允许网络上的主机发送数据包到TCPPort12345吗?如果不允许,那么这个应答包当然就无法正确地回送到服务器上,因此,我们从服务器上连接网络上其他主机的操作将无法成功。或许你会问,在INPUT链中将TCPPort12345打开不就可以了!别忘了,我们在第1章曾经提过,客户端的应用程序所使用的端口是随机的(Random),所以我们不可先预知客户端的应用程序会使用哪个端口,也就不可先帮客户端把端口打开等着客户端来使用。该如何解决这个问题呢?请耐心地往下看。

分享到:

tags:192.168.1.11

最近更新-关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明
CopyRight2009-2011 All Rights Reserved 192.168.1.1 路由器设置jmqy.com