Vaughan8842/suricata-home-lab

GitHub: Vaughan8842/suricata-home-lab

在树莓派上运行 Suricata 引擎的家庭网络安全监控项目,提供实时告警、每日报告与规则调优的完整实践。

Stars: 0 | Forks: 0

# Suricata 家庭实验室 — 树莓派上的实时网络 IDS 一个由 Christopher Vaughan 构建和运营的实时、生产级家庭网络安全监控系统。这不是实验室模拟 —— 它 7x24 小时运行,监控真实流量,并发送真实警报。 ## 概述 | 项目 | 详情 | |------|--------| | **硬件** | 树莓派 (在 `eth0` 上进行被动监控) | | **IDS 引擎** | Suricata — 仅被动检测,不阻断 | | **网络** | 家庭子网 `172.16.0.0/24` | | **远程访问** | Twingate Zero Trust VPN | | **警报发送** | 实时邮件 + 每日摘要报告 | | **规则管理** | 自定义白名单,并附带记录在案的抑制原因 | ## 架构 ``` Home Network (172.16.0.0/24) │ ├── 172.16.0.1 — Router ├── 172.16.0.191 — Raspberry Pi (Suricata + Twingate) └── other devices (phones, TVs, IoT) │ ▼ [ Suricata IDS ] Monitors all traffic on eth0 Logs to /var/log/suricata/fast.log │ ┌───────┴────────┐ ▼ ▼ suricata-watcher Daily Report (real-time) (7:00 AM cron) │ │ └────────┬────────┘ ▼ Email alert to Gmail ``` ## 构建的组件 ### Suricata IDS - 在树莓派上安装和配置 Suricata,以被动监控 `eth0` 上的所有流量 - `HOME_NET` 设置为 `172.16.0.0/24` - 通过 `suricata-update` 管理规则更新 - 修复了 `suricata.yaml` 中默认规则路径配置错误的问题(默认指向了错误路径 —— 否则会静默加载 0 条规则) ### 2. 实时警报监控脚本 (`suricata-alert-watcher.sh`) 一个作为 `systemd` 服务运行的自定义 Bash 脚本,它具有以下功能: - 使用 `tail -F` 持续追踪 `fast.log` - 通过 `grep -qE` 模式匹配过滤掉已知的正常流量 - 根据规则 ID 对警报进行去重 —— 每条规则在 1 小时内抑制重复的邮件发送 - 检测到任何未识别的警报时立即发送邮件 - 重启时重置去重状态(使用 `/tmp/` 存储已发送警报的日志) - 崩溃时自动重启(unit 文件中配置了 `Restart=always`) ``` # 服务管理 sudo systemctl status suricata-watcher sudo systemctl restart suricata-watcher ``` ### 3. 每日摘要报告 (`suricata-daily-report.sh`) 一个 cron 作业(每天早上 7:00)会发送包含以下内容的邮件: - 过去 24 小时内的所有 Suricata 警报 - 网络上捕获的高频 DNS 查询 - 观察到的独立源 IP ### 4. Twingate Zero Trust VPN - 在树莓派上部署 Twingate Connector 用于远程管理 - 配置了资源访问策略和基于组的访问控制 - 无需开放防火墙端口即可从任何地方进行 SSH 和管理访问 - **注意:** NordVPN 和 Twingate 存在冲突 —— 每次只能运行其中一个 ## 规则调优 — 白名单日志 评估了每一条触发的警报,研究了对应规则,并记录了抑制决定。这模拟了 Tier 1 SOC 的规则管理工作流程。 | 规则 ID | 警报名称 | 来源 | 抑制原因 | |---------|-----------|--------|-------------------| | 2016149 | ET INFO STUN Binding Request | 树莓派 (Twingate) | 正常的 Twingate NAT 穿透 | | 2016150 | ET INFO STUN Binding Response | Twingate 服务器 | 正常的 Twingate NAT 穿透 | | 2260002 | Twingate 流量 | 树莓派 | 正常的 Twingate 操作 | | 2227001 | SURICATA DHCP 截断选项 | 路由器 (172.16.0.1) | 消费级路由器 DHCP 实现的怪癖 —— 非恶意 | | 2065070 | ET INFO RMM Domain DNS (pubnub.com) | 树莓派 | Twingate 使用 PubNub 进行控制面信令传输 —— 正常 | | 2013504 | ET INFO GNU/Linux APT User-Agent | 树莓派 → Ubuntu 服务器 | Ubuntu 包管理器更新流量,归类为“不可疑” | | 2200078 | SURICATA UDPv6 invalid checksum | mDNS (端口 5353) | NIC checksum offloading 导致的误报 —— Suricata 在 NIC 填充 checksum 之前进行了抓包 | | 2210044 | SURICATA STREAM invalid timestamp | AWS (Twingate 中继) → 树莓派 | 长连接 HTTPS 上的 TCP timestamp 偏移 —— P3 信息级别,非攻击 | **评估并抑制的规则总数:8** **方法论:** 针对每一条警报 —— 识别规则 ID,研究签名,根据已知的网络基准关联源 IP 和目标地址,并在抑制前记录详细原因。 ## 已知的网络基准 在此网络上属于正常的预期流量: | 源/目标 | 流量 | 原因 | |-------------------|---------|--------| | `172.16.0.191` → `stun.sfo2.twingate.com` | STUN 请求 | Twingate NAT 穿透 | | `172.16.0.191` → `91.189.92.x` | APT 流量 | Ubuntu 更新服务器 | | `172.16.0.191` → `smtp.gmail.com` | SMTP | 警报邮件发送 | | `172.16.0.191` → `rules.emergingthreat.net` | HTTP | Suricata 规则更新 | | `172.16.0.1` → 广播 | DHCP | 路由器 DHCP 服务器 | | `fe80::` → `ff02::` 端口 5353 | mDNS | 本地设备发现 (Avahi/Bonjour) | ## 技术栈 - **OS:** Raspberry Pi OS (Linux) - **IDS:** Suricata - **脚本:** Bash - **进程管理:** systemd - **远程访问:** Twingate Zero Trust VPN - **邮件:** msmtp + Gmail App Password (SMTP 端口 587) - **调度:** cron ## 展现的技能 - 在真实硬件上部署和配置了实时 IDS - 编写了具备错误处理和去重逻辑的生产级 Bash 自动化脚本 - 管理了 systemd 服务(安装、启用、重启、故障排查) - 采用与 Tier 1 SOC 工作相同的方法论,执行了警报分类和规则调优 - 维护了结构化、记录在案的白名单 —— 而不仅仅是“抑制后抛之脑后” - 构建并配置了 Zero Trust VPN 以实现安全的远程访问 - 建立并记录了网络流量基准
标签:Metaprompt, Suricata, 入侵检测系统, 安全数据湖, 家庭实验室, 应用安全, 现代安全运营, 自动化告警, 零信任网络