dhayanandresosorio/Implementacion-IDS-IPS-con-Suricata-y-Grafana

GitHub: dhayanandresosorio/Implementacion-IDS-IPS-con-Suricata-y-Grafana

基于 Suricata、Alloy、Loki 和 Grafana 搭建的网络入侵检测/防御实验室,实现流量检测、主动阻断与日志可视化。

Stars: 1 | Forks: 0

# 使用 Suricata、Alloy、Loki 和 Grafana 实现 NIDS/NIPS 这是一个网络安全实验室,在此环境中我们使用 **Suricata** 搭建了 **NIDS/NIPS** 系统,并结合 **nftables + NFQUEUE** 实现 IPS 模式,以及使用 **Alloy、Loki 和 Grafana** 进行日志的收集与可视化展示。 ## 项目概述 本项目旨在搭建一个包含三台虚拟机的实验室环境,用于模拟攻击者与受害者之间的网络流量,流量中间需经过一台部署了 Suricata 的服务器。 Suricata 服务器作为两个子网之间的路由器,首先在 IDS 模式下分析流量,随后配置为 IPS 模式,通过本地规则阻断流量。最后,生成的事件将通过 Alloy 发送至 Loki,并在 Grafana 的仪表板中进行可视化展示。 ## 目标 - 搭建包含三台虚拟机的实验室。 - 将 Suricata 配置为两个网络之间的路由器。 - 启用子网之间的流量转发。 - 以 IDS 模式部署 Suricata。 - 使用 NFQUEUE 将 Suricata 配置为 IPS 模式。 - 创建用于告警和阻断的本地规则。 - 通过 Alloy 将 Suricata 日志发送至 Loki。 - 在 Grafana 中可视化事件和阻断记录。 - 记录相关的测试、发现的错误以及应用的解决方案。 ## 实验室架构 | 机器 | 角色 | 网络 / IP | |---|---|---| | 攻击者 | 生成测试流量 | `192.168.40.2/24` | | Suricata | 路由器 + IDS/IPS + 监控 | `192.168.40.1/24` 和 `192.168.50.1/24` | | 受害者 | 接收测试流量和服务 | `192.168.50.2/24` | 攻击者和受害者之间的流量都会经过 Suricata 服务器,以便根据配置的规则对连接进行分析、记录和阻断。 ## 使用的技术 - Ubuntu Server 24.04 LTS - Suricata - nftables - NFQUEUE - ethtool - Alloy - Loki - Grafana - ACL - IsardVDI ## 已实现的功能 - 两个子网之间的路由。 - 启用 `ip_forward`。 - 配置 nftables。 - 禁用网络接口的 offloading。 - 安装和配置 Suricata。 - 启用 EVE JSON 日志。 - 将 Suricata 配置为 inline IPS 模式。 - 将流量重定向至 NFQUEUE。 - 本地的告警和阻断规则。 - ICMP 和 SSH 阻断测试。 - HTTP 流量检测。 - 使用 Alloy 将日志发送至 Loki。 - 在 Grafana 中可视化事件。 ## 使用的本地规则 配置了用于检测和阻断特定流量的规则: - ICMP 告警。 - HTTP 告警。 - ICMP 阻断。 - 阻断从攻击者网络到受害者网络的 SSH。 规则示例: ``` alert icmp any any -> any any (msg:"ICMP detectado"; sid:1000001; rev:1;) alert tcp any any -> any 80 (msg:"Conexion HTTP detectada"; sid:1000002; rev:1;) drop icmp any any -> any any (msg:"ICMP bloqueado"; sid:1000003; rev:1;) drop tcp 192.168.40.0/24 any -> 192.168.50.0/24 22 (msg:"SSH bloqueado desde atacante"; sid:1000004; rev:1;) ``` ## 执行的测试 在实践过程中进行了多项验证: - 在启用阻断之前测试攻击者与受害者之间的 Ping。 - 验证子网之间的连通性。 - ICMP 阻断测试。 - SSH 阻断测试。 - HTTP 检测测试。 - 检查 `fast.log` 中的告警。 - 检查 `eve.json` 中的事件。 - 在 Grafana 中可视化事件。 ## 截图 主要的截图存放在 [`img/`](img/) 文件夹中。 ![访问 Grafana](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/bc47871c4d210846.png) ![Loki 配置](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7f2a86892a210852.png) ![Suricata 最终仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/bb5d274deb210858.png) ## 完整文档 详细的分步文档位于: [`docs/implementacion-suricata-alloy-loki-grafana.md`](docs/implementacion-suricata-alloy-loki-grafana.md) 内容包括: - 虚拟机配置。 - 网络配置。 - Suricata 安装。 - 从 IDS 切换到 IPS。 - NFQUEUE 配置。 - 本地规则。 - 阻断测试。 - Alloy、Loki 和 Grafana 安装。 - 创建仪表板。 - 遇到的问题及应用的解决方案。 ## 遇到的问题 在实验室操作过程中遇到了一些实际的问题: - 由于 systemd 服务配置的原因,Suricata 一直以 AF-PACKET 模式启动。 - 需要为服务创建一个 override,以便使用 NFQUEUE 运行 Suricata。 - 在使用 `-q 0` 指定队列之前,服务一直无法正确启动。 - 需要加载 `nfnetlink_queue` 模块。 - Alloy 最初无法读取 `eve.json` 文件,因此通过 ACL 修正了权限。 - 一些最初的仪表板不够直观,为了更好地展示事件进行了调整。 ## 应用的解决方案 - 配置 `ip_forward`。 - 调整 nftables 以将流量发送至 NFQUEUE。 - 在 systemd 中为 Suricata 服务创建 override。 - 加载 `nfnetlink_queue` 模块。 - 使用 `suricata -T` 验证配置。 - 配置 ACL 以允许 Alloy 读取日志。 - 在 Grafana 中将 Loki 配置为数据源。 - 创建仪表板以可视化告警和阻断记录。 ## 最终结果 实验室最终成功运行,Suricata 作为 IDS/IPS,根据本地规则阻断流量,并将事件发送至 Loki,以便在 Grafana 中进行可视化。 该结果允许以图形化方式查看以下事件: - ICMP 被阻断。 - SSH 被阻断。 - 检测到 HTTP 流量。 - Suricata 记录的事件。 ## 经验总结 本项目让我得以在实践中接触安全和监控相关的真实概念: - IDS 和 IPS 的工作原理。 - 检测与阻断的区别。 - 结合 nftables 使用 NFQUEUE。 - Suricata 的自定义规则。 - EVE JSON 日志。 - 使用 Alloy 收集日志。 - 在 Loki 中存储日志。 - 在 Grafana 中进行可视化和分析。 - 解决 systemd 服务错误。 - 编写网络安全实验室的技术文档。
标签:DNS 反向解析, Grafana, Loki, Metaprompt, nftables, NIDS/NIPS, Suricata, 安全实验环境, 现代安全运营, 网络流量分析, 防御绕过