1.简介
Suricata是一个免费、开源、成熟、快速、健壮的网络威胁检测引擎。Suricata引擎能够进行实时入侵检测(IDS)、内联入侵预防(IPS)、网络安全监控(NSM)和离线pcap处理。Suricata使用强大而广泛的规则和签名语言来检查网络流量,并提供强大的Lua脚本支持来检测复杂的威胁。使用标准的输入和输出格式(如YAML和JSON),使用现有的SIEMs、Splunk、Logstash/Elasticsearch、Kibana和其他数据库等工具进行集成将变得非常简单。Suricata项目和代码由开放信息安全基金会(OISF)拥有和支持,OISF是一个非盈利基金会,致力于确保Suricata作为一个开源项目的开发和持续成功。
下面将介绍一下如何搭建一个suricata平台以及一些suricata的基本信息,重点会说一下suricata的工作模式,这个涉及到数据包的处理流程
2.suricata安装
2.1 依赖库安装
yum install -y git epel-release make autoconf gcc-c++ automake cmake libtool pcre-devel libyaml-devel jansson-devel libpcap-devel file-devel zlib-devel nss-devel libcap-ng-devel libnet-devel libnetfilter_queue-devel lua-devel epel-release lz4-devel xz-devel json-c-devel librdkafka-devel luajit-devel python-pip ragel
yum install -y rust cargo pcre2-devel
cargo install —force cbindgen
cp /root/.cargo/bin/cbindgen /usr/bin/
pip install pyyaml json-lines
2.2源码下载编译
1.git clone https://github.com/OISF/suricata.git
2.cd suricata
3.git clone https://github.com/OISF/libhtp(下载libhtp用于http协议解析)
4../autogen.sh
5.生成对应的makfile FLAGS=-g ./configure —prefix=/usr —sysconfdir=/etc —localstatedir=/var —enable-nfqueue —enable-luajit —enable-debug ( -g表示保留符号信息,程序出core时,可以运用上,—prefix用于设置安装、配置、日志目录,—enable-nfqueue用于开启nfq网卡多队列模式支持 —enable-luajit用于开启对luajit的支持 —enable-debug开启日志模式 )
6.Make && make install && make install-conf (编译,安装,以及安装规则)
安装可执行程序及相关路径:
可执行程序(/usr/bin):
suricata/suricatactl/suricatasc/suricata-update
配置相关路径:
/var/log/suricata #log相关
/etc/suricata(include:classification.config/reference.config/suricata.yaml(可配置rules路径)/threshold.config) #配置信息 协议等
/var/lib/suricata/rules #规则相关
2.3 运行
suricata -c /etc/suricata/suricata.yaml -i enp0s3
这里用的是最新的版本7.0,我自己的网卡是enp0s3,把这个换成自己要监听的网卡即可
3.suricata基本信息介绍
4.suricata 工作模式分析
4.1 single模式
single只支持一个网卡设备,只有一个work线程
4.2 work模式
Work工作模式,每个网卡默认对应cpu数个工作线程(或者按照配置文件配置的线程数),每个工作线程取对应的网卡队列中数据包
4.3 autofp工作模式
autofp模式相对比较复杂,相当于共用了work线程
4.4 work线程介绍
工作模式的重点在于工作线程的处理,下面介绍一下工作线程的处理流程
数据包工作线程是按照slot的注册跑,一个slot一个走
这是个流工作线程,以afpacket的work工作模式为例,函数执行流程如下:
TmThreadsSlotPktAcqLoop-》ReceiveAFPLoop-》AFPReadFromRing-》TmThreadsSlotProcessPkt-》TmThreadsSlotVarRun-》SlotFunc(FlowWorker)
ReceiveAFPLoop就是当时注册的收包slot,
FlowWorker就是当时注册的flow work slot
在多网卡收包的场景下,推荐使用work模式,该模式的性能会更好,同时可以调节收包模式,使得同一个五元组在同一个线程中处理,更有利于在攻击场景中做统计计算。
后续将再介绍一些:解包过程(比如mysql,pop3,http,dns协议的解析详细信息),日志记录,规则匹配,高性能场景性能优化的一些相关知识。
发表评论
您还未登录,请先登录。
登录