Suricata配置文件说明1

本文档介绍了Suricata配置文件的Yaml格式,重点关注max-pending-packets、runmodes、default-packet-size等关键配置选项。Suricata使用多线程和线程模块处理数据包,其运行方式可根据不同需求进行定制。配置还包括警告和事件输出、数据包日志等,便于监控和分析网络流量。此外,文中还提及了CUDA支持和检测引擎配置。
摘要由CSDN通过智能技术生成

本系列文章是Suricata官方文档的翻译加上自己对其的理解,部分图片也是来自那篇文章,当然由于初学,很多方面的理解不够透彻,随着深入后面会对本文进行一定的修正和完善。

Suricata使用Yaml作为其配置文件的格式,关于Yaml可以参考YAML-维基百科。其中Suricata默认的配置文件是suricata.yaml,以硬编码的形式写在源代码中,当然也可以在执行的时候添加-c+指定位置的yaml文件来自定义配置文件。配置文件的第一行内容是%YAML 1.1表示其使用了Yaml 1.1的语法。由于配置项较多,因此将分为多篇文章来进行说明,本文是第一篇。

max-pending-packets

该选项设置了suricata能够同时处理的数据包的数量,最少为1,最大值取决于内存的大小,更大的内存可以设置更大的值并拥有更好的性能,默认值是1024。但是官方文档中并没有指出其数量与内存之间的具体关系。设置格式为:

max-pending-packets: 1024

runmodes

该选项设置了suricata的运行方式,使用命令./suricata --list-runmodes可以查看所有的运行方式,部分截图如下:

这里写图片描述

在介绍运行方式(Runmodes)之前首先了解一下suricata的基本组成。Suricata是由所谓的线程(threads)、线程模块(thread-modules)和队列(queues)组成。Suricata是一个多线程的程序,因此在同一时刻会有多个线程在工作。线程模块是依据功能来划分的,比如一个模块用于解析数据包,另一个模块用于检测数据包等。每个数据包可能会有多个不同的线程进行处理,队列就是用于将数据包从一个线程传递到另一个线程。与此同时,一个线程可以拥有多个线程模块,但是在某一时刻只有一个模块在运行(原文是If they have more modules, they can only be active on a a time.看不大懂,感觉是这个意思)。

Suricata的运行方式就是上面介绍的线程(threads)、线程模块(thread-modules)和队列(queues)三种元素的不同组合方式。上图中的RunMode Type并不是配置文件中的runmodes选项,而是后面的Custom Mode也就是自定义模式才可以在此处设置。比如默认的Runmodes是autofp,在线实时检测流量的模式中其结构如下,单线程模块获取数据包和解码,多线程模块检测,单模块输出:

这里写图片描述

而在pfring模式下的autofp则有所不同,可以看到它有多个模块获取及解码数据包,通过流绑定队列分配到多个检测模块中进行检测,这应该是pfring模式获取数据包效率更高的原因:

这里写图片描述

default-packet-size

之前的max-pending-packets选项设置了最多同时处理的数据包数量,这些同时处理的数据包都是需要存储在内存中的,所以需要对每个数据包的大小进行限制,而当前选项就是做这个事的。虽然有时候可能需要检测较大的数据包,但是大部分情况下为了性能还是需要做出一定的限制。其配置方式如下,默认值是1514,这也是TCP数据包的最大长度(当数据超过这个长度便会使用TCP报文重组技术):

default-packet-size: 1514

user and group

用于设置启动suricata的用户及其分组。

action-order

action指的是每条规则匹配时需要执行的操作,比如下面这条规则执行alert警告操作:

这里写图片描述

而当前字段设置的是多条规则同时匹配的时候的执行顺序。action共有四种:pass、drop、reject、alert。

pass指的是处理的数据包匹配当前规则时直接跳过后面的所有规则,也就是说不匹配后面的规则
drop只能工作在IPS模式下,当数据包匹配到drop的规则时则会被丢弃并且产生一个警告
reject会给数据包的发送和接收端都发生一个拒绝的数据包,如果原本的协议是TCP,则发生reset数据包,否则发送ICMP错误的数据包,同时产生一个警告。在IPS模式下也会丢弃匹配到的数据包
alert则对发送和接收者都没有影响,只会生成一个警告

Suricata按照规则的出现顺序依次加载,但是处理的顺序则根据配置文件中设置的action重要程度来排列。默认的顺序如下,表示当一个数据包匹配多条规则时,优先处理的是pass的规则,其次是drop,然后是reject,最后是alert:

action-order: 
 - pass
 - drop
 - reject
 - alert

Splitting configuration in multiple files

标题并不是关键字,而是指一个配置文件可以按照功能分割成多个文件,这样后面修改某一方面的配置就可以到指定的配置文件中修改,同样可以增加可读性。配置文件通过include进行包含,比如outputs.yaml:

# outputs.yaml
- fast
    enabled: yes
    filename: fast.log
    append: yes

- unified2-alert:
    enabled: yes
...

主配置文件如下:

# suricata.yaml
...
outputs: !include outputs.yaml
...

default-log-dir

Suricata默认的日志存储目录是/var/log/suricata,在配置文件中可以通过当前选项指定,比如程序目录下的log文件夹,也可以在运行时的-l参数指定:

default-log-dir:./log

outputs

outputs选项下有很多可以输出的配置选项,包括警告、检测的数据包、产生的结果等。在配置的过程中并不需要开启每一种输出,根据自己的需求进行配置。

警告输出(fast.log)

这个日志输出由单行的警告信息组成,比如下面这个输出例子由四个警告组成:

这里写图片描述

其配置如下:

# a line based alerts log similar to Snort's fast.log
- fast:
    enabled: yes
    filename: fast.log
    append: yes

事件输出(eve.log)

Suricata可以在匹配一条规则后记录一条信息,该条信息包括数据包的时间戳、五元组信息、对应的签名信息等,默认存储在日志目录下的eve.log文件中。下面是几条典型的eve日志,这些日志是json格式的,因此很多其他的程序可以对其进行处理产生进一步的输出:

这里写图片描述

可以对其进行如下配置,输出的类型可以多种多样,包括文件、系统日志、输出到socket等,输出的内容可以包括匹配到有alert、http、dns等规则的数据包信息。简单的说比如一条规则的action是alert,检测到有一个数据包匹配

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值