Snort***檢測系統安裝與配置

第1章      Snort簡介
第2章      軟件列表
第3章      Snort 安裝與配置
第4章      Snort的操作與使用
第5章      常見問題與解決方法
 

 
第1章           Snort簡介
 
Snort是一個免費的IDS(***監測系統)軟件。它的一些源代碼是從著名的tcpdump軟件發展而來的。它是一個基於libpcap包的網絡監控軟件,可以作爲一個十分有效的網絡***監測系統。它能夠監測多種網絡***和探測,例如:緩衝器溢出***,端口掃描,CGI***,SMB探測等等。Snort具有實時的告警能力,將告警記入一個特別的告警文件--系統日誌,或者將告警信息通過samba轉發給另一臺Windows PC機。
  Snort首先根據遠端的ip地址建立目錄,然後將檢測到的包以tcpdump的二進制格式記錄或者以自身的解碼形式存儲到這些目錄中.這樣一來,你就可以使用snort來監測或過濾你所需要的包.
snort是一個輕量級的***檢測系統,它具有截取網絡數據報文,進行網絡數據實時分析、報警,以及日誌的能力。snort的報文截取代碼是基於libpcap庫的,繼承了libpcap庫的平臺兼容性。它能夠進行協議分析,內容搜索/匹配,能夠用來檢測各種***和探測,例如:緩衝區溢出、隱祕端口掃描、CGI***、SMB探測、OS指紋特徵檢測等等。snort使用一種靈活的規則語言來描述網絡數據報文,因此可以對新的***作出快速地翻譯。snort具有實時報警能力。可以將報警信息寫到syslog、指定的文件、UNIX套接字或者使用WinPopup消息。snort具有良好的擴展能力。它支持插件體系,可以通過其定義的接口,很方便地加入新的功能。snort還能夠記錄網絡數據,其日誌文件可以是tcpdump格式,也可以是解碼的ASCII格式。
 
第2章           軟件列表
軟件名稱
 功能簡述
 正式網址
 軟件版本
 
Snort
 網絡***探測器
 [url]www.snort.org/[/url]
 1.8.6
 
Libpcap
 Snort所依賴的網絡抓包庫
 [url]www.tcpdump.org/[/url]
 0.7.1
 
MySQL
 ***事件數據庫
 [url]www.mysql.org/[/url]
 3.23.49
 
Apache
 Web服務器
 [url]www.apache.org/[/url]
 1.3.24
 
Mod_ssl
 爲Apache提供SSL加密功能的模塊
 [url]www.modssl.org/[/url]
 2.8.8
 
OpenSSL
 開放源代碼的SSL加密庫,爲mod_ssl所依賴
 [url]www.openssl.org/[/url]
 0.9.6d
 
MM
 爲Apache的模塊提供共享內存服務
 [url]www.engelschall.com/[/url]
 1.1.3
 
ACID
 基於Web的***事件數據庫分析控制檯
 [url]www.cert.org/kb/aircert/[/url]
 0.9.6b21
 
PHP
 ACID的實現語言
 [url]www.php.net/[/url]
 4.0.6
 
GD
 被PHP用來即時生成PNG和JPG圖像的庫
 [url]www.boutell.com/gd/[/url]
 1.8.4
 
ADODB
 爲ACID提供便捷的數據庫接口
 php.weblogs.com/ADODB
 2.00
 
PHPlot
 ACID所依賴的製圖庫
 [url]www.phplot.com/[/url]
 4.4.6
 
 
 
第3章           Snort 安裝與配置
 
在正式進行軟件安裝之前,請檢查系統,確保擁有符合ANSI標準的C/C++編譯器等軟件開發工具。
1.安裝***事件數據庫MySQL
首先,以超級用戶的身份登錄系統,創建MySQL 用戶和MySQL用戶組; 然後,以MySQL身份登錄,按照缺省配置將MySQL安裝在/usr/local目錄下;接下來,將源代碼樹中的缺省配置文件My.cnf拷貝到/etc目錄下;再用超級用戶身份執行源碼樹中Scripts目錄下的可執行腳本文件Mysql_install_db創建初始數據庫; 隨後,用/etc/init.d/mysql.server命令啓動數據庫服務器,使用/usr/local/bin/mysqladmin程序改變數據庫管理員的口令。
2.安裝Snort
首先安裝Snort所依賴的網絡抓包庫Libpcap,將其按照缺省配置安裝在/usr/local目錄下之後,開始正式安裝Snort。
         #gzip -d -c snort-1.8.6.tar.gz | tar xvf -
         #cd snort-1.8.6
         #./configure --prefix=/usr/local --with-mysql=/usr/local
         --with-libpcap-includes=/usr/local \
         --with-libpcap-libraries=/usr/local
         #make
         #make install
安裝完畢後,將源碼樹中的Snort.conf文件、Classification.config文件和規則文件(*.rules)拷貝到系統的/etc目錄下。
按照下列步驟配置Snort,以便將其捕獲的網絡信息輸出到MySQL數據庫。
(1)創建Snort***事件數據庫和存檔數據庫。
#/usr/local/bin/mysqladmin -u root -p create snort
#/usr/local/bin/mysqladmin -u root -p create snort_archive
(2)執行Snort源碼樹下Contrib目錄下的Create_mysql SQL腳本文件,創建相關表。
#/usr/local/bin/mysql -u root -D snort -p < create_mysql
#/usr/local/bin/mysql -u root -D snort_archive -p < create_mysql
(3)編輯/etc/snort.conf文件,在Output Plugin 段中加入如下一行:
output database: alert, mysql, user=root password=abc123 dbname=snort host=localhost
3.安裝Web服務器Apache
(1)安裝MM庫
按照缺省配置將MM庫安裝在/usr/local目錄下。
(2)安裝OpenSSL
按照缺省設置將OpenSSL安裝在/usr/local目錄下。
(3)爲Apache擴展mod_ssl代碼
         #gzip -d -c apache-1.3.24.tar.gz | tar xvf -
         #gzip -d -c mod_ssl-2.8.8-1.3.24.tar.gz | tar xvf -
         #cd mod_ssl-2.8.8-1.3.24
         #./configure --with-apache=apache-1.3.24
該命令運行成功之後,會有提示說明已經成功擴展了Apache的源代碼。
(4)安裝Apache
         #cd ../apache-1.3.24
         #SSL_BASE=/usr/local EAPI_MM=/usr/local \
          ./configure --enable-module=so
          --enable-module=ssl --prefix=/usr/local
         #make
         #make certificate
         #make install
其中,Make certificate命令是爲mod_ssl生成所需的安全證書,按照提示輸入相應信息即可。這樣,Apache就被安裝在/usr/local目錄下。
4.安裝實現語言PHP
按照缺省配置,將爲PHP提供即時生成PNG和JPG圖像功能的GD庫安裝到/usr/local目錄下; 然後採用PHP的Apache DSO安裝模式將其安裝到/usr/local/libexec目錄,成爲Apache的動態共享模塊。另外,不要忘記把對MySQL的支持和GD庫也編譯到模塊裏。
5.安裝分析控制檯ACID
該部分的安裝工作具體包括3個軟件包:Adodb200.tar.gz、Phplot-4.4.6.tar.gz和Acid-0.9.6b21.tar.gz。安裝過程十分簡單,只需分別將這3個軟件包解壓縮並展開在Apache服務器的文檔根目錄下即可。
然後開始配置工作。轉到Acid-0.9.6b21目錄下編輯ACID的配置文件Acid_conf.php,給下列變量賦值:
         $Dblib_path="../adodb200"
         $DBtype="mysql"
         $alert_dbname="snort"
         $alert_host="localhost"
         $alert_port="3306"
         $alert_user="root"
         $alert_password="abc123"
         $archive_dbname="snort_archive"
         $archive_host="localhost"
         $archive_port="3306"
         $archive_user="root"
         $archive_password="abc123"
         $ChartLib_path="../phplot-4.4.6"
         $Chart_file_format="png"
         $portscan_file="/var/log/snort/portscan.log"
