任务1 suricata安装和运行,记录安装步骤,了解运行方法,使用模式

简介

功能: 流量捕获 协议分析 规则匹配
笔记简介: https://www.cnblogs.com/linagcheng/p/12559922.html
官方文档: https://www.osgeo.cn/suricata/performance/packet-capture.html

环境搭建

安装流程: 下载依赖,安装包,编译配置,规则下载

环境: suricata6.0.8 , ubuntu24
具体搭建步骤: https://www.cnblogs.com/007Jade/p/18926806
检验: which suricata

Q&A:

"无法打开锁文件,权限不够" --sudo apt install
"E: 软件包 python3-distutils 没有可安装候选" -- 跳过该依赖安装
"找不到命令"--未安装到系统路径--sudo make install


suricata架构详解

graph TD A[Suricata/NIDS/NIPS] <--> B[数据包抓取模式] B --> C[af-packet/PF_RING/Netmap/pcap] A --> D[运行模式] D --> E[single/workers/autofp] D --> F[IDS/IPS模式] F <--> G[处理逻辑和部署方式]
  1. 核心系统
    Suricata

    • 开源网络安全引擎
    • 支持入侵检测(IDS)和入侵防御(IPS)
    • 多线程架构设计
    • 实时流量分析能力
  2. 数据包抓取层
    数据包抓取模式

    技术 描述 适用场景
    af-packet Linux内核零拷贝技术 现代Linux高性能部署
    PF_RING 专用网卡驱动+DNA技术 超高吞吐(10Gbps+)
    Netmap 绕过内核协议栈 极端性能需求
    pcap 传统抓包库 兼容性要求/基础部署
  3. 运行模式层
    运行模式

    模式 线程模型 特点
    single 单线程处理 简单调试,低性能
    workers 每线程全流程独立处理 高吞吐,需硬件配合
    autofp 多线程按流分配 流保序,平衡性能
  4. 操作模式层
    IDS/IPS模式

    模式 部署方式 处理逻辑 典型配置
    IDS 旁路(镜像端口) 仅检测报警 af-packet + workers
    IPS 在线(网关) 实时阻断恶意流量 NFQ + autofp

    IDS:检测系统(Intrusion detection system,简称“IDS”)是一种对网络传输进行即时监视,根据预设的策略,在发现可疑传输时发出警报

    IPS:预防系统(Intrusion prevention system,简称“IPS”)是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,一般位于防火墙和网络的设备之间,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。
    IPS相对于IDS主能提供了中断防御功能。

    简而言之,Suricata 是引擎,NIDS/NIPS 是其两种工作模式:
    NIDS = 监控员(发现问题并报告)
    NIPS = 特警(直接拦截危险行为)
    两者共享同一套检测引擎,但部署方式和响应动作不同。

  5. 工作流程

graph LR H[网络流量] --> I[数据包抓取层] I --> J[Suricata核心] J --> K[运行模式调度] K --> L[检测引擎] L --> M{IDS/IPS模式} M -->|IDS| N[生成告警] M -->|IPS| O[实时阻断]
  1. 部署架构
    graph LR A[Internet] --> B[防火墙] B -->|镜像流量| C[Suricata IDS] B -->|转发流量| D[Suricata IPS] C --> E[SIEM系统] D --> F[阻断恶意流量]

为什么 Suricata 能同时支持 NIDS/NIPS?

1) 架构设计:
Suricata 的解码、检测、输出模块与操作模式解耦,通过配置切换角色。

2) 流量拦截能力:
集成 Netfilter(Linux)或 IPFW(FreeBSD),实现在线流量控制。

3) 规则灵活性:
支持在规则中定义动作(如 alert、drop、reject),例如:
#NIPS 规则示例(主动阻断)
drop tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"SSH 暴力破解"; sid:10001;)

suricata使用指南

