使用 Snort 進行入侵檢測
Snort 是一種流行的開源入侵檢測系統。您可以在http://www.snort.org/上獲取它。Snort 分析流量并嘗試檢測和記錄可疑活動。Snort 還能夠根據其所做的分析發送警報。
Snort 安裝
在本課中,我們將從源代碼安裝。此外,我們不會安裝標準版的 snort,而是對其進行編譯以將其記錄的內容發送到 MySQL 數據庫。此外,我們將安裝一個基于 Web 的工具 SnortReport,以便我們可以輕松訪問 Snort 提供的信息。讓我們從 Snort 本身開始。
下載最新的 tarball 并將其解壓到您方便的位置 - 也許是您正在解壓源代碼的地方對于我們在本課程中處理的其他軟件包。我們將配置 Snort 以將其警報記錄到 MySQL 數據庫,因此我們假設您已安裝 MySQL。如果您像我一樣在 Fedora Core 上安裝它,您還應該安裝 Perl正則表達式開發庫。它們以 RPM 形式提供。(從您最喜歡的 RPM 存儲庫中獲取 pcre-devel.X.rpm)
此外,在編譯之前,您應該為 snort 添加組和用戶:
groupadd snort
和
useradd -g snort snort -s /dev/null
現在,您可以開始編譯了。轉到包含 snort 源代碼的目錄并發出以下命令:
./configure --with-mysql
然后:
make
并且(以 root 身份)
make install
Snort 的活動基于一組規則。需要將這些規則從 tarball 源中的目錄規則復制到 /etc/snort/rules/。您還應該將在那里找到的所有配置文件復制到 /etc/snort/(本質上是 cp *.rules /etc/snort/rules/、cp *.conf /etc/snort、cp *.config /etc/snort、cp *.map /etc/snort)
設置 Snort
首先,我們需要修改 snort.conf 文件以反映我們網絡的細節。在此文件中,您將找到以下變量:
var HOME_NET X.X.X.X/X
您需要將其更改為您的網絡所在的范圍。例如,對于典型的 C 類網絡,您可以將 X 更改為 192.168.0.0/16。此外,請確保您的 RULE_PATH 變量指向 /etc/snort/rules。
由于我們配置了 Snort 以將其警報記錄到 MySQL 數據庫中,因此我們需要做一些事情來做好準備。首先,在 snort.conf 文件中,您需要添加以下行
output database: log, mysql, user=snort password=XXXXX dbname=snort host=localhost
現在我們需要創建“snort”數據庫。為此,請執行以下命令(當然,這假設您在機器上擁有 MySQL“root”用戶權限)
mysqladmin -u root -p create snort
現在,打開 MySQL shell 并創建“snort”用戶并授予表的創建、插入、選擇、刪除和更新權限。
grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost;
然后為您上面使用的用戶‘snort’設置密碼:
SET PASSWORD FOR snort@localhost=PASSWORD('XXXXX');
現在我們需要在 snort 數據庫中創建主要表。為此,請進入放置 snort 源代碼的“contrib”目錄并發出以下命令:
mysql -u root -p < create_mysql snort
然后我們需要創建一些額外的表。最好的方法是使用以下命令:
zcat snortdb-extra.gz |/usr/local/mysql/bin/mysql -p snort
現在,您應該擁有 snort MySQL 系統所需的所有表。執行“show tables;”查詢將顯示以下內容:
+------------------+
| Tables_in_snort |
+------------------+
| data |
| detail |
| encoding |
| event |
| flags |
| icmphdr |
| iphdr |
| opt |
| protocols |
| reference |
| reference_system |
| schema |
| sensor |
| services |
| sig_class |
| sig_reference |
| signature |
| tcphdr |
| udphdr |
+------------------+
現在,一切準備就緒,'snort' 可以開始記錄警報了。SnortReport有一個很棒的基于 Web 的前端,用于監控 snort 警報,名為 SnortReport。它用 PHP 編寫,可輕松安裝到 snort 所在機器的 Web 服務器中。它可從 Circuits Maximus 獲得:http://www.circuitsmaximus.com/SnortReport 將按協議類型顯示警報的圖形表示。此圖形需要 libphp-jpgraph 庫。這實際上是 Debian 軟件包的一部分,但源代碼可在 Ibibilo 找到。您還需要啟用 GD 庫的 PHP 安裝。這通常是默認啟用的,因此如果您安裝了 PHP4 或更新版本,則不需要您再做任何工作。
要安裝,只需解壓您的網頁所在的 SnortReport 源。然后將組成 libphp-jpgraph 的 php 文件復制到名為“jpgraph”/snortreport 目錄的子目錄中 - 因為這是我們將告訴 SnortReport 查找它們的地方。然后打開文件“srconf.php”并將用戶“snort”的 MySQL 密碼變量更改為 ($pass = "XXXXX" ;)。接下來,確保“jpgraph”路徑的變量指向我們想要的位置:
define("JPGRAPH_PATH", "./jpgraph/");
您不必啟用圖表。如果您沒有啟用 GD 的 PHP 安裝或 jpgraph,則可以在文件 srconf.php 中將變量設置為“FALSE”。
現在,如果您將 Web 瀏覽器指向 SnortReport 所在的位置,則應該看到類似以下內容:
現在,您可以基于 Web 監控 Snort 入侵檢測系統。
更新和添加 Snort 規則
正如我們提到的,snort 根據 /etc/snort/rules 中的一組規則開展活動。您可以在http://www.snort.org/dl/rules/下載新規則。您應該獲取與您正在使用的 Snort 版本相對應的 tarball。在撰寫本文時,Snort 的版本為 2.x。請確保獲取特定“.x”的 tarball。(即 2.1、2.2、ETC)。
如果您管理一兩臺服務器,那么在最新的 tarball 發布后獲取它并手動更新可能比較實用。您可以重命名舊的“規則”目錄 rules.YYYYMMDD 或任何您喜歡的名稱,然后將新的規則目錄放在其位置并重新啟動 Snort。如果您是多臺機器的系統管理員,那么創建一個腳本來完成此操作是有意義的。還有一個名為“Oinkmaster”的流行工具可用于更新和管理 snort 規則。它位于http://oinkmaster.sourceforge.net/。他們的頁面有關于如何使用此工具來使您的規則保持最新的出色文檔。