至此,網絡***檢測系統的軟件安裝工作結束。
三、系統部署及運行
本系統被部署在網絡服務器所處的DMZ區,用來監控來自互聯網和內網的網絡流量。負責監控的網絡探測器Snort使用無IP地址的網卡進行監聽,以保證NIDS自身的安全; 通過另一塊網卡接入內網,併爲其分配內網所使用的私有IP地址,以便從內網訪問分析控制檯程序ACID。通過啓用Apache服務器的用戶身份驗證和訪問控制機制,並結合SSL,保證系統的訪問安全。
另外,部署NIDS的關鍵是應當保證系統的監聽網卡所連接的設備端口能夠“看到”受監控網段的全部網絡流量。在共享式網絡中,這不是問題,但在交換式網絡中,由於交換機的每個端口擁有自己的衝突域,因此無法捕獲除廣播和組播之外的網絡流量,這就要求交換機提供監控端口,本網絡使用的是Cisco Catalyst系列交換機,其監控端口是通過端口的SPAN特性來實現的,用交換機管理軟件啓用該特性即可。
爲了運行該系統,以超級用戶身份執行下列命令:
#/etc/init.d/mysql.server start
#/usr/local/bin/snort -c /etc/snort.conf -l /var/log/snort -I elx0 -D
#/usr/local/bin/apachectl sslstart
這樣,NIDS已開始運行,然後在內網的管理PC機上啓動瀏覽器,在地址欄中鍵入:[url]https://192.168.1.8/acid-0.9.6b21/[/url],其中192.168.1.8是爲該NIDS內網網卡分配的IP地址。首次運行時,控制檯會提示用戶對***事件數據庫進行擴展,按照提示擴展完畢後,控制檯主界面出現。如圖1所示。

圖1 一天之內的報警頻率
主界面裏顯示的信息包括:觸發安全規則的網絡流量中各種協議所佔的比例、警報的數量、***主機和目標主機的IP地址及端口號等。ACID控制檯還提供強大的搜索功能,用戶可根據時間、IP地址、端口號、協議類型以及數據淨荷(payload)等多種條件的靈活組合,在***事件數據庫中進行查詢,以幫助網管人員進行分析。
***特徵庫是否豐富對一個NIDS非常重要,本系統同時支持多種有影響的***特徵庫,包括CERT/CC、arachNIDS和CVE等。在警報中除了列出***事件的命名外,還有到相應***特徵庫的Web鏈接,如果某個警報存在多個命名,則同時予以列出,以便參考。網絡管理人員可通過這些鏈接去查找在線***特徵庫,以便獲得關於特定***事件更加詳細的信息和相應的解決辦法。
應用ACID提供的製圖功能可以直觀地對網絡***事件進行分析,而生成的圖表又可進一步豐富網管人員編制的報告。例如ACID分析控制檯可以按用戶指定的時間段生成***事件的頻率圖,如圖2所示。

