centos7中安装suricata

由于不断的安全威胁,入侵检测系统(IDS)已成为当今数据中心环境中最关键的要求之一。但是,随着越来越多的服务器将其NIC升级到10GB / 40GB以太网,以线速在商用硬件上实施计算密集型入侵检测变得越来越困难。扩展IDS性能的一种方法是多线程IDS,其中CPU密集型深度数据包检查工作负载并行化为多个并发任务。这种并行检查可以利用多核硬件轻松扩展IDS吞吐量。这个领域的两个着名的开源工作是Suricata和Bro。

在本教程中,我将演示如何在Linux服务器上安装和配置Suricata IDS。

官网: https://suricata-ids.org/

官网安装教程: https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Suricata_Installation

centos官网安装教程: https://redmine.openinfosecfoundation.org/projects/suricata/wiki/CentOS_Installation

一安装教程

操作系统:Centos7

安装版本:suricata6.0.0

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-7.repo
[root@suricata~]# yum clean all
[root@suricata~]# yum makecache

3)更新系统

[root@m01ly~]# yum -y update

1603261907715

4)安装epel

[root@m01ly ~]# yum install epel-release

1603261947721

5)安装相关依赖

[root@m01ly ~]# 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 PyYAML libmaxminddb-devel rustc cargo \
lz4-devel

1603262215276

6)开始安装suricata

这里尝试安装官网最新6.0版本

https://suricata-ids.org/download/

1603262265601

下载安装包,进行解压配置安装:

[root@m01ly ~]# wget https://www.openinfosecfoundation.org/download/suricata-6.0.0.tar.gz
[root@m01ly ~]# tar -xvzf suricata-6.0.0.tar.gz
[root@m01ly ~]# cd suricata-6.0.0
[root@m01ly suricata-6.0.0]# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua

1603262683253

之后再编译安装

[root@m01ly suricata-6.0.0]#make
[root@m01ly suricata-6.0.0]#sudo make install

1603878275030

[root@m01ly suricata-6.0.0]#sudo ldconfig

之后进行一些配置:

(1)自动为您创建/设置所有必需的目录和suricata.yaml:

[root@m01ly suricata-6.0.0]#make install-conf

(2) 自动配置规则集

[root@m01ly suricata-6.0.0]#make install-rules

将执行常规的“ make install”,然后它将自动从Suricata的“ Emerging Threats ”中下载并设置最新规则集

(3)将结合上述所有内容(install-conf和install-rules)-并为您提供可以运行(配置和设置)的Suricata

[root@m01ly suricata-6.0.0]#make install-full

安装完成后,安装目录为:/etc/suricata,配置文件为/etc/suricata/suricata.yaml

二 基础配置

按照官方基础配置一步步就可。注意图中的cp指令一块不需要操作,6.0版本自动会复制。1603693471544

(1) 创建目录

sudo mkdir /var/log/suricata
sudo mkdir /etc/suricata
[root@ids0001 suricata-5.0.0]# cd etc
[root@ids0001 etc]# ls
classification.config  Makefile.am  reference.config    suricata.logrotate.in  suricata.service.in
Makefile               Makefile.in  suricata.logrotate  suricata.service
[root@ids0001 etc]# sudo cp classification.config /etc/suricata
[root@ids0001 etc]# sudo cp reference.config /etc/suricata

1603855808097

./configure && make && make install-conf

需要一段时间,最后结果:

1603878960614

自动下载和设置从正在出现的威胁可Suricata最新的规则集。

./configure && make && make install-rules

需要又一段时间,最后结果:

./configure && make && make install-full

2.1 基础配置

配置文件位于**/etc/suricata/suricata.yaml**。用VIM打开

[root@m01ly ~]# cd /etc/suricata/
[root@m01ly suricata]# vim suricata.yaml

(1)配置要拦截的流量设置

在“vars”部分下,您将找到Suricata使用的几个重要变量。

“HOME_NET”应指向Suricata要检查的本地网络。

“!$ HOME_NET”(分配给EXTERNAL_NET)是指除本地网络之外的任何其他网络。

