手動打造Snort+barnyard+BASE可視化報警平臺

背景

大家在安裝基於Snort NIDS系統,配置可視化報警時會遇到各種問題例如

  • Snort不報警怎麼辦?
  • 數據庫裏沒有報警怎辦?
  • 瀏覽器打開ACID,裏面一片空白怎麼辦?
    看着別人安裝成功了,我卻怎麼也裝不上?真是折磨人吶!這裏我總結了一些實用方法僅供參考。

一、準備工作

手動編譯安裝Snort時所需的準備工作如下所示。
步驟 1.準備軟件環境。在安裝前,必須在交換機上設置SPAN。中高端Cisco交換機都有SPAN功能。SPAN須爲一個專用端口。以下是在虛擬機環境下的實驗,須把網卡設置爲混雜模式。
步驟2.安裝VMware Workstations虛擬機。準備遠程連接 工具。
步驟3.到異步社區的本書頁面中統一獲取安裝資源。
步驟4.使用鏡像CentOS-6.8-x86_64-mini在虛擬機中安裝操作系統。
步驟5.重啓系統後設置系統IP、網關及DNS。
默認安裝時,網絡IP是自動獲取的,需要改成靜態IP地址。
#ifconfig -a //查看網卡配置信息
#vi/etc/sysconfig/network-scripts/ifcfg-eth0 //編輯網卡配置文件
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="00:0C:29:BA:53:4E"
IPV6INIT="yes"
NM_CO***OLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="685d0725-02ab-41b9-b9bf-6a52fc68c0f8"

修改爲靜態IP地址的方法是將BOOTPROTO="dhcp"中的"dhcp"改爲"static",然後增加以下內容(內網IP配置):
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地址的配置根據當地網絡供應商進行添加

最後保存退出,重啓網絡服務。
步驟6.複製軟件到指定目錄。
將libdnet-1.12.tgz、daq-2.0.4.tar.gz、snort-2.9.7.0.tar.gz、snortrules-snapshot-2970.tar.gz這4個文件複製到CentOS 6.8系統/usr/local/src/目錄下。
經過以上6個步驟之後,Snort安裝的準備工作完成。另外,Snort安裝配置路線圖參見《開源安全運維平臺OSSIM疑難解析:提高篇》一書中附錄中的圖1、圖2。網絡安裝包名稱及用途參見附錄中的表1、表2、表3,這三張表以及按照路線圖可以讓初學者清晰的完成本文所介紹的各項試驗。

二、編譯並安裝Snort

準備工作完成之後,接着開始正式安裝Snort。編譯安裝Snort需要如下10個步驟。
步驟1.安裝基本環境和依賴包。
#yum install -y gcc gcc-c++ flex bison zlib libxml2 libpcap pcre* tcpdump git libtool curl man make

步驟2.解壓Libdnet、DAQ及Snort安裝包。
在服務器的安裝配置過程中,大家很可能會到官網下載最新版本的源碼包,但是那樣就會遇到各種依賴包缺失的問題,導致無法安裝成功。因爲有些軟件(比如Snort)要在DAQ(Data AcQuisition,數據採集器)library安裝好之後才能繼續安裝,而只有Libdnet安裝完成,才能安裝DAQ。操作如下:
#cd /usr/local/src
#tar -zxvf libdnet-1.12.tgz
#tar -zxvf daq-2.0.4.tar.gz
#tar -zxvf snort-2.9.7.0.tar.gz

下面必須依次安裝Libdnet、DAQ和Snort這3個包。
● 安裝libdnet-1.12.tgz。
#cd /usr/local/src/libdnet-1.12/
#./configure
#make && make install

● 安裝DAQ。
#cd daq-2.0.4
#./configure
#make && make install

● 安裝Snort 2.9(安裝Snort前一定要正確安裝Libdnet和DAQ)。
#cd /usr/local/src/snort-2.9.7.0
#./configure --enable-sourcefire
#make && make install

步驟3.添加用戶和組。
創建用戶和組,並設置權限。在root身份下解包的文件權限都與root有關,所以要修改成Snort用戶的屬主和相關權限。
#groupadd -g 40000 snort //新添加一個Snort組
#useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS -g snort
//將Snort用戶加入Snort組,並且不允許登錄系統

步驟4.新建目錄/var/log/snort並設置其屬性。
#mkdir /var/log/snort
#chown –R snort:snort /var/log/snort

步驟5.配置Snort。
● 新建目錄/etc/snort/。
#mkdir /etc/snort/

● 將snortrules-snapshot-2970.tar.gz解壓到/etc/snort/目錄下。
#cd /etc/snort

