日期:2014-05-16  浏览次数:20621 次

Linux网络管理员日记(7)更上一层楼:Linux服务器的安全实践

网络安全实践中,防火墙(Firewall)是被经常强调的重点,它的基本功能是过滤并阻挡本地网络与Internet之间的数据传送。另外,无论 是网络管理员还是黑客,对数据截获分析都十分重视,因此,在进阶提高部分,我们也将使用直观简单的方式对这两部分内容进行讲解。

1 、iptables :Linux服务器下的优秀防火墙

Linux提供了一个非常优秀的防火墙工具—iptables,它完全免费、功能强大、使用灵活、可以对流入和流出的信息进行细化控制,能够在一台低配置机器上很好地运行。

(1)安装和启动

一般情况下,iptables已经包含在Linux发行版中,运行iptables --version来查看系统是否安装了iptables。如果系统没有安装iptables,则可以从 http://www.netfilter.org下载。使用中可以运行man iptables来查看所有命令和选项的完整介绍,或者运行iptables -help来查看一个快速帮助。

iptables服务也可以在图形模式下开启,步骤为:依次打开“主菜单”下的“系统设置”,选择“服务器设置”中的“服务”,拉动滚动条找到iptables选项,选中后点击“开始”,即可启动防火墙服务;如果不想使用防火墙,点击“停止”即可。如图26所示。


图 26

(2)使用实例分析

iptables功能十分强大,它可以检测到源地址和目的地址、源端口和目的端口及流入数据包的顺序,即iptables记住了在现有连接中,哪些 数据包已经被允许接收。这使得暂时性的端口只有在需要时才会被打开,并且会拒绝所有永久性占用端口的请求,大大地加强了安全性。下面是关于 iptables防火墙的一些应用实例。

实际应用中,如果要阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动:

# iptables -t filter -A INPUT -s xxx.xxx.xxx.0/24 -j DROP

也可以很轻易地阻止所有流向攻击者IP地址的数据包,该命令稍有不同:

# iptables -t filter -A OUTPUT -d xxx.xxx.xxx.0/24 -j DROP

注意这里的A选项,使用它说明是给现有的链添加规则。网络上的恶意攻击者总是在变化的,因此需要不断改变IP。假设一个网上攻击者转移到新的IP地 址,而原来的IP地址被分配给一些清白的用户,那么这时这些用户的数据包将无法通过网络。这种情况下,可以使用带-D选项的命令来删除现有的规则:

# iptables -t filter -D OUTPUT -d 192.168.10.0/24 -j DROP

一旦测试结果令人满意,就可以将上述测试结果保存为脚本。可以使用“iptables-save > iptables-script”命令来实现,现在,信息包过滤表中的所有规则都被保存在文件iptables-script中。无论何时再次引导系统, 都可以使用 iptables-restore 命令将规则集从该脚本文件恢复到信息包过滤表,命令为“iptables-restore iptables-script”。

创建一个具有很好灵活性、可以抵御各种意外事件的规则需要大量的时间。对于那些没有时间这样做的人,最基本的原则是“先拒绝所有的数据包,然后再允许需要的”。下面来为每一个链设置缺省的规则:

# iptables -P INPUT DROP

# iptables -P FORWARD DROP

# iptables -P OUTPUT ACCEPT

这里选项-P用于设置链的策略,只有三个内建的链才有策略。这些策略可以让信息毫无限制地流出,但不允许信息流入。

最后需要提示的是:功能强大的iptables防火墙是完全免费的,这对于那些想要功能卓越而又想节省费用的用户来说,是一种比较理想的选择。

2 、在Linux下利用TCPDump进行网络管理

对于网络管理员来说,要保证整个网络的正常运行,就必须随时了解网络中存在的异常流量、网络阻塞等现象。打个比方,一部电话的窃 听装置,可以用来窃 听双方通话的内容,而计算机网络嗅探器则可以窃 听计算机程序在网络上发送和接收到的数据。但是,计算机所传送的数据是大量的二进制数据。因此,一个网络窃 听程序也必须使用特定的网络协议来分析数据,进行正确的解码。如图27所示,就是一个Windows下的嗅探器。

Linux
图 27

那么,对于钟爱Linux的网络安全爱好者来说,能否找到这样一款强大的Linux下的嗅探器呢?TCPDump就是一款免费的网络分析工具,它可 以将网络中传送的数据包的“头”完全截获下来提供分析,它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你 去掉无用的信息。

(1)安装和启动

在Linux下TCPDump的安装十分简单,一种是以rpm包的形式来进行安装,另一种是以源程序的形式安装。以rpm包的安装方法比较简单,通 过rpm命令可以直接安装,rpm包是将软件编译后打包成二进制的格式,不需要修改任何东西。安装时,以超级用户登录,参考命令如下:#rpm -ivh TCPDump.rpm。这样,TCPDump就可以顺利地安装到Linux系统中。不过,现在较高版本的Linux操作系统都自带了这个工具,关于 TCPDump更详细的信息,可以查看Man TCPDump。

普通情况下,不带参数执行TCPDump,即:#TCPDump,截获的是通过第一个网络界面的数据包。直接启动TCPDump将监视第一个网络界面上所有流过的数据包。如图28所示。

点击放大此图片
图 28

从上面的输出结果来看,TCPDump的基本输出格式为:“系统时间 来源主机.端口 > 目标主机.端口 数据包参数”。仔细观察,我们会发现,和上面的Windows界面相比,数据包格式有很多相似之处,这样也有助于我们来了解这个软件的使用方法。

(2)参数分析

TCPDump支持多种不同参数,如使用-i参数指定TCPDump监听的网络界面,这在计算机具有多个网络界面时非常有用;使用-c参数可以指定 要监听的数据包数量;使用-w参数指定将监听到的数据包写入文件中保存,等等。然而,在数据的海洋中,TCPDump中更复杂的参数主要是用于过滤。这是 为什么呢?

因为在实际操作中,网络中流量很大,如果将所有的数据包都截留下来,数据量就会很大,反而不容易发现所需要的数据包。如果不带任何参 数,TCPDump就会搜索系统中所有的网络接口,并显示它截获的所有数据,这些数据对我们不一定全都需要,而且数据太多不利于分析。所以,我们应当先想 好需要哪些数据,TCPDump的语法为:

TCPDump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面 >][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][- w<数据包文件>][输出数据栏位]

在实际使用中,我们可以灵活应用。现列举几个比较常用的例子:

1、截获所有192.168.10.1的主机收到的和发出的所有数据包。命令为:

TCPDump host 192.168.10.1

实际效果如图29所示。

Linux安装
图 29

2、截获主机192.168.10.1和主机192.168.10.2或192.168.10.3的通信,使用命令(在命令行中适用括号时,一定要):

#tcpdump host 192.168.10.1 and \ (192.168.10.2 or 192.168.10.3 \)

3、如果想要获取主机192.168.10.123接收或发出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 192.168.10.123

4、获取主机192.16