如何在Linux上安裝Suricata入侵檢測(cè)系統(tǒng)?
譯文【51CTO.com快譯】由于安全威脅持續(xù)不斷,配備入侵檢測(cè)系統(tǒng)(IDS)已成為如今數(shù)據(jù)中心環(huán)境下最重要的要求之一。然而,隨著越來(lái)越多的服務(wù)器將網(wǎng)卡升級(jí)到10GB/40GB以太網(wǎng)技術(shù),我們?cè)絹?lái)越難在大眾化硬件上以線(xiàn)速實(shí)施計(jì)算密集型入侵檢測(cè)。擴(kuò)展IDS性能的一個(gè)方法就是使用多線(xiàn)程IDS。在這種IDS下,大量耗用CPU資源的深度數(shù)據(jù)包檢查工作負(fù)載并行化處理,分成多個(gè)并發(fā)任務(wù)。這種并行化檢查機(jī)制可以充分發(fā)揚(yáng)多核硬件的優(yōu)勢(shì),輕松擴(kuò)展IDS的處理能力。這方面的兩個(gè)知名的開(kāi)源工具就是Suricata(http://suricata-ids.org)和Bro(https://www.bro.org)。
我在本教程中將演示如何在Linux服務(wù)器上安裝和配置Suricata IDS。
在Linux上安裝Suricata IDS
不妨用源代碼構(gòu)建Suricata。你先要安裝幾個(gè)所需的依賴(lài)項(xiàng),如下所示。
在Debian、Ubuntu或Linux Mint上安裝依賴(lài)項(xiàng)
$ sudo apt-get install wget build-essential libpcre3-dev libpcre3-dbg automake autoconf libtool libpcap-dev libnet1-dev libyaml-dev zlib1g-dev libcap-ng-dev libjansson-dev
在CentOS、Fedora或RHEL上安裝依賴(lài)項(xiàng)
$ sudo yum install wget libpcap-devel libnet-devel pcre-devel gcc-c++ automake autoconf libtool make libyaml-devel zlib-devel file-devel jansson-devel nss-devel
一旦你安裝了所有必需的程序包,現(xiàn)在可以安裝Suricata了,如下所示。
首先,從http://suricata-ids.org/download/下載最新的Suricata源代碼,編譯代碼。截至本文撰稿時(shí),最新版本是2.0.8。
$ wget http://www.openinfosecfoundation.org/download/suricata-2.0.8.tar.gz $ tar -xvf suricata-2.0.8.tar.gz $ cd suricata-2.0.8 $ ./configure --sysconfdir=/etc --localstatedir=/var
這是配置的示例輸出結(jié)果。
Suricata Configuration:
AF_PACKET support: yes
PF_RING support: no
NFQueue support: no
NFLOG support: no
IPFW support: no
DAG enabled: no
Napatech enabled: no
Unix socket enabled: yes
Detection enabled: yeslibnss support: yes
libnspr support: yes
libjansson support: yes
Prelude support: no
PCRE jit: yes
LUA support: no
libluajit: no
libgeoip: no
Non-bundled htp: no
Old barnyard2 support: no
CUDA enabled: no
現(xiàn)在編譯并安裝它。
$ make $ sudo make install
Suricata源代碼隨帶默認(rèn)的配置文件。不妨安裝這些默認(rèn)的配置文件,如下所示。
$ sudo make install-conf
正如你所知,要是沒(méi)有IDS規(guī)則集,Suricata毫無(wú)用處。頗為方便的是,Makefile隨帶IDS規(guī)則安裝選項(xiàng)。想安裝IDS規(guī)則,運(yùn)行下面這個(gè)命令即可。
$ sudo make install-rules
上述規(guī)則安裝命令會(huì)從EmergingThreats.net(https://www.bro.org)安裝可用的社區(qū)規(guī)則集的最新快照,并將它們存儲(chǔ)在/etc/suricata/rules下。
首次配置Suricata IDS
現(xiàn)在就可以配置Suricata了。配置文件位于/etc/suricata/suricata.yaml。使用文本編輯工具打開(kāi)文件,以便編輯。
$ sudo vi /etc/suricata/suricata.yaml
下面是一些基本的設(shè)置,供你開(kāi)始入門(mén)。
“default-log-dir”關(guān)鍵字應(yīng)該指向Suricata日志文件的位置。
default-log-dir: /var/log/suricata/
在“vars”這部分下面,你會(huì)找到Suricata使用的幾個(gè)重要變量。“HOME_NET”應(yīng)該指向由Suricata檢查的本地網(wǎng)絡(luò)。“!$HOME_NET”(被分配給EXTERNAL_NET)指本地網(wǎng)絡(luò)以外的任何網(wǎng)絡(luò)。“XXX_PORTS”表明不同服務(wù)所使用的一個(gè)或多個(gè)端口號(hào)。請(qǐng)注意:不管使用哪個(gè)端口, Suricata都能自動(dòng)檢測(cè)HTTP流量。所以,正確指定HTTP_PORTS變量并不是很重要。
vars: HOME_NET: "[192.168.122.0/24]" EXTERNAL_NET: "!$HOME_NET" HTTP_PORTS: "80" SHELLCODE_PORTS: "!80" SSH_PORTS: 22
“host-os-policy”這部分用來(lái)防范一些利用操作系統(tǒng)的網(wǎng)絡(luò)堆棧的行為(比如TCP重組)來(lái)規(guī)避檢測(cè)的常見(jiàn)攻擊。作為一項(xiàng)應(yīng)對(duì)措施,現(xiàn)代IDS想出了所謂的“基于目標(biāo)的”檢測(cè),檢查引擎根據(jù)流量的目標(biāo)操作系統(tǒng),對(duì)檢測(cè)算法進(jìn)行微調(diào)。因而,如果你知道每個(gè)本地主機(jī)運(yùn)行什么操作系統(tǒng),就可以將該信息提供給Suricata,從而有望提高其檢測(cè)速度。這時(shí)候用到了“host-os-policy“部分。在該例子中,默認(rèn)的IDS策略是Linux;如果不知道某個(gè)IP地址的操作系統(tǒng)信息,Suricata就會(huì)運(yùn)用基于Linux的檢查策略。如果捕獲到192.168.122.0/28和192.168.122.155的流量,Suricata就會(huì)運(yùn)用基于Windows的檢查策略。
host-os-policy: # 這些是Windows機(jī)器。 windows: [192.168.122.0/28, 192.168.122.155] bsd: [] bsd-right: [] old-linux: [] # 將Linux作為默認(rèn)策略。 linux: [0.0.0.0/0] old-solaris: [] solaris: ["::1"] hpux10: [] hpux11: [] irix: [] macos: [] vista: [] windows2k3: []
在“threading”這部分下面,你可以為不同的Suricata線(xiàn)程指定CPU親和性(CPU affinity)。默認(rèn)情況下,CPU親和性被禁用(“set-cpu-affinity: no”),這意味著Suricata線(xiàn)程將被安排在任何可用的CPU核心上。默認(rèn)情況下,Suricata會(huì)為每個(gè)CPU核心創(chuàng)建一個(gè)“檢測(cè)”線(xiàn)程。你可以調(diào)整這個(gè)行為,只要指定“detect-thread-ratio: N”。這會(huì)創(chuàng)建N x M個(gè)檢測(cè) 線(xiàn)程,其中M是指主機(jī)上CPU核心的總數(shù)。
threading: set-cpu-affinity: no detect-thread-ratio: 1.5
就上述線(xiàn)程設(shè)置而言,Suricata會(huì)創(chuàng)建1.5 x M個(gè)檢測(cè)線(xiàn)程,其中M是系統(tǒng)上CPU核心的總數(shù)。
想了解關(guān)于Suricata配置的更多信息,你可以閱讀默認(rèn)的配置文件本身,為了便于理解,加有大量注釋。
使用Suricata執(zhí)行入侵檢測(cè)
現(xiàn)在可以試著運(yùn)行Suricata了。在啟動(dòng)它之前,還有一個(gè)步驟要完成。
如果你使用pcap捕獲模式,強(qiáng)烈建議關(guān)閉Suricata偵聽(tīng)的那個(gè)網(wǎng)卡上的任何數(shù)據(jù)包卸載功能(比如LRO/GRO),因?yàn)槟切┕δ芸赡軙?huì)干擾數(shù)據(jù)包實(shí)時(shí)捕獲。
下面介紹如何關(guān)閉網(wǎng)絡(luò)接口eth0上的LRO/GRO:
$ sudo ethtool -K eth0 gro off lro off
請(qǐng)注意:視使用的網(wǎng)卡而定,你可能會(huì)看到下列警示信息,可以忽視這個(gè)信息。它只是意味著你的網(wǎng)卡不支持LRO。
Cannot change large-receive-offload
Suricata支持多種運(yùn)行模式。運(yùn)行模式?jīng)Q定了不同的線(xiàn)程如何用于IDS。下面這個(gè)命令列出了所有可用的運(yùn)行模式。
$ sudo /usr/local/bin/suricata --list-runmodes
Suricata使用的默認(rèn)運(yùn)行模式是autofp(代表“自動(dòng)流綁定負(fù)載均衡模式”)。在這種模式下,來(lái)自每一路流的數(shù)據(jù)包被分配給單一的檢測(cè)線(xiàn)程。流被分配給了未處理數(shù)據(jù)包數(shù)量最少的線(xiàn)程。
最后,不妨啟動(dòng)Suricata,看看它的實(shí)際運(yùn)行情況。
$ sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal
在這個(gè)例子中,我們監(jiān)控一個(gè)8核系統(tǒng)上的網(wǎng)絡(luò)接口eth0。如上所示,Suricata創(chuàng)建了13個(gè)數(shù)據(jù)包處理線(xiàn)程和3個(gè)管理線(xiàn)程。數(shù)據(jù)包處理線(xiàn)程包括1個(gè)PCAP數(shù)據(jù)包捕獲線(xiàn)程和12個(gè)檢測(cè)線(xiàn)程(相當(dāng)于8 x 1.5)。這意味著,一個(gè)捕獲線(xiàn)程捕獲的數(shù)據(jù)包經(jīng)負(fù)載均衡處理后,變成了IDS面前的12個(gè)檢測(cè)線(xiàn)程。管理線(xiàn)程是一個(gè)流管理器和兩個(gè)計(jì)數(shù)器/統(tǒng)計(jì)相關(guān)線(xiàn)程。
下面是Suricata進(jìn)程的線(xiàn)程視圖(由htop描繪)。
Suricata檢測(cè)日志存儲(chǔ)在/var/log/suricata目錄下。
$ tail -f /var/log/suricata/fast.log 04/01/2015-15:47:12.559075 [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46997 04/01/2015-15:49:06.565901 [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46317 04/01/2015-15:49:06.566759 [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46317
為了易于導(dǎo)入,還有JSON格式的日志:
$ tail -f /var/log/suricata/eve.json
{"timestamp":"2015-04-01T15:49:06.565901","event_type":"alert","src_ip":"172.16.253.158","src_port":22,"dest_ip":"172.16.253.1","dest_port":46317,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2200074,"rev":1,"signature":"SURICATA TCPv4 invalid checksum","category":"","severity":3}}
{"timestamp":"2015-04-01T15:49:06.566759","event_type":"alert","src_ip":"172.16.253.158","src_port":22,"dest_ip":"172.16.253.1","dest_port":46317,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2200074,"rev":1,"signature":"SURICATA TCPv4 invalid checksum","category":"","severity":3}}
結(jié)束語(yǔ)
我在本教程中演示了如何在多核Linux服務(wù)器上安裝一個(gè)Suricata IDS。不像單線(xiàn)程Snort IDS,Suricata輕松就能得益于采用多線(xiàn)程技術(shù)的多核硬件。想最大限度地提高性能、擴(kuò)大檢測(cè)覆蓋范圍,Suricata方面需要進(jìn)行大量的定制工作。Suricata人員精心維護(hù)在線(xiàn)維基(https://redmine.openinfosecfoundation.org/projects/suricata/wiki),如果你想把Suricata部署在自己的環(huán)境中,我強(qiáng)烈建議你認(rèn)真看一下。
你目前在使用Suricata嗎?如果是的話(huà),歡迎交流經(jīng)驗(yàn)和心得!
英文:How to install Suricata intrusion detection system on Linux
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】