圖2 一週報警頻率
結束語
網絡安全是一個複雜的問題,只依靠1~2種網絡安全產品是不能解決問題的,必須綜合應用多種安全技術,並將其功能有機地整合到一起,進而構成統一的網絡安全基礎設施。
 
 
第4章           Snort的操作與使用
Snort採取命令行方式運行。格式爲:snort -[options] <filters>。options中可選的參數很多,下面逐一介紹。
首先介紹-[options]的內容:
-A <alert> 設置告警方式爲full,fast或者none。 在full方式下,Snort將傳統的告警信息格式寫入告警文件,告警內容比較詳細。在fast方式下,Snort只將告警時間,告警內容,告警IP地址和端口號寫入文件。在none方式下,系統將關閉告警功能。
-a 顯示ARP包
-b 以tcpdump的格式將數據包記入日誌。 所有的數據包將以二進制格式記入名爲snort.log的文件中。這個選項提高了snort的操作速度,因爲直接已二進制存儲,省略了轉換爲文本文件的時間,通過-b選項的設置,snort可以在100Mbps的網絡上正常工作。
-c <cf> 使用配置文件<cf>。這是一個規則文件。文件內容主要控制系統哪些包需要記入日誌,哪些包需要告警,哪些包可以忽略等。
-C 僅抓取包中的ASCII字符
-d 抓取應用層的數據包
-D 在守護模式下運行Snort。告警信息發送至/var/log/snort.alert,除非特別配置。
-e 顯示和記錄網絡層數據包頭信息
-F <bpf> 從文件<bpf>中讀取BPF過濾信息。
-h <hn> 設置<hn>(C類IP地址)爲內部網絡.當使用這個開關時,所有從外部的流量將會有一個方向箭頭指向右邊,所有從內部的流量將會有一個左箭頭.這個選項沒有太大的作用,但是可以使顯示的包的信息格式比較容易察看.
-i <if> 使用網絡接口文件 <if>。
-l <ld> 將包信息記錄到目錄<ld>下。設置日誌記錄的分層目錄結構,按接收包的IP地址將抓取的包存儲在相應的目錄下。
-M <wkstn> 向<wkstn〉文件中的工作站發送WinPopup消息。<wkstn>文件格式非常簡單。文件的每一行包含一個目的地址的SMB名。
-n <num> 處理完<num>包後退出。
-N 關閉日誌功能。告警功能仍然工作。
-o 改變應用於包的規則的順序。標準的應用順序是:Alert->Pass->Log;採用-o選項後,順序改爲:Pass->Alert->Log,允許用戶避免使用冗長的BPF命令行來過濾告警規則。
-p 關閉混雜模式的嗅探(sniffing)。這個選項在網絡嚴重擁塞時十分有效。
-r <tf> 讀取tcpdump生成的文件<tf>。Snort將讀取和處理這個文件。例如:當你已經得到了一個Shadow文件或者tcpdump格式的文件,想處理文件包含的內容時,這個選項就很有用了。
-s 將告警信息記錄到系統日誌。在其他的平臺下,日誌文件可以出現在/var/log/secure, /var/log/messages目錄裏。
-S ,n=v> 設置變量n的值爲v。這個選項可以用命令行的方式設置Snort規則文件中的變量。例如:如果要給Snort規則文件中的變量HOME_NET賦值,就可以在命令行下采用這個選項。
-v 將包信息顯示到終端時,採用詳細模式。這種模式存在一個問題:它的顯示速度比較慢,如果你是在IDS網絡中使用Snort,最好不要採用詳細模式,否則會丟失部分包信息。
-V 顯示版本號,並退出。
-x 當收到騷擾IPX包時,顯示相關信息。
-? 顯示使用摘要,並退出。
下面介紹一下< filters >的內容:
這裏的"filters"與TCPDump中的filter相同,是標準的BPF格式的過濾器。一般來說,你可以指定過濾器的主機,網絡或者協議,還可以給出邏輯表達式,定製特定的過濾器。例如:
[root@ice snort-1.6]# ./snort -h 192.168.1.0/24 -d -v host 192.168.1.1
表示記錄從主機192.168.1.1發送和接收的所有包信息。
[root@ice snort-1.6]# ./snort -h 192.168.1.0/24 -d -v net 192.168.1 and not host 192.168.1.1
表示記錄子網192.168.1中從192.168.1.0到192.168.1.24的所有主機接收和發送的包信息,但不包括192.168.1.1的信息。
在1.3版本中,你可以使用選項-F從文件中讀入自己的BPF過濾器。
前面將常提到規則文件,先面簡單介紹一下規則。詳細的內容可以從下面的站點得到。
[url]http://www.clark.net/~roesch/snort_rules.html[/url] 。系統生成的告警信息都記錄在alert.log文件中。你可以簡單的使用"tail -f"查看日誌信息。同時這些日誌信息還被記錄在系統日誌中,其缺省的目錄是/var/log/snort.你可以使用-L選項來指定特定的目錄.如果你設置了smbalert功能,那麼這些告警就可以通過smbclient在windows的機子上彈出一個對話框.
實際上,在使用snort的過程中,大家一定感受到規則(rules)文件的重要性.如何構造高效全面的規則文件就成了重點.下面我們就介紹一下該文件.
在該文件中,一條規則必須在一行中,符號#是註釋行.所有的ip地址和端口號都要使用數字形式,系統並不支持名字服務.一條規則的格式如下:
func proto src_ip/mask src_port_range -> dst_ip/mask dst_port_range (options)
動作 協議 源地址 源端口 目標地址 目標端口 (選項)
動作包括三類:告警(alert),日誌(log)和通行(pass).表明snort對包的三種處理方式.
在源/目的地址/端口中可以使用any來代表任意的地址或端口.還可以使用符號!來表明取非運算.同時,在目的和源地址之間可以使用標識符<>來指明方向.
選項包括:
1. msg -------將要放入alert或log文件中的輸出信息;
2. flags-------tcp協議中的標誌,如SYN,ACK等等,如果是0則表明全部標誌.
3. ttl -------在ip包中的ttl值,有利於識別traceroute包.
4. content----數據包的應用層,查找緩衝區溢出***.
5. itype-------icmp包的類型;
6. icode-------icmp包的編碼;
7. minfrag----最小的分片的有效載荷大小.
8. seg---------tcp包中的順序號;
9. ack --------tcp包中的響應號;
10. id ------ip 包中分片的序號;
.
11. logto---指定特殊的存放告警信息的文件;
12. dsize---指定特定的包的長度;
13. offset---在包中查找一定字節內容;
14. depth---在數據包中僅僅查找depth字節.
15. ipopts---查找一個特定的ip選項.
下面我們就舉一些例子來說明規則的作用:
1. 下面這條規則記錄了所有登錄到一個特定主機的數據包:
log tcp any any -> 192.168.1.1/32 23
2. 在第一條的基礎上記錄了雙向的流量.
log tcp any any <> 192.168.1.1/32 23
3. 這一條規則記錄了所有到達你的本地主機的icmp數據包.
log icmp any any -> 192.168.1.0/24 any
4. 這條規則允許雙向的從你的機子到其他站點的http包.
pass tcp any 80 <> 192.168.1.0/24 any
5.這條告警規則顯示了本地主機對其他主機的111端口的訪問,並在log中顯示端口影射調用('portmapper call')信息:
alert tcp 192.168.1.0/24 any -> any 111 (msg:"Portmapper call";)
6.記錄其他任意地址的小於1024端口訪問本地小於1024端口的流量:
log tcp any :1024 -> 192.168.1.0/24 :1024
7.這條規則將會發現SYN FIN掃描:
alert tcp any any -> 192.168.1.0/24 any (msg:"SYN-FIN scan!"; flags: SF;)
8.這條規則將會發現空tcp掃描:
alert tcp any any -> 192.168.1.0/24 any (msg:"Null scan!"; flags: 0;)
9.這條規則將會發現Queso fingerprint掃描:
alert tcp any any -> 192.168.1.0/24 any (msg:"Queso fingerprint";flags: S12;)
10.這條規則將進行基於內容的查找以發現溢出***:
alert tcp any any -> 192.168.1.0/24 143 (msg:"IMAP Buffer overflow!"; content:"|90E8 C0FF FFFF|/bin/sh";)
11.這條規則將會發現PHF***:
alert tcp any any -> 192.168.1.0/24 80 (msg:"PHF attempt"; content:"/cgi-bin/phf";)
12.這條規則將會發現traceroute包:
alert udp any any -> 192.168.1.0/24 any (msg:"Traceroute"; ttl:1;)
13.這條規則將會發現其他主機對本地發出的icmp包.
alert udp any any -> 192.168.1.0/24 any (msg:"Traceroute"; ttl:1;)
14.這條規則發現nmap的tcp 的ping掃描
alert tcp any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg:"NMAP TCP ping!";)
15.這條規則將會發現源路由的數據包(源路由***):
alert tcp any any -> any any (ipopts: lsrr; msg: "Source Routed packet!";)
由於snort也在不斷的發展着,許多功能正在被開發出來,如果需要詳細的信息,需要大家隨時關注它的發展.希望以上的介紹會對大家有所幫助,利用snort可以建立一個有效的IDS系統.
第5章           常見問題與解決方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章