Snort入侵檢測系統構建
難度等級:中等
實驗時長:200min
【實驗目的】
通過本實驗掌握snort入侵檢測系統的搭建以及相關配置。
【實驗環境】
Snort服務器登錄信息:
用戶名: college
密碼: 360College
【實驗原理】
搭建好Snort環境后,利用發包器,發送具有某種特征的數據包,檢驗規則的有效性。
實驗步驟
預置環境說明:
OS為CentOS7.snort服務器已安裝了daq、bison、 flex、libpcap、libdnet、ncurses、hwloc、luajit、pcre和zlib等工具插件以及mysql數據庫。
***所有需要的軟件,均在/home/IDS目錄下。
一、snort安裝
wget https://www.snort.org/downloads/archive/snort/snort-2.9.11.1.tar.gz
#tar xvf snort-2.9.11.1.tar.gz
#cd snort-2.9.11.1
#./configure --prefix=/usr/local/snort --enable-pthread --enable-gre --enable-mpls --enable-targetbased
#make && make install
#export PATH=$PATH:/usr/local/snort/bin
注意:
以上將snort安裝到指定目錄。從snort 2.3開始,不再支持mysql,因此,可采用barnyard2插件,將snort輸出寫入mysql數據庫中。
驗證 輸入命令:#snort -V 出現一頭小豬,並顯示正確的版本號,說明snort已經安裝成功。 注意:大寫的-V。
二、建立數據庫
首先建立mysql數據庫:
1、下載barnyard2。
wget https://codeload.github.com/firnsy/barnyard2/zip/master 將下載的master文件,更名為master.zip。解壓:unzip master.zip。 解壓縮后,在barnyard2-master/schemas目錄下,有一個create_mysql文件。
2、編輯它在文件開始處,加上如下兩行:
create database snort; use snort;
3、用下面的命令運行:
sudo service mysql start mysql -u root -p < create_mysql
然后輸入密碼mysql,即可執行。
4、授權給snort用戶
mysql> create user 'snort'@'localhost' identified by 'snort'; //創建snort用戶 mysql> grant INSERT,SELECT,update on snort.* to snort@localhost; //授權給snort用戶 mysql> flush privileges;
三、配置snort
(一)添加默認規則
1. cd snort-2.9.11.1/etc
2. sudo mkdir /etc/snort
3. cp * /etc/snort/
4. sudo tar -xvf /home/IDS/community-rules.tar -C /etc/snort/
5.在/etc/snort/目錄下,創建rules目錄。
sudo mkdir /etc/snort/rules sudo mv /etc/snort/community-rules /etc/snort/rules
在/etc/snort/rules/下添加black_list.rules、white_list.rules文件: sudo touch /etc/snort/rules/black_list.rules sudo touch /etc/snort/rules/white_list.rules
(二)配置Snort,添加自定義配置
修改Snort配置文件,用vi打開/etc/snort/snort.conf,修改如下: var HOME_NET 192.168.8.0/24 //本地主機所在網段 var EXTERNAL_NET !$HOME_NET //其他網段 var RULE_PATH /etc/snort/rules //規則文件所在目錄
(三)設置snort輸出插件
Snort輸出設置在snort.conf文件的
#Step #6: Configure output plugins 如果輸出到數據庫,則添加或修改配置文件。 sudo vi /etc/snort/snort.conf: output unified2: filename snort.log, limit 128 //此處將數據輸出到snort.log文件
(四)添加snort規則
Snort規則中snort.conf文件的
#7) Customize your rule set 部分下面進行配置。 include $RULE_PATH/local.rules local.rules規則文件可根據需要進行修改名稱。
四、運行SNORT
1、啟動snort:
cd ../snort/bin
snort --h //幫助,列出snort可用的各種選項 snort -c /etc/snort/snort.conf //指定配置文件啟動 $sudo service mysql start snort -T -c /etc/snort/snort.conf
此處如果出現以下錯誤: /usr/local/lib/snort_dynamicrules 在配置文件snort.conf中,注釋掉該行;或者建立/usr/local/lib/snort_dynamicrules文件夾。
2、錯誤解決:
(1)rpc_decode arguments:
Ports to decode RPC on: 111 32770 32771 32772 32773 32774 32775 32776 32777 32778 32779 alert_fragments: INACTIVE alert_large_fragments: INACTIVE alert_incomplete: INACTIVE alert_multiple_requests: INACTIVE
ERROR size 1312 != 608 (0x520!=260) ERROR: Failed to initialize dynamic preprocessor: SF_SDF version 1.1.1 (-2) Fatal Error, Quitting.. 這個問題產生的原因是權限和歸屬問題,需要將動態預處理器指向有權限的文件夾。 修改snort.conf文件:
###################################################
#Step #4: Configure dynamic loaded libraries.
#For more information, see Snort Manual, Configuring Snort - Dynamic Modules
###################################################
#path to dynamic preprocessor libraries dynamicpreprocessor directory /usr/local/snort/lib/snort_dynamicpreprocessor/
#path to base preprocessor engine dynamicengine /usr/local/snort/lib/snort_dynamicengine/libsf_engine.so
#path to dynamic rules libraries
#dynamicdetection directory
#/usr/local/snort/lib/snort_dynamicrules
(2)錯誤:
[ Number of patterns truncated to 20 bytes: 323 ] pcap DAQ configured to passive. Acquiring network traffic from "eth0". Reload thread starting... Reload thread started, thread 0x7f1ed2879700 (28658) ERROR: Can't start DAQ (-1) - socket: Operation not permitted! Fatal Error, Quitting.. 權限不足,切換到root下;測試配置文件:
#snort -T -c /etc/snort/snort.conf
五、安裝和配置Barnyard
前面已經下載Barnyard2-master。下載鏈接: wget https://codeload.github.com/firnsy/barnyard2/zip/master。
(一)編譯安裝
sudo yum -y install libtool //安裝libtool,否則出現no libtoolize錯誤。
tar zxvf master.tar.gz
cd barnyard2-master
./autogen.sh //自動配置,完畢后,提示運行以下命令。
./configure --with-mysql --with-mysql-libraries=/usr/local/mysql/lib/ --with-mysql-includes=/usr/local/mysql/include 注意:在自己的環境中,需要核對庫文件和頭文件目錄
$ sudo make //編譯
$sudo make install //安裝完畢
(二)配置用戶組及目錄
sudo groupadd snort
useradd snort –g snort //創建snort組、snort用戶
sudo mkdir /var/log/snort /var/log/barnyard2
touch /var/log/snort/barnyard2.waldo
chown snort.snort /var/log/snort/barnyard2.waldo
sudo chown -R snort.snort /var/log/snort
sudo chown -R snort.snort /var/log/barnyard2 //創建日志目錄,並授權
(三)配置輸出參數
sudo cp /usr/local/etc/barnyard2.conf /etc/snort 修改: sudo vi /etc/snort/barnyard2.conf
1、找到 output alert_fast: stdout 改為:
output alert_fast
2、訪問數據庫設置
在database設置部分,找到mysql相關的,去掉注釋符號#,並修改為: output database: alert, mysql, user=snort password= snort dbname=snort host=localhost
此處注意:空密碼,必須寫成‘’的形式。
3、修改barnyard2.conf添加傳感器:
config interface: eth0 指定監聽網卡(多網卡主機根據需要設置)。
重新運行:
sudo snort -u snort -g snort -c /etc/snort/snort.conf -D 再運行barnyard2: sudo barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort
沒有出現錯誤,即可。
運行后,應該能看到sensor_name,user,database_name等配置參數。 並且,barnyard2等待新到來的數據。
4、測試與錯誤排除
錯誤1:進行make時,出現錯誤:
spo_database.h unkown type name my_bool we will handle it via api 解決: 在src文件夾下,打開spo_database.h文件,將my_bool類型修改為int類型,保存即可。 參考:https://blog.csdn.net/merisc/article/details/17078287
錯誤2:
Unable to open SID file '/etc/snort/sid-msg.map' 解決: 修改barnyard2.conf文件,指定sid文件路徑為:/etc/snort/rules/sid-msg.map。
錯誤3:
ERROR: Unable to open SID file '/etc/snort/sid-msg.map' (No such file or directory) ERROR: [Barnyard2Init()], failed while processing [/etc/snort/sid-msg.map] Fatal Error, Quitting.. Barnyard2 exiting 出現以上錯誤,說明sid-msg.map文件不存在,修改為正確路徑,或者利用create-sidmap.pl腳本重建。 重新運行。 如果sid-msg.map文件與規則不匹配,則刪除snort數據庫,重建數據庫。然后,snort會自動重新建立sid文件。
小結
通過本次實驗,能夠了解snort入侵檢測系統的搭建過程。在規則驗證方面,可在相應的rules目錄下放入自己編寫的規則,然后加載,進行驗證。