如何在 Linux 系統上安裝 Suricata 入侵檢測系統
這個教程里,我會向大家演示如何在 Linux 伺服器上安裝和配置 Suricata 入侵檢測系統。
在 Linux 上安裝 Suricata IDS
讓我們從源文件來構建 Suricata,但在此之前,需要按如下所示先安裝幾個依賴包。
在 Debian, Ubuntu 或者 Linux Mint 操作系統上安裝依賴包
$ 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 操作系統上安裝依賴包
$ 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
一旦將所有依賴包安裝完畢,我們就可以繼續安裝 Suricata 了。
首先從 http://suricata-ids.org/download/ 下載 Suricata 源代碼,然後構建它。撰寫這篇文章的時候,其最新版本號為 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
以下是配置信息的樣例。
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: yes
libnss 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
現在可以編譯、安裝了。
$ make
$ sudo make install
Suricata 源代碼帶有默認的配置文件。按照如下方法安裝這些默認配置文件即可。
$ sudo make install-conf
正如你所料,如果沒有IDS規則集的話,Suricata 什麼用也沒有。幸好 Makefile 為我們提供了 IDS 規則集的安裝選項。安裝方法如下。
$ sudo make install-rules
以上的規則安裝命令會從 EmergingThreats.net 上下載可用的社區規則集快照,並且將其存儲在 /etc/suricata/rules 目錄下。
首次配置 Suricata IDS
現在到了配置 Suricata 的時候了。配置文件的位置是 /etc/suricata/suricata.yaml。參照以下命令,用文本編輯器打開這個文件。
$ sudo vi /etc/suricata/suricata.yaml
文件中有一些運行所需的基本配置。
為default-log-dir
關鍵字指定 Suricata 日誌文件所在的位置。
default-log-dir: /var/log/suricata/
在vars
部分下方,你會發現幾項對 Suricata 來說很重要變數。HOME_NET
變數需要指定 Suricata 檢查的網路。被分配給 EXTERNAL_NET
變數的 !$HOME_NET
代表除本地網路之外的其他網路。XXX_PORTS
變數用來辨別不同服務所用到的埠號。需要注意的是無論使用什麼埠,Suricata 都可以自動檢測 HTTP 流量。所以是不是正確指定埠就顯得沒那麼重要了。
vars:
HOME_NET: "[192.168.122.0/24]"
EXTERNAL_NET: "!$HOME_NET"
HTTP_PORTS: "80"
SHELLCODE_PORTS: "!80"
SSH_PORTS: 22
host-os-policy
部分用於防禦利用操作系統網路棧的自身行為來逃避檢測的一些知名攻擊手段(例如:TCP reassembly)。作為對策,通過針對目標操作系統而對檢測引擎演算法進行微調,現代 IDC 提供了「基於目標」的檢測手段。因此,如果你知道某台主機運行了什麼操作系統的話,將這個信息提供給 Suricata 就可以大幅提高檢測的成功率。這就是 host-os-policy
存在的意義。本例中,默認的 IDC 策略是 Linux 系統。如果針對某個 IP 地址沒有指定操作系統信息,Suricata 會默認應用基於 Linux 系統的檢測策略。如下,當捕獲到對 192.168.122.0/28 和 192.168.122.155通訊時,Suricata 就會應用基於 Windows 系統的檢測策略。
host-os-policy:
# These are Windows machines.
windows: [192.168.122.0/28, 192.168.122.155]
bsd: []
bsd-right: []
old-linux: []
# Make the default policy Linux.
linux: [0.0.0.0/0]
old-solaris: []
solaris: ["::1"]
hpux10: []
hpux11: []
irix: []
macos: []
vista: []
windows2k3: []
在 threading
部分下,你可以為不同的 Suricata 線程指定 CPU 關聯。默認狀態下,CPU 關聯 是被禁止使用的 (set-cpu-affinity: no
),這意味著 Suricata 會分配其線程到所有可用的 CPU 核心上。Suricata 會默認為每一個 CPU 核心創建一個檢測線程。你可以通過指定 detect-thread-ratio: N
來調整此行為。此處會創建 N*M 個檢測線程,M 代表 CPU 核心總數。
threading:
set-cpu-affinity: no
detect-thread-ratio: 1.5
通過以上對線程的設置,Suricata 會創建 1.5*M 個檢測線程,M 是系統的 CPU 核心總數。
如果你想對 Suricata 配置有更多的了解,可以去翻閱默認配置文件。裡邊配有有大量的注釋以供你清晰理解。
使用 Suricata 進行入侵監控
現在是時候讓 Suricata 跑起來了,但在這之前還有一個步驟需要去完成。
當你使用 pcap 捕獲模式的時候,強烈建議關閉 Suricata 監聽網卡上的任何的包卸載(例如 LRO/GRO)功能。這些功能會干擾包的實時捕獲行為。
按照以下方法關閉 eth0 介面的 LRO/GRO 功能。
$ sudo ethtool -K eth0 gro off lro off
這裡要注意,在使用某些網卡的情況下,你會看到如下警告信息。忽略它們就行了,這些信息只不過告訴你你的網卡不支持 LRO 功能而已。
Cannot change large-receive-offload
Suricata 支持許多運行模式。運行模式決定著 IDC 會使用何種線程。以下命令可以查看所有 可用的運行模式。
$ sudo /usr/local/bin/suricata --list-runmodes
Suricata 使用的默認運行模式是 autofp( auto flow pinned load balancing 的縮寫)。這個模式下,來自某一個流的包會被分配到一個單獨的檢測線程中。這些流會根據未被處理的包的最低數量來分配相應的線程。
最後,讓我們將 Suricata 運行起來,看看它表現如何。
$ sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal
本例中,我們在一個8核心系統中監控 eth0 網路介面。如上所示,Suricata 創建了13個包處理線程和3個管理線程。包處理線程中包括一個 PCAP 包捕獲線程,12個檢測線程(由8*1.5得出)。這表示 IDS 內的1個包捕獲線程均衡負載到12個檢測線程中。管理線程包括1個流管理和2個計數/統計相關線程。
以下是一個關於Suricata處理的線程截圖(由 htop 繪製)。
Suricata 檢測日誌存儲在 /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
日誌也可以提供 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}}
總結
這篇教程中,我為大家演示了如何在一台多核 Linux 伺服器上安裝 Suricata 入侵檢測系統。不同於單線程的 Snort IDS ,Suricata 可以很容易的從多核硬體的多進程特性所帶來的好處中獲益。定製 Suricata 來最大化其效能和檢測範圍是一個很好的主意。Suricata 的粉絲們維護著一個 在線 Wiki,如果你打算將 Suricata 部署到你的環境中,我強烈建議你去那兒取取經。
如果你現在已經開始使用 Suricata 了的話,把你的經驗也分享出來吧。
via: http://xmodulo.com/install-suricata-intrusion-detection-system-linux.html
作者:Dan Nanni 譯者:mr-ping 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive