包子@鄭州大學網絡安全園 http://secu.zzu.edu.cn Snort是非常出名的一個入侵檢測系統,他可以分析流經他的數據,並產生檢測報告,可是默認產生的報告給人一種很亂,毫無頭緒的感覺,但是如果我們把他的日志輸出到mysql數據庫的話,我們就可以比較方便的查詢我們所關心的信息了。 Roman Danyliw寫了一套叫Analysis Console for Intrusion Databases (ACID)的PHP程序,可以讓我們很方便直觀的分析snort的日志並且可以收集來自多個sensor(探頭)的數據以實現分布式的NIDS或建立分布式的蜜罐網絡信息收集中心。 今天,我們就說說如何在一個FreeBSD的系統下利用Snort,MySQL和ACID建立一個完整的NIDS 本文涉及到的任何軟件都可以在鄭州大學網絡安全園下載的到,我把所有需要的軟件打了個包,方便大家下載 http://secu.zzu.edu.cn 本文假設你有一定的BSD系統和MySQL數據庫的操作經驗 我們的操作系統是FreeBSD 5.0 首先以root用戶登陸系統 把zip包解壓縮到/down目錄之後,把dist目錄的文件全部復制到/usr/port/distfiles下面 #mv port/* /usr/port/distfiles 先使用port安裝mysql server #cd /usr/ports/databases/mysql323-server/ ; make ; make install 初始化並啟動mysql server #/usr/local/bin/mysql_install_db #/usr/local/etc/rc.d/mysql-server.sh 確認Mysql服務已經打開 #netstat -an grep 3306 tcp4 0 0 *.3306 *.* LISTEN 接著給root用戶設置一個密碼並登陸 #mysqladmin -u root passWord yourpassword #mysql -u root -p password 先創建一個叫"snort"的數據庫。 簡單的說明一下grant的用法 格式:grant 操作權限 on 數據庫.* to 用戶名@登錄主機 identified by "密碼" ,詳細內容 mysql> create database snort ; mysql>use snort; 創建數據表 mysql> source /usr/src/snort-1.9.1/contrib/create_mysql 現在為snort創建一個叫"zzu"的用戶,如果要做多個snort sensor的話,這個用戶最好有點含義,因為等會我們配置snort的時候不容易弄亂。 mysql>grant insert,select,create,delete on snort.* to zzu@ur sensor''ip identified by "urpassword" 如果你需要做多個sensor的數據收集的話,重復這個步驟並更改用戶名和IP,這樣等會配置起來方便很多的。 mysql>grant insert,select,create,delete on snort.* to smth@another sensor''ip identified by "urpassword" ……………… ############################################################################################# 然後cd /usr/src #tar zxvf /down/apache_1.3.27.tar.gz #tar zxvf /down/php-4.3.1.tar.gz #tar zxvf /down/webmin-1.030.tar.gz 安裝apache #./configure --prefix=/usr/local/apache --enable-shared=max ; make ; make install 使用port裝GD2 #cd /usr/ports/graphics/gd/ ; make ; make install 裝PHP #./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs --with-zlib --with-jpeg --with-gd --with-png --enable-track-vars --enable-sockets --disable-debug ; make ; make install 復制並修改php.ini cp php.ini-dist /usr/local/lib/ 把display_errors設置成Off 修改httpd.conf文件並添加下面幾行 把ServerSignature On 改成ServerSignature Off 添加 AddType Application/x-httpd-php .php AddType Application/x-httpd-php .php3 AddType Application/x-httpd-php .php4 #cp /usr/local/apache/bin/apachectl /usr/sbin/ #apachectl start 在WWW目錄下vi info.php <? phpinfo(); ?> 看看輸出的結果有沒啟動gd,sockets,mysql支持,如果沒有請檢查上面步驟是否有疏漏 ############################################################################################## 現在開始裝snort 先裝port安裝libnet 再把把SNORT裝上,請使用最新的snort.1.91,編譯的時候讓他支持mysql,如果有興趣的話,讓他也支持resp,關於resp更多信息請看snort 的man文檔 #cd /usr/src/snort-1.9.1 #./configure --help #./configure --with-mysql --enable-flexresp ; make ; make install 拷貝配置文件和規則文件 #mkdir /usr/local/etc/snort #cp etc/* /usr/local/etc/snort #cp -r rules /usr/local/etc/snort/ #cd /usr/local/etc/snort 編輯配置文件snort.conf, #vi snort.conf 找到102行 把var RULE_PATH ../rules 改成var RULE_PATH ./rules 找到431行 取消注釋,並把mysql服務器信息准確輸入 output database: log, mysql, user=snort password=ur passwd dbname=snort host=mysql server 把每個sensor的輸出都放到同一個中央數據庫裡面,我們就可以通過ACID查看每個sensor的統計結果了 給系統添加snort用戶 #echo /dev/null >> /etc/shells #adduser Username: snort Uid (Leave empty for default): Login group [snort]: Login class [default]: Shell (sh csh tcsh bash null) [sh]: null Home Directory [/home/snort]: Username : snort Password : ***** Uid : 1002 Groups : snort Home : /home/snort Shell : /dev/null Locked : no OK? (yes/no): yes adduser: INFO: SUCcessfully added (snort) to the user database. 為port scan建一個放日志的目錄 #mkdir /var/log/snort #chown -R snort:snort /var/log/snort ################################################################### 安全起見,在sensor的主機做個到data center的ssh tunnel ssh -C data center''ip -L 3389:data center''s ip:3306 那麼在sensor的snort.conf的mysql信息就得相應的修改了 運行snort #snort -c /usr/local/etc/snort/snort.conf -u snort -g snort -D ################################################################################### 裝Net_SSLeay和webmin #cd /usr/src/ #tar zxvf /down/Net_SSLeay.pm-1.21.tar.gz #tar zxvf /down/webmin-1.030.tar.gz 安裝Net_SSLeay #cd Net_SSLeay.pm-1.21 #perl Makefile.PL ; make install #cd ../webmin-1.030 #./setup.sh 在那幾個問題之中,注意use SSL選擇y 接著你和webmin主機的連接就被加密了的 進入webmin配置界面,更改語言,添加snort模塊…… 你會發現編輯不到規則,原因就是snort.config的$rulepath沒去掉 ################################################################################### 配置ACID 把adodb,acid,jpgraph和phplot都解壓縮到WWW的根目錄去 #cd /where/ur/www/root/ #tar zxvf adodb311.tgz #tar zxvf acid-0.9.6b22.tar.tar #mv acid/* /where/ur/www/root/ 並且把jpgraph裡的文件都CP到phplot的目錄裡面去 把adodb-版本號,db-版本號,的版本號都去掉 #mv adobd-*.*.* adodb 編輯acid_config.php文件 $DBlib_path = "adodb"; $alert_dbname = "snort"; $archive_user = "snort"; $alert_password = mysql密碼; $ChartLib_path = "phplot"; $portscan_file = "/var/log/snort/portscan.log"; 到此,事情已經基本上做完了,可以訪問http://ip來看看了 若顯示正確,就點"create acid AG",就這樣,一個分布式的NIDS數據收集中心就建成了