基本命令:
    #查看可用网卡
    ip link show
    #验证运行模式支持
    sudo suricata --list-runmodes
    #测试配置文件
    sudo suricata -T -c suricata.yaml
    #更新规则库
    sudo suricata-update
    #查看版本信息
    suricata -V
  1. 快速启动

    IDS 模式监听网卡

    sudo suricata -c /home/yh/suricata-6.0.8/suricata.yaml -i enp1s0f1np1

    查看实时日志

    tail -f /var/log/suricata/fast.log

  2. 运行模式配置
    模式 命令示例 适用场景 性能特点
    single --runmode=single 调试/规则测试 单线程,低性能
    autofp --runmode=autofp 通用IDS/IPS(流保序) 多线程按流分配,中等吞吐
    workers --runmode=workers 高吞吐生产环境 每线程独立处理,高吞吐
    pfring --runmode pfring --pfring-dev enp1s0f1np1 10G+网络(需专用硬件) 最高性能,最低CPU开销

    启动示例:
    single 模式

    sudo suricata -c suricata.yaml -i enp1s0f1np1 --runmode=single

    workers 模式(高性能)

    sudo suricata -c suricataQM2.yaml -i enp1s0f1np1 --runmode=workers

    utofp 模式(流保序)

    sudo suricata -c suricata.yaml -i enp1s0f1np1 --runmode autofp

    PF_RING 模式(需先加载驱动)

    sudo suricata -c suricata.yaml --runmode pfring --pfring-dev enp1s0f1np1

  3. 操作模式配置

    1. IDS 模式(默认)

    直接监听网卡(仅检测)

    sudo suricata -i enp0s5 -c suricata.yaml
    特点:
    >旁路部署,不影响网络流量
    检测到威胁时生成告警(不阻断)
    日志路径:/var/log/suricata/fast.log

    1. IPS 模式
      1. 配置iptables转发流量
        sudo iptables -I FORWARD -j NFQUEUE --queue-num 0

      2. 启动Suricata处理队列
        sudo suricata -c suricata.yaml -q 0 --runmode=workers
        特点:

        在线部署,可实时阻断威胁
        规则中需使用 drop 动作:

         #规则示例:阻断SSH暴力破解
         drop tcp any any -> any 22 (msg:"SSH Brute Force"; sid:10001;)
        

        需定期测试避免误杀合法流量

    1. 离线分析模式

    分析PCAP文件

    sudo suricata -r traffic.pcap -c suricata.yaml -l ./logs
    输出:

    eve.json:结构化事件日志
    fast.log:告警摘要
    stats.log:性能统计

  4. 规则管理

    1. 自定义规则
      文件位置:/etc/suricata/rules/local.rules
      示例规则:

      ICMP检测

      alert icmp any any -> any any (msg:"ICMP Ping Detected"; sid:1000001;)

      HTTP主机检测

      alert tcp any any -> any 80 (msg:"HTTP Access: Baidu"; content:"Host|3A| www.baidu.com"; sid:1000002;)

      恶意软件下载检测

      alert http any any -> any any (msg:"Malware Download"; content:"evil.exe"; http_client_body; sid:1000003;)

  5. 性能优化

  6. 日志分析

  7. 实践


任务2
规则管理:与Snort相比,rule有何异同,Suricata本身提供了哪些rule管理接口,典型的或常用的是哪些,有没有社区规则等内容

根据官方文档,不同点如下图:


1749456521932


Suricata 与 Snort 在规则方面的对比总结:

对比项 Snort Suricata 说明与备注
规则语法 使用 .rules 文件,Snort 2.9 为主流 兼容 Snort 规则(高兼容性) 支持 Snort 大部分语法
协议检测 靠预处理器 + 指定端口 自动协议识别,端口无关 更智能,无需指定端口
协议匹配方式 alert tcp ... + $HTTP_PORTS alert http ...app-layer-protocol:http 不再依赖 $HTTP_PORTS
规则增强语法 较为固定 支持 http_* 缓冲区、datasetthreshold 等扩展语法 提供更强规则表达能力

对比项 Snort Suricata 说明与备注
规则管理工具 PulledPork(已停更) suricata-update(官方推荐) 易用性更好,支持多源
社区规则资源 Snort.org(注册) ✅ Emerging Threats 社区版 / Pro 版
✅ 官方 test rules
默认集成 ET Open
规则更新方式 手动下载或 PulledPork suricata-update 自动拉取 + 热加载支持 更新更灵活
规则存储路径 /etc/snort/rules/ /etc/suricata/rules/ 可自定义
可视化/接口 BASE、第三方工具 ✅ EveBox、Kibana、Scirius CE 可读性与管理性更强

Suricata 规则管理接口与常用方式:

1. 内置规则支持
Suricata 支持 Snort 规则语法的大部分子集,同时增加了自己的扩展特性,如 app-layer-protocolhttp_* 缓冲区。

2. 规则加载方式
通过 suricata.yaml 配置文件中的 rule-files 字段指定规则文件路径,例如:
rule-files:
- suricata.rules

3. 动态规则目录
使用 default-rule-path 配置默认规则目录,方便集中管理和更新规则。

4. Suricata-Update 工具
官方推荐的规则管理工具,功能包括:


  • 自动下载并更新社区规则集(如 Emerging Threats)
  • 检测规则兼容性
  • 启用或禁用特定规则
  • 支持 IDS 规则的分类系统(metadata/classification)

