Suricata是一个高性能的网络ID、IP和网络安全监控引擎。它是开源的,由一个社区经营的非营利基金会开放信息安全基金会(OISF)拥有。Suricata由OISF开发
官网地址:https://suricata-ids.org/
Suricata 4.1.8 on CentOS 7
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
下载地址: https://suricata-ids.org/download/
1.tar -xvzf suricata-4.1.8.tar.gz
2.cd suricata-4.1.8
3. ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua
make
sudo make install
sudo ldconfig
make install-conf
make install-rules
make install-full
配置suricata.yaml目录 : /etc/suricata/suricata.yaml
规则suricata.rules目录: /var/lib/suricata/rules/suricata.rules
check the available interface cards:
ifconfig
Instead of wlan0, you can enter the interface card of your preference.
./suricata -c /etc/suricata/suricata.yaml -i wlan0 --init-errors-fatal
To see the engine is working and receives and inspects traffic
cd /var/log/suricata
tail -f stats.log eve.json//or tail -n 50 stats.log
a) Rules
Suricata基于规则检测和控制数据流量,所有规则的配置文件保存在
rules目录内。
b) Log
Log目录来存放各种日志文件
c) Suricata.yaml
Suricata最重要的配置文件,用户配置网络、接口、日志文件和规则
文件等。通过#控制开启或关闭配置。
d) Classification.config
对告警信息的描述配置文件,使管理员可以区分事件。
e) Reference.config
设置外部攻击识别系统引用的UR
a) Suricata.yaml配置
i. Suricata网络配置
配置Suricata监控的网络地址,支持变量配置,变量名为大写。
ii. 配置规则开启或关闭
设置rules、classification.config、reference.config
及rhreshold.config文件路径,调整规则的应用和关闭。
iii. 设置输出
输出设置有三个部分:
输出状态:配置全局输出。
输出日志:配置具体输出日志的开启、格式和路径等。
输出方式:配置日志输出的具体方式,显示器、文件或系统日志。
iv. 基本监听设置
基本监听接口及数据包捕获配置。
v. 应用层协议配置
配置应用层协议解析,启用部分有‘yes’,‘no’‘detection-only
’三个选项,分别对应:检测并解析、不开启、只检测不解析
vi. 高级配置
run-as:是指可以运行suricata的用户及用户组
coredump:配置suricata核心转储配置
host-mode:设置suricata设置是监听设备还是路由器。
unix-command:开启通过unix命令使用外部工具连接suricata
获取信息或修改配置。
magic-file:magic文件路径
engine-analysis:开启配置后,各模块会打印模块配置到默认日志内。
pcre:为pcre支持递归和匹配
host-os-plicy:配置检测设备系统及ip地址,增加suricata数据
检测、处理、还原的能力。
defrag:数据包碎片整理
flow:设置流最大可用内存及紧急模式等。
flow-timeouts:通过配置各协议时间限制流在内存中的时间。
stream:stream模块可以跟踪tcp连接。该模块包含stream-tarcking
和reassembly-engine
detect:检测模块配置,检测模块为内部组生成签名,并可以通过
修改配置文件去使用签名和管理内存、cpu的使用。
profiling:性能分析设置。
nfq:nfqueue设置
nflog:设置nflog。
netmap:netmap支持设置
pfring:使用pf_ring库增强libcap的抓包性能,执行抓包。配置
网卡,支持负载均衡
ipfw :FreeBSD上防火墙
napatech:napatech网卡支持设置
mpipe:
cuda:
b) Rules配置
Rules内的足则配置支持三种方式:proofpoint规则、snort规则
和自定义规则。同时支持使用Oinkmaster规则管理系统。
Snort Rules
1. 规则头: 包含规则动作、协议、源IP地址,源端口,方向,目的IP,目的端口。
规则动作:alert(使用选择的报警方法生成一个警报,然后记录这个包)
Log(记录包)
Pass(丢弃包)
Activate(告警并激活另一条dynamic规则)
Dynamic(保持空闲直到被一条activeta规则激活。)
Drop(阻止并记录数据包)
Reject(阻止并记录数据包,tcp协议包发送tcp reset,udp发送
icmp端口不可带信息到主机)(只阻止不记录)
协议:snort暂只支持TCP、UDP、ICMP和IP协议,Suricata增加HTTP,FTP,
TLS(这包括SSL),SMB和DNS应用层协议ip地址:仅支持ip及掩码设置,
不支持域名解析,多个ip地址是可以使用‘[ ]’,各ip或ip段之间使用‘,’
分隔。否定运算符用‘!’表示。‘any’表示匹配任意ip。方向:‘->’表示数据
流的方向,双向符号以‘<>’表示。端口:‘any’表示任何端口,静态端口直接
在ip后接端口号,端口否定操作符用‘!’表示。端口范围以‘:’表示,位于
端口号左边表示小于或等于端口号,右侧为大于或等于端口号。Activate和
dynamic规则:activates除包含一个activates选择域外和alert一样,
dynamic包含一个不同的选择域activated_by和count域。Activate规则
内的activates后接独立数字,dynamic规则内的activated_by后接相同的
数字就将两个规则进行了关联。count后接的数字表示dynamic规则被触发后
记录的数据包数。例:
activate icmp any any -> any any (activated :111)
dynamic tcp any any -> any 23 (activated_by: 111; count:20)
2. 规则选项:规则选项部分包含报警消息内容和要检查的包的具体部分。
规则选项包含在规则头后的‘( )’内,各规则选项以‘;’分割,规则选项
和参数间用‘:’.
snort规则关键字:
msg - 在报警和包日志中打印一个消息。
logto - 把包记录到用户指定的文件中而不是记录到标准输出。
ttl - 检查ip头的ttl的值。
tos 检查IP头中TOS字段的值。
id - 检查ip头的分片id值。
ipoption 查看IP选项字段的特定编码。
fragbits 检查IP头的分段位。
dsize - 检查包的有效净荷大小的值 。净荷:指用户原始数据。
flags -检查tcp flags的值。
seq - 检查tcp顺序号的值。
ack - 检查tcp应答(acknowledgement)的值。
window -测试TCP窗口域的特殊值。
itype - 检查icmp type的值。
icode - 检查icmp code的值。
icmp_id - 检查ICMP ECHO ID的值。
icmp_seq - 检查ICMP ECHO 顺序号的值。
content - 在包的净荷中搜索指定的样式。
content-list 在数据包载荷中搜索一个模式集合。
offset - content选项的修饰符,设定开始搜索的位置 。
depth - content选项的修饰符,设定搜索的最大深度。
nocase - 指定对content字符串大小写不敏感。
session - 记录指定会话的应用层信息的内容。
rpc - 监视特定应用/进程调用的RPC服务。
resp - 主动反应(切断连接等)。
react - 响应动作(阻塞web站点)。
reference - 外部攻击参考ids。
sid - snort规则id。
rev - 规则版本号。
classtype - 规则类别标识。
priority - 规则优先级标识号。
uricontent - 在数据包的URI部分搜索一个内容。
tag - 规则的高级记录行为。
ip_proto - IP头的协议字段值。
sameip - 判定源IP和目的IP是否相等。
stateless - 忽略状态的有效性。
regex - 通配符模式匹配。
distance - 强迫关系模式匹配所跳过的距离。
within - 强迫关系模式匹配所在的范围。
byte_test - 数字模式匹配。
byte_jump - 数字模式测试和偏移量调整。
flow:这个选项要和TCP流重建联合使用。它允许规则只应用到流量流的
某个方向上。这将允许规则只应用到客户端或者服务器端。
常见关键字:
msg:在报警和包日志中打印消息。格式:(msg :”str”)
reference:允许规则引用外部工具识别系统。格式:(reference:cve,can-2000-15;)
gid:用于表示当某一出发规则的事件发生时,标识是snort的哪一部分生成。
格式:(gid:10000)
sid:用来做规则的唯一标识。格式:(sid:10000)
rev:用来做snort规则修订的唯一标识,修改规则id、签名和说明时需
更新,该选项需要和sid一起使用。格式:(sid:1000; rev:1;)
classtype:用于对攻击检测的规则和产生的日志进行分类,引用的
classtype名称需要首先在 classification.config配置。格式:(classtype:classtypename;)
priority :制定规则严重级别,可以覆盖classtype分配的默认级别。优先
级高的规则会先检查,格式:(priority:10;)
3. 函数引用
规则配置可以引用suricata.yaml内设定的函数。
c) Classification.config设置
规则选项中classtype选项的配置文件。
配置格式:config classification:
not-suspicious , Not Suspicious Traffic ,3
配置头: 名称, 描述, 告警级别
例子:classification.config内配置:
config classification: baidu, search something,4
规则配置:alert tcp any any -> 123.125.144.144 443(classtype:baidu)
当任意主机访问123.125.144.144的443端口时,告警信息内包含
[classtype:search something[priority : 4]
d) Suricata命令行