suricata学习
快速入门指南
本指南将让您快速开始运行suricata,并且仅关注基础知识。需要更多详细信息,可能查阅更具体地章节。
安装
要安装最新稳定的suricata版本,请按照以下步骤操作:
1
2
3
4
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
sudo apt install suricata jq
jq工具对于显示来自suricata json输出的信息
安装suricata后,您可以检查您拥有的suricata版本以及状态:
1
2
sudo suricata --build-info
sudo systemctl status suricata
基本设置
首先,确认suricata要检查的网卡的ip地址
1
ip addr
然后,使用对应的信息配置suricata:
1
sudo vim /etc/suricata/suricata.yml
其中有很多可能的配置选项,我们专注于设置其中的一些变量和网络接口。
1
2
3
4
5
6
af-packet:
- interface: eth0
cluster-id: 99
cluster-type: cluster_flow
defrag: yes
tpacket-v3: yes
此配置是最新的默认配置。其他还有许多可能的配置选项,这些将会在专门的章节中进行描述,比如高性能设置。
signatures
suricata使用签名来触发告警,因此有必要安装这些告警签名并让它们保持更新。签名也称为规则。使用suricata-update可以获取 更新规则并为suricata提供。
在本指南中,我们只运行并获取ET Open规则集的默认模式:
1
sudo suricata-update
执行完命令后,规则将被安装在/var/lib/suricata/rules/suricata.rules
运行suricata
安装规则后,我们重新启动它
1
sudo systemctl restart suricata
通过检查suricata日志来确保suricata正在运行。
1
sudo tail /var/log/suricata/suricata.log
要查看统计信息,请检查文件stats.log
1
sudo tail -f /var/log/suricata/stats.log
默认情况下,它每8秒更新一次,以显示当前状态。
警报
要测试suricata的IDS功能,最好使用签名进行测试。
ET Open规则中的ID 2100498是专门针对此类测试用例编写的。
alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)
签名背后的语法和逻辑将在其他章节中介绍。这将对其有效载荷中包含内容的任何IP流量发出警报。我们可以手动触发并查看日志中的更新。
1
2
curl http://testmynids.org/uid/index.html
sudo tail -f /var/log/suricata/fast.log
现在应该在日志中看到以下输出:
1
[**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 18.64.122.124:80 -> 172.20.225.138:36848
EVE Json
比起日子来说,更高级的输出是EVE Json输出,对应章节有详细说明。可以用jq工具进行jSON解析。
1
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'
这将显示有关警告的更多详细信息,包括元数据。
1
2
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")|.stats.capture.kernel_packets'
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")'
第一个示例显示内核捕获的数据包数,第二个示例显示了所有统计信息。
安全考虑
suricata是一种安全工具,用于处理不受信任的网络数据,而需要提升系统权限才能获得对应的数据。这需要我们采取额外的安全预防措施。
以root之外的用户身份运行
许多suricata示例显示suricata以root用户身份运行,特别是在实时流量上运行时。suricata需要对底层网络访问,因此需要suricata以root身份启动,但suricata也能够在启动后下拉到非root用户,这会减小suricata中安全漏洞的影响。
创建用户
在以非root用户身份运行之前,你需要创建对应的用户和组。
1
useradd --no-create-home --system --shell /sbin/nologin suricata
文件系统权限
在以非root运行之前,一些目录需要更新权限以允许读取和写入访问权限
1
2
3
4
5
6
7
8
chgrp -R suricata /etc/suricata
chmod -R g+r /etc/suricata
chgrp -R suricata /var/log/suricata
chmod -R g+rw /var/log/suricata
chgrp -R suricata /var/lib/suricata
chmod -R g+srw /var/lib/suricata
chgrp -R suricata /var/run/suricata
chmod -R g+srw /var/run/suricata
将suricata配置为用户suricata
1
2
3
run-as:
user: suricata
group: suricata
启动suricata
在大部分情况下suricata仍然是通过root权限启动。并且在运行时切换到配置的用户。
命令行选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
-h
显示简要的使用概述
-V
显示suricata的版本
-c
配置文件的路径
--include <path>
要包含的其他配置文件,可以指定多个配置文件。"--include xxx --include xxxx"
-T
测试配置文件
-v
通过以下的方式增加suricata应用程序日志记录的详细程度 -v INFO -vv PERF -vvv CONF =vvvv DEBUG
-r <path>
运行pcap离线模式。<path>指定一个目录,该目录中的所有文件都会被处理,按照修改时间的顺序
--pcap-file-continuous
当使用-r命令时,指示应该保持活动状态,直到打断。当你在向-r对应路径新增文件时,suricata会继续处理
--pcap-file-recursive
使用-r命令时,允许便利到子目录,最大深度为255。不能与continuous一起使用
--pcap-file-delete
使用-r命令时,指示pcap文件处理后应该删除
--pcap-file-buffer-size <value>
设置读取缓冲区大小,以加快pcap读取速度
-i <interface>
设置你想要嗅探数据包的网卡,可以用于嗅探多个接口
--pcap[=<device>]
运行在pcap模式,如果没有提供设备名,则将从配置文件的pcap部分中读取
--af-packet[=<device>]
使用AF_PACKET捕获数据包
--af-xdp[=<device>]
使用AF_XDP捕获数据包
-q <queue_id>
内敛运行提供的NFQUEUE队列ID
-s <filename.rules>
指定签名文件,这将会和yaml中设置的规则一起加载
-S <filename.rules>
指定签名文件,加载签名时,将会只是用这里指定的文件
-l <directory>
设置默认的日志目录
-D
后台运行模式
--runmode <runmode>
运行模式:workers、autofp和single
-F <bpf filter file>
使用BPF filter
-k [all|none]
启用校验或者禁用校验
--user=<user>
设置初始化后切换的用户
--group=<group>
设置初始化后切换的用户组
--pidfile <file>
将pid写入对应的文件中
--init-errors-fatal
当加载签名遇到错误时,退出失败
--strict-rule-keywords[all|<keyword>|<keywords>]
配置解析规则时哪些类型的校验警告将被设置未错误
--disable-detection
禁用检测引擎
--disable-hashing
禁用hash算法
--dump-config
转储已经打开的配置
--dump-features
转储提供的特性
--build-info
显示构建信息
--list-app-layer-protos
列出支持的应用层协议
--list-keywords=[all|csv|<kword>]
列出支持的规则关键字
--list-runmodes
列出支持的运行模式
--set <key>=<value>
设置配置值,用于覆盖基本的配置参数
--reject-dev=<device>
发送RST/ICMP的设备
--netmap[=<device>]
使用NETMAP捕获数据包
--pfring[=<device>]
使用PF_RING捕获数据包