搭建開源入侵檢測系統Snort並實現與防火牆聯動


Snort作為一款優秀的開源主機入侵檢測系統,在windows和Linux平台上均可安裝運行。BT5作為曾經的一款經典的滲透神器,基於 Ubuntu,里面已經預裝很多的應用,比如Mysql、Apache、Snort等等。Guardian是snort的插件,通過讀取snort報警日 志將入侵IP加入到Iptables中。Iptables 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。

 

本文詳細介紹了BT5中安裝snrot NIDS並實現與iptables防火牆聯動的過程。

 

安裝Snort過程

 

0X00 安裝LAMP,Snort和一些相關軟件

 

這里使用 Ubuntu 默認命令行軟件包管理器apt 來進行安裝。

 

apt-get install libpcap0.8-devlibmysqlclient15-dev mysql-client-5.1 mysql-server-5.1 bison flex apache2libapache2-mod-php5 php5-gd php5-mysql libphp-adodb php-pear pcregrep snortsnort-rules-default iptables

 

在這里可能會會報錯,錯誤內容是說Mysql的版本太低,直接按照提示更改mysql的版本號就可以了。

 

0X01 在 MySQL 數據庫中為 Snort 建立數據庫

 

Ubuntu 軟件倉庫中有一個默認的軟件包 snort-mysql 提供輔助功能,用軟件包管理器下載安裝這個軟件包。

 

# apt-get install snort-mysql

 

安裝好之后查看幫助文檔:

 

# less/usr/share/doc/snort-mysql/README-database.Debian

 

內容大家可以自己去看,英文很簡單。講的是如下的配置過程。

 

這里需要提示一下,在BT5中預裝了Mysql,root密碼是toor。

 

根據README文檔中的指示,在 MySQL 中建立Snort 的數據庫用戶和數據庫。所使用的命令如下:

 

$ mysql –u root –ptoor
mysql> CREATE DATABASE snort;
mysql> grant CREATE, INSERT, SELECT, UPDATEon snort.* to snort@localhost;
mysql> grant CREATE, INSERT, SELECT, UPDATEon snort.* to snort;
mysql> SET PASSWORD FORsnort@localhost=PASSWORD('snort-db');
mysql> exit

 

以上命令的功能是在 MySQL 數據庫中建立一個snort 數據庫,並建立一個 snort 用戶來管理這個數據庫,設置 snort 用戶的口令為 snort-db。

 

0X02 建立 snort 數據庫的結構

 

根據 README-database.Debian 中的指示我們可以建立 snort 數據庫的結構。

 

# cd /usr/share/doc/snort-mysql
# zcat create_mysql.gz | mysql -u snort -Dsnort -p

 

這里會提示輸入密碼:snort-db

 

這樣就為 snort 在 MySQL 中建立了數據庫的結構,其中包括各個 snort 需要使用的表。

 

啟動mysql /etc/init.d/mysqlstart 。

 

用snort用戶登錄進去看看吧:

 

#mysql –u snort –ptoor
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| snort              |
+--------------------+
2 rows in set (0.00 sec)
mysql> use snort;
Database changed
mysql> show tables;
+------------------+
| Tables_in_snort  |
+------------------+
| data             |
| detail           |
| encoding         |
| event            |
| icmphdr          |
| iphdr            |
| opt              |
| reference        |
| reference_system |
| schema           |
| sensor           |
| sig_class        |
| sig_reference    |
| signature        |
| tcphdr           |
| udphdr           |
+------------------+
16 rows in set (0.00 sec)

 

bingo,有了。

 

0X03 設置snort把log文件輸出到 MySQL 數據庫中

 

修改 Snort 的配置文件:/etc/snort/snort.conf

 

# vim /etc/snort/snort.conf

 

在配置文件中將 HOME_NET 有關項注釋掉,然后將 HOME_NET 設置為本機 IP 所在網絡,將 EXTERNAL_NET 相關項注釋掉,設置其為非本機網絡,如下所示:

 

#var HOME_NET any
var HOME_NET 10.10.10.0/24                     
#var EXTERNAL_NET any
var EXTERNAL_NET !$HOME_NET

 

將output database相關項注釋掉,將日志輸出設置到 MySQL 數據庫中,如下所示:

 

output database: log, mysql, user=snortpassword=snort-db dbname=snort host=localhost

 

這樣,snort 就會將記錄存放在 MySQL 的snort數據庫中。

 

0X04 設置snort把log文件以ASCII碼方式輸出到日志文件中

 

注意,這一步是Snort與防火牆聯動的關鍵。Snort配置文件原本輸出的報警日志的形式是

 

