『壹』 怎樣安裝和使用Snort
在安裝Snort之前,請確認你的系統是否安裝了LAMP,如果沒有安裝的話,請輸入以下命令安裝:
$ sudo apt-get install mysql-server libapache2-mod-php5 php5-mysql libphp-adodb
安裝部署Snort工具
1. 安裝Snort軟體包
$ sudo apt-get install snort-mysql
在安裝過程中會提示以下信息
這時,輸入的網卡要與你的現在使用的網卡一致,否則安裝不成功,查看你的網卡信息使用命令 $ ifconfig
接下來,選擇要監聽網路段,比如要監聽整個192.168.0.0/16這個網路段,就填寫上這個網路段,
最後,提示是否設置資料庫,選擇「Yes」。
安裝結束,會提示以下錯誤信息
這個錯誤信息,提示我們還沒有為snort配置一個mysql資料庫。接下來我們為snort創建一個資料庫
2. 創snortdb資料庫
進入資料庫後,創建資料庫名為snortdb
創建一個snort的資料庫用戶,並設置密碼為snortpassword
創建好資料庫snortdb以後,我們需要將snort-mysql自帶的軟體包中附帶的sql文件導入到資料庫中;
$ cd /usr/share/doc/snort-mysql
$ zcat create_mysql.gz | mysql snortdb -u snort -psnortpassword
導入到資料庫中以後,可以去snortdb資料庫中查看是否導入成功。
如果導入數據完成以後,接著我們需要把/etc/snort/db-pending-config文件刪掉,否則snort會認為資料庫任然沒有準備好。
$ sudo rm /etc/snort/db-pending-config
3. 配置Snort
上一步配置好了資料庫,我們需要配置Snort配置文件(/etc/snort/snort.conf),告訴Snort以後日誌寫入到Snortdb資料庫中.
$ sudo nano /etc/snort/snort.conf
首先,找到文件中「var HOME_NET any」一行,將其修改為我們邀監控的網路段,並啟用臨近下面幾行的「var EXTERNAL_NET !$HOME_NET」,如圖配置:
接著,找到該文件中「output database:log,mysql,」這行,默認它是注釋的,如果沒有將其注釋掉,並在該行的下方填寫以下內容,
該設置時將log和alert信息都寫入到指定的資料庫中。
然後, 檢測snort.conf配置文件是否正常:
$ sudo snort -c /etc/snort/snort.conf
如果出現以上信息,有一個小豬出現,則說明配置成功了,按「Ctrl +C」退出。
最後,我們啟動snort:
$ sudo /etc/init.d/snort start
啟動成功以後需要使用
$ ps aux | grep snort
檢測是否snort真的啟動成功。一般安裝我的步驟做的話是不會成功的,因為還有一個文件(/var/log/snort/alert)的所有者沒有修改。
$ sudo chown snort /var/log/snort/alert
再啟動snort
$ sudo /etc/init.d/snort start
通過$ ps aux | grep snort命令,查看是否啟動成功。如果沒有成功,可以通過/var/log/syslog日誌文件查看具體的原因。
這里說一下為什麼要先啟動一下snort再修改(/var/log/snort/alert文件的所有者,因為默認在/var/log/snort/目錄沒有alert這個文件,只要通過先啟動一下snort就會自動創建一個alert文件。
『貳』 如何配置Snort+主動防火牆
一、 Snort的安裝:
Snort的安裝十分簡單,一般的分為以下幾個步驟:
* 首先,確定你的linux系統中已經安裝了libpcap庫。
* 改寫snort的配置文件以滿足系統的要求.
* 使用make命令,編譯snort的源文件生成二進制可執行文件.
* 使用make install命令,將編輯好的可執行文件安裝到指定的位置.
* 根據snort中頭文件定義的簡單規則,可以編譯一些簡單的規則文件.
* 使用snort -?命令;
* 如果你已經使用了Snort早期的版本,你還需要重新編譯所用的規則,使它與現有的規則格式相兼容。
1. 配置選項介紹
./configure --enable-inline
--help看所有配置選項
mkdir /var/log/snort
cd /etc
2.啟動snort inline
snort -QDc ../etc/drop.conf -l /var/log/snort
* 將上一條命令寫入/etc/rc.d/rc.local
Snort的使用
Snort採取命令行方式運行。格式為:snort -[options] 。options中可選的參數很多,下面逐一介紹。
首先介紹-[options]的內容:
-A 設置告警方式為full,fast或者none。 在full方式下,Snort將傳統的告警信息格式寫入告警文件,告警內容比較詳細。在fast方式下,Snort只將告警時間,告警內容,告警IP地址和埠號寫入文件。在none方式下,系統將關閉告警功能。
-a 顯示ARP包
-b 以tcpmp的格式將數據包記入日誌。 所有的數據包將以二進制格式記入名為snort.log的文件中。這個選項提高了snort的操作速度,因為直接已二進制存儲,省略了轉換為文本文件的時間,通過-b選項的設置,snort可以在100Mbps的網路上正常工作。
-c 使用配置文件。這是一個規則文件。文件內容主要控制系統哪些包需要記入日誌,哪些包需要告警,哪些包可以忽略等。
-C 僅抓取包中的ASCII字元
-d 抓取應用層的數據包
-D 在守護模式下運行Snort。告警信息發送至/var/log/snort.alert,除非特別配置。
-e 顯示和記錄網路層數據包頭信息
-F 從文件中讀取BPF過濾信息。
-h 設置(C類IP地址)為內部網路.當使用這個開關時,所有從外部的流量將會有一個方向箭頭指向右邊,所有從內部的流量將會有一個左箭頭.這個選項沒有太大的作用,但是可以使顯示的包的信息格式比較容易察看.
-i 使用網路介面文件 。
-l 將包信息記錄到目錄下。設置日誌記錄的分層目錄結構,按接收包的IP地址將抓取的包存儲在相應的目錄下。
-M 向文件格式非常簡單。文件的每一行包含一個目的地址的SMB名。
-n 處理完包後退出。
-N 關閉日誌功能。告警功能仍然工作。
-o 改變應用於包的規則的順序。標準的應用順序是:Alert->Pass->Log;採用-o選項後,順序改為:Pass->Alert->Log,允許用戶避免使用冗長的BPF命令行來過濾告警規則。
-p 關閉混雜模式的嗅探(sniffing)。這個選項在網路嚴重擁塞時十分有效。
-r 讀取tcpmp生成的文件。Snort將讀取和處理這個文件。例如:當你已經得到了一個Shadow文件或者tcpmp格式的文件,想處理文件包含的內容時,這個選項就很有用了。
-s 將告警信息記錄到系統日誌。在其他的平台下,日誌文件可以出現在/var/log/secure, /var/log/messages目錄里。
-S ,n=v> 設置變數n的值為v。這個選項可以用命令行的方式設置Snort規則文件中的變數。例如:如果要給Snort規則文件中的變數HOME_NET賦值,就可以在命令行下採用這個選項。
-v 將包信息顯示到終端時,採用詳細模式。這種模式存在一個問題:它的顯示速度比較慢,如果你是在IDS網路中使用Snort,最好不要採用詳細模式,否則會丟失部分包信息。
-V 顯示版本號,並退出。
-x 當收到騷擾IPX包時,顯示相關信息。
『叄』 如何編寫snort的檢測規則
snort使用一種簡單的規則描述語言,這種描述語言易於擴展,功能也比較強大。下面是一些最基本的東西:
snort的每條規則必須在一行中,它的規則解釋器無法對跨行的規則進行解析。注意:由於排版的原因本文的例子有的分為兩行。
snort的每條規則都可以分成邏輯上的兩個部分:規則頭和規則選項。規則頭包括:規則行為(rule''s action)、協議(protocol)、源/目的IP地址、子網掩碼以及源/目的埠。規則選項包含報警信息和異常包的信息(特徵碼,signature),使用這些特徵碼來決定是否採取規則規定的行動。
這是一個例子:
alert tcp any any -> 192.168.1.0/24 111(content:"|00 01 86 a5|";msg:"mountd access";)
表1.一條簡單的snort規則
從開頭到最左邊的括弧屬於規則頭部分,括弧內的部分屬於規則選項。規則選項中冒號前面的詞叫做選項關鍵詞(option keywords)。注意對於每條規則來說規則選項不是必需的,它們是為了更加詳細地定義應該收集或者報警的數據包。只有匹配所有選項的數據包,snort才會執行其規則行為。如果許多選項組合在一起,它們之間是邏輯與的關系。讓我們從規則頭開始。
1.1 include
snort使用的規則文件在命令行中指定,include關鍵詞使這個規則文件可以包含其它規則文件中的規則,非常類似與C語言中的#include。snort會從被包含的文件讀出其內容,取代include關鍵詞。
格式:
include <文件路徑/文件名>
注意:行尾沒有分號。
1.2 varriables
在snort規則文件中可以定義變數。
格式:
var
例子:
var MY_NET 192.168.1.0/24,10.1.1.0/24] $MY_NET any (flags:S;msg:''SYNMETA packet";)
表2.變數的定義和使用
規則變數名可以使用多種方式來修改,你可以使用$操作符來定義元變數(meta-variables)。這些修改方式可以結合變數修改操作符:?和-來使用。
$var:定義元變數
$(var):以變數var的內容作為變數名
$(var:-default):以變數var的內容作為變數名,如果var沒有定義就使用default作為變數名
$(var:?message):使用變數var的內容作為變數名,如果不成功就列印錯誤信息message並退出。
例如:
var MY_NET $(MYU_NET:-192.168.1.0/24) tcp any any -> $(MY_NET:?MY_NET is undefined!) 23
表3.高級變數應用
2.規則頭(Rule Headers)
2.1 Rule Action
規則頭包含一些信息,這些信息包括:哪些數據包、數據包的來源、什麼類型的數據包,以及對匹配的數據包如何處理。每條規則的第一項就是規則行為(rule action)。規則行為告訴snort當發現匹配的數據包時,應該如何處理。在snort中,有五種默認的處理方式:alert、log、pass、activate和dynamic。
alert:使用選定的報警方法產生報警信息,並且記錄數據包
log:記錄數據包
pass:忽略數據包
activate:報警,接著打開其它的dynamic規則
dynamic:保持空閑狀態,直到被activete規則激活,作為一條log規則
你也可以定義自己的規則類型,把它們和一個或者幾個輸出插件聯系在一起。然後你就可以在snort規則中使用這些規則類型了。
這個例子將建立一個類型,它將只以tcpmp格式輸出日誌:
ruletype suspicious
{
type log
output log_tcpmp: suspocious.log
}
下面這個例子將建立一個類型,把日誌發送到syslog和MySql資料庫:
ruletype redalert
{
type alert
output alert_syslog:LOG_AUTH LOG_ALERT
output database:log,user=snort dbname=snort host=localhost
}
『肆』 求:windows下配置snort所需全部資源
假設你的snort.exe位於d:\snort\bin\snort.exe。按以下步驟:
開始——運行——cmd——d:——cd snort\bin——snort
但snort一般都是配合命令來用的,要加一些選項才有效果。如(這里的路徑是我電腦上的):
snort -c c:\snort\etc\snort.conf -l c:\snort\logs -d -e -v
如果要結束,可以用Ctrl+c,則退出snort。
『伍』 snort誰會用
第一章 snort簡介
snort有三種工作模式:嗅探器、數據包記錄器、網路入侵檢測系統。嗅探器模式僅僅是從網路上讀取數據包並作為連續不斷的流顯示在終端上。數據包記錄器模式把數據包記錄到硬碟上。網路入侵檢測模式是最復雜的,而且是可配置的。我們可以讓snort分析網路數據流以匹配用戶定義的一些規則,並根據檢測結果採取一定的動作。
嗅探器
所謂的嗅探器模式就是snort從網路上讀出數據包然後顯示在你的控制台上。首先,我們從最基本的用法入手。如果你只要把TCP/IP包頭信息列印在屏幕上,只需要輸入下面的命令:
./snort -v
使用這個命令將使snort只輸出IP和TCP/UDP/ICMP的包頭信息。如果你要看到應用層的數據,可以使用:
./snort -vd
這條命令使snort在輸出包頭信息的同時顯示包的數據信息。如果你還要顯示數據鏈路層的信息,就使用下面的命令:
./snort -vde
注意這些選項開關還可以分開寫或者任意結合在一塊。例如:下面的命令就和上面最後的一條命令等價:
./snort -d -v –e
數據包記錄器
如果要把所有的包記錄到硬碟上,你需要指定一個日誌目錄,snort就會自動記錄數據包:
./snort -dev -l ./log
當然,./log目錄必須存在,否則snort就會報告錯誤信息並退出。當snort在這種模式下運行,它會記錄所有看到的包將其放到一個目錄中,這個目錄以數據包目的主機的IP地址命名,例如:192.168.10.1
如果你只指定了-l命令開關,而沒有設置目錄名,snort有時會使用遠程主機的IP地址作為目錄,有時會使用本地主機IP地址作為目錄名。為了只對本地網路進行日誌,你需要給出本地網路:
./snort -dev -l ./log -h 192.168.1.0/24
這個命令告訴snort把進入C類網路192.168.1的所有包的數據鏈路、TCP/IP以及應用層的數據記錄到目錄./log中。
如果你的網路速度很快,或者你想使日誌更加緊湊以便以後的分析,那麼應該使用二進制的日誌文件格式。所謂的二進制日誌文件格式就是tcpmp程序使用的格式。使用下面的命令可以把所有的包記錄到一個單一的二進制文件中:
./snort -l ./log -b
注意此處的命令行和上面的有很大的不同。我們勿需指定本地網路,因為所有的東西都被記錄到一個單一的文件。你也不必冗餘模式或者使用-d、-e功能選項,因為數據包中的所有內容都會被記錄到日誌文件中。
你可以使用任何支持tcpmp二進制格式的嗅探器程序從這個文件中讀出數據包,例如:tcpmp或者Ethereal。使用-r功能開關,也能使 snort讀出包的數據。snort在所有運行模式下都能夠處理tcpmp格式的文件。例如:如果你想在嗅探器模式下把一個tcpmp格式的二進制文件中的包列印到屏幕上,可以輸入下面的命令:
./snort -dv -r packet.log
在日誌包和入侵檢測模式下,通過BPF(BSD Packet Filter)介面,你可以使用許多方式維護日誌文件中的數據。例如,你只想從日誌文件中提取ICMP包,只需要輸入下面的命令行:
./snort -dvr packet.log icmp
網路入侵檢測系統
snort最重要的用途還是作為網路入侵檢測系統(NIDS),使用下面命令行可以啟動這種模式:
./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf
snort.conf是規則集文件。snort會對每個包和規則集進行匹配,發現這樣的包就採取相應的行動。如果你不指定輸出目錄,snort就輸出到/var/log/snort目錄。
注意:如果你想長期使用snort作為自己的入侵檢測系統,最好不要使用-v選項。因為使用這個選項,使snort向屏幕上輸出一些信息,會大大降低snort的處理速度,從而在向顯示器輸出的過程中丟棄一些包。
此外,在絕大多數情況下,也沒有必要記錄數據鏈路層的包頭,所以-e選項也可以不用:
./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf
這是使用snort作為網路入侵檢測系統最基本的形式,日誌符合規則的包,以ASCII形式保存在有層次的目錄結構中。
網路入侵檢測模式下的輸出選項
在NIDS模式下,有很多的方式來配置snort的輸出。在默認情況下,snort以ASCII格式記錄日誌,使用full報警機制。如果使用full報警機制,snort會在包頭之後列印報警消息。如果你不需
要日誌包,可以使用-N選項。
snort有6種報警機制:full、fast、socket、syslog、smb(winpopup)和none。其中有4個可以在命令行狀態下使用-A選項設置。這4個是:
-A fast:報警信息包括:一個時間戳(timestamp)、報警消息、源/目的IP地址和埠。
-A full:是默認的報警模式。
-A unsock:把報警發送到一個UNIX套接字,需要有一個程序進行監聽,這樣可以實現實時報警。
-A none:關閉報警機制。
使用-s選項可以使snort把報警消息發送到syslog,默認的設備是LOG_AUTHPRIV和LOG_ALERT。可以修改snort.conf文件修改其配置。
snort還可以使用SMB報警機制,通過SAMBA把報警消息發送到Windows主機。為了使用這個報警機制,在運行./configure腳本時,必須使用--enable-smbalerts選項。
下面是一些輸出配置的例子:
使用默認的日誌方式(以解碼的ASCII格式)並且把報警發給syslog:
./snort -c snort.conf -l ./log -s -h 192.168.1.0/24
使用二進制日誌格式和SMB報警機制:
./snort -c snort.conf -b -M WORKSTATIONS
第二章 編寫snort 規則
基礎
snort使用一種簡單的,輕量級的規則描述語言,這種語言靈活而強大。在開發snort規則時要記住幾個簡單的原則。
第一,大多數snort規則都寫在一個單行上,或者在多行之間的行尾用/分隔。Snort規則被分成兩個邏輯部分:規則頭和規則選項。規則頭包含規則的動作,協議,源和目標ip地址與網路掩碼,以及源和目標埠信息;規則選項部分包含報警消息內容和要檢查的包的具體部分。
下面是一個規則範例:
alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)
第一個括弧前的部分是規則頭(rule header),包含的括弧內的部分是規則選項(rule options)。規則選項部分中冒號前的單詞稱為選項關鍵字(option keywords)。注意,不是所有規則都必須包含規則選項部分,選項部分只是為了使對要收集或報警,或丟棄的包的定義更加嚴格。組成一個規則的所有元素對於指定的要採取的行動都必須是真的。當多個元素放在一起時,可以認為它們組成了一個邏輯與(AND)語句。同時,snort規則庫文件中的不同規則可以認為組成了一個大的邏輯或(OR)語句。
規則高級概念
Includes:
include允許由命令行指定的規則文件包含其他的規則文件。
格式:
include:
注意在該行結尾處沒有分號。被包含的文件會把任何預先定義的變數值替換為自己的變數引用。參見變數(Variables)一節以獲取關於在SNORT規則文件中定義和使用變數的更多信息。
Variables :
變數可能在snort中定義。
格式:
var:
例子:
var MY_NET 192.168.1.0/24
alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet";)
規則變數名可以用多種方法修改。可以在"$"操作符之後定義變數。"?" 和 "-"可用於變數修改操作符。
$var - 定義變數。
$(var) - 用變數"var"的值替換。
$(var:-default) - 用變數"var"的值替換,如果"var"沒有定義用"default"替換。
$(var:?message) - 用變數"var"的值替換或列印出錯誤消息"message"然後退出。
例子:
var MY_NET $(MY_NET:-192.168.1.0/24)
log tcp any any -> $(MY_NET:?MY_NET is undefined!) 23
Config
Snort的很多配置和命令行選項都可以在配置文件中設置。
格式:
config [: ]
Directives
order 改變規則的順序( snort -o )
alertfile 設置報警輸出文件,例如:config alertfile: alerts
classification 創建規則分類。
decode_arp 開啟arp解碼功能。(snort -a)
mp_chars_only 開啟字元傾卸功能。(snort -C)
mp_payload 傾卸應用層數據。(snort -d)
decode_data_link 解碼第二層數據包頭。(snort -e)
bpf_file 指定BPF過濾器(snort -F)。例如:config bpf_file: filename.bpf
set_gid 改變GID (snort -g)。例如:config set_gid: snort_group
daemon 以後台進程運行。(snort -D)
reference_net 設置本地網路。 (snort -h). 例如:config reference_net:192.168.1.0/24
interface 設置網路介面(snort –i )。例如:config interface: xl0
alert_with_interface_name 報警時附加上介面信息。(snort -I)
logdir 設置記錄目錄 (snort -l)。例如:config logdir: /var/log/snort
umask 設置snort輸出文件的許可權位。(snort -m). Example: config umask: 022
pkt_count 處理n個數據包後就退出。(snort -n). Example: config pkt_count: 13
nolog 關閉記錄功能,報警仍然有效。 (snort -N)
obfuscate 使IP地址混亂 (snort -O)
no_promisc 關閉混雜模式。(snort -p)
quiet 安靜模式,不顯示標志和狀態報告。(snort -q)
checksum_mode 計算校驗和的協議類型。類型值:none, noip, notcp, noicmp, noudp, all
utc 在時間戳上用UTC時間代替本地時間。 (snort -U)
verbose 將詳細記錄信息列印到標准輸出。 (snort -v)
mp_payload_verbose 傾卸數據鏈路層的原始數據包 ( snort -X )
show_year 在時間戳上顯示年份。(snort -y)
stateful 為stream4設置保證模式。
min_ttl 設置一個snort內部的ttl值以忽略所有的流量。
disable_decode_alerts 關閉解碼時發出的報警。
disable_tcpopt_experimental_alerts 關閉tcp實驗選項所發出的報警。
disable_tcpopt_obsolete_alerts關閉tcp過時選項所發出的報警。
disable_tcpopt_ttcp_alerts 關閉ttcp選項所發出的報警。
disable_tcpopt_alerts 關閉選項長度確認報警。
disable_ipopt_alerts 關閉IP選項長度確認報警。
detection 配置檢測引擎。( 例如:search-method lowmem )
reference 給snort加入一個新的參考系統。
規則頭
規則動作:
規則的頭包含了定義一個包的who,where和what信息,以及當滿足規則定義的所有屬性的包出現時要採取的行動。規則的第一項是"規則動作"(rule action),"規則動作"告訴snort在發現匹配規則的包時要干什麼。在snort中有五種動作:alert、log、pass、activate 和dynamic.
1、Alert-使用選擇的報警方法生成一個警報,然後記錄(log)這個包。
2、Log-記錄這個包。
3、Pass-丟棄(忽略)這個包。
4、activate-報警並且激活另一條dynamic規則。
5、dynamic-保持空閑直到被一條activate規則激活,被激活後就作為一條log規則執行。
你可以定義你自己的規則類型並且附加一條或者更多的輸出模塊給它,然後你就可以使用這些規則類型作為snort規則的一個動作。
下面這個例子創建一條規則,記錄到tcpmp。
ruletype suspicious
{
type log output
log_tcpmp: suspicious.log
}
下面這個例子創建一條規則,記錄到系統日誌和MySQL資料庫
ruletype redalert
{
type alert output
alert_syslog: LOG_AUTH LOG_ALERT
output database: log, mysql, user=snort dbname=snort host=localhost
}
協議
規則的下一部分是協議。Snort當前分析可疑包的ip協議有四種:tcp 、udp、icmp和ip。將來可能會更多,例如ARP、IGRP、GRE、OSPF、RIP、IPX等。
Ip地址
規則頭的下一個部分處理一個給定規則的ip地址和埠號信息。關鍵字"any"可以被用來定義任何地址。Snort 沒有提供根據ip地址查詢域名的機制。地址就是由直接的數字型ip地址和一個cidr塊組成的。Cidr塊指示作用在規則地址和需要檢查的進入的任何包的網路掩碼。/24表示c類網路,/16表示b類網路,/32表示一個特定的機器的地址。例如,192.168.1.0/24代表從192.168.1.1 到192.168.1.255的地址塊。在這個地址范圍的任何地址都匹配使用這個192.168.1.0/24標志的規則。這種記法給我們提供了一個很好的方法來表示一個很大的地址空間。
有一個操作符可以應用在ip地址上,它是否定運算符(negation operator)。這個操作符告訴snort匹配除了列出的ip地址以外的所有ip地址。否定操作符用"!"表示。下面這條規則對任何來自本地網路以外的流都進行報警。
alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)
這個規則的ip地址代表"任何源ip地址不是來自內部網路而目標地址是內部網路的tcp包"。
你也可以指定ip地址列表,一個ip地址列表由逗號分割的ip地址和CIDR塊組成,並且要放在方括弧內「[」,「]」。此時,ip列表可以不包含空格在ip地址之間。下面是一個包含ip地址列表的規則的例子。
alert tcp ![192.168.1.0/24,10.1.1.0/24] any -> [192.168.1.0/24,10.1.1.0/24] 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)
埠號
埠號可以用幾種方法表示,包括"any"埠、靜態埠定義、范圍、以及通過否定操作符。"any"埠是一個通配符,表示任何埠。靜態埠定義表示一個單個埠號,例如111表示portmapper,23表示telnet,80表示http等等。埠范圍用范圍操作符":"表
『陸』 怎樣實現為snort添加命令行參數
snort使用一種簡單的規則描述語言,這種描述語言易於擴展,功能也比較強大。下面是一些最基本的東西:snort的每條規則必須在一行中,它的規則解釋器無法對跨行的規則進行解析。注意:由於排版的原因本文的例子有的分為兩行。snort的每條規則都可以分成邏輯上的兩個部分:規則頭和規則選項。規則頭包括:規則行為(rule''saction)、協議(protocol)、源/目的IP地址、子網掩碼以及源/目的埠。規則選項包含報警信息和異常包的信息(特徵碼,signature),使用這些特徵碼來決定是否採取規則規定的行動。這是一個例子:alerttcpanyany->192.168.1.0/24111(content:"|000186a5|";msg:"mountdaccess";)表1.一條簡單的snort規則從開頭到最左邊的括弧屬於規則頭部分,括弧內的部分屬於規則選項。規則選項中冒號前面的詞叫做選項關鍵詞(optionkeywords)。注意對於每條規則來說規則選項不是必需的,它們是為了更加詳細地定義應該收集或者報警的數據包。只有匹配所有選項的數據包,snort才會執行其規則行為。如果許多選項組合在一起,它們之間是邏輯與的關系。讓我們從規則頭開始。1.1includesnort使用的規則文件在命令行中指定,include關鍵詞使這個規則文件可以包含其它規則文件中的規則,非常類似與C語言中的#include。snort會從被包含的文件讀出其內容,取代include關鍵詞。格式:include注意:行尾沒有分號。1.2varriables在snort規則文件中可以定義變數。格式:var例子:varMY_NET192.168.1.0/24,10.1.1.0/24]$MY_NETany(flags:S;msg:''SYNMETApacket";)表2.變數的定義和使用規則變數名可以使用多種方式來修改,你可以使用$操作符來定義元變數(meta-variables)。這些修改方式可以結合變數修改操作符:?和-來使用。$var:定義元變數$(var):以變數var的內容作為變數名$(var:-default):以變數var的內容作為變數名,如果var沒有定義就使用default作為變數名$(var:?message):使用變數var的內容作為變數名,如果不成功就列印錯誤信息message並退出。例如:varMY_NET$(MYU_NET:-192.168.1.0/24)tcpanyany->$(MY_NET:?MY_NETisundefined!)23表3.高級變數應用2.規則頭(RuleHeaders)2.1RuleAction規則頭包含一些信息,這些信息包括:哪些數據包、數據包的來源、什麼類型的數據包,以及對匹配的數據包如何處理。每條規則的第一項就是規則行為(ruleaction)。規則行為告訴snort當發現匹配的數據包時,應該如何處理。在snort中,有五種默認的處理方式:alert、log、pass、activate和dynamic。alert:使用選定的報警方法產生報警信息,並且記錄數據包log:記錄數據包pass:忽略數據包activate:報警,接著打開其它的dynamic規則dynamic:保持空閑狀態,直到被activete規則激活,作為一條log規則你也可以定義自己的規則類型,把它們和一個或者幾個輸出插件聯系在一起。然後你就可以在snort規則中使用這些規則類型了。這個例子將建立一個類型,它將只以tcpmp格式輸出日誌:ruletypesuspicious{typelogoutputlog_tcpmp:suspocious.log}下面這個例子將建立一個類型,把日誌發送到syslog和MySql資料庫:ruletyperedalert{typealertoutputalert_syslog:LOG_AUTHLOG_ALERToutputdatabase:log,user=snortdbname=snorthost=localhost}
『柒』 如何判斷Snort是否工作正常
您好,很高興為您解答。
在規則集文件(snort.conf)後面添加一些簡單的規則:
java">.alertipanyany->anyany(msg:"GotanIPPacket";classtype:not-suspicious;
sid:2000000;rev:1;).alerticmpanyany->anyany(msg:"GotanICMPPacket";classtype:not-suspicious;
sid:2000001;rev:1;).alerticmpanyany->anyany(msg:"ICMPLargeICMPPacket";dsize:>800;
reference:arachnids,246;classtype:bad-unknown;sid:2000499;rev:4;)
前面兩個規則分別在捕獲任何IP數據包和ICMP數據包的時候產生一個告警。它們在遇到每一個數據包的時候都觸發告警,所以在數據流量很大的網路段不適合使用這些規則。最後一個規則是對499號簽名ID的拷貝進行修改以放寬產生告警的門限來滿足我們的測試目的正常情況下你應該避免放寬告警門限,因為這樣會產生很多的誤告警。
最後,Snort還有一個測試功能選項(「-T」),它可以輕松地檢測到用戶批準的配置變更。可以輸入命令「snort -c /etc/snort/snort.conf -T」,然後查看輸出來判斷變化的配置是否工作正常。如果工作正常,Snort將返回0,反之返回1。可以使用下面兩條命令來示範一下:在Linux系統下snort -c /etc/snort/snort.conf -T和echo "Return code: $?",Windows系統下snort -c ./Snort.conf -T和echo Return code: %ERRORLEVEL%。
由於通常情況下系統會運行幾個Snort的拷貝,所以可以讓一個Snort實例進行監視,而在另一個上修改配置並進行測試,一旦配置測試完成以後,就可以停止監視Snort實例,然後立即重新啟動Snort來執行改變的配置。
一些老式的規則使用傳輸控制協議報頭標志來判斷某個數據包是否屬於一個已建立的傳輸控制協議會話連接。而新式的規則使用「established」關鍵字來判斷不管是哪種規則,都不可能僅僅使用Netcat從線路上提取期望的傳輸控制協議數據包中的有效載荷,並使用Snort去「檢查」這些有效載荷——因為在相應的規則下,這些載荷必須作為已建立的傳輸控制協議會話的一部分,Snort才能夠檢查並觸發告警。「established」關鍵字能夠有效地減少誤告警,但是在測試Snort的時候效果不好,這就是我們使用網間控制報文協議或上面的自定義規則的原因。
如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望採納!
~O(∩_∩)O~
『捌』 windows下snort怎樣啟動和退出
假設你的snort.exe位於d:\snort\bin\snort.exe。按以下步驟:
開始——運行——cmd——d:——cd snort\bin——snort
但snort一般都是配合命令來用的,要加一些選項才有效果。如(這里的路徑是我電腦上的):
snort -c c:\snort\etc\snort.conf -l c:\snort\logs -d -e -v
如果要結束,可以用Ctrl+c,則退出snort。
說一下,snort輕量級入侵檢測方案,在windows下安裝、配置、調試成功還是不太容易的。特別是配置和調試,你要有心理准備。