Suricata for CentOS-5

入侵偵測/入侵防護系統 (IDS/IPS)

suricata-1.4.7 for CentOS-5

English Version

suricata.jpeg

在我們學校我們有一台 Fedora 19 伺服器當路由器使用 iptables MASQUERADE 使電腦教室的電腦可以連線到網際網路。因為電腦教室的電腦都使用 Windows 作業系統,難免一些電腦會中毒。當這發生時這路由器之 IP 會被我們 ISP封住。這發生很多次了而是一個麻煩因為一些課程學生需要上網際網路。

掃毒工做是很大的工做因為我們電腦教室有一百多個電腦。掃毒完畢就請 ISP 解除封住,但是沒有幾秒鐘這路由器的 IP 又被封住了。

我想用一個 IDS/IPS 可能會有一些幫助。但我害怕這樣的想法,因為我以為只有專家才有能力這樣做的! 無論如何,不知道我在做什麼,我就安裝 suricata 了:

yum install suricata

我很驚訝,沒有想到 Fedora 19 完全支援 suricata。安裝 suricata 時,同時也安裝了所有 suricata 所需要的檔案。看了一些有關 suricata 的資料 (請參考: https://redmine.openinfosecfoundation.org/projects/suricata/wiki/index) 我很快就設定 Suricata 了。然後就沒有問題的執行 suricata 了。我不敢相信安裝 suricata 是這麼的容易!

過幾天之後,我想將 suricata 安裝在我們網路的閘道/路由器伺服器應該是一件很好的主意。有一些老師上網時,有時候他們用的電腦也會中毒,所以哪些電腦的 IP 也會被 ISP 封住了 (當然是 Windows 電腦)。但我遇到一個問題:我們網路的閘道/路由器的作業系統是 CentOS-5。CentOS-5沒有支援 suricata。真的很大的問題!

我所讀的文章有關如何在 CentOS-5 安裝 suricata 會列出所需要的檔案。一些需要的檔案在 CentOS-5 rpm 庫有,一些在 Epel rpm 庫有。其它的需要自己從原始碼編譯和安裝。這是很有名的「./configure && make && make install」。

如你要在 CentOS-5 安裝 suricata,你需要安裝 Epel repo:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

除了你真的沒有別的方法之外,我不建議用從原始碼編譯和安裝這個過程。這是最好的方法在你伺服器亂丟垃圾。

怎麼辦?

所需要的檔案而在 CentOS-5 rpm 庫和 Epel rpm 庫 不存在,到網際網路去找。我很幸運因為我找到所有需要檔案的原始碼 rpm。一些我在 http://rules.emergingthreatspro.com/projects/emergingrepo/SRPMS 找到,一些在 http://rpm.pbone.net/ 找到。

長話短說,在 CentOS-5 我成功的建了 suricata 的 rpm。這些檔案我放在我的 ftp 伺服器 ftp://cc2.savs.hcc.edu.tw/CentOS/suricata/ 可以下載。支援 rpm 檔案在 ftp://cc2.savs.hcc.edu.tw/CentOS/suricata/files/

安裝:

Suricata 需要以下 rpm 檔。先安裝從我 ftp 伺服器下載的檔案。其它的,當你安裝 suricata 時也會被安裝當作相依檔案。注意:我建的 rpm 檔沒有 gpg 簽名所以要安裝時需要 --nogpgcheck 選項。.

rpm 檔案名稱

來源
file-5.04-4.2.CentOS5.i686.rpm my ftp server
file-devel-5.04-4.2.CentOS5.i686.rpm my ftp server
libcap-ng-0.6.4-3.1.CentOS5.i686.rpm my ftp server
libnetfilter_queue-0.0.17-2.CentOS5.i686.rpm my ftp server
libnet epel
libnfnetlink epel
libpcap centos
pcre centos
prelude centos
libyaml centos

安裝了列表中前四個檔案後,現在可以安裝 suricata-1.4.7-1.CentOS5.i686.rpm:

yum localinstall --nogpgcheck suricata-1.4.7-1.CentOS5.i686.rpm

檢查 suricata 是否正常的運作:

suricata -c /etc/suricata/suricata.yaml -i eth0

過幾分鐘之後按 ^C 停止 suricata。去察看在 /etc/log/suricata 的紀錄檔。如果紀錄檔有內容,這表示 suricata 有在捕獲網包。suricata 為  IDS 是正常的運作。

下一步是下載並解壓規則檔案到 /etc/suricata/rules/emerging (從 notes.fedora 指示):

wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar -xz -C /etc/suricata/rules/emerging --strip-components=1 -f emerging.rules.tar.gz

然後編輯並設定 /etc/suricata/suricata.yaml:

nfq:
# 將下面四列取消註釋 符號,然後將 mode: accept 改為 repeat。 這是為 IPS 模式
mode: repeat
repeat-mark: 1
repeat-mask: 1
route-queue: 2


取消註釋符號: copy-mode: ips
取消註釋符號: copy-iface: eth1

- file:
enabled: yes
     # 將 no 改為 yes
filename: /var/log/suricata.log

default-rule-path: /etc/suricata/rules/emerging

HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
;     # 改為你網路的 IP

編輯 /etc/sysconfig/suricata 並更改 OPTIONS 為:

OPTIONS="-D -q 0"

執行::

service suricata start

如果沒有錯誤訊息出現,這表示 suricata 已成功的在 IPS 模式運作並在等待從 iptables 送來的網包。下一步是要設 iptables 將網包傳送給 suricata 來處理。

因為這是閘道/路由器伺服器,編輯 /etc/sysconfig/iptables 並在合適的位置加入:

-A FORWARD -j NFQUEUE --queue-num 0

重新啟動 iptables:

service iptables restart

再檢查在 /var/log/suricata 的紀錄檔。紀錄檔,特別是 stats.log,的內容應該有新項目。

電腦啟動時確定 suricata 也會執行,請執行下面的指令:

chkconfig suricata on

使 suricata 有效率,必須常常更新規則。為了這個,我寫了一個短而簡單的 bash script 來做更新規則的工作。我也把這小程式放在我的 ftp 伺服器,命名為 SRupdate (Suricata Rules update)。

所有規則檔案的行動 (action) 都是警告 (alert)。所以當一個網路包相符一個規則,suricata 只發佈一個警告。 意思是說,雖然 suricata 現在運行為 IPS,但是效果仍然是一個 IDS 一樣。

要確保 suricata 真正功能為 IPS,你需要更改一些規則的行動 (action) 從警告 (alert) 改為丟棄 (drop)。這樣,當一個網路包與規則相符, 這個網路包會被丟棄。但要手動的方式更改 alert 為 drop 你需要苦力和很多的時間。例如,emerging-malware.rules 有 898 要改的規則, emerging-trojan 有 2097 和 emerging-worm-rules 有 11。即使你使用 oinkmaster 來管理規則,設定 oinkmaster 需要很多時間。

因為我感興趣的是防止病毒/惡意軟件/木馬/蠕蟲從我們網路外出或進入我們的網絡,我決定只專注於上面提到的 3 個規則檔案。但我不知道哪些規則的  action 的 alert 改為 drop。為了使事情簡單一些,我決定只對 3 個規則檔案的 action 將所有 alert 改為 drop。為此,我寫了一個簡單的 c 程式來做這一個。我已經把這個檔案,alert2drop.c 和對應的 RSupdate 放在 alert2drop 目錄裡。下載 alert2drop.c 之後,你需要編譯:

gcc -O2 alert2drop.c -o alert2drop

我建議把這個可執行檔案,alert2drop 和 RSupdate,都放在 / root/ bin 裡,這樣的這兩個檔案都在環境路徑。

告誡:在 IPS 模式,如果 suricata,無論出於何種原因而死掉,就無法跟伺服器連線。連 ssh 也不能連線。雖然這可能是一個遙遠的可能性,但隨時準備以防萬一總是好的。所以我用 cron 每十分鐘檢查 suricata 是否還活著。如 suricata 死掉就啟動。我把這檔案放在我的 ftp 伺服器,命名為 ChkStoppedCron。把這個檔案放在 /root/bin 然後 chmod to 755。當然,你還是要設定你的 cron。

蔡由世神父
2014/01/10
更新:2014/01/25