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