tar –zxvf /usr/local/src/snortrules-snapshot-2970.tar.gz –C .(此步驟很關鍵)

#cp /etc/snort/etc/sid-msg.map /etc/snort

● 將下載的Snort壓縮包解壓縮後複製到/etc/snort/目錄下。
#cd /etc/snort/
#cp /usr/local/src/snort-2.9.7.0/etc/* .

● 設置當前目錄下所有文件的屬主。
#cd /etc/snort
#chown -R snort:snort *

● 新建黑白名單規則文件。
#touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules

在/etc/snort/rules下新建white_list.rules和black_list.rules這兩個文件。
● 編輯配置文件snort.conf,修改以下幾行的內容。
#vi /etc/snort/snort.conf

設置網絡變量,將第45行的ipvar HOME_NET any改爲ipvar HOME_NET 192.168.x.x網段,並寫成CIDR格式。也可以添加多個網段,來看下面的例子。
ipvar HOME_NET [192.168.0.0/16,172.16.0.0/16]
將48行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 改爲 var WHITE_LIST_PATH /etc/snort/rules
第114行 var BLACK_LIST_PATH ../rules 改爲 var BLACK_LIST_PATH /etc/snort/rules

● 設置日誌保存路徑。
config logdir:/var/log/snort/

● 配置輸出插件。
Snort可通過數據庫插件(spo_database.c和spo_databaseh)將預處理器輸出的日誌寫入數據庫,但下面的配置一方面將報警寫入alert文件,另一方面將預處理器輸出的日誌寫入到unified2格式的二進制文件中,以供Barnyard2讀取使用。
將第521行修改成如下內容:
output unified2:filename snort.log,limit 128

以上幾處修改完成後,保存退出。
步驟6.新建目錄snort_dynamicrules並設置權限。
#mkdir -p /usr/local/lib/snort_dynamicrules
#chown -R snort:snort /usr/local/lib/snort_dynamicrules
#chmod -R 755 /usr/local/lib/snort_dynamicrules

步驟7.在/usr/sbin/目錄下新建名爲Snort的軟鏈接文件。
#cd /usr/sbin
#ln -s /usr/local/bin/snort snort

步驟8.添加測試規則。
#vi /etc/snort/rules/local.rules

加入如下內容:
alert icmp any any -> $HOME_NET any (msg:"ICMP Packet Detected";sid:1000003;rev:1;)

步驟9.測試Snort。
#snort -T -i eht0 -u snort -g snort -c /etc/snort/snort.conf

如果配置正確,則系統啓動後顯示如下內容。
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
Set gid to 113
Set uid to 109
--== Initialization Complete ==--
,,_ -> Snort! <-
o" )~ Version 2.9.3.1 IPv6 GRE (Build 40)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
Copyright (C) 1998-2012 Sourcefire, Inc., et al.
Using libpcap version 1.1.1
Using PCRE version: 8.02 2010-03-19
Using ZLIB version: 1.2.3.4
Rules Engine: SF_SNORT_DETECTION_ENGINE Version 1.16 <Build 18>
Preprocessor Object: SF_GTP (IPV6) Version 1.1 <Build 1>
Preprocessor Object: SF_SIP (IPV6) Version 1.1 <Build 1>
Preprocessor Object: SF_SMTP (IPV6) Version 1.1 <Build 9>
Preprocessor Object: SF_IMAP (IPV6) Version 1.0 <Build 1>
Preprocessor Object: SF_DNS (IPV6) Version 1.1 <Build 4>
Preprocessor Object: SF_REPUTATION (IPV6) Version 1.1 <Build 1>
Preprocessor Object: SF_DCERPC2 (IPV6) Version 1.0 <Build 3>
Preprocessor Object: SF_MODBUS (IPV6) Version 1.1 <Build 1>
Preprocessor Object: SF_SSH (IPV6) Version 1.1 <Build 3>
Preprocessor Object: SF_SDF (IPV6) Version 1.1 <Build 1>
Preprocessor Object: SF_POP (IPV6) Version 1.0 <Build 1>
Preprocessor Object: SF_SSLPP (IPV6) Version 1.1 <Build 4>
Preprocessor Object: SF_FTPTELNET (IPV6) Version 1.2 <Build 13>
Preprocessor Object: SF_DNP3 (IPV6) Version 1.1 <Build 1>
Snort successfully validated the configuration!
Snort exiting

