最后,这篇文章不是一篇"如何使你的网络或主机安全"的文章,而是一篇关于你能够(必须)用来提高一个网络或机器安全性的各种工具的介绍.简单地说,我们可以把防火墙看作包过滤工具,工作最重要的部分是关心防火墙的配置.
安全是系统管理员忧虑的主要问题之一,然而,由于internet引发的侵入危险变得越来越高。
据统计,如果联接的用户数量增加,骇客的数量随之增加.因此,安全工具呈指数增加.再一次多谢自由软件社区,因为他们给我们提供了我们能见到的最好的工具和大量的文档。
在本文结束部分的参考文献区你将会发现许多有趣的联接,显而易见地,本文将要提到的不可能没有疏漏之处,我提到的只是我挑选的一些好工具.
这篇文章不但写给个人用户,同样也是给系统管理员提供的,尽管一些工具是为保护主机和提高网络安全专门设计的.大部分工具可以在许多unix上工作(如果不是全部的unix上),不管这些unix是商业的还是免费的。
最后,这篇文章不是一篇"如何使你的网络或主机安全"的文章,而是一篇关于你能够(必须)用来提高一个网络或机器安全性的各种工具的介绍.
一、通用的工具
让我们把这部分称为"白帽子保护红帽子,击退黑帽子的工具(tools for whitehats to protect redhat from blackhats)":-).大多数linux发行版(不仅仅是redhat)都保含了一些好的安全工具,它们被用来使你的机器更加安全.
在这些工具中,我们能数出TCPWrapper,PAM,影子口令工具等,因为它们是发行版的一部份,你可以找到关于它们的许多东西:HOWTO,man手册,所以我们不想在它们身上化太多时间.
让我们从影子口令工具开始,简单来说,它们允许口令加密,文件/etc/passwd被文件/etc/shadow代替.
比影子口令工具更精致的是PAM,就象名字所说的那样,这是另外一种认证方法,被用来配置对服务的访问控制.
可以在一些文件中定义许多限制,这样能容易地进行管理.这些文件通常放在/etc/pam.d目录中.
TCPWrapper,简单来说,是通过ip地址或主机名来限制服务访问权限.倚靠两个文件来决定容许访问还是拒绝访问,这两个文件是/etc/host.allow和/etc/host.deny
TCPWrapper可以配置为两种工作模式:通过运行看守进程,或者是修改/etc/inetd.conf文件.如果你的unix系统没有包含TCPWrapper,你可以从ftp://ftp.porcupine.org/pub/security/获得它.
现在,我要告诉你们,为什么我不详悉介绍上面提到的这些工具,因为有一个工具可以完成上叙所有的功能,这就是Bastille-Linux,如果你只想安装一个安全工具,那么就安装它吧,目前的常见的linux版本还没有包含它, 但你可以到http://bastille-linux.sourceforge.net网站上下载.
顺便说一下,我们不会在本文介绍Bastille-Linux,这样做毫无意义,因为我的同事在九月份的LinuxFocus上有一篇相当不错的文章已经介绍了它.他已经介绍了所有的东西.去那看看吧,让我们把Bastille-Linux加入你生活中必不可少的重要工具中吧!
另外一个常用的来提高安全性的工具是xinetd,它存在于http://www.xinetd.org,对不起,我也不打算介绍它,同样是是因为我的同事在十一月份的LinuxFocus上做完了这项工作.
现在,让我们来看一看一些特别的东西。
二、防火墙工具
自由软件Linux带有把你机器变成防火墙的软件.2.2内核是iptables,而2.0内核则是ipfwadm.为了使iptables或ipfwadm工作,内核必需正确选择选项进行编译.关于这个问题,除了HOWTOS,还有很多相关文章,所以,同样我不打算多提.
简单地说,我们可以把防火墙看作包过滤工具,工作最重要的部分是关心防火墙的配置,同样,一个错误配置的防火墙会变得非常危险.
不管怎么说,防火墙相当重要.
举个例子来说,Bastille-Linux可以给你提供一个基于ipchains的防火墙.
如果你访问http://www.linuxapps.com,并在搜索区中键入"firewall",你至少能得到40个以上的答案.其中许多是基于ipchains或ipfwadm管理的图形化界面,另外一些是真正的大工具,含有大量的功能,举个例子,象T.REX,http://www.opensourcefirewall.com上的工具就是这样的东西.再提醒一次,一个防火墙在一个网络中必不可少,但是网络安全不能仅仅依靠它,告诉你,一个骇客可以在十五分钟之内攻破它.
三、端口扫描
在这里我们接触问题的核心部分,这个思想是:象一个骇客干的那样,使用同样的工具,来监测你机器或网络的弱点所在.
在这个领域,我们能够在两个伟大的工具上受益,但还有其它更多的.
第一个叫作nmap,你可以从http://www.insecure.org上下载到,同时还有大量的信息和链接等等.
用nmap你可以检查你的网络或机器哪些端口是开放的.当然,你可以用其它的命令做到这点,例如lsof或netstat,但是只能检测你自己的机器.显而易见的,nmap当然也可以检查你自己的机器.
nmap能提供给你许多信息,例如,它能告诉你运行的是哪种操作系统,通知你所开放的端口的危险性,最后,至少,nmap相当容易使用.
nmap既可在shell下运行,也可以通过一个叫nmapfe的图形界面来运行.这个图形界面是基于gtk库的,nmap的当前版本是2.53,它可以在许多unix平台上运行,提供原代码,rpm包,带或不带图形界面.
nmap是系统管理必不缺少的工具.
多谢Fyodor先生,以及恭贺他的伟大工作.
第二个叫作nessus,可从网站http://www.nessus.org上下载,nessus使用客户/服务器结构来工作,源代码遵循posix标准,能在许多unix版本上运行.甚至还有基于win32的客户端.nessus依赖nmap(要知道,没有nmap,nessus就不能运行),GUI客户端还需要GTK库函数的支持.
nessus当前版本是1.06,通过nessus,你可一用一个命令扫描整个网络.这个命令就是网络地址,例如,在目标框中键入192.168.1.0/24,将会扫描整个子网的255台机器。
尽管nessus比nmap复杂不少,但它不但容易使用,功能很多.比方说,它可以生成报告,比较各报告的差异...,另外一个功能相当有趣:nessus为端口扫描中发现的问题提供解决方案,只要这些机器是unix系统,这些建议通常有用,对其它操作系统,就没这么恰当,但这不是一个问题.
下面是一台非常容易受攻击的机器的例子
nessus还有另一项伟大的功能,它可以运行插件,这样,每次在任何地方发现新的安全漏洞,它都可以很快升级.
nessus是另一个系统管理真的需要的工具,Deraison先生和Merci beaucoup做的棒极了.
两个工具都在一个linux机器和其它不同操作系统的网络中测试过,有Linux RH 6.2, Irix 6.5.7, Solaris 2.6, NeXTStep 3.3,QNX RT, BeOS 5.0, Amiga OS 3.5,Not Terminated 4.0.在大多数平台上测试结果给人留下深刻印象,当然Amiga系统没有真正被认证,(因为它看起来象一台打印机或路由器!),但是有谁现在的网络中还有这种操作系统呢(除了我们)?
不管怎么说,整些工具是今天网络中必须有的工具.
四、嗅探系统
有些工具能发现端口扫描或入侵.标准的系统管理不能没有这种工具(这有点偏执!).
第一套工具集来自算盘工程.你可以从
http://www.psionic.com获得这些工具.其中包含三个工具:
logcheck,portsentry和hostsentry. Logcheck版本是1.1.1,portsentry版本是1.0,hostsentry版本是0.0.2alpha.
Portsentry是一个端口扫描发现工具,就象名字所说的那样,如果端口被某处扫描,portsentrt就会立即堵赛主机,要么就是使用防火墙扔掉路由(或者是一个不用的ip地址),或者只要TCPWrapper安装在你机器上,就把骇客的ip地址写进文件/etc/hosts.deny中,反应相当有效率! Portsentry依赖一个主要的配置文件和一些特殊的文件,这些特殊文件是用来忽视一些主机(也就是不堵塞它们),或者是堵塞某些主机的某些端口。通过配置文件,你可以定义portsentry的工作方式。
首先,你要选择梆定到portsentry上的端口,是TCP还是UDP(或者两者都是),注意,如果你使用X11,就不能绑定到端口6000上!
按照你使用的unix系统,你有两种不同的操作方式来监视端口,现在只有linux支持先进模式。
下一步是堵塞选项,要么堵塞要么不堵塞扫描,或着运行外部命令。
接着选择扔掉路由,或者把攻击者重定向到一个网络上不使用的ip地址或者是防火墙上。
下一步是与TCPWrapper有关,那就是你得决定是不是写一个拒绝条目进文件/etc/hosts.deny中。
接下来你可以定义一个外部命令来运行,最后,你可以为扫描选一个触发器值,(缺省为0)。
以上就是你必须做的,我们假设你懂得关于日志记录的一切东西。因为,显而易见,所有的警告被记录下来。这意味着,如果你想把最终的警告放到/var/log/messages或var/log/syslog或/var/adm/messages等文件
之外的某个地方,你可以修改你的syslog.conf文件。
你可以选择在后台运行portsentry,这个选项取决于你得系统,在大多数unix版本上可以使用-tcp,-udp选项,在linux机器上可以用-atcp,-audp选项.(a代表先进)
让我们来看一看扫描一台运行有portsentry的机器时的结果.
如果你是一个每个星期看一次日志的系统管理员(你应该换个工作了),算盘工程提供了另外一个工具:logcheck.如果在日志中发现异常的现象时,这个工具通过cron任务和发邮件给管理员.
这个套件中最新的工具叫作hostsentry,看起来相当有趣,但我没有测试过.
如果你想要一个伟大,简单和高效的工具时,选portsentry!
谢谢Rowland先生,他的工作非常伟大,顺便说一下,我喜欢他的幽默.
另外一个系统管理员真的不可少的工具叫snort.
snort是一个IDS(入侵检测系统)并且非常精确的轻量级的工具.你能从
http://www.snort.org网站上下载1.6.3版本的snort.据说可以在任何能和libpcap工作的平台上运行.最好使用最新版的libpcap.顺便说一下,你可以得到win32版的snort.
snort可以分析ip数据流,提供非常健壮的日志功能.snort依赖规则脚本,你可以监视你想要监视的东西.
甚至提供给你一个规则数据库,这样,你就得做一个重要的决定:把探测器放在何处,或者你会提出,啦种流量要监控?今,出,在防火墙外还是内部?
我们宁愿建议在任何一个地方!!!这对我而言,是个严肃的问题,如果你是一个"标准"的系统管理员,探测器越多越好.
现在你决定监听某处,你必须选择应用的规则.snort带有许多基本的规则,后门,ddos,finger,ftp...这些规则被放在snort-lib文件中,你可以从snort的网站上得到新的和升级的规则.
你只要把snort设置好选项作为后台任务运行就可以了,如果要把snort当做守护进程运行,选项就是-D因为你可以重定向日志,所以你也能定义日志记录在哪里,甚至是另外一台机器.
在这篇文章中提到snort的所有功能是不可能的,这篇文章只能告诉你一部份.不管这么说。
nort是另外一个你必不可少的工具.snort是非常伟大的工具.多谢Roesch先生.
一些免费工具:比方说
http://www.cs.tut.fi/~rammer/aide.html介绍的AIDE。
五、加密在这个领域有许多工具,我们不能全部说到它们,不管怎样,我们至少要说一说SSH,特别是免费版本的openSSH.从
http://www.openssh.com上能得到它.现在版本是2.3.0,这个伟大的产品原先是在openbsd上开发的,现在可以运行在许多unix版本上.
openssh是telnet和其它远程命令如rsh,rlogin等的替代品.它包含scp这一ftp和rcp的替代品.openssh可以对网络上传输的数据进行加密.telnet,rsh等用明文传输,当然包含口令的传输!
所以,你不应该再使用上述工具,而应改用openssh.这有点强迫,就让我们少少法西斯吧!
问题是这种工具和加密法有关,有些国家非常严格,不容许这类软件.事情正在发生了变化,但是在许多国家你还是不能自由使用这些软件。举个例子来说,一段时间以前,如果你在象法国这类国家中使用ssh,你就被当作一个间谍,(根据国家人权法)幸运的是现在不是这样了,不管怎么说, 我建议在使用这类工具时先读一下有关
规定。你可以在
http://www2.epic.org/reports/crypto2000/countries.html 网页上找到不同国家关于这种情况的报告。
毕竟,加密是一个非常关注的话题,有许多工具可供考虑,让我们提一下
http://www.openssl.org上的openssl(安全套接层),或者是
http://www.strongcrypto.com上的Strong Crypto,一个公开原码的linux上的VPN工具。
vpn是另外一种解决方案,值得用另外一篇文章来详细介绍。(象上面题及的大多数工具)因此,我们不想在这里多说什么。
显而易见地,我们不会忘记提一下在
http://www.ietf.org/html.charters/openpgp-charter.html网页上的
openPGP和网站
http://www.gnupg.org中的GNUpg.
六、脚本
在这里,我们不想提什么工具,脚本编写是任何一个系统管理员的主要技能之一。在你管理网络时,shell脚本,perl脚本等都是你每天工作的一部份。
显而易见地,脚本可被用在任务自动执行上,但是,我们同样可以把它应用在安全监控上,每个系统管理员都有他自己的需要,而且他总是试图用适合他的方式来管理这些。这通常没那么容易,有一样东西能给你帮助:
订阅系统管理员杂志!这本杂志是系统管理员写给系统管理员的,提供给你许多程序和脚本,每一期甚至还配有一张电脑光碟,当然包含所有的程序和脚本。
这不是广告,只不过告诉大家一条找到提高安全的许多解决方案的图解。如果你是一个系统管理员,去
http://www.samag.com看一看吧,你应该试一试,当然,这仅仅是一个建议。
七、还有什么
本文已相当多地讲述安全问题,但是,就如我们开始就说过,这篇文章不是一篇“如何使你的网络或主机安全”的文章。关于这个题目,一本书都不够,安全不仅仅依赖工具,也与许多行为有关,比如,一些通常的习惯让我们犯错。什么时候人们会明白M$ office文件实际上是一个安全炸弹,它们不但体形巨大,而且可能满是宏病毒。
wintel用户,请不要把word,execl文件作为邮件附件传递,此外,如果你收到它们,请不要打开它,这仅仅是一个建议,但是,你已经被警告过,它们和你收到或下载的可执行文件一样危险(在我看来,更危险)。顺便说一句,纯文本和html文件在大小上比office文件小得多,而且它们没有危险性。
当然,我知道wintel word这样工作:当你下载一个单独的驱动,它通常是可执行的,让我们承认,我们可以相信这个大公司...,但是你知道你下载下来的文件可能发生了什么?诚然,这样想有点偏执了,但是不是疯狂呢?为什么你认为许多文件有一个校正值来检验正确性呢?
下面所说的可能“伤害”许多人,但这是事实,JAVA是危险的!applet不安全,javascript不安全,虽然如此,有趣的是许多网站使用JAVA,此外,JAVA是当你访问网站时,浏览器经常死掉的问题根源。这是网站的目的吗?
更不要提来自M$的ActiveX了!
建议,用Rebol代替它。(
http://www.rebol.com)
因为基于这样的事实:请新的internet专家,停止用wintel word和IE5来建站。我注意到,这样的网站四处蔓延,毕竟许多人用许多不同的操作系统和许多不同的浏览器联接internet,那样做,等于拒绝人们访问你的网站。internet的目标
是共享,使用专用的东西是无意义的,以我的粗见,当建设一个网站时,首先要做的是查清访问者是哪种操作系统,哪种浏览器...,但这只是我个人的观点。想一想吧,如果你用unix机器和netscape访问那样的网站,你连首页都看不到!
对不起,有点离题了。
另外一个重要的观点是不可能做到100%安全。我们离那还早呢。你所能做的仅仅是提高它,事实上,你有可能可以把我们提到的工具都用上,但是把后门开的大大的!别傻了,骇客们不会首先就去试图解开128位的密钥,但是他们可以在某个地方找到一个小漏洞。所以要小心suid或sgid程序,以及访问权限,运行的没用的服务,取消的账号等。
的unix版本有许多相似之处,它们有许多不同的安全隐患要关。有些就象个筛子一样漏洞百出,你必须注意到这点。比方说,有一个internet cable联接的M$是了不起的,但是你就会出现在骇客机器上的网上邻居上,M$将会把你出卖给骇客,我不是在开玩笑...
网络和计算机安全有一条很长的路要走,如果你对这个领域感兴趣,你每天都可以学到新东西。幸运的是,下面有一些资源可以利用。
参考
httpp://www.linuxsecurity.com
http://www.sans.orghttp://www.infosyssec.orghttp://www.securityfocus.comhttp://www.cs.purdue.edu/coast/hotlist/