不多說,直接上干貨!
為什么,要寫這篇論文?
是因為,目前科研的我,正值研三,致力於網絡安全、大數據、機器學習研究領域!
論文方向的需要,同時不局限於真實物理環境機器實驗室的攻防環境、也不局限於真實物理機器環境實驗室的大數據集群平台。在此,為了需要的博友們,能在自己虛擬機里(我這里是CentOS6.5)來搭建部署snort+barnyard2+base的入侵檢測系統。分享與交流是進步的階梯!
同時,本人還嘗試過在Ubuntu14.04里搭建這入侵檢測系統的環境。同時,還嘗試過在win7\win10里搭建這入侵檢測系統的環境。
同時,也歡迎做報警數據方向的煙酒僧留言評論加好友交流。歡迎指正!謝謝。
見Suricata的官網
https://suricata.readthedocs.io/en/latest/install.html
一、准備工作
安裝CentOS-6.5-x86_64-bin-DVD1.iso





DEVICE=eth0 HWADDR=00:0C:29:7F:EF:EC TYPE=Ethernet UUID=26d0171e-d510-4f6f-b098-1ee55e36313a ONBOOT=static NM_CONTROLLED=yes BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" IPADDR=192.168.80.86 BCAST=192.168.80.2 GATEWAY=192.168.80.2 NETMASK=255.255.255.0 DNS1=192.168.80.2 DNS2=119.29.29.29
Suricata介紹
Suricata是一款高性能的網絡IDS、IPS和網絡安全監控引擎。它是由the Open Information Security Foundation開發,是一款開源的系統。軟件的源代碼可以通過http://suricata-ids.org/獲得。
隨着安全威脅的不斷發生,入侵檢測系統(IDS)在如今的數據中心環境中顯得尤為必要。然而,隨着越來越多的服務器將他們的網卡升級到10GB/40GB以太網,對如此線路上的硬件進行計算密集型的入侵檢測越來越困難。其中一種提升入侵檢測系統性能的途徑是多線程入侵檢測系統,它將 CPU 密集型的深度包檢測工作並行的分配給多個並發任務來完成。這樣的並行檢測可以充分利用多核硬件的優勢來輕松提升入侵檢測系統的吞吐量。在這方面有兩個知名的開源項目,分別是 Suricata 和 Bro。
為此,我本篇博客呢,給大家分享的是,Suricata。
suricata的官網
https://suricata-ids.org/

Suricata的安裝官網(基於CentOS)
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/CentOS_Installation

注意,以下操作,都是在root用戶下進行。
1. 安裝wget
[root@suricata~]# yum install wget -y
2. 更換源
更換成阿里雲源,更新系統、下載軟件速度快
[root@suricata~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@suricata~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
[root@suricata~]# yum clean all
[root@suricata~]# yum makecache
3.更新系統
[root@suricata~]# yum -y update
4.安裝epel源
[root@suricata~]# yum install -y epel-release
5、在 CentOS, Fedora 或者 RHEL 操作系統上安裝依賴包
[root@suricata ~]# 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
或者
sudo yum -y install gcc libpcap-devel pcre-devel libyaml-devel file-devel \ zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar make \ libnetfilter_queue-devel lua-devel
一旦將所有依賴包安裝完畢,我們就可以繼續安裝 Suricata 了。
Suricata 源代碼的下載和編譯安裝
首先從 http://suricata-ids.org/download/ 下載 Suricata 源代碼,然后構建它。撰寫這篇文章的時候,其最新版本號為suricata-4.0.0.tar.gz 。

但是,官方文檔里,這個suricata-3.1.tar.gz版本是測試過的,所以,我這里也是安裝這個版本;

我這里是
[root@suricata ~]# wget http://www.openinfosecfoundation.org/download/suricata-3.1.tar.gz

然后,再
[root@suricata ~]# tar -xvzf suricata-3.1.tar.gz
再
cd suricata-3.1

然后,再

[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua

然后,再
[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# make

然后,再

然后,再
[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# sudo ldconfig

以下是配置信息的樣例。
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
Suricata 源代碼帶有默認的配置文件。按照如下方法安裝這些默認配置文件即可。
[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# make install-conf

正如你所料,如果沒有IDS規則集的話,Suricata 什么用也沒有。幸好 Makefile 為我們提供了 IDS 規則集的安裝選項。
安裝方法如下
[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# make install-rules

以上的規則安裝命令會從 EmergingThreats.net 上下載可用的社區規則集快照,並且將其存儲在 /etc/suricata/rules 目錄下。

[root@suricata rules]# pwd /etc/suricata/rules [root@suricata rules]# ls app-layer-events.rules emerging-activex.rules emerging-icmp.rules emerging-scada.rules emerging-web_server.rules smtp-events.rules botcc.portgrouped.rules emerging-attack_response.rules emerging-imap.rules emerging-scan.rules emerging-web_specific_apps.rules stream-events.rules botcc.rules emerging-chat.rules emerging-inappropriate.rules emerging-shellcode.rules emerging-worm.rules suricata-1.2-prior-open.yaml BSD-License.txt emerging.conf emerging-info.rules emerging-smtp.rules gen-msg.map suricata-1.3-enhanced-open.txt ciarmy.rules emerging-current_events.rules emerging-malware.rules emerging-snmp.rules gpl-2.0.txt suricata-1.3-etpro-etnamed.yaml classification.config emerging-deleted.rules emerging-misc.rules emerging-sql.rules http-events.rules suricata-1.3-open.yaml compromised-ips.txt emerging-dns.rules emerging-mobile_malware.rules emerging-telnet.rules LICENSE tor.rules compromised.rules emerging-dos.rules emerging-netbios.rules emerging-tftp.rules modbus-events.rules unicode.map decoder-events.rules emerging-exploit.rules emerging-p2p.rules emerging-trojan.rules rbn-malvertisers.rules dns-events.rules emerging-ftp.rules emerging-policy.rules emerging-user_agents.rules rbn.rules drop.rules emerging-games.rules emerging-pop3.rules emerging-voip.rules reference.config dshield.rules emerging-icmp_info.rules emerging-rpc.rules emerging-web_client.rules sid-msg.map [root@suricata rules]#
然后,再
[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# make install-full

接着,繼續
官網
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Basic_Setup

按照這官網一步一步,來


[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# mkdir /var/log/suricata mkdir: cannot create directory `/var/log/suricata': File exists [root@suricata suricata-3.1]# mkdir /etc/suricata mkdir: cannot create directory `/etc/suricata': File exists [root@suricata suricata-3.1]# cp classification.config /etc/suricata cp: overwrite `/etc/suricata/classification.config'? y [root@suricata suricata-3.1]# cp reference.config /etc/suricata cp: overwrite `/etc/suricata/reference.config'? y [root@suricata suricata-3.1]# cp suricata.yaml /etc/suricata cp: overwrite `/etc/suricata/suricata.yaml'? y [root@suricata suricata-3.1]#
接下來,是

[root@suricata suricata-3.1]# ./configure && make && make install-conf
接下來,是

[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# ./configure && make && make install-rules
接下來,是

[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# ./configure && make && make install-full
即,進入
首次配置 Suricata IDS
現在到了配置 Suricata 的時候了。配置文件的位置是 /etc/suricata/suricata.yaml。參照以下命令,用文本編輯器打開這個文件。

[root@suricata suricata-3.1]# pwd /root/suricata-3.1 [root@suricata suricata-3.1]# vim /etc/suricata/suricata.yaml
下面是一些基本的設置,供你開始入門。
以下是/etc/suricata/suricata.yaml的默認配置文件。
suricata.yaml (一款高性能的網絡IDS、IPS和網絡安全監控引擎)默認配置文件(圖文詳解)
可以看看這篇博客:
Suricata配置文件說明
文件中有一些運行所需的基本配置。
為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.80.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.80.0/28 和 192.168.80.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.yaml (一款高性能的網絡IDS、IPS和網絡安全監控引擎)默認配置文件(圖文詳解)
可以看看這篇博客:
Suricata配置文件說明
以上是編譯安裝的整個過程。
注意,對於這個/etc/suricata/suricata.yaml ,我這篇博客下來,並不是默認的配置文件哈。大家可以以后自己學會了,強大了來做修改。
在本博文中,我為大家演示了如何在一台多核 Linux 服務器(基於CentOS6.5)上安裝 Suricata 入侵檢測系統。
不同於單線程的 Snort IDS ,Suricata 可以很容易的從多核硬件的多進程特性所帶來的好處中獲益。定制 Suricata 來最大化其效能和檢測范圍是一個很好的主意。Suricata 的粉絲們維護着一個 在線 Wiki,如果你打算將 Suricata 部署到你的環境中,我強烈建議你去那兒取取經。
如果你現在已經開始使用 Suricata 了的話,把你的經驗也分享出來吧。
至此結束!歡迎交流!
參考
如何在 Linux 系統上安裝 Suricata 入侵檢測系統(https://linux.cn/article-6985-1.html#4_1498)
