Wiillis/Homelab

GitHub: Wiillis/Homelab

一套完整的家庭 SOC 安全实验室方案,基于 Suricata IDS 和 Splunk SIEM 构建实时威胁检测流水线,帮助安全从业者练习日志分析、攻击检测和事件响应等核心运营技能。

Stars: 0 | Forks: 0

# 网络安全家庭实验室:SOC 监控流水线 一个模拟安全运营中心 (SOC) 环境的个人网络安全实验室。旨在练习使用行业标准的工具进行真实的威胁检测、事件响应和日志分析。 本项目历经数月不断演进——从最初在虚拟机上进行基础的 Splunk 日志聚合,逐步发展成一个部署在专用物理服务器上的完整检测流水线,涵盖了网络 IDS、容器化服务、安全的远程访问以及详细记录的事件响应。 ## 架构 ``` [Network Traffic] │ ▼ [Suricata IDS] ──── eve.json ────▶ [Splunk Universal Forwarder (Docker)] │ │ [/var/log/auth.log] ─────────────────────────▶ │ ▼ [Splunk Enterprise] │ ▼ [SOC Dashboard] (Alerts, DNS, GeoIP, SSH Brute Force, Threat Signatures) ``` **远程访问:** Tailscale VPN 安全地连接所有实验室节点,无需向互联网暴露端口。 ## 技术栈 | 组件 | 工具 | 用途 | |---|---|---| | SIEM | Splunk Enterprise | 日志聚合、仪表盘、告警 | | IDS | Suricata 8.0.3 | 网络入侵检测 | | 日志转发器 | Splunk Universal Forwarder (Docker) | 将日志发送至 Splunk | | 容器化 | Docker / Portainer | 以容器形式运行 Suricata 和 UF | | 远程访问 | Tailscale | 跨实验室节点的安全站点到站点 VPN | | 操作系统 | Ubuntu Server | 主要的专用实验室主机 | | 防火墙 | UFW | 基于主机的防火墙加固 | | 存储协议 | NVMe-over-TCP | 存储网络监控 (v1) | ## 实验室演进 ### v1 — 基础 Splunk 监控 (2026 年 1 月) - 在虚拟机上部署了 Splunk Enterprise 和 Universal Forwarder - 从 Linux 端点收集了 syslog 和 auth.log - 构建了针对 SSH 登录失败的暴力破解检测 - 监控了 NVMe-over-TCP 存储协议流量 - 使用 UFW 防火墙规则对服务器进行了加固 ### v2 — 专用服务器上的完整 SOC 流水线 (2026 年 3 月) - 从虚拟机迁移到了专用的物理服务器 - 在 Docker 容器中部署了 Suricata IDS 8.0.3 - 配置了通过 Universal Forwarder 将 eve.json 日志转发到 Splunk - 调整了 Suricata 配置以消除噪音 - 在 threshold.conf 中为已知的良性签名构建了抑制规则 - 在 Splunk 中构建了 8 面板的实时 SOC 仪表盘 - 记录了第一个真实事件 (INC-001) ## SOC 仪表盘 该仪表盘通过 8 个面板提供实时可见性: | 面板 | 查询重点 | 可视化方式 | |---|---|---| | 活跃告警 | 过滤出真实威胁的 Suricata 告警 | 统计表 | | 最高威胁签名 | 触发次数最多的检测规则 | 柱状图 | | 最高源 IP | 产生告警的外部 IP | 柱状图 | | SSH 登录失败 | 来自 auth.log 的暴力破解尝试 | 统计表 | | 告警严重程度随时间的变化 | 按严重程度划分的告警趋势 | 折线图 | | DNS 数据流 | 按时间排序的实时 DNS 查询 | 统计表 | | 入站与出站 | 告警的方向性 | 饼图 | | 外部威胁源 | 告警源的 GeoIP 富化 | 统计表 | ### 基线仪表盘 ![基线仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/83d5680616141634.png) ### 模拟攻击期间的仪表盘 ![攻击模拟](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/61f334acb0141656.png) ## 检测与模拟 ### 真实检测 **BitTorrent Tracker 通信** Suricata 检测到从内部主机 `172.20.13.236` 到已知 BitTorrent Tracker `tracker.coppersurfer.tk` 的 DNS 查询。在企业环境中,这将构成违反策略的行为和潜在的数据泄露风险。已记录为 [INC-001](incidents/INC-001-bittorrent-detection.md)。 **SSDP 扫描** 检测到从内部主机到路由器的针对端口 1900 (SSDP) 的周期性 UDP 流量。已识别为良性的网络发现,并通过 threshold.conf 进行了抑制。 ### 模拟攻击 **GPL ATTACK_RESPONSE — testmynids.org** ``` curl http://testmynids.org/uid/index.html ``` 触发了签名 `GPL ATTACK_RESPONSE id check returned root` (SID 2100498),严重程度为 2。执行后几秒钟内即可在 Splunk 中看到告警。验证了端到端流水线:流量 → Suricata → eve.json → UF → Splunk → 仪表盘。 **SSH 暴力破解** ``` for i in {1..20}; do ssh fakeuser@; done ``` 产生了 20 次失败的认证尝试。在 auth.log 中被检测到,并显示在 SSH 登录失败面板中。源 IP `100.119.163.101`(Tailscale 节点)被识别为攻击者。 **Nmap 端口扫描** ``` nmap -sS nmap -sV ``` SYN 和版本扫描触发了 Suricata 的端口扫描检测规则。在带有 `in_iface: tailscale0` 的活跃告警面板中可见告警。 ## SPL 查询 所有仪表盘查询均已记录在 [splunk-queries/dashboard-queries.md](splunk-queries/dashboard-queries.md) 中。 关键查询: **活跃告警(已过滤)** ``` sourcetype=suricata event_type=alert NOT dest_port=1900 NOT alert.signature="SURICATA Ethertype unknown" | table timestamp src_ip dest_ip dest_port alert.signature alert.severity in_iface | sort -timestamp ``` **SSH 暴力破解检测** ``` sourcetype=linux_secure ("Failed password" OR "Invalid user") | rex field=_raw "from (?P\d+\.\d+\.\d+\.\d+)" | stats count by src_ip | sort -count ``` **GeoIP 富化** ``` sourcetype=suricata event_type=alert NOT dest_port=1900 | iplocation src_ip | stats count by src_ip Country City | sort -count ``` **可疑 DNS(罕见域名)** ``` sourcetype=suricata event_type=dns | spath input=_raw path="dns.queries{0}.rrname" output=queried_domain | stats count by queried_domain | where count < 5 | sort -count ``` ## Suricata 配置 Suricata 经过调整,仅记录与安全相关的事件类型,在消除噪音的同时保留了完整的威胁可见性: **已启用:** `alert`、`anomaly`、`http`、`tls`、`dns`、`dhcp`、`ssh` **已禁用:** `mdns`、`files`、`smtp`、`fileinfo`、`stats`、`ftp`、`rdp`、`nfs`、`smb`、`websocket` 等 10 余个低价值协议记录器 完整配置:[configs/suricata.yaml](configs/suricata.yaml) 抑制规则:[configs/threshold.conf](configs/threshold.conf) ## 事件 | ID | 日期 | 标题 | 严重程度 | |---|---|---|---| | [INC-001](incidents/INC-001-bittorrent-detection.md) | 2026-03-31 | 检测到 BitTorrent Tracker 通信 | 中 | ## 我学到的 **v1** - 配置 Splunk 数据输入和管理索引 - 识别 syslog 和 auth.log 中的可疑模式 - 使用 UFW 防火墙规则加固 Linux 服务器 - 监控存储网络协议 **v2** - 在 Docker 环境中部署和调整网络 IDS (Suricata) - 配置 eve.json 输出并转发至 SIEM - 通过调整 suricata.yaml 和配置 threshold.conf 抑制规则来减少告警噪音 - 在 Splunk 中构建多面板实时 SOC 仪表盘 - 编写用于威胁检测和 GeoIP 富化的 SPL 查询 - 使用事件处理员日志格式记录事件 - 理解原始遥测数据与可操作告警之间的区别 - 模拟真实攻击(暴力破解、端口扫描、C2 回连)以验证检测流水线 ## 仓库结构 ``` Homelab/ ├── README.md ├── screenshots/ │ ├── dashboard-baseline.png │ └── dashboard-attack-simulation.png ├── configs/ │ ├── suricata.yaml │ └── threshold.conf ├── splunk-queries/ │ └── dashboard-queries.md └── incidents/ └── INC-001-bittorrent-detection.md ```
标签:AMSI绕过, Docker, GeoIP, GitHub Advanced Security, Home Lab, Metaprompt, NIDS, PB级数据处理, Portainer, Splunk Enterprise, SSH, Suricata, Tailscale, UFW, VPN, 免杀技术, 入侵检测系统, 威胁检测, 安全仪表板, 安全加固, 安全工程师, 安全数据湖, 安全运维, 安全运营中心, 安全防御评估, 家庭实验室, 容器化, 日志聚合, 暴力破解检测, 现代安全运营, 网络安全, 网络映射, 网络流量分析, 请求拦截, 远程访问, 防火墙, 隐私保护