output log_tcpdump: tcpdump.log 這種輸出方式輸出的數據並不是以ASCII形式輸出,不能用於Guardian由於防火牆聯動。所以我們需要將輸出類型改為以下方式:

 

output alert_fast: alert

 

 

Alert fast輸出方式:Snort將報警信息快速的打印在指定文件的一行里。它是一種快速的報警方法,因為不需要打印數據包頭的所有信息。這時候可以測試一下 Snort 工作是否正常:

 

# snort -c /etc/snort/snort.conf -i eth2(填上自己的網卡號)

 

如果出現一個用 ASCII 字符畫出的小豬,那么Snort 工作就正常了,可以使用 Ctrl-C 退出;如果Snort 異常退出,就需要查明以上配置的正確性了。

 

0X05指定某個IP通過入侵檢測

 

啟動snort時,在末尾添加如下內容就可以取消對某個IP的入侵檢測:

 

snort -c /etc/snort/snort.conf -i eth2 not (host 192.168.219.151 or host 10.10.10.131 )

 

如果需要放過的的IP較多,可將這些內容寫在一個bpf文件中。啟動時用-F引入這個文件即可。

 

 

snort -c /etc/snort/snort.conf -i eth2  -F filters.bpf

 

0X06 測試Web服務器Apache和PHP是否工作正常

 

配置 apache 的 php 模塊,添加 msql 和 gd 的擴展。

 

# vim /etc/php5/apache2/php.ini
extension=msql.so
extension=gd.so

 

重新啟動apache

 

# /etc/init.d/apache2 restart

 

在/var/www/目錄下新建一個文本文件test.php

 

# vim /var/www/test.php

 

輸入內容:

 

<?php
phpinfo();?>

 

如果上面的方式不對還可以采用如下的方式嘗試:

 

啟動和停止文件是:/etc/init.d/apache2

啟動: apache2ctl -k start

停止: apache2ctl -k stop

 

啟動apache2后,在瀏覽器中輸入 http://localhost/test.php,如果配置正確的話,就會出現 PHP INFO 的經典界面,就標志着 LAMP 工作正常。這個頁面里有很多有用的信息,比如php.ini的位置信息。

 

 

0X07 安裝和配置acidbase

 

acidbase是snort管理方面最好用的圖形管理界面之一。安裝 acidbase 很簡單,使用Ubuntu 軟件包管理器下載安裝即可:

 

# apt-get install acidbase

 

安裝過程中需要輸入 acidbase 選擇使用的數據庫,這里選 MySQL,根用戶口令toor,和acid-base 的口令。在這部分引導界面做得說明白,根據提示輸入就好。

 

將acidbase從安裝目錄中拷貝到www目錄中,也可以直接在apache中建立一個虛擬目錄指向安裝目錄,這里拷貝過來主要是為了安全性考慮。

 

cp –R /usr/share/acidbase/ /var/www/

 

離成功又近了一步。

 

/usr/share/acidbase目錄下的base_conf.php 原本是一個符號鏈接指向 /etc/acidbase/ 下的base_conf.php,為了保證權限可控制,我們要刪除/usr/share/acidbase/base_conf.php。在web頁面配 置完成后acidbase會在這個文件夾下自動創建一個base_conf.php 文件。為此我們要給acidbase文件夾寫權限,但記得配置完成后將權限修改回來。

 

# rm base_conf.php

 

暫時將/usr/share/acidbase/ 目錄權限改為其他人可寫,主要是為了配置 acidbase 所用。

 

#chmod 757 acidbase/

 

Acidbase復制完后,打開localhost/acidbase,出現下面的頁面。

 

 

點擊countinue。

 

現在就可以開始配置 acidbase 了,在瀏覽器地址欄中輸入 http://localhost/acidbase,就會轉入安裝界面,然后就點擊 continue 一步步地按提示進行安裝:

 

(1)選擇語言為 simple_chinese,adodb的路徑為:/usr/share/php/adodb;
(2)選擇數據庫為 MySQL,數據庫名為 snort,數據庫主機為 localhost,數據庫用戶名為 snort 的口令為 snort-db;
(3)接着直接點submit query。
(4)設置 acidbase 系統管理員用戶名和口令,設置系統管理員用戶名為 admin,口令為 test。然后一路繼續下去,就能安裝完成了。
(5)配置完成后就可以進入登錄界面,輸入用戶名和口令,進入 acidbase 系統。

 

點擊creat BASE AG

 

第一次成功時,有如下圖示哦!

 

 

接着點擊step5你就發現了這個,表示配置成功。

 

 

