首页 > 其他分享 >开源IDS/IPS Suricata的部署与使用

开源IDS/IPS Suricata的部署与使用

时间:2024-05-01 16:12:27浏览次数:32  
标签:配置文件 rules 检测 suricata IDS IPS 规则 Suricata

目录

前言

Suricata 是一个高性能的网络入侵检测和防御系统(IDS/IPS)。它是由OISF开发,完全开源,并且可以免费使用。

Suricata和Snort的区别,有什么优势?

Snort 也是一个开源的IDS,能够实时监控网络流量,检测和防御潜在的威胁。与Snort相比,Suricata的设计注重性能和可扩展性,它可以在低至中等规格的硬件上运行,支持多线程,同时处理高吞吐量的网络流量,同时流分析功能更为强大和复杂。说白了就是性能更强,功能更多。

Suricata能够检测各种网络威胁,包括但不限于:

  • 协议解析:支持多种协议,如TCP, UDP, ICMP, HTTP, FTP等。

  • 签名匹配:使用类似于Snort的规则语言进行签名匹配,以检测已知攻击模式。

  • 异常检测:可以检测到异常行为,如异常流量或潜在的恶意行为。

  • 应用层检测:能够检测应用层的攻击和异常行为,例如SQL注入攻击。

  • 流量分析:可以对网络流量进行深入分析,包括状态跟踪和流量重建。

  • 实时响应:在检测到攻击时,可以实时阻断或记录攻击流量。

Suricata的一些主要运行模式:

  • Single 模式:在这种模式下,所有的数据处理任务都由单个工作线程完成。

  • Workers 模式:这是为了高性能而设计的模式。在Workers模式中,每个工作线程都独立执行从数据包捕获到日志记录的所有任务,以实现负载均衡和提高处理速度。

  • Autofp 模式:这种模式适用于处理PCAP文件或在某些IPS设置的情况下。Autofp模式下,有一个或多个数据包捕获线程,它们捕获数据包并进行解码,然后将数据包传递给 flow worker 线程。

在Linux上部署Suricata

废话少说,开始搭建!强烈建议参考官方的安装文档一步步安装:https://docs.suricata.io/en/latest/quickstart.html#installation

官方主要提供了两种安装方式:

第一种是使用包管理工具,参考 Binary packages

第二种是使用源码编译安装,参考 Source

在Ubuntu上安装Suricata,OISF维护了一个PPA suricata-stable,其中总是包含最新的稳定版本。

第一种方式只需要添加相应仓库源即可,需要注意的是,使用root权限或者使用sudo来安装:

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的EVE JSON输出信息的工具

安装后查看正在运行的Suricata版本、选项以及服务状态:

sudo suricata --build-info
sudo systemctl status suricata

image

image

Suricata的搭建过程非常简单,官方的文档永远是最好的参考文档。

Suricata的基本配置

配置文件

首先来关注一下 /etc/suricata 下的几个配置文件:

image

  • classification.config 用于定义和分类不同类型的网络事件,比如哪些是潜在的攻击、哪些是正常的网络活动等。

  • reference.config 包含了一些安全网站,漏洞平台的URL网址,用来联系外部的恶意攻击检测网站。

  • suricata.yaml 是Suricata的主要配置文件,它包含了规则配置、接口配置、日志配置、检测配置等。

  • threshold.config 用于定义流量的阈值和速率限制。设置在特定时间内对特定事件或签名的触发次数进行限制。

  • rules/ 规则目录,存放不同种类的规则文件 *.rules,规则用来判定流量攻击类型,并定义攻击类型和告警种类等。

Suricata的规则

在 rules/ 目录下存放的各种 *.rules 文件可以包含一个或多个用于检测不同类型威胁的规则,同样采用 Snort 的规则格式。

一个规则主要由以下三个部分组成:

  • action 决定当规则匹配时的处理动作

  • header 定义协议,IP地址,端口和规则的方向

  • rule options 定义规则的细节

image

在上图中,红色部分为action,绿色部分为header,蓝色部分为rule options。

action主要有这个:

  • alert 生成一个告警

  • pass 停止对包的进一步检查,并跳到所有规则的末尾

  • drop 丢弃数据包并产生告警

  • reject 向匹配报文的发送端发送RST/ICMP不可抵达错误

在IPS模式下,使用任何拒绝动作也会启用drop。