“XXX_PORTS”表示不同服务使用的端口号。请注意,无论使用何种端口,Suricata都可以自动检测HTTP流量。因此,正确指定HTTP_PORTS变量并不重要。

先设置HOME_NET与EXTERNAL_NET,推荐HOME_NET填写内网网段,EXTERNAL_NET设置为any

注意如果HOME_NET设置了any,EXTERNAL_NET设置!HOME_NET的话会报错,如果HOME_NET设置了内网地址,EXTERNAL_NET设置为!$HOME_NET的话,有些内网之间的告警就无法匹配到

1603708931016

(2)指定日志文件目录

1603708864025

(3) host-os-policy 配置,在文件百分之60处。

“host-os-policy”部分用于防御一些众所周知的攻击,这些攻击利用操作系统的网络堆栈(例如,TCP重组)的行为来逃避检测。作为对策,现代IDS提出了所谓的“基于目标”的检查,其中检查引擎基于流量的目标操作系统微调其检测算法。因此,如果您知道正在运行的OS个别本地主机,您可以将该信息提供给Suricata以提高其检测率。

1603709095833

(4)线程

在“线程”部分下,您可以为不同的Suricata线程指定CPU关联。默认情况下,禁用CPU关联(“set-cpu-affinity:no”),这意味着将在任何可用的CPU核心上调度Suricata线程。默认情况下,Suricata将为每个CPU核心创建一个“检测”线程。您可以通过指定“detect-thread-ratio:N”来调整此行为。这将创建N * M个检测线程,其中M是主机上CPU核心的总数。

使用上述线程设置,Suricata将创建1.5 * M检测线程,其中M是系统上CPU核心的总数。

2.2 启动

2.2.1 关闭 LRO / GRO

当您使用pcap捕获模式时,强烈建议关闭Suricata正在侦听的NIC上的任何数据包offloead功能(例如,LRO / GRO),因为这些功能可能会干扰实时数据包捕获。

以下是如何在网络接口eth0上关闭LRO / GRO:

[root@m01ly ~]# sudo ethtool -K ens33 gro off lro off

2.2.2 测试是否配置成功:

[root@m01ly ~]# suricata -T

1603697120852

2.2.3 运行模式

Suricata支持多种运行模式。运行模式确定不同线程如何用于IDS。以下命令列出了所有可用的runmodes

[root@m01ly ~]# sudo /usr/local/bin/suricata --list-runmodes

Suricata使用的默认运行模式是autofp(代表“自动流固定负载平衡”)。在此模式下,来自每个不同流的数据包将分配给单个检测线程。将流分配给具有最少数量的未处理数据包的线程。

2.2.4 启动suricata

启动命令:sudo suricata -c 启动文件 -i 网卡名称 –init-errors-fatal:例如下面

[root@suricata ~]# sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml    -i ens33   -s /etc/suricata/rules/test.rules
[root@m01ly ~]# sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal

1603709547401

后台启用:

[root@m01ly ~]# sudo nohup /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal &

2.2.5 查看日志

Suricata检测日志存储在/ var / log / suricata目录中。

其中fast.log表示命中规则的日志。

[root@m01ly ~]# tail -f /var/log/suricata/fast.log

1603713977753

为了便于导入,日志也以json格式提供:

[root@m01ly ~]# tail -f /var/log/suricata/eve.json

1603714049656

三 规则管理

3.1 规则介绍

3.1.1 规则集

suricata系统自带的规则主要是et/open 规则,目前开源免费的就是et/open、pt规则、sslbl规则,其余的需要授权码才能更新,如下:

  1. Suricata作者写的一个规则生成的脚本:生成用于应用和服务识别的规则。
  2. 瑞士的非盈利组织abuse.ch维护的项目:他们维护的这个黑名单是标识恶意软件与僵尸网络相关的,列表里面提供了有关恶意软件与僵尸网络的ssl证书列表,根据证书特征来匹配流量中的威胁。他们提供了一个Suricata的规则,可以根据黑名单检测网络中的恶意连接。
  3. PT的Suricata规则库:根据恶意软件、黑客的网络通讯协议以及漏洞的poc去编写,里面包含了近几年常见cve漏洞的检测,更新十分及时。
  4. Emerging Threats维护的规则:这个就比较熟悉了,我们一般常用的就是这个规则库。很强大的规则库,规则数量有20000+ 。官方规则解释