如出現“Snort successfully validated the configuration!”的提示,則表示安裝配置成功。
步驟10.用ping命令測試。
用ping命令進行測試的目的是爲了產生報警。ping命令使用ICMP協議,在IDS中使用Libpcap函數所捕獲的也是ICMP數據包。下面在Snort主機上操作:
#snort -i eth0 -c /etc/snort/snort.conf -A fast

與此同時,日誌文件記錄在/var/log/snort/alert和/var/log/snort/snort.log中。可用下面的命令查看。
#cd /var/log/snort/
#tail -f /var/log/snort/alert

alert文件收到報警,代表本實驗成功,下面要將這些報警存儲到數據庫,這此步最容易出錯。

三、將Snort報警存入MySQL數據庫

將Snort報警存入MySQL數據庫需要如下幾個步驟。
步驟1.安裝MySQL數據庫及PHP擴展。
#yum install -y mysql-server mysql-devel php-mysql php-pear php-gd libtool php-imap php-ldap php-mbstring php-odbc php-pear php-xml php-pecl-apc
#chkconfig --level 235 mysqld on //將MySQL服務設置爲在運行級別爲2、3、5時都是開啓狀態
#/etc/init.d/mysqld start

步驟2.爲數據庫管理員root賦予密碼。
#/usr/bin/mysqladmin -u root password '123456'

注意,root用戶登錄phpMyAdmin時,同樣使用這個密碼。
步驟3.創建Snort數據庫並設定讀取權限。
#mysql -u root -p

輸入步驟2中設置的密碼“123456”。
mysql>create database snort;
mysql>use snort;
mysql>create user 'snort'@'localhost' IDENTIFIED BY '123456';

在以上命令中,“123456”是MySQL中用戶Snort的密碼。
接着創建名爲snort、密碼爲“123456”的數據庫用戶,並賦予名爲“snort”的數據庫權限(先解壓barnyard2-1.9.tar.gz包)。
mysql>grant create,select,update,insert,delete on snort.* to snort@localhost identified by '123456';
mysql>set password for ‘snort’@’localhost’=password('123456'); //爲用戶snort設置訪問密碼
mysql>source /usr/local/src/barnyard2-1.9/schemas/create_mysql; //該命令不可重複輸入
mysql>show tables;
mysql>flush privileges; //刷新數據庫權限
mysql>exit

注意:先解壓barnyard2-2-1.13壓縮包;在執行前確保Snort庫被選中;barnyard2-2-1.13所在路徑要正確(使用絕對路徑)。
步驟4.安裝和配置Barnyard2。
Barnyard2的作用是讀取Snort產生的二進制事件文件並存儲到MySQL中。Snort的配置文件自身含有插件,它允許將Snort報警記錄到MySQL中,但這樣一來,系統數據會激增。當IDS系統檢測到***行爲時,它會用INSERT語句向數據庫中寫入數據,導致更新非常慢。所以如果直接將Snort輸出到數據庫,在數據量增大時這種方案的效率並不高,故使用外部代理將報警輸出到Barnyard2。
●源碼包安裝。
#cd /usr/local/src/
#tar zxvf barnyard2-1.9.tar.gz
#cd barnyard2-1.9/
#./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql //此處配置參數很重要,切勿出錯
手動打造Snort+barnyard+BASE可視化報警平臺
#make //見到如下內容後,纔可繼續安裝
手動打造Snort+barnyard+BASE可視化報警平臺
只有確保上面關鍵兩步不出錯,才能繼續安裝。如果報錯,需要根據提示查找錯誤原因,如忽略錯誤,繼續往下做都是徒勞的。
#make install

● 配置Barnyard2。
首先在/var/log/中創建目錄Barnyard2和文件barnyard2.waldo。
#mkdir /var/log/barnyard2
#touch /var/log/snort/barnyard2.waldo

● 設置文件barnyard2.waldo的屬主。
#chown snort.snort /var/log/snort/barnyard2.waldo

● 複製Barnyard2的配置文件。
與Snort配置類似,Barnyard的初始化配置也是通過複製已有的.conf配置文件來完成。因此先將Barnyard2的配置模板文件複製到/etc/snort目錄下。
#cp /usr/local/src/barnyard2-1.9/etc/barnyard2.conf /etc/snort

● 修改配置文件barnyard2.conf。
#vi /etc/snort/barnyard2.conf

找到對應行並將其修改成如下內容:
第44行 config logdir:/var/log/barnyard2 //該目錄權限爲snort.snort
第56行 config hostname: localhost
第57行 config interface: eth0
第131行 config waldo_file:/var/log/snort/barnyard2.waldo