header部分定义协议,IP地址,端口和规则的方向:

  • 注明协议种类,只要是tcp、udp、icmp、ip等

  • Any:源地址/目的地址(IP)

  • Any:源端口/目的端口

  • ->:方向,单向流量;<>双向流量

  • Any:源地址/目的地址(IP)

  • Any:源端口/目的端口

rule options定义规则的细节:

  • msg:警报消息,当规则匹配时输出的消息。

  • flow:流量匹配选项,指定规则匹配的流量特征,如是否已建立等。

  • content:规则匹配的内容。

  • classtype:规则的分类类型,由 classification.config 文件定义。

  • sid:用于唯一性规则标识。

  • rev:规则版本号。

比如 rules/app-layer-events.rules 中的一条规则示例:

alert ip any any -> any any (msg:"SURICATA Applayer Mismatch protocol both directions"; flow:established; app-layer-event:applayer_mismatch_protocol_both_directions; flowint:applayer.anomaly.count,+,1; classtype:protocol-command-decode; sid:2260000; rev:1;)
  1. alert 这是规则的开始,表示如果匹配此规则,Suricata将生成一个警报。

  2. ip any any -> any any 这表示规则适用于任何流量,不限制源IP和目的IP。

  3. msg:"SURICATA Applayer Mismatch protocol both directions" 这是当规则触发时显示的消息。

  4. flow:established 这个条件指定规则只应用于已建立的流,即那些已经完成了TCP三向握手的连接。

  5. app-layer-event:applayer_mismatch_protocol_both_directions 指定了应用层事件,即应用层协议不匹配的情况。

  6. flowint:applayer.anomaly.count,+,1 这是一个流量计数器,每当规则触发时,对流内的应用层异常计数器进行递增操作。

  7. classtype:protocol-command-decode 指定了事件的分类类型,即协议命令解码。

  8. sid:2260000 规则的唯一标识符Signature ID。

  9. rev:1 这是规则的版本号,区分同一规则的不同版本。

关于Suricata的规则还有很多的内容,详细参考:https://docs.suricata.io/en/latest/rules/index.html

Suricata的使用

在使用suricata之前,首先了解surcata的基本的几个命令:

-c # 指定配置文件的路径
-T # 测试配置运行
-i # 指定网卡
suricata-update # 更新规则

第一步我们要确定Suricata应该在哪个接口和IP地址上进行检测,ifconfig命令查看网卡和IP地址。

image

第二步编辑 Suricata 的配置文件 /etc/suricata/suricata.yaml,指明需要监听的网卡,网络范围 HOME_NET。

sudo vim /etc/suricata/suricata.yaml

image

image

第三步启动运行Suricata

suricata -i ens33 -c /etc/suricata/suricata.yaml

image

使用 -v 参数,增加日志级别来增加Suricata应用程序日志的详细程度。

Suricata检测SQL注入

只需要向Suricata导入SQL的规则就可以检测,根据Suricata的规则我们可以自己编写相关的SQL检测规则来进行检测。幸运的的是已经有开源的项目提供了大量的Suricata rules来检测各种类型的攻击,参考项目suricata-rules

将SQL注入的规则文件但放到 /var/lib/suricata/rules/ 这个目录下:

image

此外还需要在/etc/suricata/suricata.yaml文件中添加针对SQL注入的检测规则文件sql_injection.rules。

注意:添加新的规则文件以后,必须使用 suricata-update 命令重新加载配置文件,更新规则。

image

启动Suricata服务,加载配置文件,并指定网卡为ens33

suricata -i ens33 -c /etc/suricata/suricata.yaml

使用sqlmap测试一下:

image

当Suricata检测到可能的SQL注入攻击时,会产生记录日志、发送警报等相应的响应动作,产生的相关日志信息放在目录:/var/log/suricata/

在/var/log/suricata/目录下,其中的 fast.log 文件包含了快速报警信息,提供了关于检测到的安全事件的简要摘要。fast.log 的每一条记录包含:时间戳、条目的编号、当规则匹配时产生的警报消息msg、使用的协议、源IP地址、目标IP地址。

image

eve.json 文件提供了更多的信息,包括流量细节、规则信息、负载数据等。eve.json 的每一条记录包含:时间戳、流ID、输入接口、事件类型。源源端口:21、目标IP、目标端口、协议、数据包来源、警报信息、动作开始时间、源IP、目标IP、源端口、目标端口等。

image

通过分析这些日志文件信息,可以得到事件发生的确切时间,事件类型,事件的来源,受影响的目标等信息,从而达到入侵检测的目的。

踩到的坑:

