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所示。

Linux网络管理员日记(7)更上一层楼:Linux服务器的安全实践_第1张图片
图 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网络管理员日记(7)更上一层楼:Linux服务器的安全实践_第2张图片
图 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所示。

Linux网络管理员日记(7)更上一层楼:Linux服务器的安全实践_第3张图片
图 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网络管理员日记(7)更上一层楼:Linux服务器的安全实践_第4张图片
图 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.168.10.1除了和主机192.168.10.2之外所有主机通信的ip包,使用命令:

#tcpdump ip host 192.168.10.1 and ! 192.168.10.2

3、Linux服务器实例分析

通过上面的操作了解,相信很多电脑爱好者在Linux技术上有了一个质的飞跃。下面,我们综合运用这些方法来解决一个Linux服务器上安装问题。下面是一个针对邮件服务器的网络故障分析。某单位的局域网中有一台Sendmail邮件服务器,收发邮件等基本功能正常,但在使用中发现一个普遍的怪现象:在PC机上发邮件时,连接邮件服务器后,要等待很长时间才能开始工作。从检测来看,网络连接没有问题,邮件服务器和PC性能都没有问题,问题可能出在哪里呢?

为了查找问题的所在,可以采用以下的测试方法。首先,我们在PC机client上发送邮件,同时在邮件服务器server上使用TCPDump对这个client的数据包进行捕获分析,如下:

#TCPDump host client

TCPDump: listening on hme0

23:41:30.040578 client.1065 > server.smtp: S 1087965815:1087965815(0) win 64240 (DF)

23:41:30.040613 server.smtp > client.1065: S 99285900:99285900(0) ack 1087965816 win 10136 (DF)

23:41:30.040960 client.1065 > server.smtp: . ack 1 win 64240 (DF)

然后,通过分析数据,我们看到双方顺利的完成了会话,也就是说,到目前为止,整个状态属于正常的现象。沿着这个思路,我们往下看:

23:41:30.048862 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)

23:41:40.161052 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)

23:41:56.061130 server.33152 > client.113: R 99370917:99370917(0) win 8760 (DF)

23:41:56.070108 server.smtp > client.1065: P 1:109(108) ack 1 win 10136 (DF)

通过分析就可以判断问题所在了。原来,问题在于:我们看到server端试图连接client的113端口,要求认证,但是没有收到client端的回应,server端重复尝试了3次,费时26秒后,才放弃认证请求,并主动发送了reset标志的数据包,开始push后面的数据;而正是在这个过程中所花费的26秒时间,造成了发送邮件时漫长的等待情况。问题找到后,通过修改服务器端的Sendmail配置,再次测试,看到邮件服务器不再进行113端口的认证尝试,而是在三次检测后直接push数据,问题得到完美的解决。

实际上,Linux中还有很多优秀的服务器功能,如DNS 服务器、CVS服务器、DHCP服务器、数据库服务器、Samba网络服务器等。正是这些优秀的功能组合,再加上完全免费的优势,使得Linux的功能越来越强大,并逐渐在激烈的操作系统市场中占据了一席之地。通过本文的讲解,相信很多用户一定会更加喜爱Linux操作系统。文章到这里,我们又想起了那只让人爱不释手的小企鹅,毫无疑问,正是它欢快自由的脚步,我们才领略到Linux世界的无穷魅力。

你可能感兴趣的:(linux,网络,服务器,防火墙,filter,邮件服务器)