修改完成之後保存並退出。
下面這條語句用來設置數據庫訪問權限,其中定義了用戶名爲snort,密碼爲123456,數據庫名稱爲snort,主機名爲localhost。
第318行 output database: log,mysql,user=snort password=123456 dbname=snort host=localhost

編輯完成後保存退出。
● 修改目錄的屬主。
#chown snort.snort /var/log/barnyard2

● 啓動Snort和Barnyard2進行聯合測試。
#snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 –D
手動打造Snort+barnyard+BASE可視化報警平臺
● 測試Barnyard2。
#barnyard2 –c /etc/snort/barnyard2.crnf –d/var/log/snort/
-f snort.log –w /var/log/snort/barnyard2 waldo
-g snort –u snort -T
此時不會看到輸出結果,因爲程序在後臺運行(“-D”參數表示後臺運行)。
同樣ping主機,繼續執行以下命令。
#barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log –w /var/log/snort/barnyard2.waldo
手動打造Snort+barnyard+BASE可視化報警平臺
命令參數的解釋如下所示。
● -c:該選項指定Barnyard配置文件的路徑。該參數爲必選項。
● -d:指定Unified格式文件的路徑,這裏指定爲/var/log/snort/,所有Unified文件必須放在該目錄下。該參數爲必選項。
● -f:該選項指定Barnyard以連續方式運行時的Unified文件名。Snort在每次生成的Snort Unified文件後面都加了一個UNIX時間戳,去掉時間戳後綴就是文件名。
● -w:該選項打開檢驗功能,告訴Barnyard檢驗文件名(也稱爲waldo文件)。該文件用於記錄文件中最近處理的報警。如果不使用waldo文件,則Barnyard必須完整地載入一個日誌文件,該參數的作用是將報警信息傳送至***數據庫。

如果在以上顯示中發現最後一行出現“Waiting for new spool file”,則表示上面的操作成功。在/var/log/snort目錄下有一些snort.log+times_stamp的二進制文件,這些文件由Snort輸出插件所生成。

步驟5.使用下述命令查詢報警信息是否存入數據庫。
#mysql -u snort -p -D snort -e "select count(*) from event"

實際操作效果如下所示。
手動打造Snort+barnyard+BASE可視化報警平臺
如果在count(*)下方沒有數字,則表示報警信息沒有存入數據庫,那麼需要從頭檢查配置過程。參數含義如下。
[root@localhost ~]# barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort
Running in Continuous mode
--== Initializing Barnyard2 ==--
Initializing Input Plugins!
Initializing Output Plugins!
Parsing config file "/etc/snort/barnyard2.conf"
Log directory = /var/log/barnyard2
database: compiled support for (mysql)
database: configured to use mysql
database: schema version = 107
database: host = localhost
database: user = snort
database: database name = snort
database: sensor name = localhost:eth0
database: sensor id = 1
database: sensor cid = 1
database: data encoding = hex
database: detail level = full
database: ignore_bpf = no
database: using the "log" facility

    --== Initialization Complete ==--