Suricata在添加规则文件后,必须要使用 suricata-update 命令重新加载配置文件,否则规则会不生效,检测不到相应的恶意流量。自定义的规则文件需要严按照官方的要求进行编写,使用 suricata -T 命令检测规则是否可以正常运行,否则规则文件无法被正确加载,服务无法正常启动。

标签:配置文件,rules,检测,suricata,IDS,IPS,规则,Suricata
From: https://www.cnblogs.com/smileleooo/p/18169413

相关文章

  • 如何下载Junit并在eclipse上配置Junit
    点击链接DownloadandInstall·junit-team/junit4Wiki·GitHub点击junit.jar选择下载junit4.13.2版本的话直接下载junit-4.13.2.jar,这里下载的是4.10版本,所以点击../ 选择其他的版本点击4.10/,下载junit-4.10.jar这样就下载好junit了,接下来在eclipse上配置junit......
  • R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归|附代码数据
    原文链接:http://tecdat.cn/?p=4146 原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于用电负荷时间序列的研究报告,包括一些图形和统计输出。通过对用电负荷的消费者进行聚类,我们可以提取典型的负荷曲线,提高后续用电量预测的准确性,检测异常或监控整个智能电网(Laurinec等......
  • eclipse 题解
    Statement给定一个圆,圆按照顺时针排布着\(2n\)个点,依次编号为\(1\simn\),其中编号为\(1\simn\)的点属于Alice,编号为\((n+1)\sim2n\)的点属于Bob。同时给出两个长度为\(n\)的序列\(A,B\)。你需要确定一个最大的正整数\(K\),使得存在\(K\)个二元组\((x_i,y_i)\)......
  • 如何查看eclipse版本
    进入eclipse文件夹点击readme 点击readme_eclipse.html 所跳转页面中release后的数字就是eclipse版本了   参考——https://www.php.cn/faq/420634.html......
  • 「Java开发指南」如何利用MyEclipse启用Spring DSL?(二)
    本教程将引导您通过启用SpringDSL和使用ServiceSpringDSL抽象来引导Spring和Spring代码生成项目,本教程中学习的技能也可以很容易地应用于其他抽象。在本教程中,您将学习如何:为SpringDSL初始化一个项目创建一个模型包创建一个服务和操作实现一个服务方法启用JAX-WS和DWR......
  • GRE隧道和ipsec隧道
    GRE隧道GRE隧道实现原理:GRE(通用路由封装)隧道的实现原理是通过在封装数据包的头部添加额外的信息来创建一个虚拟的点对点连接,从而在不同网络之间传输数据。下面是GRE隧道的基本实现原理:封装数据包:当数据包从源主机发送时,GRE路由器会接收该数据包,并在原始数据包的头部添加GRE......
  • opensips使用drouting进行路由
    操作系统:CentOS7.6_x64opensips版本:2.4.9drouting是DynamicRouting(动态路由)的缩写,该模块可为特定呼叫选择(基于多个条件)最佳网关。今天整理下CentOS7环境下opensips2.4.9的drouting模块笔记及使用示例,并提供运行效果视频和配套文件下载。我将从以下几方面进行展开:模块数据......
  • 在Linux中,如何使用Suricata进行实时网络威胁检测?
    Suricata是一个开源的威胁检测系统,主要用于实时网络威胁检测。它结合了IDS(入侵检测系统)、IPS(入侵防护系统)和网络安全监控的功能,可以高效地检测网络流量中的恶意行为。以下是在Linux中使用Suricata进行实时网络威胁检测的详细步骤:1.安装Suricata首先,你需要从Suricata的官方网站......
  • antd 的ProTable 的列加上ellipsis属性后,react-resizable会无法拖动列
    1、我尝试在列中加入ellipsis为true后,让内容超出后,用省略号表示。{title:displayName,dataIndex:propName,key:newPropName,width:widthIndex//,ellipsis:true}但是这引发了另外的问题。react-resizable配置的列可拖动无效了。额外的情况:obj.fixed='......
  • 针对于近期情况的总结与更改 tips || 3月份简略日报
    虽然马上就要期中了,时间很紧,但还是抽空写一下总结,权当状态的切换。先来简单总结一下\(3\)月份情况吧,这个月的月考看起来还像个人样(年5),那一月的\(4\)次周练,拉出来一比,会发现我在进步,从三门全挂到三门都排年级前\(50\),那一个月我经常反思,不断调整,这才是上次月考胜利的原因。......