3.1.2 规则管理工具

规则管理,就是便于对suricata的规则进行统一的管理,比如更新、启用、停用等。相关的规则管理工具有很多,简单列举几个:

3.2 规则更新

suricata规则更新可以使用suricata-update来进行更新, 输入suricata-update 会自动进行规则更新,显示当前已经更新与启用了多少规则

3.2.1 更新规则库

[root@m01ly ~]#suricata-update

最近的一次更新结果如下,规则总数为28178条:

1603697024470

规则更新后,所有的规则都会保存在/var/lib/suricata/rules/suricata.rules这一个文件中,这个时候就必须修改suricata配置文件suricata.yaml的default-rule-path与rule-files来指定规则文件到这个规则上:

default-rule-path: /var/lib/suricata/rules
rule-files:
  - suricata.rules

3.2.2 更新规则源

(1)更新规则源:

[root@m01ly ~]#suricata-update update-sources
[root@m01ly ~]#suricata-update

1603700557845

(2)列出更新源列表 suricata-update list-sources

1603697274919

每个规则集都有一个前缀为“vendor”的名称,后跟一个集名称。例如,iosf的traffic id规则集称为“iosf/trafficid”。

3.2.3 启用某个规则集

要启用ptresearch/attackdetection的规则集:

[root@m01ly ~]#suricata-update enable-source ptresearch/attackdetection
[root@m01ly ~]#suricata-update

1603700718529

3.2.4 禁用规则

使用Suricata-update更新规则时,默认是将所有规则合并在一个规则文件中:/var/lib/suricata/rules/suricata.rules。

1603705089676

Suricata-update有个 –no-merge参数,使用这个参数更新规则,规则不会进行合并,是以独立的文件存在于文件夹下。但是在管理规则的时候很不方便,必须要自己管理Suricata引入的规则。但是在禁用规则的时候,也可以使用suricata-update去配置disable.conf禁用的规则。不推荐使用 –no-merge参数更新规则。指定一个文件让suricata-update合并输出会更简单。在suricata.yaml中修改default-rule-path和rule-files。

1603708490301

通过suricata-udpate可以很好的控制规则,例如要禁用某一个规则,直接新建/etc/suricata/disable.conf 文件,然后在里面填入sid,每次更新的话会自动禁止该规则

默认情况下 suricata-update 将所有规则合并到一个文件“/var/lib/suricata/rules”/苏里克塔规则”.

要启用默认禁用的规则,请使用 /etc/suricata/enable.conf

2019401                   # enable signature with this sid
group:emerging-icmp.rules # enable this rulefile
re:trojan                 # enable all rules with this string

类似地,要禁用规则,请使用 /etc/suricata/disable.conf :

2019401                   # disable signature with this sid
group:emerging-info.rules # disable this rulefile
re:heartbleed             # disable all rules with this string

更新这些文件后,

[root@m01ly ~]#suricata-update --disable-conf /etc/suricata/disable.conf

重新运行 suricata-update 再一次:

[root@m01ly ~]#sudo suricata-update

最后重新开始测量。

3.5 规则源的CRUD

3.5.1 列出我们使用的规则源

[root@m01ly ~]# suricata-update list-enabled-sources

1603701147686

3.5.2 更新规则源

[root@m01ly ~]#suricata-update update-sources

1603700557845

3.5.3 删除某个规则源

[root@m01ly ~]#suricata-update remove-source et/pro

3.5.4 启动某个规则源

启用ptresearch/attackdetection的规则集:

[root@m01ly ~]#suricata-update enable-source ptresearch/attackdetection

1603700718529

3.6 规则的CRUD

https://suricata-update.readthedocs.io/en/latest/update.html#rule-matching

4 一个实例

/var/lib/suricata/rules/下创建一个test.rules,内容为:

alert http any any -> any any (msg:"hit baidu.com...";content:"baidu"; reference:url, www.baidu.com;)

修改配置文件/etc/suricata/suricata.yaml,再规则下添test.rules

#启动suricata
#sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml    -i eth0