__ -> Barnyard2 <-
/ ,,_ \ Version 2.1.9 (Build 263)
|o" )~| By the SecurixLive.com Team: http://www.securixlive.com/about.php

  • '''' + (C) Copyright 2008-2010 SecurixLive.

       Snort by Martin Roesch & The Snort Team: http://www.snort.org/team.html
       (C) Copyright 1998-2007 Sourcefire Inc., et al.

WARNING: Ignoring corrupt/truncated waldofile '/var/log/snort/barnyard2.waldo'
Waiting for new spool file

四、搭建BASE的可視化***檢測系統

如果以上三部分中所有環節均正常,說明已經安裝了Snort系統並將報警信息存入數據庫。接下來開始安裝BASE(Basic Analysis and Security Engine)的步驟,Barnyard將MySQL中的Snort報警信息通過Web展示的具體原理如圖1所示。
手動打造Snort+barnyard+BASE可視化報警平臺
圖1 Barnyard存儲原理
要將存儲在數據庫中的日誌展現在Web端,需要安裝BASE(*檢測事件展示的前端程序),這裏用到的版本是base-1.4.5.tar.gz。既然用到了Web服務,那麼首先需要安裝好LAMP環境,然後再安裝BASE包。此處服務器IP地址爲192.168.1.120。具體安裝步驟如下。
步驟1**.安裝httpd、mysql-server、mysql-devel、php、php-mysql、php-mbstring、php-mcrypt。
命令如下所示。
#yum install –y httpd mysql-server php php-mysql php-mbstring php-mcrypt mysql-devel php-gd

步驟2.安裝PHP插件(mcrypt、libmcrypt、libmcrypt-devel),命令如下所示。
#yum install –y mcrypt libmcrypt libmcrypt-devel php-pear

更新插件的時間比較長,操作如下所示。
#pear upgrade pear

步驟3.繼續執行下列命令。
#pear channel-update pear.php.net

安裝 Image_Graph-alpha、Image_Canvas-alpha、Image_Color、Numbers_Roman 這 4個包。
操作如下所示。
#pear channel-update pear.php.net
#pear install Image_Graph-alpha Image_Canvas-alpha Image_Color Numbers_Roman

步驟4.安裝ADOdb包。
雖然PHP是建構Web系統強有力的工具,但是PHP存取數據庫的功能並未標準化,MySQL使用了另一種不同且不兼容的應用程序接口。此時需要使用ADOdb作爲中介進行轉換。ADOdb的最大優點是不管後端數據庫如何,存取數據庫的方式都是一致的。目前ADOdb的最新版本是5.20,它支持的數據庫種類非常多,例如MySQL、PostgreSQL、Oracle等。下面開始安裝ADOdb,首先將adodb520.tar.gz解壓到/var/www/html/目錄下。
#tar zxvf adodb519.tar.gz –C /var/www/html/

解壓後發現增加了一個目錄adodb5,將這個目錄改名爲adodb。
#mv /var/www/html/adodb5 /var/www/html/adodb

步驟5.解壓BASE包。
#tar zxvf base-1.4.5.tar.gz –C /var/www/html

解壓後發現增加了一個目錄base-1.4.5,接着需要對它重命名。
#mv /var/www/html/base-1.4.5/ /var/www/html/base

步驟6.修改PHP配置文件。
#vi /etc/php.ini

將第513行內容改成如下內容。
error_reporting = E_ALL & ~E_NOTICE

修改完畢保存並退出。
步驟7.改變屬組並設置權限。
#chown –R apache:apache /var/www/html
#chmod -R 755 /var/www/html

步驟8.重啓MySQL、Web和防火牆服務。
#service mysqld restart //啓動數據庫
#service httpd restart //重啓Web服務
#service iptables stop //關閉防火牆

步驟9.在Web界面設置BASE。
打開瀏覽器輸入網址http://192.168.1.120/base/setup/index.php,輸入完畢後彈出安裝界面,如圖1-7所示。
單擊Continue按鈕,開始選擇語言和ADOdb路徑,如圖1-8所示。
語言項選擇中文,ADOdb路徑中輸入/var/www/html/adodb,單擊Continue按鈕。接下來輸入數據庫名稱、訪問用戶名和密碼,如圖1-9所示。
手動打造Snort+barnyard+BASE可視化報警平臺
圖1-7 開始設置BASE
手動打造Snort+barnyard+BASE可視化報警平臺
圖1-8 設置ADOdb路徑
手動打造Snort+barnyard+BASE可視化報警平臺
圖1-9 設置數據庫
下一步將管理員名稱設置爲root,密碼依然是“123456”,Full Name不必設置,如圖1-10所示。
手動打造Snort+barnyard+BASE可視化報警平臺
圖1-10 設置root密碼
下一步開始創建BASE表結構,如圖1-11、圖1-12所示。
手動打造Snort+barnyard+BASE可視化報警平臺
圖1-11 準備創建BASE表結構
手動打造Snort+barnyard+BASE可視化報警平臺
圖1-12 BASE表創建完成
如果看到表acid有創建完成的提示並且BASE tables狀態顯示爲“DONE”,則表示安裝完成。單擊屏幕最下方的step5…按鈕結束安裝。在客戶機終端命令行中ping主機192.168.1.120,隨後就能在BASE界面中收到ICMP報警,如圖1-13所示。
手動打造Snort+barnyard+BASE可視化報警平臺
圖1-13 收到報警
如果在Web的BASE界面中收到ICMP報警,則表明BASE安裝設置完成。
步驟10.安裝phpMyAdmin。
#yum install phpmyadmin
修改配置文件
#vi /etc/httpd/conf.d/phpMyAdmin.conf
註銷第24行的Deny from ALL
#service httpd restart
在Web界面下輸入用戶名snort,密碼爲123456

如果要刪除報警,首先勾選需要刪除的報警,然後在“動作”下拉菜單中選擇“刪除報警”選項,如圖1-14所示。
手動打造Snort+barnyard+BASE可視化報警平臺
圖1-14 刪除報警

備註:已經安裝好的Snort+barnyard+BASE的試驗環境,虛擬機(OVA格式)下載: https://pan.baidu.com/s/1dFeMX9n

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章