目录
Suricata简介
IDS/IPS简介
Suricata主要特点
Suricata基本架构
Suricata抓包性能
Suricata规则
Suricata自定义检测
Suricata http log自定义输出
Suricata单进程同时监听两个网口
问题
总结
参考
Suricata简介
Suricata是一个高性能的IDS、IPS和网络安全监控的引擎。它是开源的,由一个社区经营的非营利基金会开放信息安全基金会(OISF)开发。
安装环境建议使用centos7/redhat7版本以上的操作系统,Suricata版本建议使用4.x以上,这样方便多线程,Hypersca,pfring等功能的使用。6版本的操作系统编译环境需要花时间取升级修复,不建议使用。
IDS/IPS简介
检测系统(Intrusion detection system,简称“IDS”)是一种对网络传输进行即时监视,根据预设的策略,在发现可疑传输时发出警报。
预防系统(Intrusion prevention system,简称“IPS”)是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,一般位于防火墙和网络的设备之间,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。相对于IDS主能提供了中断防御功能。
Suricata主要特点
- 支持从nfqueue中读取流量
- 支持分析离线pcap文件和pcap文件方式存储流量数据
- 支持ipv6
- 支持pcap,af_packet,pfring,硬件卡抓包
- 多线程
- 支持内嵌lua脚本,以实现自定义检测和输出脚本
- 支持ip信用等级
- 支持文件还原
- 兼容snort规则
- 支持常见数据包解码:IPv4, IPv6, TCP, UDP, SCTP, ICMPv4, ICMPv6, GRE, Ethernet, PPP, PPPoE, Raw, SLL, VLAN, QINQ, MPLS, ERSPAN, VXLAN
- 支持常见应用层协议解码:HTTP, SSL, TLS, SMB, DCERPC, SMTP, FTP, SSH, DNS, Modbus, ENIP/CIP, DNP3, NFS, NTP, DHCP, TFTP, KRB5, IKEv2, SIP, SNMP, RDP
Suricata基本架构
运行模式
有三种运行模式,分别为single,workers,autofp。官方推荐性能最佳的运行模式为workers模式。
single模式:只有一个包处理线程,一般在开发模式下使用。
workers模式:多个包处理线程,每个线程包含完整的处理逻辑。
autofp模式:有多个包捕获线程,多个包处理线程。一般适用于nfqueue场景,从多个queue中消费流量来处理。
四种线程模块
包获取:包捕获
解码:对数据包和应用层协议解码
检测:通过规则或者自定义脚本对数据包进行检测
输出:输出检测结果和常规协议相关日志等
Suricata性能调优
抓包性能对比
- 硬件捕获 > pfring zc > pfring > af-packet > pcap
调优
1,关闭网卡多队列功能
原因:一般使用流量镜像方式把流量镜像到服务器网卡,如果多队列的话,同一个tcp连接的数据有可能会被分散到不同的队列,由于时间的延迟可能导致有乱序可能。例如先收到了syn/ack,再收到syn,suricata会认为此流量无效而丢弃。如果做检测,则需要加缓冲和排序,代价较大。
2,关闭网卡lro,gro特性
原因:lro/gro导致将各种较小的包合并成大的“超级包”,从而破坏suricata对tcp连接的跟踪。
3,使用pfring zc模式捕获包
原因:pfring+zero copy提升性能,但是zero copy需要网卡驱动支持,目前我们使用pfring模式抓包,只需要kernel支持即可。
4,调整配置文件中内存相关配置,调大flow.memcap,stream.memcap,stream.reassembly.memcap
5,使用workers运行模式
6,调整配置文件中max-pending-packets为8192
7,suricata编译需要支持luajit(用于替换原始lua),Hyperscan高性能正则库,PF_RING高性能包捕获库
Suricata规则
1,兼容snort规则,具体可参考官方文档。
2,通过规则和内置的关键字实现对数据包的过滤和处理等。
3,Suricata4.x版本之后有自带的规则管理工具
Suricata自定义检测
支持通过lua脚本对数据包进行自定义检测,例如协议识别和异常流量识别等
Suricata http log自定义输出
支持通过lua脚本脚本获取http协议request和response的相关信息,从而可以输出http协议中的所以数据,例如header,request body,response body等。
Suricata单进程同时监听两个网口
通过修改suricata.yml配置文件可以实现,以pfring捕获方式为例,如下配置文件为同时捕获两个网口流量的配置:
pfring:
- interface: em2
threads: auto
cluster-id: 81
cluster-type: cluster_flow
- interface: em4
threads: auto
cluster-id: 82
cluster-type: cluster_flow
问题
1,发现流量里面有部分vlan数据的情况下,suricata不能正常输出http和dns等应用协议的日志
解决:
关闭如下配置
vlan:
use-for-tracking: false
总结
目前,我们使用Suricata分析从交换机镜像过来的流量,Suricata的输出为两个:Suricata检测出来的alert异常事件和解码的所有应用协议的日志。以方便后续的存储和分析,以及告警处理。
参考
https://suricata-ids.org/features/all-features/
https://suricata.readthedocs.io/en/suricata-4.1.3/rules/index.html
原文地址:https://blog.51cto.com/leejia/2457743