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/) 文件夹中。



## 完整文档
详细的分步文档位于:
[`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, 安全实验环境, 现代安全运营, 网络流量分析, 防御绕过