首先明白操作系統平台是Ubuntu 14.04 LTS
如今我們要在Ubuntu 14.04上部署snort NIDS(入侵檢測系統)。
須要這些東西:
SNORT / Barnyard2 / Mysql / Apache2 / BASE
在進行全部工作之前,請運行下面命令,確保安裝必要的軟件(工具鏈)
sudo apt-get install -y build-essential libpcap0.8-devlibpcre3-dev libdumbnet-dev bison flex zlib1g-dev
SNORT
sudo apt-get install snort第二種是從源碼安裝。
sudo apt-get update
sudo apt-get upgrade
測試看看。運行:
snort -V假設顯示出下面:
,,_ -*> Snort! <*- o" )~ Version 2.9.7.0 GRE (Build 149) '''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved. Copyright (C) 1998-2013 Sourcefire, Inc., et al. Using libpcap version 1.5.3 Using PCRE version: 8.31 2012-07-06 Using ZLIB version: 1.2.8
說明成功安裝了!祝賀。
接着我們要改動snort的配置文件(注意我們使用的軟件源方式,故配置文件路徑較為固定)
sudo vim /etc/snort/snort.conf
將115行(大概位置)改動例如以下(假設一樣的話則不改動)
var RULE_PATH /etc/snort/rules var SO_RULE_PATH /etc/snort/so_rules var PREPROC_RULE_PATH /etc/snort/preproc_rules目的在於指定規則文件存放的路徑。
在第51行 :
ipvar HOME_NET 192.168.1.0/24
第536行。改動成例如以下所看到的 :
output unified2: filename snort.log, limit 128, mpls_event_types, vlan_event_types
(假設文件本身就和我這里改動后的一樣則不是必需改動)
如今啟動測試SNORT :
sudo service snort restart刪除之前日志中得內容(我們改變了日志格式,使用了時間戳格式)
sudo rm /var/log/snort/snort.log
(題外話:第51行不是必需改動,由於被/etc/snort/ snort.debian.conf覆蓋了)
如今我們要測試下snort的規則。
/etc/snort/rules是我們的用於存放規則文件的路徑。以后snort就是依據諸多的規則文件給我們提供預警和提示。
打開規則文件:
sudo vim /etc/snort/rules/local.ruleslocal.rules是用於自己定義規則的規則文件。
然后加入自己的規則到local.rules:
alert icmp any any -> $HOME_NET any (msg:"ICMP Test NOW!!!"; classtype:not-suspicious; sid:1000001; rev:1;) alert tcp any any -> $HOME_NET 80 (msg:"HTTP Test NOW!!!"; classtype:not-suspicious; sid:1000002; rev:1;)這兩條規則大概就是說不論什么發往本機的ICMP和HTTP數據包都會觸發警告!
保存退出。
為了便於測試。繼續改動snort.conf文件。
大概在573行的位置。作例如以下操作:
將除了local.rules之外的規則文件所有去除(不包括進來)。
(也就是接下來數十行的include)。
終於這樣:
# site specific rules include $RULE_PATH/local.rules
(這是為了便於測試)
sudo snort -T -c /etc/snort/snort.conf
假設看到顯示結果例如以下:
... Snort successfully validated the configuration! Snort exiting而且還能在諸多輸出信息中找到例如以下輸出:
+++++++++++++++++++++++++++++++++++++++++++++++++++ Initializing rule chains... 1 Snort rules read 1 detection rules 0 decoder rules 0 preprocessor rules 1 Option Chains linked into 1 Chain Headers 0 Dynamic rules +++++++++++++++++++++++++++++++++++++++++++++++++++ +-------------------[Rule Port Counts]--------------------------------------- | tcp udp icmp ip | src 0 0 0 0 | dst 0 0 0 0 | any 0 0 1 0 | nc 0 0 1 0 | s+d 0 0 0 0 +----------------------------------------------------------------------------
再次祝賀!規則成功載入。測試通過!
作了以上改動之后,以下開始真正的測試。
sudo snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0隨后。你能夠使用還有一台電腦或者開另外一個terminal使用ping命令。ping測試主機。
比方:ping localhost
你應該能在測試主機上看到相似的例如以下輸出:
10/31-02:27:19.663643 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.74 -> 10.0.0.64 10/31-02:27:19.663675 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.64 -> 10.0.0.74 10/31-02:27:20.658378 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.74 -> 10.0.0.64 10/31-02:27:20.658404 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.64 -> 10.0.0.74 10/31-02:27:21.766521 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.74 -> 10.0.0.64 10/31-02:27:21.766551 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.64 -> 10.0.0.74 10/31-02:27:22.766167 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.74 -> 10.0.0.64 10/31-02:27:22.766197 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.64 -> 10.0.0.74 ^C*** Caught Int-Signal
(按ctrl+c結束)
然后你去查看/var/log/snort,你也會發現有被命令為snort.log.nnnnnn(nnnn代表數字),這些文件里包括的和屏幕上打印出來的是一樣的信息。
祝賀。如今我們已經可以依據自己的規則顯示警告信息了。
Barnyard
sudo apt-get install -y libmysqlclient-dev autoconf libtool
output unified2: filename snort.u2, limit 128
接下來安裝和配置Barnyard:
wget https://github.com/firnsy/barnyard2/archive/v2-1.13.tar.gz -O barnyard2-2-1.13.tar.gz依次運行:
tar zxvf barnyard2-2-1.13.tar.gz cd barnyard2-2-1.13 autoreconf -fvi -I ./m4
64bit和32bit機器分別運行下面:
./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu --with-mysql-includes=/usr/include/ ./configure --with-mysql --with-mysql-libraries=/usr/lib/i386-linux-gnu --with-mysql-includes=/usr/include/
繼續:
make sudo make install
sudo cp /usr/local/etc/barnyard2.conf /etc/snort
sudo mkdir /var/log/barnyard2 sudo chown snort.snort /var/log/barnyard2
sudo cp schemas/create_mysql /usr/src
編輯:
sudo gedit /etc/snort/barnyard2.conf#227行 改為:
output alert_fast ( instead of output alert_fast: stdout )
output database: log, mysql, user=snort password=secret2 dbname=snort host=localhost
( 用你的snort用戶的password取代secret2 ,接下來在MySQL中會用到secret2)
MySQL
[ 輸入MySQL的rootpassword ]
在MySQL控制台依次輸入下面內容(注意分號結尾):
create database snort;
create database archive;
grant usage on snort.* to snort@localhost;
grant usage on archive.* to snort@localhost;
set password for snort@localhost=PASSWORD('secret2');
grant all privileges on snort.* to snort@localhost;
grant all privileges on archive.* to snort@localhost;
flush privileges;
exit
use snort; source /usr/src/create_mysql; show tables; exit
Snort 和Barnyard 測試
<span style="font-size:12px;">sudo snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 -D</span>
你不會看到輸出結果。由於程序在后台執行的。
<span style="font-size:12px;">sudo barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.u2 -w /var/log/snort/barnyard2.waldo -g snort -u snort</span><span style="font-size: 18.6666660308838px;"> </span>
應該能看到下面輸出:
--== Initialization Complete ==-- ______ -*> Barnyard2 <*- / ,,_ \ Version 2.1.13 (Build 327) |o" )~| By Ian Firns (SecurixLive): http://www.securixlive.com/ + '''' + (C) Copyright 2008-2013 Ian Firns <firnsy@securixlive.com> Using waldo file '/var/log/snort/barnyard2.waldo': spool directory = /var/log/snort spool filebase = snort.u2 time_stamp = 1412527313 record_idx = 16 Opened spool file '/var/log/snort/snort.u2.1412527313' Closing spool file '/var/log/snort/snort.u2.1412527313'. Read 16 records Opened spool file '/var/log/snort/snort.u2.1412528990' Waiting for new data使用ctrl+c結束。
mysql -u snort -p -D snort -e "select count(*) from event"
應該會出現下面結果:
+----------+ | count(*) | +----------+ | 4 | +----------+
***假設出現少了一個 sid-msg.map文件的錯誤。下面方式修復:
cd /usr/share/oinkmaster sudo bash -c "sudo ./create-sidmap.pl /etc/snort/rules > /etc/snort/sid-msg.map"
BASE
sudo apt-get install libphp-adodb
繼續改動配置文件:
編輯 "/etc/php5/apache2/php.ini", 找到這一行"error_reporting" ,改動它:
error_reporting = E_ALL & ~E_NOTICE
編輯/etc/apache2/apache2.conf 加入許可www/base :
----------------------------------------------------------------------------------------------------- <Directory /var/www/html/base> AllowOverride All Require all granted </Directory> -----------------------------------------------------------------------------------------------------
重新啟動apache2 :
sudo service apache2 restart
安裝BASE依賴:
sudo apt-get install php-pear sudo apt-get install libwww-perl sudo apt-get install php5-gd sudo pear config-set preferred_state alpha sudo pear channel-update pear.php.net sudo pear install --alldeps Image_Color Image_Canvas Image_Graph
假設得到下面錯誤: ' could not extract the package.xml file ' 。那么下面方法能夠修復這個錯誤。
當下載了這6個pear包之后,我們手動安裝 ( 3 + 3 dependencies ).
例如以下:
cd /build/buildd/php5-5.5.9+dfsg/pear-build-download ls
這里應該有6個 .tgz 包. 手動安裝:
sudo tar zxf Image_Color*.tgz
sudo cp package.xml ./Image_Color*/ cd Image_Color* sudo pear install package.xml cd ..依照上面方法依次安裝其余的五個包。
Image_Canvas
Numbers_Roman
Math_BigInteger
Numbers_Words
Image_Graph
BASE的安裝:
cd /usr/src sudo wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz sudo tar -zxf base-1.4.5.tar.gz sudo cp -r base-1.4.5 /var/www/html/base sudo chown -R www-data:www-data /var/www/html/base sudo service apache2 restart
BASE設置:
瀏覽器輸入:http://localhost/base
(語言就選擇默認的英文)
Step 1) 輸入路徑 : /usr/share/php/adodb
Step 2) Database Name : snort
Database Host : localhost
Database User Name: snort
Database Password : secret2(之前輸入的)
( tick 'Use Archive Database' )
Archive Database Name : archive
Archive Database Host : localhost
Archive Database User Name : snort
Archive Database Password : secret2(之前輸入的)
Step 3)
Full admin name ( xxx )
[GUI password] ( Secret3 )
Full admin name ( XXXX )
Step 4) 點擊 ' Create baseAG'
Step 5) 點擊 ' Now continue to Step 5 ' and login ( XXX/ secret3 )
然后ping主機的話。不出意外每3min就會跟新顯示snort的信息。