开源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
Suricata的搭建过程非常简单,官方的文档永远是最好的参考文档。
Suricata的基本配置
配置文件
首先来关注一下 /etc/suricata
下的几个配置文件:
classification.config
用于定义和分类不同类型的网络事件,比如哪些是潜在的攻击、哪些是正常的网络活动等。reference.config
包含了一些安全网站,漏洞平台的URL网址,用来联系外部的恶意攻击检测网站。suricata.yaml
是Suricata的主要配置文件,它包含了规则配置、接口配置、日志配置、检测配置等。threshold.config
用于定义流量的阈值和速率限制。设置在特定时间内对特定事件或签名的触发次数进行限制。rules/
规则目录,存放不同种类的规则文件 *.rules,规则用来判定流量攻击类型,并定义攻击类型和告警种类等。
Suricata的规则
在 rules/ 目录下存放的各种 *.rules 文件可以包含一个或多个用于检测不同类型威胁的规则,同样采用 Snort 的规则格式。
一个规则主要由以下三个部分组成:
action 决定当规则匹配时的处理动作
header 定义协议,IP地址,端口和规则的方向
rule options 定义规则的细节
在上图中,红色部分为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;)
alert
这是规则的开始,表示如果匹配此规则,Suricata将生成一个警报。ip any any -> any any
这表示规则适用于任何流量,不限制源IP和目的IP。msg:"SURICATA Applayer Mismatch protocol both directions"
这是当规则触发时显示的消息。flow:established
这个条件指定规则只应用于已建立的流,即那些已经完成了TCP三向握手的连接。app-layer-event:applayer_mismatch_protocol_both_directions
指定了应用层事件,即应用层协议不匹配的情况。flowint:applayer.anomaly.count,+,1
这是一个流量计数器,每当规则触发时,对流内的应用层异常计数器进行递增操作。classtype:protocol-command-decode
指定了事件的分类类型,即协议命令解码。sid:2260000
规则的唯一标识符Signature ID。rev:1
这是规则的版本号,区分同一规则的不同版本。
关于Suricata的规则还有很多的内容,详细参考:https://docs.suricata.io/en/latest/rules/index.html
Suricata的使用
在使用suricata之前,首先了解surcata的基本的几个命令:
-c # 指定配置文件的路径
-T # 测试配置运行
-i # 指定网卡
suricata-update # 更新规则
第一步我们要确定Suricata应该在哪个接口和IP地址上进行检测,ifconfig命令查看网卡和IP地址。
第二步编辑 Suricata 的配置文件 /etc/suricata/suricata.yaml,指明需要监听的网卡,网络范围 HOME_NET。
sudo vim /etc/suricata/suricata.yaml
第三步启动运行Suricata
suricata -i ens33 -c /etc/suricata/suricata.yaml
使用 -v 参数,增加日志级别来增加Suricata应用程序日志的详细程度。
Suricata检测SQL注入
只需要向Suricata导入SQL的规则就可以检测,根据Suricata的规则我们可以自己编写相关的SQL检测规则来进行检测。幸运的的是已经有开源的项目提供了大量的Suricata rules来检测各种类型的攻击,参考项目suricata-rules
将SQL注入的规则文件但放到 /var/lib/suricata/rules/ 这个目录下:
此外还需要在/etc/suricata/suricata.yaml文件中添加针对SQL注入的检测规则文件sql_injection.rules。
注意:添加新的规则文件以后,必须使用 suricata-update
命令重新加载配置文件,更新规则。
启动Suricata服务,加载配置文件,并指定网卡为ens33
suricata -i ens33 -c /etc/suricata/suricata.yaml
使用sqlmap测试一下:
当Suricata检测到可能的SQL注入攻击时,会产生记录日志、发送警报等相应的响应动作,产生的相关日志信息放在目录:/var/log/suricata/
在/var/log/suricata/目录下,其中的 fast.log
文件包含了快速报警信息,提供了关于检测到的安全事件的简要摘要。fast.log 的每一条记录包含:时间戳、条目的编号、当规则匹配时产生的警报消息msg、使用的协议、源IP地址、目标IP地址。
而 eve.json
文件提供了更多的信息,包括流量细节、规则信息、负载数据等。eve.json 的每一条记录包含:时间戳、流ID、输入接口、事件类型。源源端口:21、目标IP、目标端口、协议、数据包来源、警报信息、动作开始时间、源IP、目标IP、源端口、目标端口等。
通过分析这些日志文件信息,可以得到事件发生的确切时间,事件类型,事件的来源,受影响的目标等信息,从而达到入侵检测的目的。
踩坑:
Suricata在添加规则文件后,必须要使用 suricata-update 命令重新加载配置文件,否则规则会不生效,检测不到相应的恶意流量。自定义的规则文件需要严按照官方的要求进行编写,使用 suricata -T
命令检测规则是否可以正常运行,否则规则文件无法被正确加载,服务无法正常启动。
若有错误,欢迎指正!o( ̄▽ ̄)ブ
开源IDS/IPS Suricata的部署与使用的更多相关文章
- Suricata开源IDS安装与配置
开源IDS Suricata安装 Linux下的依赖问题的解决 在Debian,Ubuntu或者Linux Mint系列 $ sudo apt-get install wget build-essen ...
- 什么是IDS/IPS?
目录 摘要 0x00 基于网络的IDS和IPS0x01 设计考虑因素0X02 IDS/IPS 总结 摘要 摘要 这篇文章主要介绍的是入侵检测系统(IDS)和入侵防御系统(IPS ...
- 首发福利!全球第一开源ERP Odoo系统架构部署指南 电子书分享
引言 Odoo,以前叫OpenERP,是比利时Odoo S.A.公司开发的一个企业应用软件套件,开源套件包括一个企业应用快速开发平台,以及几千个Odoo及第三方开发的企业应用模块.Odoo适用于各种规 ...
- 开源项目renren-fast-vue开发环境部署(前端部分)
开源项目renren-fast-vue开发环境部署(前端部分) 说明:renren-fast是一个开源的基于springboot的前后端分离手脚架,当前版本是3.0 开发文档需要付费,官方的开发环境部 ...
- 开源项目renren-fast开发环境部署(后端部分)
开源项目renren-fast开发环境部署(后端部分) 说明:renren-fast是一个开源的基于springboot的前后端分离手脚架,当前版本是3.0 开发文档需要付费,官方的开发环境部署介绍相 ...
- FW/IDS/IPS/WAF等安全设备部署方式及优缺点
现在市场上的主流网络安全产品可以分为以下几个大类:1.基础防火墙FW/NGFW类 主要是可实现基本包过滤策略的防火墙,这类是有硬件处理.软件处理等,其主要功能实现是限制对IP:port的访问.基本上的 ...
- IDS IPS WAF之安全剖析
现在市场上的主流网络安全产品可以分为以下几个大类: 1.基础防火墙类,主要是可实现基本包过滤策略的防火墙,这类是有硬件处理.软件处理等,其主要功能实现是限制对IP:port的访问.基本上的实现都是默认 ...
- 开源社群系统ThinkSNS+安装部署演示视频!
社群系统TS+一期版本发布之后,很多小伙伴们反馈安装部署有些困难,那么今天由我们的颜值与技术实力担当乔斌大佬通过录制视频的形式,给大家演示一下部署的整个过程,录制过程中有些杂音,请各位尽情谅解,后续我 ...
- 从零开始学安全(二十七)●利用Nmap对防火墙,IDS,IPS 进行欺骗
先介绍什么是防火墙 ids 并联 ips 串联 来看我们nmap 命令
- API 开发平台 dreamfactory,参考SAWAGGER,国外厂家,开源,本地与云部署
API 开发平台,参考SAWAGGER,国外厂家,本地与云部署:参考 http://swagger.io/commercial-tools/ 1.dreamfactory 梦工厂公司 https: ...
随机推荐
- 导出 LaTeX 为 SVG
LaTeX 本身并不直接支持导出 SVG 格式的文档或图片,但可以通过一些工具和插件实现将 LaTeX 文档或图形转换为 SVG 格式. 使用 dvisvgm 我们可以先将 LaTeX 文档编译为 D ...
- vue router路由配置,元信息meta的使用-登录拦截验证
原文来自 vue router路由配置,元信息meta的使用-登录拦截验证_shenroom的博客-CSDN博客 看原文排版更舒服,我只是记录一下 路由基本配置1.在router文件夹中找到 inde ...
- 【YashanDB知识库】YashanDB 开机自启
[问题分类] YashanDB 开机自启 [关键字] 开机自启,依赖包 [问题描述] 数据库所在服务器重启后只拉起monit.yasom.yasom进程,缺少yasdb进程: [问题原因分析] 数据库 ...
- 【YashanDB知识库】YAS-02024 lock wait timeout, wait time 0 milliseconds
[标题]错误码处理 [问题分类]锁等待超时 [关键字]YAS-02024 [问题描述]执行语句时候,因锁等待超时执行语句失败 [问题原因分析]数据库默认锁等待时间为0秒,如果执行语句存在锁等待过长会执 ...
- LeetCode 二叉树的最近公共祖先
一.二叉搜索树的最近公共祖先 利用二叉搜索树的性质,祖先的两个孩子,左孩子的小于根节点的值,右孩子大于根节点的值. 如果根节点的值,同时大于p的值和q的值,那么在左子树找根节点: 如果根节点的值,同时 ...
- Angular Material 18+ 高级教程 – CDK Overlay
Overlay, Dialog, Modal, Popover 傻傻分不清楚 参考: Medium – Modal?Dialog?你真的知道他們是什麼嗎? Popups, dialogs, toolt ...
- CSS – Houdini
介绍 简单说这个 Houdini 是一系列 CSS 底层 API,它可以让我们扩展 CSS,做出一些 Polyfill. 举一个例子,让大家有个画面. 我们可以通过 CSS + JS + Canvas ...
- RxJS 系列 – Utility Operators
前言 前几篇介绍过了 Creation Operators Filtering Operators Join Creation Operators Error Handling Operators T ...
- ASP.NET Core – Razor Pages 冷知识
Multiple Form Binding 问题 在一个 page 里面有 2 张 form, 那么就会有 2 个 model binding. 当任何一个 submit 的时候. 由于 2 个 mo ...
- 【赵渝强老师】Flink的DataSet算子
Flink为了能够处理有边界的数据集和无边界的数据集,提供了对应的DataSet API和DataStream API.我们可以开发对应的Java程序或者Scala程序来完成相应的功能.下面举例了一些 ...