5. 常用规则接口和工具

  • suricata-update:规则自动更新与管理
  • suricatactl:部分发行版提供,辅助配置及规则管理
  • oinkmasterpulledpork:Snort 时代的工具,部分仍能用于 Suricata

6. 社区规则支持

  • Emerging Threats (ET Open):免费且开源,包含恶意IP、攻击模式和僵尸网络检测,默认可用 suricata-update 下载
  • ET Pro:付费订阅,提供更全面及时的规则,适合企业商用环境

7. 规则分类与管理
Suricata 支持基于规则 ID (sid)、规则组 ID (gid) 和分类字段 (classification) 进行细粒度管理,便于结合日志分析和可视化界面进行筛选和排查。


任务3
日志内容:了解suricata有哪些日志和调试信息可以输出,格式分析,如何设置

1.log categories

日志类型 默认路径(可配置) 功能说明
fast.log /var/log/suricata/fast.log 快速、简洁的报警信息(常用于 IDS 报警输出)
eve.json /var/log/suricata/eve.json 结构化 JSON 日志,可对接 ELK / Splunk / SIEM 等系统
stats.log /var/log/suricata/stats.log 性能统计信息,如丢包、协议识别情况
suricata.log /var/log/suricata/suricata.log 启动日志和运行错误(如配置问题、规则错误)
http.log, dns.log 可自定义开启 输出 HTTP/DNS 会话内容(需启用 eve.json 中的子模块)
pcap.log 需手动配置 保存捕获到的流量为 .pcap 文件
日志名 作用 命令查看
fast.log 简洁告警日志 tail -f /var/log/suricata/fast.log
eve.json 结构化 JSON 日志 less /var/log/suricata/eve.json
stats.log 统计信息 cat /var/log/suricata/stats.log
suricata.log 启动和错误日志 cat /var/log/suricata/suricata.log

2.outputs+格式分析

格式: 时间戳[] sid msg** Classification[] 分类
eg1:
0/2025-10:05:13.766498 [] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [] [Classification: Unknown Classtype] [Priority: 3] {TCP} 198.18.0.124:80 -> 10.211.55.11:58556
eg2:
06/10/2025-10:17:55.731468 [] [1:1000001:1] ICMP Ping Detected [] [Classification: (null)] [Priority: 3] {ICMP} 8.8.8.8:0 -> 10.211.55.11:0

Configure Suricata log output
outputs:

  • fast:
    enabled: yes
    filename: fast.log
    append: yes

outputs:

  • eve-log:
    enabled: yes
    filename: eve.json
    types:
    - alert:
    payload: yes
    metadata: yes
    - http:
    - dns:
    - tls:
    - files:

3.setup rules

格式:

/var/lib/suricata/rules/local.rules

alert icmp any any -> any any (msg:"ICMP Ping Detected"; sid:1000001; rev:1;)

alert tcp any any -> any 80 (msg:"Test HTTP Baidu"; content:"Host: www.baidu.com"; sid:1000002; rev:1;)


任务4
负载均衡:Suricata支持多线程并发和负载均衡,了解如何设置,具体性能如何,是否和底层网卡相关

使用对称哈希函数(比如 XOR 式对称哈希)

法1:设置“对称 RSS 哈希”模式(适合高级网卡)
某些高端网卡(比如 Intel X710/XL710、i40e 驱动)理论支持设置对称哈希,但驱动、固件、内核需协同支持。
检查网卡 RSS 哈希信息:
ethtool -n eth0 rx-flow-hash tcp4
修改对称 key(高阶用法):
对称 hash 的一个理论方法是配置对称的 RSS hash key(多个厂商文档有提到),或者使用特定的工具(比如 Mellanox 提供的 mlnx_qos,或使用 ethtool + devlink 组合修改)。
但大多数普通网卡不支持这个操作,这个方法更多是厂商支持的一种能力,不是通用命令。

设置相同的hash key

法2:使用 netmap + lb 工具实现流量对称重定向
你提到过 Suricata 可以使用 netmap 捕获模式,搭配 lb 工具使用如下命令实现对称分流:
sudo ./lb -i eth0 -n 4 -p -v
-n 4 表示分 4 个线程
它会通过软件在接收到的包之间做 hash 并选择目标线程
此方法适合高性能网卡、熟悉 netmap 的用户

法3: sudo ethtool -L eth0 combined 1


bg

posted on 2025-06-13 15:05  乌拉乌拉呀  阅读(451)  评论(0)    收藏  举报