philipzangara/suricata-nids-raspberry-pi
GitHub: philipzangara/suricata-nids-raspberry-pi
一个基于树莓派与 Suricata 的家庭网络入侵检测系统,通过 Splunk 实现实时告警可视化。
Stars: 0 | Forks: 0
# Suricata NIDS 在 Raspberry Pi 4 + Splunk 仪表板
一个基于运行 Ubuntu 25.10 的 Raspberry Pi 4B 构建的家庭网络入侵检测系统(NIDS),使用 Suricata 并采用新兴威胁开放规则集,通过通用转发器将告警转发到 Splunk 以实现实时仪表板可视化。
## 概述
我在家庭实验室中搭建此项目,以展示 **我的网络当前实际发生了什么?**
一个树莓派跨接在启用端口镜像的交换机上,被动检查所有网络流量。Suricata 将其与新兴威胁开放规则集进行匹配,并将告警写入 `fast.json`。Splunk 通用转发器将这些日志传输到 Splunk 实例,其中自定义仪表板展示活跃威胁、规则类别、顶级通信方和告警趋势。
## 架构
```
[Switch - Port Mirror]
|
v
[Raspberry Pi 4B - Ubuntu 25.10]
Suricata 7.x (NIDS)
└── /var/log/suricata/fast.json
|
v
[Splunk Universal Forwarder (ARM64)]
|
v
[Splunk Indexer :9997]
|
v
[Splunk Dashboard - Alert Visualization]
```
## 硬件与软件
| 组件 | 详情 |
|---|---|
| 设备 | Raspberry Pi 4B — 4 GB 内存 |
| 操作系统 | Ubuntu 25.10(ARM64) |
| NIDS | Suricata 7.x |
| 规则集 | 新兴威胁开放规则集(`et/open`) |
| 日志转发器 | Splunk 通用转发器(Linux ARM64) |
| SIEM | Splunk 企业版 9.x |
| 交换机 | 任何支持端口镜像 / SPAN 的可管理交换机 |
## 安装
注意,有两种运行 Suricata 的方式:使用 eve.json 和 fast.log。此外也有多种安装规则集的方法。对于我的家庭实验室,我使用了 fast.log,因为 eve.json 占用了太多空间。我也是“手动”下载规则集,以便能够编辑并移除部分告警“噪声”。我保留了规则集说明供自己记录。你可以通过 Suricata 启用规则,或者从互联网“手动”下载。
### 1. 更新并安装 Suricata
```
sudo apt update && sudo apt upgrade -y
sudo apt install -y suricata
suricata -V
```
### 2. 配置 Suricata
编辑 `/etc/suricata/suricata.yaml`:
**设置你的家庭网络范围:**
```
vars:
address-groups:
HOME_NET: "[192.168.1.0/24]" # replace with your subnet
```
**设置你的捕获接口:**
```
af-packet:
- interface: eth0 # replace with your mirrored interface
```
**验证 FAST 日志是否已启用:**
```
outputs:
- fast:
enabled: yes
filename: fast.log
append: yes
buffer-size: 0
```
### 3. 启用并更新/下载规则
```
# 列出可用的免费规则集
sudo suricata-update list-sources --free
# 启用新兴威胁开放规则
#sudo suricata-update enable-source et/open
# 拉取并应用规则
#sudo suricata-update
# 非常重要 - 必须重启 Suricata 才能启用规则,
sudo systemctl restart suricata
sudo systemctl enable suricata
```
“手动”下载版本
```
cd /etc/suricata/rules
sudo wget https://rules.emergingthreats.net/open/suricata-7.0.10/emerging.rules.tar.gz
sudo tar -czf emerging.rules.tar.gz
# 将在 /etc/suricata/rules 中有一批 *.rule 文件
sudo systemctl restart suricata
sudo systemctl enable suricata
```
### 4. 在交换机上启用端口镜像
在可管理交换机上配置 SPAN/镜像端口,使所有网络流量复制到树莓派的接口。具体步骤因交换机而异。树莓派只需接收镜像流量;无需串联在链路中。
### 5. 安装 Splunk 通用转发器(ARM64)
从 [splunk.com/en_us/download/universal-forwarder.html](https://www.splunk.com/en_us/download/universal-forwarder.html) 下载 Linux ARM64 `.deb` 包。
```
sudo dpkg -i splunkforwarder--linux-arm64.deb
cd /opt/splunkforwarder/bin
# 将转发器指向您的 Splunk 索引器
sudo ./splunk add forward-server :9997
# 将 Suricata 日志目录添加到监控输入
sudo ./splunk add monitor /var/log/suricata/
# 重启以应用
sudo ./splunk restart
```
### 6. 验证告警是否正在流动
在你的 Splunk 实例中:
```
source="*fast.log"
```
你应该能看到 Suricata 规则名称。
## 测试 NIDS
使用 [testmynids.org](https://github.com/3CORESec/testmynids.org) 脚本(来自 3CORESec)触发已知签名以验证数据管道:
```
curl -sSL https://raw.githubusercontent.com/3CORESec/testmynids.org/master/tmNIDS -o /tmp/tmNIDS
chmod +x /tmp/tmNIDS
/tmp/tmNIDS
```
确认告警是否出现在 `fast.log` 中,并在转发器的轮询间隔内传播到 Splunk。
## Splunk 仪表板
[INSERT DASHBOARD]
## 已知问题与限制
- **ARM64 转发器版本** — 确保下载 Linux ARM64 版本,而非 x86-64;错误的架构会静默安装失败。
- **镜像接口下的混杂模式** — Suricata 需要捕获接口处于混杂模式;通过 `ip link show eth0` 确认是否包含 `PROMISC`。
- **加密流量** — Suricata 无法检查 TLS 负载而无需解密代理;JA3 指纹识别仅可用于 TLS 元数据。
- **ET/Open 误报** — 免费规则集在家庭网络中会产生大量噪声;可参考配套的 [Suricata ET 噪声分析](https://philipzangara.com/?p=103) 项目进行调优。
- **树莓派性能限制** — 在饱和的千兆链路上,树莓派 4B 会丢包;使用 `suricata --engine-analysis` 监控,并考虑启用 `runmode: workers` 以提升吞吐量。
- **日志轮转** — 为 `/var/log/suricata/` 配置 logrotate,防止树莓派 SD 卡空间耗尽。
## 生产环境考虑
这是一个家庭实验室部署。生产环境的 NIDS 部署在多个方面会有所不同:
- **专用硬件或虚拟设备** — 商业 NIDS 传感器(如 Corelight、Stamus Networks)在专用硬件上运行 Suricata,具备硬件时间戳和无损数据包捕获。
- **商业规则集** — ET Pro、Snort VRT 或具备更高精度和更低误报率的定制规则集。
- **通过 HEC 的 SIEM 集成** — Splunk HTTP 事件收集器(HEC)比通用转发器轮询提供更低的延迟。
- **告警分类流程** — 与 SOAR( Splunk SOAR、Palo Alto XSOAR )集成,实现低置信度告警的自动分类和工单处理。
- **TLS 检查** — 生产环境在边界处解密 TLS 以进行完整负载检查。
- **冗余** — 单个树莓派是单点故障;生产传感器通常以集群方式运行并具备故障转移能力。
## 参考文档
- [Suricata 官方文档](https://docs.suricata.io)
- [新兴威胁开放规则集](https://rules.emergingthreats.net)
- [testmynids.org(3CORESec)](https://github.com/3CORESec/testmynids.org)
- [Splunk 通用转发器在树莓派上](https://gabrielgalvan.blogspot.com/2015/10/raspberry-pi-as-splunk-universal.html) — Gabriel Galvan
- [Suricata ET 噪声分析](https://philipzangara.com/?p=103) — 配套项目
## 相关项目
- [splunk-otx-cti-dashboard](https://github.com/philipzangara/splunk-otx-cti-dashboard) — 将 AlienVault OTX 威胁情报与实时 Sysmon 遥测相关联的 Splunk 仪表板
MIT License — 详见 [LICENSE](./LICENSE)。
标签:AMSI绕过, ARM64, Emerging Threats Open, et/open, Metaprompt, Mutation, NIDS, PB级数据处理, Raspberry Pi 4, SPANN, Splunk Dashboard, Splunk Universal Forwarder, Suricata, Ubuntu 25.10, 可视化, 威胁检测, 安全运维, 家庭网络, 容器化, 日志转发, 流量监控, 现代安全运营, 端口镜像, 网络安全监控, 驱动开发