■ 河南 劉景云
編者按: 入侵檢測系統(tǒng)在保護企業(yè)內網(wǎng)安全中發(fā)揮著重要作用,其實有時在Linux系統(tǒng)中,可以將Snort和Guardian結合起來,組建簡易的入侵檢測和防御系統(tǒng)。
在網(wǎng)絡安全領域,如何及時發(fā)現(xiàn)入侵行為,并對其進行監(jiān)視跟蹤攔截,對于保護網(wǎng)絡系統(tǒng)是極為重要的。
不同的入侵檢測系統(tǒng)(IDS)檢測的范圍不同,例如對于主機型IDS來說,就是在Linux主機上安裝IDS來提高本機的安全性,其監(jiān)控的是其自身。而網(wǎng)絡型IDS通過在內網(wǎng)中架設專用的入侵檢測主機,來對整個網(wǎng)段進行監(jiān)控。
在部署IDS時,可以采取靈活的策略,將IDS連接到防火墻和交換機之間串接一個集線器上,也可安裝到交換機下的某臺主機上,或直i686.rpm daq-2.0.2-18.el6.i686.rpm接安裝到防火墻主機,對進出內網(wǎng)的所有數(shù)據(jù)包進行分析監(jiān)控等。
在Linux系統(tǒng)中,可以將Snort和Guardian結合起來組建簡易的入侵檢測和防御系統(tǒng)。這里以Snort 2.9.62版本為例,下載Snort所需的文件到“/root/snort”目錄中。執(zhí)行切換到該目錄下,執(zhí)行“yum -y localinstall --nogpgcheck snort-2.9.6.2-28.el6.libdnet-1.12-7.el6.i686.rpm libpcap1-1.5.2-16.el6.i686.rpm”命令,完成Snort的安裝操作。這里采用的是YUM安裝方式,對指定的本地RPM包作為安裝源。
下載Snort規(guī)則庫文件,執(zhí) 行“tar snortrulessnapshot-2.9.tar.gz”和“cd snortrules-snapshot-2.9”命 令, 將“rules”、“so_rules”、“preproc_rules” 等目錄復制到“/etc/snort”目錄中,將規(guī)則包中的“etc”目錄中的所有內容復制到“/etc/snort”目錄下。
不過默認的Snort配置文件并不符合我們需要,打 開“/etc/snort/snort.conf”文件,在其中找到“var RULE_PATH ../rules”一行,在其上添加“var LIB_PATH/usr/lib”、“var CONF_PATH/etc/snort”等行,將“var RULE_PATH ../rules”行的內容修改為“var RULE_PATH$CONF_PATH/rules”, 將 其下 的“var SO_RULE_PATH../so_rules”內容修改為“var SO_RULE_PATH $CONF_PATH/so_rules”, 將“var PREPROC_RULE_PATH ../preproc_rules”修改為“var PREPROC_RULE_PATH $CONF_PATH/preproc_rules”。 找到“dynamicpreprocessor directory /usr/local/lib/snort_dynamicpreprocessor/”,修改為“dynamicpreprocessor directory $LIB_PATH/snort_dynamicpre processor/”。 將 其 下的“dynamicenging /usr/local/lib/snort_dynamicengine/libsf_engine.so” 修 改 為“dynamicenging $LIB_PATH/snort_dynamicengine/libsf_engine.so”。 將“dynamicdetection directory /usr/local/lib/snort_dynamicrules”修改為“dynamicdetection directory $LIB_PATH/snort_dynamicrules”。
要想發(fā)揮Snort的功能,需要針對配置文件“snort.conf”進行操作。在“ipvar HOME_NET”參數(shù)中可以設置監(jiān)控范圍,其默認值為“ANY”,表示捕獲所有的網(wǎng)絡數(shù)據(jù)包。如果只針對特定的主機設置監(jiān)控的話,將其設置為特定的IP即可。在“/etc/snort/rules”目錄中存在多個規(guī)則文件,不同文件用于不同的監(jiān)控類型。例如“scan.rules”用來檢測掃描行為,“virus.rules”用來檢測病毒等。
在實際工作中,不一定會用到所有的規(guī)則文件。因為加載的規(guī)則越多,在匹配時花費更多的時間,造成Snort運行效率降低。因此可以根據(jù)實際情況對其進行取舍,在“snort.conf”文件中可以找到對應的規(guī)則文件加載項。如果安裝IDS的主機上安裝了多塊網(wǎng)卡,用來連接多個網(wǎng)段,就需要對“/etc/sysconfig/snort”進 行 調整,在該文件中默認的內容包括“INTERFACE=eth0”行,表示只允許Snort通過eth0網(wǎng)絡接口捕獲數(shù)據(jù)包,如果該機上存在多塊網(wǎng)卡,可以將其修改為“INTERFACE="eth0 eth1 eth2"”,使其可以捕獲 eth0、eth1、eth2等接口上的網(wǎng)絡包。
啟動Snort的方法很簡單,執(zhí)行“service snort start”命令即可。當Snort啟動后,就可以執(zhí)行對攻擊行為的監(jiān)控,并將監(jiān)控到的攻擊信息記錄到“/var/log/snort/alert”文件中。
當然,這是對使用單個網(wǎng)絡接口而言。如果監(jiān)控多個網(wǎng)絡端口,可以在“/var/log/snort/INTERFACE_Name/alert”文件中分別保存,其中 的“INTERFACE_Name”表示具體的接口名稱。
實際上,Snort雖然具有檢測入侵行為的功能,不過當其檢測到可疑的攻擊行為后,除了發(fā)出報警信息,記錄相關數(shù)據(jù)外,并不會采取其他任何實際的保護動作。為此,可以使用主動防御系統(tǒng)來配合運作,例如封鎖黑客的IP等。
利 用Guardian這 款Snort插件就可以彌補Snort的上述不足。Guardian是一個守護進程,可以對Snort的報警文件進行監(jiān)視,可調用其他的外部進程來封鎖該IP,預設時間過后可以解除封鎖。
執(zhí) 行“tar -zxvf guardian-1.7.tar.gz” 命令,將Guardian壓縮包解壓,利用“cp”命令,將其中的“guardian.pl”復 制 到“/usr/local/bin”目錄,這是Guardian的執(zhí)行文件,將“scripts/iptables_block.sh” 文 件 復 制 到“/usr/local/bin”目錄,并改為“guardian_block.sh”,該文件是封鎖黑客IP的外部程序。將“scripts/iptables_unblock.sh”文件復制到“/usr/local/bin”目錄,并改名 為“guardian_unblock.sh”,該文件用來解鎖被封鎖的 IP。 將“guardian.conf”文件復制到“/etc/snort”目錄中,這是Guardian的配置文件。
執(zhí) 行“touch /etc/snort/guardian.ignore”命令,建立一個名為“guardian.ignore”的文件,可以將需要忽略的IP添加進來。執(zhí)行“touch /etc/snort/guardian.target”命令,建立名為“guardian.target”文件,可以在其中編輯需要監(jiān)控的IP信息。執(zhí) 行“touch /etc/snort/guardian.log”命令,可以建立名為“guardian.log”的文件用來記錄Guardian的日志信息。
打 開“/etc/snort/guardian.conf”文 件,可以查看Guardian默認配置文件的內容。在其中的“Interface”欄中設置網(wǎng)絡接 口,默 認 為“eth0”。 在“LogFile”欄中設置日志文件文件,在“AlertFile”欄中設定Snort報警文件路徑,默 認 為“/var/log/snort/alert”。如果監(jiān)控多個網(wǎng)絡端口,可以根據(jù)需要進行修改,例如“/var/log/snort/INTERFACE_Name /alert”文件等。在“IgnoreFile”欄中設置IP忽略文件路徑,在“TargetFile”欄中設置“guardian.target”文件路徑。在“TimeLimit”欄中設置鎖定時間,默認為86400秒,即經(jīng)過24小時后解除針對特定IP的鎖定。
打 開“/usr/local/bin/guardian_block.sh”文件,可以看到鎖定語句“/sbin/iptables -I INPUT -s $source -I $interface-j DROP”,其中“$source”參數(shù)表示從Snort報警文件中獲得的攻擊者IP,“$interface”參數(shù)表示網(wǎng)絡接口,該語句的作用是拋棄來自該IP的所有數(shù)據(jù)包,實現(xiàn)封鎖。這里使用的“INPUT”鏈,比較適合單機環(huán)境。
對于防火墻主機來說,可以將其修改為“FORWOPRD”鏈,表示對穿過防火墻的數(shù)據(jù)包進行攔截。打開“/usr/local/bin/guardian_unlock.sh”文件,可以看到解鎖語句“/sbin/iptables-D INPUT -s $source -I$interface -j DROP”,其中“-D”參數(shù)表示刪除FILTER表INPUT鏈中內容為“-s $source -I $interface-j DROP”的規(guī)則,即解除對攻擊者IP鎖定。當然可以添加更多過濾規(guī)則。注意,Guardian是由Perl開發(fā)的,需要Perl組件的支持。