一、 前言
互联网的普及给网络管理人员带来了极大的挑战:随处可得的黑客工具和系统漏洞信息使我们的网络无时无刻不处于危险之中。一般说来,一个典型的网络攻击是以大量的端口扫描等手段获取关于攻击对象的信息为开端的,这个过程必然产生大量的异常网络流量预示着即将到来的真正攻击,然而当前被广泛使用的网络产品都具有一个普遍的弱点--被动防御,即对这些重要的网络攻击先兆熟视无睹,错过了最佳的防御时间。为了扭转这种不利的局面,变被动防御为积极防御,就要求网管人员对网络的运行状态进行实时监控以便随时发现入侵征兆并进行具体的分析,然后及时进行干预,从而取得防患于未然的效果。完成这种功能的安全产品就是网络入侵检测系统(Network Intrusion Detection Systems,NIDS)。
目前,市场上的这类产品可分为硬件和软件两种类型,但无论选择那种都有一个共同的特点:昂贵。即便在单点安装的情况下,无论是硬件类型的费用还是软件类型的许可费都需要数万元乃至十余万元。如果无法承受这笔开支该怎么办?难道网络安全工作就不去搞了吗?答案是否定的。
正如所带给我们的巨大挑战一样,互联网也同时带给我们无数的宝贵资源,只等我们去开发、利用。开放源代码软件(Open Source Software)便是其中之一,免费可得的软件发布形式,使其具有广大的用户群;众多志愿者的协同开发模式使其具有卓越的兼容性;大量的网上社区弥补了缺少商业服务的不足。本文试图论述利
用互联网上免费可得的开放源代码软件实现一个完整的网络入侵检测系统的过程。
二、 系统概述
本系统采用三层分布式体系结构:网络入侵探测器、入侵事件数据库和基于Web的分析控制台。为了避免不必要的网络流量,本例将网络入侵探测器和入侵事件数据库整合在一台主机中,用标准浏览器异地访问主机上的Web服务器作为分析控制台,两者之间的通信采用HTTPS安全加密协议传输。
由于实现本系统所需的软件较多,有必要在此进行简要的说明:
Snort
功能简述:网络入侵探测器;
正式网址:http://www.snort.org/
软件版本:1.8.6
Libpcap
功能简述:Snort所依赖的网络抓包库;
正式网址:http://www.tcpdump.org/
软件版本:0.7.1
MySQL
功能简述:入侵事件数据库;
正式网址:http://www.mysql.org/
软件版本:3.23.49
Apache
功能简述:Web服务器;
正式网址:http://www.apache.org/
软件版本:1.3.24
Mod_ssl
功能简述:为Apache提供SSL加密功能的模块;
正式网址:http://www.modssl.org/
软件版本:2.8.8
OpenSSL
功能简述:开放源代码的SSL加密库,为mod_ssl所依赖;
正式网址:http://www.openssl.org/
软件版本:0.9.6d
MM
功能简述:为Apache的模块提供共享内存服务;
正式网址:http://www.engelschall.com/sw/mm/
软件版本:1.1.3
PHP
功能简述:ACID的实现语言;
正式网址:http://www.php.net/
软件版本:4.0.6
GD
功能简述:被PHP用来即时生成PNG和JPG图像的库;
正式网址:http://www.boutell.com/gd/
软件版本:1.8.4
ACID
功能简述:基于Web的入侵事件数据库分析控制台;
正式网址:http://www.cert.org/kb/aircert/
软件版本:0.9.6b21
ADODB
功能简述:为ACID提供便捷的数据库接口;
正式网址:http://php.weblogs.com/ADODB
软件版本:2.00
PHPlot
功能简述:ACID所依赖的制图库;
正式网址:http://www.phplot.com/
软件版本:4.4.6
上述软件都是开源软件,可以直接登录相应软件的正式网站,下载源代码。此外,需要特别说明的一点是虽然本例中网络入侵检测系统所采用的系统平台是Solaris 8 for Intel Platform,但是在其它种类的系统平台上,如Linux 、OpenBSD以及Windows 2000等,其具体的实现步骤大同小异,因此就不在另行说明了。
三、 安装及配置
在正式进行软件安装之前,请检查系统,确保拥有符合ANSI标准的C/C++编译器等软件开发工具。
1、 安装MySQL
首先,以超级用户的身份登录系统,创建mysql 用户和mysql用户组;
然后,以mysql身份登录,执行下列命令:
$gzip -d -c mysql-3.23.49.tar.gz | tar xvf -
$cd mysql-3.23.49
$./configure
$make
$make install
这样,就按照缺省配置将MySQL安装在/usr/local目录下。然后将源代码树中的缺省配置文件my.cnf拷贝到/etc目录下。接下来,以超级用户身份执行源码树中scripts目录下的可执行脚本文件mysql_install_db来创建初始数据库。用/etc/init.d/mysql.server命令启动数据库服务器后,使用/usr/local/bin/mysqladmin程序来改变数据库管理员的口令。
2、 安装Snort
首先安装Snort所依赖的库libpcap:
#gzip -d -c libpcap-0.7.1.tar.gz | tar xvf -
#cd libpcap-0.7.1
#./configure
#make
#make install
这样libpcap缺省地安装在/usr/local目录下。
然后开始安装Snort:
#gzip -d -c snort-1.8.6.tar.gz | tar xvf -
#cd snort-1.8.6
#./configure --prefix=/usr/local --with-mysql=/usr/local --with-libpcap-includes=/usr/local --with-libpcap-libraries-/usr/local
#make
#make install
安装完毕后,将源码树中的snort.conf文件、classification.config文件和规则文件(*.rules)拷贝到系统的/etc目录下。
按照下列步骤配置Snort将其捕获的网络信息输出到MySQL数据库:
1) 创建Snort入侵事件数据库和存档数据库:
#/usr/local/bin/mysqladmin -u root -p create snort
#/usr/local/bin/mysqladmin -u root -p create snort_archive
2) 执行Snort源码树下contrib目录下的create_mysql SQL脚本文件创建相关表:
#/usr/local/bin/mysql -u root -D snort -p < create_mysql
#/usr/local/bin/mysql -u root -D snort_archive -p < create_mysql
3) 编辑/etc/snort.conf文件在output plugin 段中加入如下一行:
output database: alert, mysql, user=root password=abc123
dbname=snort host=localhost
3、 安装Apache
1) 安装MM库
#gzip -d -c mm-1.1.3.tar.gz | tar xvf -
#cd mm-1.1.3
#./configure
#make
#make install
MM库被按照缺省配置安装在/usr/local目录下。
2) 安装OpenSSL
#gzip -d -c openssl-0.9.6d.tar.gz | tar xvf -
#cd openssl-0.9.6d
#./config
#make
#make test
#make install
OpenSSL按照缺省设置安装在/usr/local目录下。
3) 为Apache扩展mod_ssl代码
#gzip -d -c apache-1.3.24.tar.gz | tar xvf -
#gzip -d -c mod_ssl-2.8.8-1.3.24.tar.gz | tar xvf -
#cd mod_ssl-2.8.8-1.3.24
#./configure --with-apache=apache-1.3.24
该命令运行成功之后,会有提示说明已经成功扩展了Apache的源代码。
4) 安装Apache
#cd ../apache-1.3.24
#SSL_BASE=/usr/local EAPI_MM=/usr/local ./configure -enable-module=so --enable-module=ssl --prefix=/usr/local
#make
#make certificate
#make install
其中,make certificate命令是为mod_ssl生成所需的安全证书,按照提示输入相应信息即可。这样,Apache就被安装在了/usr/local目录下。
4、 安装PHP
首先安装为PHP提供既时生成PNG和JPG图象功能的GD库:
#gzip -d -c gd-1.8.4.tar.gz | tar xvf -
#cd gd-1.8.4
#make
#make install
按照缺省配置,将其安装到/usr/local目录下。接下来开始正式安装PHP:
#gzip -d -c php-4.0.6.tar.gz | tar xvf -
#cd php-4.0.6
#./configure -with-mysql=/usr/local --with-apxs=/usr/local/bin/apxs --with-gd=/usr/local
#make
#make install
此处采用的是PHP的Apache动态模块DSO安装模式,完成之后,将会在/usr/local/libexec目录下生成Apache DSO模块libphp4.so。