导言
计算机网络安全很可能是21世纪几大技术挑战之一。
总之,象许多让人忧心的领域,每个人都谈论它,但是即使是应该感受最深的人也没有察觉到潜在灾难的规模是如此之大。”感受最深”指的是支撑软件或系统软件设计者。最好的例子一再被提到,来自于Redmond,在那里,安全可没有象市场那样运转的按步就班。
幸运地,在20世纪的最后2个10年里诞生了自由软件和随之而来的哲学。如果你想提高你的机器,你的系统,你的网络的安全的话,你就应该在这里多花些工夫。自由软件团体在安全方面的工作比所有的大公司合起来都多。
可以这么说,工具不能解决所有的问题,维护一个网络的安全是永久性的任务:因为总是会出现新的情况。
这意味着你不能说一个网络100%的安全。你能做到的是消除潜在的隐患。我们这里讨论的只是你能减少隐患的一小部分。读完这份特刊(作者注:你应该记住这篇文章是一本法国的Linux杂志关于安全的特刊),你会了解更多一些安全的知识,但是无论如何你不能说你的网络是安全的。在这里我预先警告过你一下。
当然象这样一篇文章不能穷尽所有问题。安全问题已经形成了许多自己的文化但是距离彻底的解决问题还很远。相应地,不要从这篇文章中揣测象操作系统,工具,配置等等事情。
作为导言的结束,在这篇文章中我们引用LinuxFocus的文章的几部分,不要担心,已经征得作者同意:已经证实他和本人是同一个人!
引言
首先,我们探讨有着很多不同系统的异构网络的结构,其中的系统或多多少已经地广泛传播。操作系统越多,系统越复杂,因为不是所有的系统在表现?上都是一致的。更进一步,作为服务器的机器在网络中有不同的功能:我们将拥有一个多样化的网络。
其次, 我们将浏览一系列的对提高安全性有助益的工具。选择是很多的:我们不可能一一列举。很显然,我们会讲解如何使用这些工具来提高机器和网络的安全性。下一章节回顾不同系统在安全性方面的特点。
结论将解释安全过程的”相对性”,说明为什么安全性还有一条很长的路要走,而不是把它”划分” 到未来学里面去。
一个异构网络的例子
第一个有利的是地球上所有的操作系统都”讲”TCP/IP语言。有了这一点不同的系统可以相互通信。相应地作为探讨网络的一个例子,TCP/IP总是被提到。换而言之,其他专有的,不常见的和过时的协议不会提到。我们也不讨论物理结构,比如连接的形式,分类等等。
这样我们在这个网络里什么都放一些进去。当然会包括UNIX,无论专有的或免费的,比如,Solaris2.6,或SunOs 5.6,如果你原意也可以是Irix 6.5,Linux(RH 6.2)或MacOs X。我们可以加一些QNX,NeXTSTEP,NetBSD或OpenBSD。为了遵循”传统”,我们将包括那个叫Not Terminated 4.0的东西(不是,没有什么别的意思,只是它比你想像的更糟糕)。 这里呢,我们还包括OS2这个稍好一点的系统。最后我们加入一些”非传统”的OS,比如BeOS,AmigaOS(是的,它存在。不相信吗?)
当然有的人已经抱怨了:什么没有AIX,没有HP-UX?没有。如果你提到每一个UNIX,那会写一个10卷的文章。无论如何,基本的安全准则对所有的系统都是有效的。
现在,我们能叫它们做些什么呢?
举例来说,可以让Solaris作为应用服务器。Irix负责备份。NT作为另一个应用服务器。 Linux作为网关。另一个Linux机器用做http服务器或者数据库服务器。其他所有的机器都是客户机。网络中大约30台机器使用密文认证。我们将选择比较复杂的认证方式: NIS (Yellow Pages),LDAP或者Kerberos...。为了让事情简单一点。我们不使用NFS,它也许有用并且安全性能有所改善,但是从安全着眼,你最好忘记它。在法国,有句老话,”最好不要把所有的鸡蛋放到一个篮子里”。不是”一定要”但最好是服务或者协议一个系统只使用一种。举例来说,一个ftp服务器,http服务器很适宜在各自的UNIX机器上。另一些UNIX机器可以用做SSH服务器,其他的做SSH的客户端。后面我们会提到SSH。我们将使用静态的IP:不要DHCP。换而言之,我们使用基本的功能即可。这个样子可以构成一个有50台机器的网络。机器再多那就会变成恶梦的。
安全工具和如何使用他们
一般来说,做一件事情总是有不止一种方法(TIMTOWDI)。理想的情况是一切从头来,安装机器建立网络。但是现实可不是演电影!相应地,我们的网络应该是用过一段时间了,机器从这里搬到哪里,旧的去新的来。因为CPU在Mhz上的”竟赛”,举例来说,今天的Intel 的机器不会持续很长的时间。大约3年以后,机器的零部件就很难买到了。你要不让你的机器废物利用做些轻便的工作要不就是干脆把它扔掉:无奈但是很现实。幸运的是,其他的系统持续时间长一些并且还可以继续提高。不要说这些跑了题:一个管理员总是要尽量利用现有的条件。
基本的东西
工作的第一步通常做我们称”一般性”的部分。那就是去掉每台机器中没有用到的东西:这可不是一件轻松的差使。每个操作系统,包括Unix在内,安装了数不清你用不到的服务,协议。主说:扔掉它。在Unix环境下,简单。。粗暴的方法是注释掉/etc/inetd.conf 文件中的每一个服务。这样就干掉了一些。 这好像有一点霸道,但是在许多机器上这是值得推荐的。这也要看你的需求是什么了。在Linux中和其他一些很少见的系统中你可以使用chkconfig 命令去删除一些服务。
还要检查SUID/SGID文件,毫不犹豫地把”失误”位去掉。或不要激活程序。一个如下的命令: find / -user root -a ( -perm -4000 -o -perm -2000 ) -print 可以列表所有这样的文件。去掉S位,键入chmod a-s programname (注意:你去掉s位后可能失掉一些功能。 它终归有其目的)。
去掉所有”危险”或已知的”冒险”的程序:远程命令如rsh,rlogin,rcp等等。可以使用SSH取而代之。
检查象/etc,/var这样目录的权限,越严格越好。比如,给包含起动文件(在许多Unix系统中是 /etc/rc.d/init.d)的目录使用chmod -R 700是不错的主意。相同的规则可以运用到所有系统的网络部分,去掉你不使用的,至少不激活它。对NT来说,你可以轻松地在配置面板中设置。这里有很多基本的东西去做并许多文化的主题都来源于此。
工具
让我们从Unix说起,因为它是唯一真正考虑过安全问题的操作系统。其次,Unix可以运行很多的自由工具软件并且大多数也能运行在Unix的衍生版本中。
从现在起,我们开始安装各个机器。为了达到网络安全,在做各种事情之前,首先考虑事情的各个元素达到安全要求没有。安装这些工具是很轻松的工作,所以我们不会在这里浪费时间。安全工具不同的参数取决于系统,需求...甚至根据自己的意图来定制。第一个安装的工具是shadow utils。它的意思是做密码加密。幸运地,这已经成了许多Unix发布版本的一部分。文件/etc/shadow就是/etc/passwd”创建”的。
更好的工具是PAM(插入认证模块)限制用户访问某种服务。每个被关注的服务都使用目录中的配置文件管理一切的事务。这个配置文件一般是/etc/pam.d。许多服务都是PAM”驱动”的,比如,ftp,login,xdm等等,让管理员分配每个人有不同的权限。
下一个工具是必需提到的:TCPWrapper 。它可以工作在大多数的类Unix版本中。简短解说,它限制某些主机对一些服务的访问。这些主机允许还是拒绝由2个文件来决定: /etc/hosts.allow和/etc/hosts.deny。TCPWrapper可以通过2种方法配置:或者把它放到后台,或者改变 /etc/inetd.conf 配置文件。如果选择后者,你可以看到TCPWrapper可以和其他的工具和平相处。你可以在下面的链接中找到它: ftp://ftp.porcupine.org/pub/security
另一个有益的工具就是xinetd。简短解说,xinetd是inetd的更新换代,它有更多的特性。刚才我们已经评论过了inetd,所以我们不推荐它。如果你感兴趣,你可以在以下的网址找到它: http://www.xinetd.org.
在Linux环境下,这个工具你一定要有:它的名子是Bastille-Linux。它的链接是:http://www.bastille-linux.org. 这个工具是用Perl写的,不仅很dd还很有效率。运行了一个脚本后,你会回答很多的问题, Bastille-Linux会根据你的每个回答一一配置。每一个问题都有解释并且提供缺省的设置。你可以不改变缺省的设置,起动一个新的配置,然后检查一下Bastille-Linux做了些什么。你都看到了吧!它也提供了一个防火墙的配置:我们回过头会在讨论它。写这篇文章的时候,Bastille-Linux的版本是1.1.1,但是1.2.0 作为候选版本已经发布了。它提高了不少,并且提供了基于Tk和Perl模块的图形界面。(作者提示:这篇文章在几个月前写的。事实上, Bastille-Linux最近的版本是1.3.0)。
入侵监测系统也是不错。2个”重量级”的工具是snort和portsentry。第一个可以从下面下载: http://www.snort.org,第二个可以从Abacus网站下载, http://www.psionic.com。这2个有所不同:NIDS (网络入侵监测系统)主要是提供入侵信息,但是第2个可以说是面向主机并且功能更强大。 snort有很多的可选项来监测网络通讯。你可以监听所有你想知道的:从主机出去的信息,到主机的信息,防火墙以内的,防火墙以外的。当然,它会产生巨大的log文件,但是你应该知道你想监测那些东西。Win 32版本也是有的,它是蛮重要的,因为这些”系统”中自由软件的数量是很有限的。
portsentry有一个很有意义的特性:它可以根据的你选择来阻塞被扫描的端口。你或者把攻击者重定位到一个没有使用的地址,或者重定位到防火墙上。当然,你可以选择哪些阻塞,那些不阻塞。现在我们就可以回到TCPWrapper上来了:portsentry可以编辑/etc/hosts.deny文件,如果你想。这样,portsentry的效率会