1603858949410

5 suricata 分析包功能

分析单个包:suricata -r pcap文件名 -l 自定义输出位置

分析文件夹里所以的包:suricata -r pcap文件夹名 -l 自定义输出位置

sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -r /tmp/test.cap -l  /var/log/suricata/cap

1603955429308

1603955464136

6 卸载suricata

[root@ids0001 ~]# find / -name suricata 
/run/suricata
/etc/suricata
/root/suricata-5.0.0/python/suricata
/root/suricata-5.0.0/suricata-update/suricata
/var/lib/suricata
/var/log/suricata
/usr/bin/suricata
/usr/lib/python2.7/site-packages/suricata
/usr/share/doc/suricata
/usr/share/suricata
/usr/share/kibana/x-pack/plugins/siem/public/components/timeline/body/renderers/suricata
/usr/local/bin/suricata
/usr/local/etc/suricata
/usr/local/lib/python2.7/site-packages/suricata
/usr/local/share/suricata
/usr/local/share/doc/suricata
/usr/local/var/log/suricata
/usr/local/var/run/suricata
/usr/local/var/lib/suricata
/home/supper-user/suricata-5.0.0/src/suricata
/home/supper-user/suricata-5.0.0/src/.libs/suricata
/home/supper-user/suricata-5.0.0/python/suricata
/home/supper-user/suricata-5.0.0/python/lib/suricata
/home/supper-user/suricata-5.0.0/suricata-update/suricata
/home/supper-user/suricata-5.0.0/suricata-update/lib/suricata

1603877103161

sudo rm -rf /run/suricata \
/etc/suricata \
/root/suricata-5.0.0/python/suricata \
/root/suricata-5.0.0/suricata-update/suricata \
/var/lib/suricata \
/var/log/suricata \
/usr/bin/suricata \
/usr/lib/python2.7/site-packages/suricata \
/usr/share/doc/suricata \
/usr/share/suricata \
/usr/share/kibana/x-pack/plugins/siem/public/components/timeline/body/renderers/suricata \
/usr/local/bin/suricata \
/usr/local/etc/suricata \
/usr/local/lib/python2.7/site-packages/suricata \
/usr/local/share/suricata \
/usr/local/share/doc/suricata \
/usr/local/var/log/suricata \
/usr/local/var/run/suricata \
/usr/local/var/lib/suricata \
/home/supper-user/suricata-5.0.0/src/suricata \
/home/supper-user/suricata-5.0.0/src/.libs/suricata \
/home/supper-user/suricata-5.0.0/python/suricata \
/home/supper-user/suricata-5.0.0/python/lib/suricata \
/home/supper-user/suricata-5.0.0/suricata-update/suricata \
/home/supper-user/suricata-5.0.0/suricata-update/lib/suricata

7 error

错误1 eth0网卡不存在

1603876350581

9:25 - <Warning> - [ERRCODE: SC_ERR_INVALID_ARGUMENT(13)] - eve-log dns version not found, forcing it to version 2
28/10/2020 -- 09:09:25 - <Warning> - [ERRCODE: SC_ERR_INVALID_ARGUMENT(13)] - eve-log dns version not found, forcing it to version 2
28/10/2020 -- 09:09:33 - <Warning> - [ERRCODE: SC_ERR_SYSCALL(50)] - Failure when trying to set feature via ioctl for 'eth0': Operation not supported (95)
28/10/2020 -- 09:09:33 - <Notice> - all 2 packet processing threads, 4 management threads initialized, engine started.

错误2 内存不够

1604628379983

root@ids0001 ~]# suricata -T6/11/2020 -- 02:05:11 - <Info> - Running suricata under test mode6/11/2020 -- 02:05:11 - <Notice> - This is Suricata version 6.0.0 RELEASE running in SYSTEM mode6/11/2020 -- 02:05:21 - <Error> - [ERRCODE: SC_ERR_MEM_ALLOC(1)] - SCRealloc failed: Cannot allocate memory, while trying to allocate 67108864 bytes6/11/2020 -- 02:05:22 - <Error> - [ERRCODE: SC_ERR_FATAL(171)] - Out of memory. The engine cannot be initialized.Exiting...

