一、 前言
互聯(lián)網(wǎng)的普及給網(wǎng)絡(luò)管理人員帶來了極大的挑戰(zhàn):隨處可得的工具和系統(tǒng)漏洞信息使我們的網(wǎng)絡(luò)無時(shí)無刻不處于危險(xiǎn)之中。一般說來,一個(gè)典型的網(wǎng)絡(luò)攻擊是以大量的端口掃描等手段獲取關(guān)于攻擊對象的信息為開端的,這個(gè)過程必然產(chǎn)生大量的異常網(wǎng)絡(luò)流量預(yù)示著即將到來的真正攻擊,然而當(dāng)前被廣泛使用的網(wǎng)絡(luò)產(chǎn)品都具有一個(gè)普遍的弱點(diǎn)--被動(dòng)防御,即對這些重要的網(wǎng)絡(luò)攻擊先兆熟視無睹,錯(cuò)過了最佳的防御時(shí)間。為了扭轉(zhuǎn)這種不利的局面,變被動(dòng)防御為積極防御,就要求網(wǎng)管人員對網(wǎng)絡(luò)的運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控以便隨時(shí)發(fā)現(xiàn)征兆并進(jìn)行具體的分析,然后及時(shí)進(jìn)行干預(yù),從而取得防患于未然的效果。完成這種功能的安全產(chǎn)品就是網(wǎng)絡(luò)入侵檢測系統(tǒng)(Network Intrusion Detection Systems,NIDS)。
目前,市場上的這類產(chǎn)品可分為硬件和軟件兩種類型,但無論選擇那種都有一個(gè)共同的特點(diǎn):昂貴。即便在單點(diǎn)安裝的情況下,無論是硬件類型的費(fèi)用還是軟件類型的許可費(fèi)都需要數(shù)萬元乃至十余萬元。如果無法承受這筆開支該怎么辦?難道網(wǎng)絡(luò)安全工作就不去搞了嗎?答案是否定的。
正如所帶給我們的巨大挑戰(zhàn)一樣,互聯(lián)網(wǎng)也同時(shí)帶給我們無數(shù)的寶貴資源,只等我們?nèi)ラ_發(fā)、利用。開放源代碼軟件(Open Source Software)便是其中之一,免費(fèi)可得的軟件發(fā)布形式,使其具有廣大的用戶群;眾多志愿者的協(xié)同開發(fā)模式使其具有卓越的兼容性;大量的網(wǎng)上社區(qū)彌補(bǔ)了缺少商業(yè)服務(wù)的不足。本文試圖論述利
用互聯(lián)網(wǎng)上免費(fèi)可得的開放源代碼軟件實(shí)現(xiàn)一個(gè)完整的網(wǎng)絡(luò)入侵檢測系統(tǒng)的過程。
二、 系統(tǒng)概述
本系統(tǒng)采用三層分布式體系結(jié)構(gòu):網(wǎng)絡(luò)入侵探測器、入侵事件和基于Web的分析控制臺(tái)。為了避免不必要的網(wǎng)絡(luò)流量,本例將網(wǎng)絡(luò)入侵探測器和入侵事件數(shù)據(jù)庫整合在一臺(tái)主機(jī)中,用標(biāo)準(zhǔn)異地訪問主機(jī)上的作為分析控制臺(tái),兩者之間的通信采用HTTPS安全加密協(xié)議傳輸。
由于實(shí)現(xiàn)本系統(tǒng)所需的軟件較多,有必要在此進(jìn)行簡要的說明:
Snort
功能簡述:網(wǎng)絡(luò)入侵探測器;
正式網(wǎng)址:http://www.snort.org/
軟件版本:1.8.6
Libpcap
功能簡述:Snort所依賴的網(wǎng)絡(luò)抓包庫;
正式網(wǎng)址:http://www.tcpdump.org/
軟件版本:0.7.1
MySQL
功能簡述:入侵事件數(shù)據(jù)庫;
正式網(wǎng)址:http://www.mysql.org/
軟件版本:3.23.49
Apache
功能簡述:Web服務(wù)器;
正式網(wǎng)址:http://www.apache.org/
軟件版本:1.3.24
Mod_ssl
功能簡述:為Apache提供加密功能的;
正式網(wǎng)址:http://www.modssl.org/
軟件版本:2.8.8
OpenSSL
功能簡述:開放源代碼的SSL加密庫,為mod_ssl所依賴;
正式網(wǎng)址:http://www.openssl.org/
軟件版本:0.9.6d
MM
功能簡述:為Apache的模塊提供共享內(nèi)存服務(wù);
正式網(wǎng)址:http://www.engelschall.com/sw/mm/
軟件版本:1.1.3
PHP
功能簡述:ACID的實(shí)現(xiàn)語言;
正式網(wǎng)址:http://www.php.net/
軟件版本:4.0.6
GD
功能簡述:被PHP用來即時(shí)生成PNG和JPG圖像的庫;
正式網(wǎng)址:http://www.boutell.com/gd/
軟件版本:1.8.4
ACID
功能簡述:基于Web的入侵事件數(shù)據(jù)庫分析控制臺(tái);
正式網(wǎng)址:http://www.cert.org/kb/aircert/
軟件版本:0.9.6b21
ADODB
功能簡述:為ACID提供便捷的數(shù)據(jù)庫接口;
正式網(wǎng)址:http://php.weblogs.com/ADODB
軟件版本:2.00
PHPlot
功能簡述:ACID所依賴的制圖庫;
正式網(wǎng)址:http://www.phplot.com/
軟件版本:4.4.6
上述軟件都是開源軟件,可以直接登錄相應(yīng)軟件的正式網(wǎng)站,下載源代碼。此外,需要特別說明的一點(diǎn)是雖然本例中網(wǎng)絡(luò)入侵檢測系統(tǒng)所采用的系統(tǒng)平臺(tái)是Solaris 8 for Platform,但是在其它種類的系統(tǒng)平臺(tái)上,如Linux 、OpenBSD以及Windows 2000等,其具體的實(shí)現(xiàn)步驟大同小異,因此就不在另行說明了。
三、 安裝及配置
在正式進(jìn)行軟件安裝之前,請檢查系統(tǒng),確保擁有符合ANSI標(biāo)準(zhǔn)的C/C++編譯器等軟件開發(fā)工具。
1、 安裝MySQL
首先,以超級用戶的身份登錄系統(tǒng),創(chuàng)建mysql 用戶和mysql用戶組;
然后,以mysql身份登錄,執(zhí)行下列命令:
$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目錄下。接下來,以超級用戶身份執(zhí)行源碼樹中scripts目錄下的可執(zhí)行腳本文件mysql_install_db來創(chuàng)建初始數(shù)據(jù)庫。用/etc/init.d/mysql.server命令啟動(dòng)數(shù)據(jù)庫后,使用/usr/local/bin/mysqladmin程序來改變數(shù)據(jù)庫管理員的口令。
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文件和規(guī)則文件(*.rules)拷貝到系統(tǒng)的/etc目錄下。
按照下列步驟配置Snort將其捕獲的網(wǎng)絡(luò)信息輸出到MySQL數(shù)據(jù)庫:
1) 創(chuàng)建Snort入侵事件數(shù)據(jù)庫和存檔數(shù)據(jù)庫:
#/usr/local/bin/mysqladmin -u root -p create snort
#/usr/local/bin/mysqladmin -u root -p create snort_archive
2) 執(zhí)行Snort源碼樹下contrib目錄下的create_mysql SQL腳本文件創(chuàng)建相關(guān)表:
#/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按照缺省設(shè)置安裝在/usr/local目錄下。
3) 為Apache擴(kuò)展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
該命令運(yùn)行成功之后,會(huì)有提示說明已經(jīng)成功擴(kuò)展了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生成所需的安全證書,按照提示輸入相應(yīng)信息即可。這樣,Apache就被安裝在了/usr/local目錄下。
4、 安裝PHP
首先安裝為PHP提供既時(shí)生成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動(dòng)態(tài)模塊DSO安裝模式,完成之后,將會(huì)在/usr/local/libexec目錄下生成Apache DSO模塊libphp4.so。