董君奇 發表於 2015-9-11 09:55:42

如何在Linux上安装Suricata入侵检测系统?

<p>本篇文章将演示如何在Linux服务器上安装和配置Suricata IDS。</p>
<p><strong>在Linux上安装Suricata IDS</strong></p>
<p>不妨用源代码构建Suricata。你先要安装几个所需的依赖项,如下所示。</p>
<p>在Debian、Ubuntu或Linux Mint上安装依赖项</p>
<p>$ 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<br />在CentOS、Fedora或RHEL上安装依赖项</p>
<p>$ 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<br />一旦你安装了所有必需的程序包,现在可以安装Suricata了,如下所示。</p>
<p>首先,从http://suricata-ids.org/download/下载最新的Suricata源代码,编译代码。截至本文撰稿时,最新版本是2.0.8。<br />这是配置的示例输出结果。</p>
<p align="center"><img id="theimg" onclick="window.open(this.src)" alt="" baiduimageplusrect="null" baiduimageplusstatus="2" src="https://img.jbzj.com/file_images/article/201509/201591195808868.jpg?201581195821" /></p>
<p>现在编译并安装它。</p>
<p>$ make<br />$ sudo make install<br />Suricata源代码随带默认的配置文件。不妨安装这些默认的配置文件,如下所示。</p>
<p>$ sudo make install-conf<br />正如你所知,要是没有IDS规则集,Suricata毫无用处。颇为方便的是,Makefile随带IDS规则安装选项。想安装IDS规则,运行下面这个命令即可。</p>
<p>$ sudo make install-rules<br />上述规则安装命令会从EmergingThreats.net(https://www.bro.org)安装可用的社区规则集的最新快照,并将它们存储在/etc/suricata/rules下。</p>
<p align="center"><img id="theimg" onclick="window.open(this.src)" alt="" baiduimageplusrect="null" baiduimageplusstatus="2" src="https://img.jbzj.com/file_images/article/201509/201591195019914.jpg?201581195055" /></p>
<p>首次配置Suricata IDS</p>
<p>现在就可以配置Suricata了。配置文件位于/etc/suricata/suricata.yaml。使用文本编辑工具打开文件,以便编辑。</p>
<p></p>
<div class="codeText">$ sudo vi /etc/suricata/suricata.yaml<br /></div>
<p></p>
<p>下面是一些基本的设置,供你开始入门。</p>
<p>&ldquo;default-log-dir&rdquo;关键字应该指向Suricata日志文件的位置。</p>
<p>default-log-dir: /var/log/suricata/<br />在&ldquo;vars&rdquo;这部分下面,你会找到Suricata使用的几个重要变量。&ldquo;HOME_NET&rdquo;应该指向由Suricata检查的本地网络。&ldquo;!$HOME_NET&rdquo;(被分配给EXTERNAL_NET)指本地网络以外的任何网络。&ldquo;XXX_PORTS&rdquo;表明不同服务所使用的一个或多个端口号。请注意:不管使用哪个端口, Suricata都能自动检测HTTP流量。所以,正确指定HTTP_PORTS变量并不是很重要。</p>
<p>vars:<br />HOME_NET: &quot;&quot;<br />EXTERNAL_NET: &quot;!$HOME_NET&quot;<br />HTTP_PORTS: &quot;80&quot;<br />SHELLCODE_PORTS: &quot;!80&quot;<br />SSH_PORTS: 22<br />&ldquo;host-os-policy&rdquo;这部分用来防范一些利用操作系统的网络堆栈的行为(比如TCP重组)来规避检测的常见攻击。作为一项应对措施,现代IDS想出了所谓的&ldquo;基于目标的&rdquo;检测,检查引擎根据流量的目标操作系统,对检测算法进行微调。因而,如果你知道每个本地主机运行什么操作系统,就可以将该信息提供给Suricata,从而有望提高其检测速度。这时候用到了&ldquo;host-os-policy&ldquo;部分。在该例子中,默认的IDS策略是Linux;如果不知道某个IP地址的操作系统信息,Suricata就会运用基于Linux的检查策略。如果捕获到192.168.122.0/28和192.168.122.155的流量,Suricata就会运用基于Windows的检查策略。</p>
<p>host-os-policy:<br /># 这些是Windows机器。<br />windows: <br />bsd: []<br />bsd-right: []<br />old-linux: []<br /># 将Linux作为默认策略。<br />linux: <br />old-solaris: []<br />solaris: [&quot;::1&quot;]<br />hpux10: []<br />hpux11: []<br />irix: []<br />macos: []<br />vista: []<br />windows2k3: []<br />在&ldquo;threading&rdquo;这部分下面,你可以为不同的Suricata线程指定CPU亲和性(CPU affinity)。默认情况下,CPU亲和性被禁用(&ldquo;set-cpu-affinity: no&rdquo;),这意味着Suricata线程将被安排在任何可用的CPU核心上。默认情况下,Suricata会为每个CPU核心创建一个&ldquo;检测&rdquo;线程。你可以调整这个行为,只要指定&ldquo;detect-thread-ratio: N&rdquo;。这会创建N x M个检测 线程,其中M是指主机上CPU核心的总数。</p>
<p>threading:<br />set-cpu-affinity: no<br />detect-thread-ratio: 1.5<br />就上述线程设置而言,Suricata会创建1.5 x M个检测线程,其中M是系统上CPU核心的总数。</p>
<p>想了解关于Suricata配置的更多信息,你可以阅读默认的配置文件本身,为了便于理解,加有大量注释。</p>
<p>使用Suricata执行入侵检测</p>
<p>现在可以试着运行Suricata了。在启动它之前,还有一个步骤要完成。</p>
<p>如果你使用pcap捕获模式,强烈建议关闭Suricata侦听的那个网卡上的任何数据包卸载功能(比如LRO/GRO),因为那些功能可能会干扰数据包实时捕获。</p>
<p>下面介绍如何关闭网络接口eth0上的LRO/GRO:</p>
<p>$ sudo ethtool -K eth0 gro off lro off<br />请注意:视使用的网卡而定,你可能会看到下列警示信息,可以忽视这个信息。它只是意味着你的网卡不支持LRO。</p>
<p>Cannot change large-receive-offload<br />Suricata支持多种运行模式。运行模式决定了不同的线程如何用于IDS。下面这个命令列出了所有可用的运行模式。</p>
<p>$ sudo /usr/local/bin/suricata --list-runmodes<br />Suricata使用的默认运行模式是autofp(代表&ldquo;自动流绑定负载均衡模式&rdquo;)。在这种模式下,来自每一路流的数据包被分配给单一的检测线程。流被分配给了未处理数据包数量最少的线程。</p>
<p>最后,不妨启动Suricata,看看它的实际运行情况。</p>
<p align="left">$ sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal<br /></p>
<p align="center"><img id="theimg" onclick="window.open(this.src)" alt="" baiduimageplusrect="null" baiduimageplusstatus="2" src="https://img.jbzj.com/file_images/article/201509/201591195205572.jpg?201581195216" /></p>
<p>在这个例子中,我们监控一个8核系统上的网络接口eth0。如上所示,Suricata创建了13个数据包处理线程和3个管理线程。数据包处理线程包括1个PCAP数据包捕获线程和12个检测线程(相当于8 x 1.5)。这意味着,一个捕获线程捕获的数据包经负载均衡处理后,变成了IDS面前的12个检测线程。管理线程是一个流管理器和两个计数器/统计相关线程。</p>
<p>下面是Suricata进程的线程视图(由htop描绘)。</p>
<p>Suricata检测日志存储在/var/log/suricata目录下。</p>
<p>$ tail -f /var/log/suricata/fast.log<br />04/01/2015-15:47:12.559075 [**] SURICATA TCPv4 invalid checksum [**] {TCP} 172.16.253.158:22 -&gt; 172.16.253.1:46997<br />04/01/2015-15:49:06.565901 [**] SURICATA TCPv4 invalid checksum [**] {TCP} 172.16.253.158:22 -&gt; 172.16.253.1:46317<br />04/01/2015-15:49:06.566759 [**] SURICATA TCPv4 invalid checksum [**] {TCP} 172.16.253.158:22 -&gt; 172.16.253.1:46317<br />为了易于导入,还有JSON格式的日志:</p>
<p>$ tail -f /var/log/suricata/eve.json<br />{&quot;timestamp&quot;:&quot;2015-04-01T15:49:06.565901&quot;,&quot;event_type&quot;:&quot;alert&quot;,&quot;src_ip&quot;:&quot;172.16.253.158&quot;,&quot;src_port&quot;:22,&quot;dest_ip&quot;:&quot;172.16.253.1&quot;,&quot;dest_port&quot;:46317,&quot;proto&quot;:&quot;TCP&quot;,&quot;alert&quot;:{&quot;action&quot;:&quot;allowed&quot;,&quot;gid&quot;:1,&quot;signature_id&quot;:2200074,&quot;rev&quot;:1,&quot;signature&quot;:&quot;SURICATA TCPv4 invalid checksum&quot;,&quot;category&quot;:&quot;&quot;,&quot;severity&quot;:3}}</p>
<p>{&quot;timestamp&quot;:&quot;2015-04-01T15:49:06.566759&quot;,&quot;event_type&quot;:&quot;alert&quot;,&quot;src_ip&quot;:&quot;172.16.253.158&quot;,&quot;src_port&quot;:22,&quot;dest_ip&quot;:&quot;172.16.253.1&quot;,&quot;dest_port&quot;:46317,&quot;proto&quot;:&quot;TCP&quot;,&quot;alert&quot;:{&quot;action&quot;:&quot;allowed&quot;,&quot;gid&quot;:1,&quot;signature_id&quot;:2200074,&quot;rev&quot;:1,&quot;signature&quot;:&quot;SURICATA TCPv4 invalid checksum&quot;,&quot;category&quot;:&quot;&quot;,&quot;severity&quot;:3}}</p>
<p>结束语</p>
<p>我在本教程中演示了如何在多核Linux服务器上安装一个Suricata IDS。不像单线程Snort IDS,Suricata轻松就能得益于采用多线程技术的多核硬件。想最大限度地提高性能、扩大检测覆盖范围,Suricata方面需要进行大量的定制工作。</p>
<p>你目前在使用Suricata吗?如果是的话,欢迎交流经验和心得!</p>
頁: [1]
查看完整版本: 如何在Linux上安装Suricata入侵检测系统?