重启解决

问题三:内存不够

1604629087216

6/11/2020 -- 02:16:45 - <Notice> - This is Suricata version 6.0.0 RELEASE running in SYSTEM mode
6/11/2020 -- 02:16:54 - <Warning> - [ERRCODE: SC_ERR_SYSCALL(50)] - Failure when trying to set feature via ioctl for 'eth0': Operation not supported (95)
6/11/2020 -- 02:16:54 - <Warning> - [ERRCODE: SC_ERR_INITIALIZATION(45)] - Unix socket: UNIX socket bind(/usr/local/var/run/suricata/suricata-command.socket) error: No space left on device
6/11/2020 -- 02:16:54 - <Error> - [ERRCODE: SC_ERR_FATAL(171)] - Unable to create unix command socket

8所有命令

1.安装必要库
(1)检查是否安装了jansson,这是Suricata输出的日志文件eve.json必备库
可参考:彻底解决Suricata Eve-log support not compiled in 问题
(2)安装pfring
2.安装Suricata
https://suricata-ids.org/download/下载安装包
(1)解压安装包
tar -zxf suricata-4.1.0.tar.gz
(2)编译和安装
./configure -enable-pfring --with-libpfring-includes=/opt/pfring/include --with-libpfring-libraries=/opt/pfring/lib -with-libjansson libraries=/usr/lib64/ --with-libjansson-includes=/usr/include
make
make install
(3)创建必要的目录,这些目录都是suricata.yaml配置文件中写好的路径,但不会主动创建,需要手动创建
mkdir /usr/local/etc/suricata/ #配置文件目录
cp suricata-4.1.0/classification.config /usr/local/etc/suricata/
cp suricata-4.1.0/reference.config /usr/local/etc/suricata/
cp suricata-4.1.0/suricata.yaml /usr/local/etc/suricata/
cp suricata-4.1.0/threshold.config /usr/local/etc/suricata/
mkdir /usr/local/var/run/suricata
mkdir /usr/local/var/log/suricata/ #suricata默认日志输出位置
(4)离线安装规则
在https://rules.emergingthreats.net/open/,中下载emerging.rules.tar.gz
tar -zxf emerging.rules.tar.gz
rm -rf /usr/local/share/suricata/rules
mv rules /usr/local/share/suricata/
(5)运行suricata
/usr/local/bin/suricata --pfring-int=em1 --pfring-cluster-id=99 --pfring-cluster-type=cluster_flow -c /usr/local/etc/suricata/suricata.yaml -D
(6)输出的日志的类型可以在suricata.yaml中进行设置

参考

Suricata默认规则集的目的与用途 nice

suricata-update的官方文档: 规则工具的官网文档 https://www.osgeo.cn/suricata/rule-management/suricata-update.html

Suricata规则介绍、以及使用suricata-update做规则管理

Suricata IDS 入门 — 规则详解 比较详细

suricata官方6.0 文档

规则的CRUD

suricata命令行参数

suricata命令行参数2

suricata笔记 不错,较全面

suricata较完整的功能列表 后续继续学习

文章目录
  1. 一安装教程
  2. 二 基础配置
    1. 2.1 基础配置
    2. 2.2 启动
      1. 2.2.1 关闭 LRO / GRO
      2. 2.2.2 测试是否配置成功:
      3. 2.2.3 运行模式
      4. 2.2.4 启动suricata
      5. 2.2.5 查看日志
  3. 三 规则管理
    1. 3.1 规则介绍
      1. 3.1.1 规则集
      2. 3.1.2 规则管理工具
    2. 3.2 规则更新
      1. 3.2.1 更新规则库
      2. 3.2.2 更新规则源
      3. 3.2.3 启用某个规则集
      4. 3.2.4 禁用规则
    3. 3.5 规则源的CRUD
      1. 3.5.1 列出我们使用的规则源
      2. 3.5.2 更新规则源
      3. 3.5.3 删除某个规则源
      4. 3.5.4 启动某个规则源
    4. 3.6 规则的CRUD
  4. 4 一个实例
  5. 5 suricata 分析包功能
  6. 6 卸载suricata
  7. 7 error
  8. 参考