基于CentOS平臺的Snort+Barnyard安裝步驟
一、背景
入侵檢測系統(tǒng)(IDS)不但可以主動發(fā)現(xiàn)網(wǎng)絡內(nèi)遭受攻擊,還可以作為防火墻的補充,雖然不能阻止網(wǎng)絡入侵行為,但是能夠幫助系統(tǒng)對網(wǎng)絡攻擊進行報警和分析。相當于部署在網(wǎng)絡中的隱形攝像頭。
然而Snort作為一種開源IDS系統(tǒng),網(wǎng)上遍布各種版本的不同類型的安裝資料,給初學者帶來諸多不便,往往參考了一堆文檔,還是無法達到預期。
本教程基于Cent OS 6.8 最小化安裝為基礎(chǔ),展示了在其中安裝Snort2.9.7.0的全過程。
閱讀范圍: 適用于初級網(wǎng)絡運維人員參考使用。
二、準備軟件環(huán)境
在安裝前,必需做SPAN,SPAN端口監(jiān)控是一種在現(xiàn)有網(wǎng)絡結(jié)構(gòu)中引入監(jiān)控網(wǎng)段的方法。Cisco交換機的中高端產(chǎn)品都有SPAN端口或鏡像端口。Span端口既可以是一個專用端口,也可以通過該端口實現(xiàn)交換機上所有的端口的配置選項設(shè)定。下文實在虛擬機環(huán)境下完成的實驗,所以只要把網(wǎng)卡設(shè)置為混雜模式即可。
(1).準備虛擬機工具Vmware or VirtualBox 或其他種類的虛擬機。當然遠程連接工具也不可或缺比如:Xshell5 或 SecureCRT。
(2).下載操作系統(tǒng)鏡像: http://pan.baidu.com/s/1pKSmNs3 附件中包含了實驗里涉及到的軟件包和腳本文件。
(3).安裝虛擬機(本文以Vmware Workstation 12為例進行安裝)
圖1
(4).將系統(tǒng)IP地址改為靜態(tài)IP
默認安裝,網(wǎng)絡IP是自動獲取,我們需要改成固定IP。
- #ifconfig-a \\查看所有網(wǎng)卡的狀態(tài)
- #vi/etc/sysconfig/network-scripts/ifcfg-eth0 \\編輯網(wǎng)卡配置文件
- DEVICE="eth0"
- BOOTPROTO="dhcp"
- HWADDR="00:0C:29:BA:53:4E"
- IPV6INIT="yes"
- NM_CONTROLLED="yes"
- ONBOOT="yes"
- TYPE="Ethernet"
- UUID="685d0725-02ab-41b9-b9bf-6a52fc68c0f8"
下面開始改成靜態(tài)IP
BOOTPROTO="dhcp" -> BOOTPROTO="static"
接著,增加以下內(nèi)容:
- IPADDR=192.168.91.29
- NETMASK=255.255.255.0
- GATEWAY=192.168.91.2
- DNS1=192.168.91.2
- DNS2=8.8.8.8 \\DNS配置根據(jù)當?shù)鼐W(wǎng)絡供應商進行添加
DNS還可以在其他的文件進行配置
- # vi /etc/resolv.conf
加入
- nameserver 202.96.2.2
退出保存,重啟網(wǎng)絡服務。實際 /etc/resolv.conf 是自動調(diào)用之前網(wǎng)卡配置文件DNS配置信息。
(5).本套教程主要基于網(wǎng)絡安裝所以大家必須保證網(wǎng)絡暢通。
三、安裝依賴包
1.安裝wget工具
- #yum install -ywget
更換成阿里云的源
- #wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
- #yum clean all
- #yum makecache
更新系統(tǒng)(完成后會升級所有包,改變軟件設(shè)置和系統(tǒng)設(shè)置,系統(tǒng)版本內(nèi)核都升級)
- #yum-y update
- #yuminstall -y epel-release
安裝epel源,EPEL,即ExtraPackages for Enterprise Linux,這個軟件倉庫里有很多非常常用的軟件,而且是專門針對RHEL設(shè)計的,對RHEL標準yum源是一個很好的補充,完全免費使用,由Fedora項目維護,EPEL 包含一個叫做epel-release的包,這個包包含了EPEL源的gpg密鑰和軟件源信息。您可以通過yum安裝到您的企業(yè)版Linux發(fā)行版上。
檢查系統(tǒng)是否安裝epel-release
- #rpm -q epel-release
- packageepel-release is not installed
2.安裝基本環(huán)境和依賴包
- #yum install -y gcc gcc-c++flex bison zlib* libxml2 libpcap* pcre* tcpdump git libtool curl man make
3.解壓DAQ、Libdnet、Snort
在服務器的安裝配置過程中,大家很可能會到官網(wǎng)去下載最新版本的源碼包,但是那樣以來就會遇到各種依賴包缺失的問題,從而導致無法安裝成功。因為有些軟件比如Snort要在DAQ安裝好之后才能繼續(xù),而DAQ依賴于Libdnet安裝好了,才能再安裝上DAQ。所以安裝源碼的順序猶然重要。在學習本文時一定要注意版本的一致性,也就是大家一定要挑選本文指定的版本進行試驗,只要成功了,你對Snort配置的信心就會大增,學習興趣也更加濃郁。
當然,使用源碼安裝并不特別復雜,只是在安裝過程里排錯的難度較大。如何解決安裝過程中的依賴問題,可以參考《如何解決源碼包安裝時的依賴性問題》http://chenguang.blog.51cto.com/350944/1034095 。
給大家打好預防針了,下面繼續(xù)安裝。
- cd /usr/local/src
- tar -zxvf /root/Desktop/libdnet-1.12.tgz
- tar -zxvf /root/Desktop/daq-2.0.4.tar.gz
- tar -zxvf /root/Desktop/snort-2.9.7.0.tar.gz
安裝libdnet-1.12.tgz
- cd /usr/local/src/libdnet-1.12/
- ./configure
- make && make install
友情提示:
有些初學者會選擇安裝rpm包,尤其手動安裝libdnet這個包時會遭遇以下問題:
- [root@localhost ~]# rpm -ivh libdnet-1.12-6.el6.i686.rpm
- warning: libdnet-1.12-6.el6.i686.rpm:Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
- error: Failed dependencies:
- libc.so.6is needed by libdnet-1.12-6.el6.i686
- libc.so.6(GLIBC_2.0)is needed by libdnet-1.12-6.el6.i686
- libc.so.6(GLIBC_2.1)is needed by libdnet-1.12-6.el6.i686
- libc.so.6(GLIBC_2.1.3)is needed by libdnet-1.12-6.el6.i686
- libc.so.6(GLIBC_2.3)is needed by libdnet-1.12-6.el6.i686
- libc.so.6(GLIBC_2.3.4)is needed by libdnet-1.12-6.el6.i686
- libc.so.6(GLIBC_2.4)is needed by libdnet-1.12-6.el6.i686
- libc.so.6(GLIBC_2.7)is needed by libdnet-1.12-6.el6.i686
安裝DAQ 這是安裝snort的前提。下面開始安裝DAQ
- cd daq-2.0.4
- ./configure
- make && make install
安裝snort2.9,(安裝snort前一定要編譯安裝libdnet-1.12.tgz)
- cd /usr/local/src/snort-2.9.7.0
- ./configure--enable-sourcefire
- make && make install
四、添加用戶和組
創(chuàng)建用戶、組、設(shè)置權(quán)限因為在root身份下解包的文件權(quán)限都是跟root有關(guān),所以要修改成snort用戶的屬主和相關(guān)權(quán)限。
- groupadd -g 40000 snort
- useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS -g snort
- cd /etc/snort
- chown -R snort:snort *
- \\執(zhí)行這條命令前先看看文件的屬主
執(zhí)行之后:
- [root@localhost snort]# ls -l
- total 312
- -rw-r--r--. 1 snort snort 1281 Nov 2806:14 attribute_table.dtd
- -rw-r--r--. 1 snort snort 3757 Nov 28 06:14 classification.config
- drwxr-xr-x. 2 snort snort 4096 Nov 18 2014 etc
- -rw-r--r--. 1 snort snort 23058 Nov 28 06:14 file_magic.conf
- -rw-r--r--. 1 snort snort 31643 Nov 28 06:14 gen-msg.map
- -rw-r--r--. 1 snort snort 13478 Nov 28 06:14 Makefile
- -rw-r--r--. 1 snort snort 190 Nov 28 06:14 Makefile.am
- -rw-r--r--. 1 snort snort 12388 Nov 28 06:14 Makefile.in
- drwxr-xr-x. 2 snort snort 4096 Nov 18 2014 preproc_rules
- -rw-r--r--. 1 snort snort 687 Nov 28 06:14 reference.config
- drwxr-xr-x. 2 snort snort 4096 Nov 28 06:15 rules
- -rw-r--r--. 1 snort snort 26772 Nov 28 06:14 snort.conf
- drwxr-xr-x. 4 snort snort 4096 Nov 11 2014 so_rules
- -rw-r--r--. 1 snort snort 2335 Nov 28 06:14 threshold.conf
- -rw-r--r--. 1 snort snort 160606 Nov 2806:14 unicode.map
下面,接著設(shè)置/var/log/snort目錄的屬主屬性。
- chown -R snort:snort/var/log/snort
五、配置Snort
1.新建/etc/snort目錄
- #mkdir /etc/snort
- #cd /etc/snort
復制配置文件到當前目錄
- cp /usr/local/src/snort-2.9.7.0/etc/*.
將/usr/local/src/snort-2.9.7.0/etc下配置文件復制到當前目錄
tar -zvxf /root/Desktop/snortrules-snapshot-2970.tar.gz把規(guī)則包解壓到當前目錄
touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules
在/etc/snort/rules下新建white_list.rules和black_list.rules兩個文件。
2.編輯snort配置文件
vi /etc/snort/snort.conf
- 45行 ipvar HOME_NET any > ipvar HOME_NET 192.168.x.x 你的的IP網(wǎng)段,寫成CIDR格式,可以添加多個網(wǎng)段
- 舉例:ipvarHOME_NET [192.168.0.0/16,172.16.0.0/16]
- ipvar EXTERNAL_NET any > ipvar EXTERNAL_NET!$HOME_NET
- 104行 var RULE_PATH ../ruls > var RULE_PATH /etc/snort/rules
- 105行 var SO_RULE_PATH ../so_rules > var SO_RULE_PATH /etc/snort/so_rules
- 106行 var PREPROC_RULE_PATH ../preproc_rules > var PREPROC_RULE_PATH/etc/snort/preproc_rules
- 113行 var WHITE_LIST_PATH ../rules > 109 varWHITE_LIST_PATH /etc/snort/rules
- 114行 var BLACK_LIST_PATH ../rules > 110 var BLACK_LIST_PATH /etc/snort/rules
3.設(shè)置log目錄屬組 snort.snort
config logdir :/var/log/snort
4.配置輸出插件:
到521行修改成如下內(nèi)容:
output unified2:filename snort.log,limit 128
注意:也可以啟用tcpdump插件,啟用后在/var/log/snort/目錄下產(chǎn)生tcpdump.log.時間戳的文件用
tcpdump -r 文件名來讀取這個文件。
在OSSIM里是這樣寫的“output unified2: filenamesnort,limit 128”
還可以,取消snort.conf文件中以下幾行的注釋,可以使snort向系統(tǒng)日志文件中日志數(shù)據(jù):報警存儲在哪兒?
output alert_syslog: LOG_AUTH LOG_ALERT
輸出格式如下:
- May 10 00:03:38 xxxxxx snort: INFO - ICQAccess [Classification:
- content:"MKD / " Priority: 0]:1.1.1.1:5435 -> 1.2.2.5:80
六、配置開機自動啟動 snort程序
接著輸入如下命令:
- cd /usr/local/src/snort-2.9.7.0/rpm
- cp snortd /etc/init.d/snortd
- cp /usr/local/src/snort-2.9.7.0/rpm/snort.sysconfig /etc/sysconfig/snort
- chkconfig --add /etc/init.d/snortd
- chkconfig snortd on
新建連接文件
- cd /usr/sbin
- ln -s /usr/local/bin/snort snort
- 在/usr/sbin/目錄中新建連接文件snort
新建目錄設(shè)置權(quán)限
- mkdir -p /usr/local/lib/snort_dynamicrules
- chown -R snort:snort /usr/local/lib/snort_dynamicrules
- chown -R 755 /usr/local/lib/snort_dynamicrules
七、測試snort
- #snort -T -i eht0 -u snort -g snort -c /etc/snort/snort.conf
如果配置正確系統(tǒng)提示成功。
圖2
如果你看到“snort successfully validated the configuration!”提示就表示安裝配置成功啦!別高興太早,下面還有更艱巨的任務。
- #snort -vde
1)添加一條規(guī)則測試
- #vi /etc/snort/rules/local.rules
加入如下內(nèi)容:
- alert icmp any any -> $HOME_NET any (msg:"Ping";sid:1000003;rev:1;)
其他規(guī)則:
- drop icmp any any -> any any (itype:0;msg:"Chan Ping";sid:1000002;)
- alert icmp any any -> $HOME_NET 81 (msg:"Scanning Port 81";sid:1000001;rev:1;)
- alert tcp any any -> $HOME_NET 22 (msg:"Scanning Port 22";sid:1000002;rev:1;)
- alert icmp any any -> any any (msg:"UDP Tesing Rule";sid:1000006;rev:1;)
- alert tcp any any -> $HOME_NET 80(msg:"HTTP Test!!!"; classtype:not-suspicious; sid:1000005; rev:1;)
友情提示:
對Snort性能影響最大的是Snort的配置和規(guī)則集的設(shè)置,如果你是第一次接觸IDS可能更在乎功能的實現(xiàn)而不注重性能,如果你是專家就要考慮規(guī)則之間的邏輯。
舉個例子,假設(shè)你直接配置snort輸出插件交給snort產(chǎn)生輸出,發(fā)送到數(shù)據(jù)庫,這個時候在加上你啟用了很多規(guī)則,會導致Snort性能嚴重下降甚至崩潰。
2.)Ping Snort主機
我們用ping命令來進行測試,是為了使其產(chǎn)生alert。ping命令使用的是最典型的ICMP回顯保溫,在IDS中使用Libpcap函數(shù)所捕獲的也就是ICMP數(shù)據(jù)包。下面在Snort主機上操作:
- snort -i eth0 -c /etc/snort/snort.conf -A fast-l /var/log/snort/
3) 設(shè)置規(guī)則的注意事項:
對snort的性能影響最大的是snort的配置設(shè)定以及規(guī)則集設(shè)置。內(nèi)部瓶頸則主要出現(xiàn)在包解碼階段,要snort檢查包的容,那么它比一般的規(guī)則都要更加耗費系統(tǒng)資源。啟用的檢查包內(nèi)容的規(guī)則越多,snort的運行就需要越多的系統(tǒng)資源。如果要激活預處理程序中的某些設(shè)置選項,就會需要消耗額外的系統(tǒng)資源。最明顯的例子就是啟用在frag2預處理程序和stream4預處理程序中的“最大存儲容量(memcap)”選項。如果您打算激活大量耗費資源的預處理程序選項,最好確定有足夠的硬件資源的支持。我曾經(jīng)遇到過一個用戶花了大筆的錢購買了最先進的 IDS由于配置不當,連檢測100M網(wǎng)都出現(xiàn)了丟包現(xiàn)象。
4) 如果順利,便可以在alert中產(chǎn)生告警,用下面命令查看
- #cd /var/log/snort/
- #tail -f /var/log/snort/alert
圖3
收到告警,就代表階段性勝利,我們希望把這些告警存儲到數(shù)據(jù)庫中,下面接著安裝數(shù)據(jù)庫。
八、安裝 MySql
- #yum install -y mysql-server mysql-devel php-mysql php-adodb php-pear php-gd libtool php-imapphp-ldap php-mbstring php-odbc php-pear php-xml php-pecl-apc
- chkconfig --levels235 mysqld on
- /etc/init.d/mysqldstart
接著為數(shù)據(jù)庫管理員賦密碼,我們可以用mysql_secure_installation(secure installation是安全的安裝模式,用來安全的初始化我們的MySql服務器)命令也可以用下面的方法。
- /usr/bin/mysqladmin -u root password '123456'
注意以后用root用戶登錄phpmyadmin是密碼也是這個。
九、建庫并設(shè)定讀取權(quán)限
- #mysql -u root -p
輸入剛 設(shè)置的密碼123456
- mysql>create database snort;
- mysql>use snort;
- mysql>create user 'snort'@'localhost' IDENTIFIED BY '123456';
這里的123456是mysql snort 的password
創(chuàng)建名為snort、密碼為123456的數(shù)據(jù)庫用戶并賦予名為snort數(shù)據(jù)庫權(quán)限
- mysql>grant create,select,update,insert,delete on snort.* tosnort@localhost identified by '123456';
- mysql>set password for ‘snort’@’localhost’=password('123456');
- mysql>source /usr/local/src/barnyard2-1.9/schemas/create_mysql;
注意:路徑先解壓barnyard2-2-1.13這個文件執(zhí)行前確保snort庫被選中,路徑寫對。
報錯:ERROR 1046 (3D000): No database selecte
新建數(shù)據(jù)庫也可以用以下命令:
- #echo "create database snort;" |mysql -u root -p
提示一下錯誤:
- ERROR:
- Failed to open file'/usr/local/src/barnyard2-2-1.13/schemas/create_mysql', error: 2
- Mysql>usr snort;
- mysql>show tables;
- +------------------+
- |Tables_in_snort |
- +------------------+
- |data |
- |detail |
- |encoding |
- |event |
- |reference_system |
- |schema |
- |sensor |
- |udphdr |
- +------------------+
- 16rows in set (0.00 sec)
- mysql>flush privileges;
- mysql>exit
十、安裝配置Barnyard2
上面提到過,Snort配置文件中自身含有插件允許將Snort報警記錄到Mysql中,但這樣以來,系統(tǒng)會形成瓶頸 ,當IDS系統(tǒng)檢測到攻擊行為,就會用到INSERT語句向數(shù)據(jù)庫里寫入數(shù)據(jù),導致到UPDATE時非常慢。所以直接將Snort輸出到數(shù)據(jù)庫,這種方案的效率并不高。這里就使用外部代理將報警輸出到Barnyard2。言而言之Barnyard的作用是讀取snort產(chǎn)生的二進制事件文件并存儲到MySQL。
1.源碼包方式安裝
- cd /usr/local/src/
- tar zxvf /root/Desktop/barnyard2-1-9.tar.gz
- cd barnyard2-1-9/
- ./configure--with-mysql --with-mysql-libraries=/usr/lib64/mysql \\配置參數(shù)很重要切勿出錯。
- make &&make install
2.第二種方法:用GIT安裝
也下面的可以安裝
- git clone git://github.com/firnsy/barnyard2.git
- cd barnyard2/
- ./autogen.sh
- autoreconf -fvi -I ./m4
- ./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql/
- make && make install
3.配置barnyard2
首先創(chuàng)建目錄和文件
- mkdir /var/log/barnyard2
- touch /var/log/snort/barnyard2.waldo
- [root@localhost barnyard2]# ls -l/var/log/snort/barnyard2.waldo
- -rw-r--r--. 1 root root 0 Nov 28 06:56 /var/log/snort/barnyard2.waldo
接下來還是要設(shè)置屬主
- #chown snort.snort /var/log/snort/barnyard2.waldo
- ls -l /var/log/snort/barnyard2.waldo
- -rw-r--r--. 1 snort snort 0 Nov 28 06:56 /var/log/snort/barnyard2.waldo
根Snort類似,Barnyard的配置也是通過.conf文件來完成,為了達到這一目的將barnyard2的配置模板文件復制到/etc/snort目錄下。
- #cp /root/Desktop/barnyard2-1.9/etc/barnyard2.conf /etc/snort
4.修改配置文件
加入如下行內(nèi)容
- #vi/etc/snort/barnyard2.conf
- config logdir:/var/log/barnyard2 \\該目錄權(quán)限snort.snort
- config hostname: localhost
- config interface: eth0
- config waldo_file:/var/log/snort/barnyard2.waldo
數(shù)據(jù)庫輸出插件可以將Snort二進制的日志存放到Mysql數(shù)據(jù)庫中,下面這條配置定義了用戶snort,密碼:123456,數(shù)據(jù)庫名稱:snort 以及主機名localhost
- output database: log,mysql,user=snort password=123456 dbname=snort host=localhost
編輯完成后保存退出。
接著新建一個文件。
touch /var/log/snort/barnyard2.waldo
5.修改屬主
- chown snort.snort /var/log/barnyard2
- chown snort.snort /var/log/snort/barnyard2.waldo
- cp /etc/snort/etc/sid-msg.map /etc/snort
6.Snort 和Barnyard 測試
- snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 -D
你不會看到輸出結(jié)果,因為程序在后臺運行,-D 參數(shù)表示后臺運行。
同樣ping你的主機。 繼續(xù)運行以下內(nèi)容
- barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort
(該命令為一行)
圖4
注意:跟snort命令類似,barnyard2后面還也可以跟參數(shù) “-T”表示測試。另外,針對baryard2測試時的問題在http://edu.51cto.com/course/cid-7896.html 課程中有詳細的視頻講解。
此時,報警到底存入到數(shù)據(jù)庫了嗎?,可以檢測下:
- #mysql -u snort -p -D snort -e "select count(*) from event"
圖5
如果沒有那么下面需要檢查配置文件并重啟程序,對于他的參數(shù)解釋如下:
- #barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log -w/var/log/snort/barnyard2.waldo
(注意這是一條完整的命令)
解釋:
-c 該選項告訴Barnyard 配置文件的路徑,是必選項。
-d 告訴Barnyard Snort Unified格式文件的路徑,所有Unified文件必須放在該目錄下,必選項。
-f 該選項告訴Barnyard以連續(xù)方式運行時需要的Unified文件的基本名字,因為Snort在每次生成的Snort Unified文件后面加了一個UNIX時間戳;基本名字就是去掉時間戳后綴的文件名。
-w 該選項開啟檢驗指示功能,用于告訴Barnyard檢驗點文件的名字,也叫做waldo文件。這個文件用于記錄文件中最近處理的報警。無果不使用waldo文件,則Barnyard必須完整的載入一個日志文件,這就好像把已經(jīng)存在的報警信息又傳送到了入侵數(shù)據(jù)庫中。
此外還可以以調(diào)試模式運行加參數(shù)-R。
本文到此大家需要多花時間練習,下次為大家介紹如何配置BASE。本文錄制的視頻也已經(jīng)上線,大家可以參考http://edu.51cto.com/course/course_id-7896.html
【本文為51CTO專欄作者“李晨光”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】