這里需要將 acidbase 目錄的權限改回去以確保安全性,然后啟動 snort,就表明 snort 入侵檢測系統的安裝完成並正常啟動了:

 

# chmod 755 acidbase/
# snort -c /etc/snort/snort.conf -i eth2

 

修改后重啟apache2ctl restart就可以了。現在是不是完工了呢?別急,還有如下問題:

 

0X08 配置acidbase發送報警郵件功能

 

首先,下載sendmail :

 

apt-get install sendmail

 

接着對php.ini文件做些修改,

 

將 sendmail_path = /usr/sbin/sendmail以及sendmail_from = you@earthlink.net

 

具體修改信息請查看下面的網站,這里有很多有用的信息。

 

http://www.quackit.com/php/tutorial/php_mail_configuration.cfm

 

接着進入/usr/share/acidbase/ 中的base_conf.php中就看到了下面我找尋的問題。改成如下形式、設置郵件參數值介紹

 

$action_email_smtp_host = 'smtp.163.com';
$action_email_smtp_localhost = 'localhost';
$action_email_smtp_auth = 1;
$action_email_smtp_user = '在這里輸入郵箱地址比如XX@163.com';
$action_email_smtp_pw = '在這里輸入郵箱密碼';
$action_email_from = '這里輸入smtp_user中的郵箱地址';
$action_email_subject = 'BASE Incident Report這里是郵件名稱';
$action_email_msg = '';
$action_email_mode = 0;

 

配置好后要重啟apache2服務器。配置好之后,在BASE中選中任何一個或多個報警信息,點擊頁面下方的選項欄,將收信箱填在后面的空白欄中,選擇發送警報郵件。很快就會收到報警郵件。

 

至此,工作告一段落,但還差與放火牆的聯動。下面,配置guardian實現snort與iptables的聯動,前提是本機已經安裝了iptables。

 

0X09 下載guardian

 

Guardian需要去官網下載http://www.chaotic.org/guardian/

 

下載好之后

 

#tar zxvfguardian-1.7.tar.gz

 

在解壓后的文件夾下,做下面的腳本拷貝操作:

 

#cp guardian.pl /usr/local/bin     
#cp scripts/iptalbes_block.sh/usr/local/bin/guardian_block.sh
#cp scripts/iptalbes_unblock.sh
/usr/local/bin/guardian_unblock.sh
 
#touch/etc/snort/guardian.ignore  創建白名單
#touch/etc/snort/guardian.target  創建黑名單
#touch/var/log/snort/guardian.log guardian的日志

 

必要說明:

 

(1)Guardian的執行文件  guardian.pl
(2)Guardian封鎖IP所要調用的外部程序  scripts/iptalbes_block.sh
(3)Guardian解除對某一IP封鎖時,所需要調用的外部程序scripts/iptalbes_unblock.sh

 

配置Guardian.conf

 

Guardian的配置文件如下:

 

Interface       eth0
HostGatewayByte  1
LogFile         /var/log/guardian.log
AlertFile       /var/log/snort/alert              
IgnoreFile      /etc/guardian.ignore
TargetFile      /etc/guardian.target
TimeLimit    86400

 

TimeLimit:在多少秒后解除對IP的封鎖,86400秒也就是24小時之后解除對IP的封鎖。AlertFile是關鍵,前提是snort以alert_fast輸出報警信息

 

配置完成后,啟動guardian:

 

/usr/bin/perl /usr/local/bin/guardian.pl -c/etc/guardian.conf

 

0X10 驗證IDS與Iptables聯動結果

 

有主機A和B

A主機IP:10.10.10.135

B主機IP:10.10.10.151

 

查看主機B防火牆狀態信息:

 

root@bt:/etc/snort# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
You have new mail in /var/mail/root

 

在主機A用WVS對主機B網站掃描:

 

再次查看主機B的防火牆信息,防火牆已經將A主機IP加入到防火牆之中。

 

root@bt:~# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  10.10.10.151         0.0.0.0/0           
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

 

BASE產生的報警信息:

 

 

此時主機A上的WVS已經動態不得了。看看WVS的錯誤日志:

 

07.01 19:18.37, [Error] Server "http://10.10.10.135:80/" is not responsive.
07.01 19:18.37, [Error] Cannot connect.
07.01 19:18.37, [Error] Cannot connect. [00020004]
Error while connecting to web server

 

經驗:

 

開源軟件的readme是必須要讀得,這就相當於產品使用說明書,最好是能耐下心來看英文。

 

主要參考書籍:《Snort輕量級入侵檢測系統全攻略》

 

下面是大牛翻譯的snort配置說明,可以參考一下。

 

http://blog.csdn.net/jo_say/article/details/6302367


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM