怎样在Linux上装配Suricata入侵检测体系?
【51CTO.com快译】由于安全威胁持续不断,配备入侵检测体系(IDS)已成为如今数据中心环境下最主要的要求之一。然而,随着越来越多的服务器将网卡升级到10GB/40GB以太网技术,我们越来越难在大众化硬件上以线速实施计算密集型入侵检测。扩展IDS性能的一个方法就是应用多线程IDS。在这种IDS下,大批耗用CPU资源的深度数据包检讨工作负载并行化处置,分成多个并发任务。这种并行化检讨机制能够充分发扬多核硬件的优势,轻松扩展IDS的处置能力。这方面的两个知名的开源工具就是Suricata()和Bro(https://www.bro.org)。
我在本教程中将演示怎样在Linux服务器上装配和设置Suricata IDS。
在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了,如下所示。
首先,从https://suricata-ids.org/download/下载最新的Suricata源代码,编译代码。截至本文撰稿时,最新版本是2.0.8。
$ wget https://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: 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
当初编译并装配它。
$ make$ sudo make install
Suricata源代码随带默许的设置文件。无妨装配这些默许的设置文件,如下所示。
$ sudo make install-conf
正如你所知,要是没有IDS规矩集,Suricata毫无用处。颇为方便的是,Makefile随带IDS规矩装配选项。想装配IDS规矩,运转上面这个下令即可。
$ sudo make install-rules
上述规矩装配下令会从EmergingThreats.net(https://www.bro.org)装配可用的社区规矩集的最新快照,并将它们存储在/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检讨的当地收集。“!$HOME_NET”(被调配给EXTERNAL_NET)指当地收集以外的任何收集。“XXX_PORTS”表明差别服务所应用的一个或多个端口号。请注意:不管应用哪个端口, Suricata都能自动检测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”这局部用来防范一些利用操作体系的收集堆栈的行为(比如TCP重组)来规避检测的常见攻击。作为一项应对措施,现代IDS想出了所谓的“基于目标的”检测,检讨引擎根据流量的目标操作体系,对检测算法进行微调。因而,假如你知道每个当地主机运转什么操作体系,就能够将该信息提供给Suricata,从而有望提高其检测速度。这时候用到了“host-os-policy“局部。在该例子中,默许的IDS战略是Linux;假如不知道某个IP地址的操作体系信息,Suricata就会运用基于Linux的检讨战略。假如捕捉到192.168.122.0/28和192.168.122.155的流量,Suricata就会运用基于Windows的检讨战略。
host-os-policy:# 这些是Windows机器。windows: [192.168.122.0/28, 192.168.122.155]bsd: []bsd-right: []old-linux: []# 将Linux作为默许战略。linux: [0.0.0.0/0]old-solaris: []solaris: ["::1"]hpux10: []hpux11: []irix: []macos: []vista: []windows2k3: []
在“threading”这局部上面,你能够为差别的Suricata线程指定CPU亲和性(CPU affinity)。默许情形下,CPU亲和性被禁用(“set-cpu-affinity: no”),这意味着Suricata线程将被安排在任何可用的CPU中心上。默许情形下,Suricata会为每个CPU中心创立一个“检测”线程。你能够调整这个行为,只要指定“detect-thread-ratio: N”。这会创立N x M个检测 线程,其中M是指主机上CPU中心的总数。
threading:set-cpu-affinity: nodetect-thread-ratio: 1.5
就上述线程设置而言,Suricata会创立1.5 x 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支持多种运转形式。运转形式决定了差别的线程怎样用于IDS。上面这个下令列出了所有可用的运转形式。
$ sudo /usr/local/bin/suricata --list-runmodes
Suricata应用的默许运转形式是autofp(代表“自动流绑定负载均衡形式”)。在这种形式下,来自每一路流的数据包被调配给单一的检测线程。流被调配给了未处置数据包数量最少的线程。
最后,无妨启动Suricata,看看它的实际运转情形。
$ sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal
在这个例子中,我们监控一个8核体系上的收集接口eth0。如上所示,Suricata创立了13个数据包处置线程和3个治理线程。数据包处置线程包括1个PCAP数据包捕捉线程和12个检测线程(相当于8 x 1.5)。这意味着,一个捕捉线程捕捉的数据包经负载均衡处置后,变成了IDS面前的12个检测线程。治理线程是一个流治理器和两个计数器/统计相关线程。
上面是Suricata进程的线程视图(由htop描绘)。
Suricata检测日记存储在/var/log/suricata目录下。
$ tail -f /var/log/suricata/fast.log04/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:4699704/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:4631704/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 IDS。不像单线程Snort IDS,Suricata轻松就能得益于采用多线程技术的多核硬件。想最大限度地提高性能、扩大检测覆盖范围,Suricata方面需要进行大批的定制工作。Suricata人员精心维护在线维基(https://redmine.openinfosecfoundation.org/projects/suricata/wiki),假如你想把Suricata部署在自己的环境中,我强烈建议你认真看一下。
你目前在应用Suricata吗?假如是的话,欢迎交流经验和心得!
英文:How to install Suricata intrusion detection system on Linux
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】
【编纂推荐】
转载自:https://netsecurity.51cto.com/art/201509/490966.htm
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《怎样在Linux上装配Suricata入侵检测体系?》
本文地址:http://www.xiupu.net/archives-4618.html
关注公众号:
微信赞赏
支付宝赞赏