CR1MS0N-Operator/veil
GitHub: CR1MS0N-Operator/veil
一套生产级红队基础设施即代码项目,通过多节点 WireGuard 网状网络整合 Mythic C2、蜜罐检测、自动化威胁评分与 nftables 动态防护。
Stars: 0 | Forks: 0
# Veil
**CR1MS0N Security — 进攻性安全基础设施**
由 [CR1MS0N-Operator](https://github.com/CR1MS0N-Operator) 构建与运营 | CR1MS0N Security™
## 基础设施概览
| 节点 | 角色 | 操作系统 | WireGuard IP | LAN IP |
|------|------|----|-------------|--------|
| **Cerberus** | 边缘节点 — 服务、检测、蜜罐 | Arch Linux (无头模式) | `10.10.10.1` (中心) | `10.10.10.251` (静态) |
| **NightForge** | 操作员工作站 — 工具、计算、开发 | Arch Linux + Niri WM | `10.10.10.3` | `10.10.10.156` (DHCP) |
| **Tairn** | 攻击节点 — Mythic C2、agent 暂存、实验靶机 | NixOS 24.11 (声明式) | `10.10.10.4` | `10.10.10.230` (libvirt NAT) |
| **Hermes** | 重定向器 VM — C2 出口、流量转发、即用即抛 | Alpine Linux 3.23.3 | `10.10.10.5` | `10.10.10.200` (libvirt NAT) |
| **iPhone** | 移动端 WireGuard 客户端 | iOS | `10.10.10.2` | — |
所有节点间的通信均完全通过 WireGuard 中心辐射型网状网络运行。没有任何节点可以直接从 WAN 访问。
## 架构
```
Internet
│
┌──────▼──────┐
│ Cerberus │
│ 10.10.10.1 │
│ 10.10.10.x │
│ │
│ Cowrie │
│ Suricata │
│ Pi-hole │
│ Caddy TLS │
│ Gitea │
│ Vaultwarden │
│ Netdata │
│ Homepage │
└──────┬──────┘
│ WireGuard mesh (10.10.10.0/24)
│
┌────────────┼────────────────┐
│ │ │
│ 10.10.10.3 │ │ │ 10.10.10.4 │
│ 10.10.10.x │ │ │ 10.10.10.x │
│ │ │ │ (libvirt NAT, │
│ Operator WS │ │ │ NightForge-local) │
│ Niri WM │ │ │ │
│ Offensive tooling │ │ │ Mythic C2 │
│ Podman profiles │ │ │ Poseidon agent │
│ Neovim / tmux │ │ │ HTTP C2 profile │
│ Ollama (local AI) │ │ │ Lab target VMs │
│ │ │ │ NixOS declarative │
│ libvirt host │ │ └────────────────────────┘
│ ┌────────────────┴──┴────┐
│ │ Hermes │
│ │ 10.10.10.5 │
│ │ 10.10.10.200 │
│ │ (libvirt NAT, │
│ │ NightForge-local) │
│ │ │
│ │ Alpine Linux │
│ │ Nginx redirector │
│ │ C2 egress proxy │
│ │ WireGuard only access │
│ │ Disposable — rebuild │
│ │ from Terraform+XML │
│ └────────────────────────┘
│ │
└───────────────────┘
```
**WireGuard 拓扑:** 通过 Cerberus 构成的中心辐射型架构。Cerberus 是始终在线的边缘节点和网状网络中心。NightForge、Tairn 和 Hermes 专门通过 Cerberus 进行对等连接。节点间的跨网状网络通信启用了发夹路由。NightForge 还在 libvirt NAT (`10.10.10.0/24`) 下托管了两个 VM(Tairn、Hermes),可通过网状网络上的 WireGuard IP 访问。
## 拓扑
Veil 网络跨越了两个由 WireGuard 桥接的物理子网:
### 物理网络 (10.10.10.0/24)
```
Internet ─── Home Router ─── LAN (10.10.10.0/24)
│
┌──────────────┴──────────────┐
│ │
Cerberus (10.10.10.251) NightForge (10.10.10.156)
Edge node, always-on Operator workstation
```
### 虚拟网络 (10.10.11.0/24 — NightForge 上的 libvirt NAT)
```
NightForge
┌──────────────────┐
│ virbr0 bridge │
│ 10.10.11.1 │
└──┬───────────┬───┘
│ │
Tairn VM Hermes VM
10.10.11.230 10.10.11.200
NixOS Alpine
```
### WireGuard 网状网络 (10.10.10.0/24)
```
Cerberus (10.10.10.1) ─── hub, always-on
│ │ │
│ │ └── Hermes (10.10.10.5) — C2 redirector
│ │
│ └──────── Tairn (10.10.10.4) — Mythic C2
│
└────────────── NightForge (10.10.10.3) — operator workstation
iPhone (10.10.10.2) — mobile client (connects to Cerberus only)
```
### 网络规则
- 所有分支到分支的流量均通过 Cerberus 路由(发夹转发)
- Tairn 仅向 Cerberus 发起连接 — Cerberus 上没有为 Tairn 配置 endpoint
- Cerberus 无法访问 `10.10.11.x` — libvirt NAT 仅限于 NightForge 本地
- Hermes 和 Tairn 只能通过 WireGuard 访问;没有直接的 LAN 路径
- NightForge 的 SSH 配置使用 WireGuard IP(`10.10.10.4`、`10.10.10.5`),而不是 libvirt NAT IP
## 网络流量
流量如何从每个节点的角度在 Veil 网络中进行路由。
### 操作员到 C2 (NightForge → Tairn)
10.10.10.3 10.10.10.1 10.10.10.4
│
nftables forward: iif "wg0" oif "wg0" accept
rp_filter=0 on wg0
```
The Mythic C2 web UI (`https://10.10.10.4:7443`) is accessed exclusively over WireGuard. Tairn's DOCKER-USER iptables chain restricts port 7443 to `10.10.10.0/24`.
### C2 Agent 回调 (Internet → Hermes → Tairn)
WAN 10.10.10.1 10.10.11.1
port forward │
Hermes (10.10.10.5)
Nginx reverse proxy
│
Tairn (10.10.10.4)
Mythic C2 (7443)
```
Hermes 充当 C2 重定向器。Hermes 上的 Nginx 终结面向外部的 TLS,并将流量转发到 Tairn 上的 Mythic。Hermes 是即用即抛的 — 根据需要通过 Terraform + libvirt XML 进行重建。这提供了一层操作安全机制:重定向器在可配置的时间间隔后或在出现失陷指标后被烧毁并替换。
### 互联网威胁追踪 (Cerberus)
```
WAN ─── Cerberus (enp0s21f0u2c2)
│
├── Suricata (af-packet, all traffic) → fast.log → Shield scoring → nftables blackhole
│
└── Cowrie (port 22, fake SSH) → cowrie.json → Shield scoring → nftables blackhole
Shield scoring:
suricata_exploit → +3 | cowrie_login → +4
suricata_c2 → +5 | cowrie_command → +3
suricata_scan → +1 | cowrie_download → +5
suricata_alert → +2 | Block threshold: ≥ 4 → 1hr blackhole
```
Shield 评分引擎同时读取 Suricata 警报和 Cowrie 事件。任何累计得分超过 4 的源 IP 都将被添加到 nftables 黑洞集合中,TTL 为 1 小时。被封锁的 IP 也会被加入 `/var/nightforge/scan-queue.txt` 队列,以便进行可选的后续 Nuclei 侦察。
### 服务访问 (NightForge → Cerberus .lan services)
```
NightForge ──wg0── Cerberus:8489 (Caddy reverse proxy)
│
┌────────┴────────┐
│ │
git.lan:8486 dash.lan:8282
gitea.lan:3000 vault.lan:8081
search.lan:8888 pihole.lan:8083
```
所有 `.lan` 服务均通过 Caddy 本地 CA 经由 TLS 提供服务。NightForge 安装了 CA 根证书。WireGuard 发夹路由加上 Pi-hole 的 `.lan` DNS 解析,使得服务可以通过域名从任何网状节点访问。
## 节点详情
### Cerberus — 边缘节点
运行无头模式 Arch Linux 的 Chromebook。作为边界传感器平台和家庭实验室服务枢纽。所有服务均作为无 root 权限的 Podman Quadlets 在 systemd 下运行。
**检测栈:**
- **Cowrie 2.9.13** — 端口 22 上的 SSH 蜜罐。捕获攻击者的 TTP、凭据和会话数据。
- **Suricata 8.0.3** — 具有实时规则更新的网络 IDS。
- **Pi-hole** — 所有节点的 DNS 沉洞 + `.lan` 域名解析。
**服务:**
- **Gitea** — 自托管的 Git 服务器(所有 Veil 仓库的主要远程仓库)
- **Vaultwarden** — 自托管的密码管理器
- **Caddy** — 为所有 `.lan` 域名提供自动本地 CA TLS 的反向代理
- **Netdata** — 实时性能监控
- **Homepage** — NOC 仪表板
**防火墙:** nftables。通过 `iif "wg0" oif "wg0" accept` 实现 WireGuard 发夹路由。wg0 接口上设置 rp_filter=0。用于封锁 IP 的动态黑洞集合(1小时 TTL)。
### NightForge — 操作员工作站
主要操作员环境。Arch Linux 搭配 Niri Wayland 合成器。所有进攻性工具、开发和基础设施管理均在此运行。
- **硬件:** i3-10105F, 32GB RAM, GTX 1650
- **合成器:** Niri (Wayland, 滚动平铺布局)
- **容器运行时:** Podman rootless (ad, re, web, toolbox 配置)
- **编辑器:** 搭配 LSP 的 Neovim
- **Shell:** Zsh + Starship
- **VM 管理:** libvirt (Tairn、Hermes 作为 NAT VM 托管在此)
- **本地 AI:** Ollama (`qwen2.5:14b`,用于 RAG 流水线)
- **仪表板:** beszel agent (CR1MS0N-ops-dashboard) 通过端口 8489 汇报至 Cerberus
有关完整的工作站配置和操作员框架,请参见 [nightforge](https://github.com/CR1MS0N-Operator/nightforge)。
### Tairn — 攻击节点
通过 libvirt NAT 托管在 NightForge 上的 NixOS 24.11 虚拟机。声明式配置 — 整个系统状态在 `configuration.nix` 中进行版本控制。专门用于进攻性操作和课程实验工作。
- **C2 框架:** Mythic (基于 Docker)
- **主要 agent:** Poseidon (Go, Linux)
- **C2 profile:** HTTP C2
- **行动:** Operation CR1MS0N
- **访问:** 仅限 WireGuard (`10.10.10.4`)。Mythic UI 通过 DOCKER-USER iptables 链锁定在网状网络内
- **课程:** 经由 CyberWarfare Labs 获取认证红队分析师 (CRTA)、认证红队基础设施开发者 (CRT-ID) — 所有技术实践均附带 MITRE ATT&CK 映射文档
### Hermes — 重定向器 VM
通过 libvirt NAT 托管在 NightForge 上的 Alpine Linux 3.23.3 虚拟机。充当 C2 出口重定向器和流量转发层。
- **角色:** C2 重定向器 — 终结面向外部的 TLS,代理至 Tairn 上的 Mythic
- **操作系统:** Alpine Linux (极简,约 150MB 占用)
- **代理:** Nginx 反向代理 (TLS 终结 + stream 转发)
- **网络:** Nginx 监听 443 端口,上游指向 `10.10.10.4:7443`
- **即用即抛:** 完整的 VM 状态记录在 libvirt XML + Terraform 配置中;2 分钟内即可重建
- **生命周期:** 静态配置位于 `/etc/nginx/nginx.conf`、`/etc/wireguard/wg0.conf`、`/etc/network/interfaces`
- **访问:** 仅限 WireGuard (`10.10.10.5`)。无直接的 LAN 路径。
- **监控:** Netdata agent 汇报至 Cerberus
## 安全态势
| 控制措施 | 实现方式 |
|---------|---------------|
| 网络隔离 | WireGuard 网状网络 — 无节点可直接从 WAN 访问 |
| C2 访问控制 | iptables DOCKER-USER — 7443 端口仅限 `10.10.10.0/24` 访问 |
| C2 重定向器 | Hermes — 位于 WAN 和 Mythic 之间的即用即抛型 Alpine Nginx 代理 |
| 流向隔离 | 中心辐射型网状网络;所有分支到分支的流量均通过 Cerberus 路由 |
| 容器隔离 | Rootless Podman Quadlets (Cerberus),Docker (Tairn — Mythic 要求) |
| 虚拟机隔离 | 用于 AD 实验环境的 Air-gapped libvirt 网络 (`virbr1`, `10.10.10.0/24`) |
| 凭据管理 | Vaultwarden + `/etc/containers/secrets/` 用于 Quadlet 环境变量注入 |
| DNS 安全 | Pi-hole (`.lan` 解析 + 广告/追踪器沉洞) |
| TLS | Caddy 本地 CA (所有 `.lan` 服务),Nginx 自签名 (Hermes 重定向器) |
| SSH 加固 | 仅限密钥认证,禁止 root 密码登录,22 端口为 Cowrie 蜜罐 |
| 入侵检测 | Suricata 8.0.3 (网络 IDS),Cowrie 2.9.13 (SSH 蜜罐) |
| 自动化封锁 | NightForge Shield — 评估威胁,通过 nftables 将 IP 拉黑 1 小时 |
| 声明式基础设施 | Tairn 的整个操作系统状态都在 `configuration.nix` 中 — 可从零开始完全复现 |
| 防火墙默认拒绝 | nftables input 策略为 DROP;仅有显式的允许规则 |
| 审计日志 | Cerberus 上的 auditd,Suricata EVE JSON,Cowrie JSON 会话日志 |
| 远程访问 | Tailscale (需认证的覆盖网络),无端口转发 |
| libvirt 后端 | nftables — 与主机防火墙保持一致,避免 iptables/nftables 不匹配 |
| 网络分区 | Tairn 和 NightForge 没有直接的 WireGuard endpoint — Cerberus 会动态发现它们 |
## 监控
### NOC 仪表板
主要的运营仪表板在 Cerberus 的 `dash.lan:8282` 上运行。它提供对以下内容的实时可见性:
- **威胁情报:** Suricata 警报计数、Cowrie 会话统计、Shield 黑洞拦截
- **节点指标:** Cerberus 的 CPU、内存(通过 Netdata),以及 Tairn 和 Hermes(通过 beszel agents)
- **网络健康:** 带有握手时间戳的 WireGuard 对等状态;超过 300 秒未响应的对等方将被标记
- **服务链接:** 带有实时小部件的 Gitea、Vaultwarden、Pi-hole、SearXNG
NOC 数据来源于:
- `~/noc-status/*.json` — 由 systemd 定时器 `noc-update.timer` 每 5 分钟刷新一次
- `~/scripts/noc/` 中的 NOC 脚本:`wg-status.sh`、`cowrie-status.sh`、`suricata-status.sh`、`nftables-status.sh`
- 数据由 Caddy 在 8484 端口提供(`/noc-status/` 文件服务器)
### CR1MS0N-ops-dashboard
| 服务 | 端口 | Endpoint |
||------|----------|
| CR1MS0N-ops-dashboard | 9090 | 经由 Cerberus Caddy 代理 `:8489` 的 `10.10.10.3:9090` |
它提供:
- 多节点系统指标(CPU、RAM、磁盘、正常运行时间)
- agent 状态(Cerberus、NightForge、Tairn、Hermes 上的 beszel agents)
- 历史性能图表
### NOC 脚本
所有脚本均位于 `edge-node/scripts/noc/`:
| 脚本 | 输出 | 描述 |
|--------|--------|-------------|
| `wg-status.sh` | `wg.json` | WireGuard 对等健康状态 — 握手时间、每个对等方的状态 |
| `cowrie-status.sh` | `cowrie.json` | 蜜罐会话统计 — 连接数、独立 IP 数、最集中的攻击 IP |
| `suricata-status.sh` | `suricata.json` | IDS 警报统计 — 高危/严重警报、持续攻击源 |
| `nftables-status.sh` | `nftables.json` | 防火墙统计 — 黑洞丢弃、入站丢弃 |
| `noc-update.sh` | 以上所有 | 编排器 — 运行所有状态脚本,写入 `~/noc-status/` |
## 部署
Veil 采用混合部署模型,结合了声明式配置、基础设施即代码以及针对受限硬件的手动设置。
### 节点部署矩阵
| 节点 | 方法 | 工具 | 配置方式 |
|------|--------|---------|-------------|
| Cerberus | 手动 + Podman Quadlets | systemd, nftables, Caddy | Chromebook (ARM) — IaC 支持有限 |
| NightForge | 手动 + dotfiles | Niri, Podman, Neovim, Zsh | 桌面端,详见 [nightforge](https://github.com/CR1MS0N-Operator/nightforge) |
| Tairn | 声明式 | NixOS `configuration.nix` | `nixos-rebuild switch` — 完整 OS 状态在 VCS 中 |
| Hermes | IaC | Terraform + libvirt XML | `terraform apply` + Alpine 安装 |
### Terraform + Ansible 流水线 (Hermes)
Hermes 重定向器 VM 是唯一具有完整 IaC 覆盖的节点:
```
veil/
├── terraform/
│ ├── main.tf # libvirt provider config, VM definition
│ ├── variables.tf # CPU, RAM, disk sizing
│ └── outputs.tf # VM IP, SSH config
├── ansible/
│ ├── playbooks/
│ │ └── hermes.yml # Alpine setup: WireGuard, Nginx, Netdata
│ └── roles/
│ └── hermes/
│ ├── tasks/
│ │ ├── main.yml
│ │ ├── wireguard.yml
│ │ └── nginx.yml
│ └── templates/
│ ├── wg0.conf.j2
│ └── nginx.conf.j2
└── configs/
└── libvirt/
├── tairn.xml
└── hermes.xml
```
**部署序列:**
```
# 1. 配置 VM
cd veil/terraform
terraform init
terraform plan
terraform apply
# 2. 安装 Alpine (手动挂载 ISO + 通过 virt-viewer 运行 setup-alpine)
# 3. 配置 redirector
cd veil/ansible
ansible-playbook playbooks/hermes.yml -i inventories/hermes.ini
```
### NixOS 部署 (Tairn)
```
# 应用配置更改
ssh tairn # 10.10.10.4 via WireGuard
sudo nixos-rebuild switch --show-trace
# 配置文件位于 /etc/nixos/configuration.nix
# 已提交至 veil/configs/nixos/
```
### Cerberus Quadlet 部署
```
# 参见下方的 Quickstart 部分
# Quadlet 文件位于 edge-node/containers/
# nftables 配置位于 configs/nftables/cerberus.nft
```
### Hermes 即用即抛生命周期
```
1. terraform apply → VM provisioned on NightForge libvirt
2. Alpine setup-alpine → OS installed
3. ansible-playbook → Nginx + WireGuard + Netdata configured
4. wg-quick up → Connects to Veil mesh (10.10.10.5)
5. ── active ── → Redirecting C2 traffic for Tairn
6. terraform destroy → VM destroyed, redirector burned
7. Return to step 1 → New VM, new SSH keys, new WireGuard keys
```
这种烧毁并重建的周期是一种操作安全控制措施:即使重定向器被攻破,它也不包含任何持久化机密,并且可以在 5 分钟内从零开始替换。
## 仓库结构
```
veil/
├── README.md
├── configs/
│ ├── sysctl/
│ │ └── 99-wireguard.conf # Kernel tuning for WireGuard hairpin
│ └── nftables/
│ └── cerberus.nft # nftables ruleset
├── edge-node/
│ ├── containers/ # Podman Quadlet unit files
│ ├── systemd/ # User systemd units
│ └── scripts/ # Shield + NOC automation scripts
├── dotfiles/ # Shared shell/prompt configs (Starship)
├── terraform/ # Hermes redirector IaC
├── ansible/ # Hermes redirector Ansible playbooks
└── docs/
├── architecture.md
├── wireguard-mesh.md
├── cerberus-setup.md
├── tairn-setup.md
├── services.md # Full service reference
├── ops.md # Operations runbook
├── troubleshooting.md # Issue catalog
├── known-gaps.md # Active and resolved gaps
└── infra.md # Node registry, key paths, port map
```
## 快速开始 — Cerberus 边缘节点
```
# 1. 应用 sysctl 设置
sudo cp configs/sysctl/99-wireguard.conf /etc/sysctl.d/
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
# 2. 创建数据目录
sudo mkdir -p /var/nightforge/{cowrie-logs,cowrie-lib,scan-queue}
sudo chown -R $USER:$USER /var/nightforge/
sudo chown -R 100998:100998 /var/nightforge/cowrie-logs /var/nightforge/cowrie-lib
# 3. 部署 Cowrie honeypot
cp edge-node/containers/nightforge-cowrie.container ~/.config/containers/systemd/
systemctl --user daemon-reload
systemctl --user start nightforge-cowrie.service
# 4. 启用 linger
loginctl enable-linger $USER
```
## 运维手册
维护 Veil 网状网络和 Cerberus 边缘节点的常见操作任务。
### 健康检查
```
# 节点整体健康状况
systemctl --user status nightforge-cowrie nightforge-shield
sudo systemctl status suricata container-pihole container-gitea container-vaultwarden
# WireGuard mesh 健康状况
sudo wg show
sudo nft list set inet filter blackhole
# 扫描队列深度
wc -l /var/nightforge/scan-queue.txt
tail -5 /var/nightforge/scan-queue.txt
```
### 服务重启
```
# NightForge Shield (scoring engine)
systemctl --user restart nightforge-shield
journalctl --user -u nightforge-shield -f --output=cat
# Cowrie honeypot
systemctl --user restart nightforge-cowrie
journalctl --user -u nightforge-cowrie -n 50
# Suricata IDS
sudo systemctl restart suricata
sudo journalctl -u suricata -n 30
# 手动服务 (直到 Quadlet 迁移完成)
podman restart homepage
podman restart vaultwarden
```
### WireGuard 管理
```
# 查看 mesh 状态
sudo wg show
# 向 mesh 添加新 peer
# 1. 在新节点上生成密钥: wg genkey | tee privatekey | wg pubkey > publickey
# 2. 将 peer 添加到 Cerberus wg0.conf:
# [Peer]
# PublicKey =
# AllowedIPs = 10.10.10.x/32
# 3. 在 Cerberus 上重启 WireGuard: sudo systemctl restart wg-quick@wg0
# 4. 配置新节点与 Cerberus 建立 peer 连接
# 强制重新握手 (排查过时 peer)
sudo wg set wg0 peer endpoint :
# 配置更改后重新加载
sudo systemctl restart wg-quick@wg0
```
### 防火墙操作
```
# 查看完整 ruleset
sudo nft list ruleset
# 查看 blackhole set (当前被封禁的 IP)
sudo nft list set inet filter blackhole
# 手动封禁 IP (1小时)
sudo nft add element inet filter blackhole '{ 1.2.3.4 timeout 1h }'
# 手动解封 IP
sudo nft delete element inet filter blackhole '{ 1.2.3.4 }'
# 从配置重新加载 nftables
sudo systemctl restart nftables
```
### NOC 仪表板
```
# 查看 NOC 状态文件
cat ~/noc-status/wg.json
cat ~/noc-status/cowrie.json
cat ~/noc-status/suricata.json
cat ~/noc-status/nftables.json
# 强制 NOC 更新
systemctl --user start noc-update.service
# NOC 更新定时器每 5 分钟运行一次
systemctl --user status noc-update.timer
# 监控 WireGuard peer 健康状况
watch -n 5 sudo wg show
```
### 备份程序
```
# 自动化: 每日 02:00 UTC 通过 cron 运行
# 备份 Vaultwarden SQLite → ~/backups/vaultwarden/ → Gitea repo
# 手动备份
bash ~/backup-script.sh
cat ~/backup.log
# 验证备份 repo 最新 commit
curl -s http://git.lan/foreverlx/backups | grep "commit"
```
### 维护
```
# 每周自动维护 (周日 03:00 UTC)
# - pacman -Syu (全系统更新)
# - 记录日志至 /var/log/security-updates.log
# 手动维护
bash ~/scripts/maintenance.sh
# - Suricata 规则更新
# - 日志轮转 (移除超过 3 天的 cowrie.json 条目)
# - Vaultwarden SQLite 备份
# - Homepage 配置备份
# - Arch 包缓存预下载
```
### 重启程序
Cerberus 重启后,请按顺序验证以下内容:
```
# 1. 核心服务
systemctl --user status nightforge-cowrie nightforge-shield
sudo systemctl status suricata container-pihole container-gitea container-vaultwarden
# 2. 手动启动 (直到 Quadlet 迁移完成)
podman start homepage
podman start vaultwarden
# 3. Firewall 正常运行
sudo nft list ruleset | grep policy
sudo nft list set inet filter blackhole
# 4. Cowrie 位于端口 22
ss -tlnp | grep :22
# 5. WireGuard mesh
sudo wg show
```
### 故障排除
```
# Cowrie 未记录日志
ls -la /var/nightforge/cowrie-logs/ # should be owned by UID 100998
sudo chown -R 100998:100998 /var/nightforge/cowrie-logs /var/nightforge/cowrie-lib
# Shield 未封禁
systemctl --user status nightforge-shield
sudo nft list sets | grep blackhole
# Vaultwarden 无法访问
podman ps | grep vault
ss -tlnp | grep 8081
sudo nft list ruleset | grep 8081
# 重启后用户 Quadlets 丢失
systemctl --user daemon-reload
```
有关包含根本原因和解决方法的完整问题目录,请参见 `docs/troubleshooting.md`。
## 已知缺陷
Veil 基础设施中追踪的活跃缺陷。有关包含已解决缺陷在内的完整详细信息,请参见 `docs/known-gaps.md`。
### 活跃缺陷
| 缺陷 | 严重性 | 阶段 | 工作量 |
|-----|----------|-------|--------|
| Netdata 未监控容器(未挂载 Podman socket) | 中等 | D1 | 低 |
| NightForge 未集成到集中式监控中 | 中等 | N1 | 中等 |
| Homepage 的 Netdata 服务小部件显示相同的数据 | 低 | D1 | 低 |
| SearXNG 自动补全功能失效 | 低 | D1 | 低 |
| 扫描队列没有 worker 消费该队列 | 低 | 4 | 高 |
| 无网络隔离 (VLANs) — 扁平化的 10.10.20.0/24 | 改进项 | 6 | 非常高 |
### 缺陷详情
**缺陷 1 — Homepage 的 Netdata 服务小部件显示相同的数据**
Suricata、Cowrie 和 Netdata 卡片全都显示相同的 Netdata CPU 图表。修复:分配不同的指标 — Suricata → `suricata.alerts`,Cowrie → container cgroup 图表,Netdata → `system.cpu`。
**缺陷 2 — SearXNG 自动补全功能失效**
Homepage 搜索的 `suggestionUrl` 指向 SearXNG 自动补全器,但建议未显示。可能是 CORS 或 endpoint 格式问题。
**缺陷 3 — Netdata 未监控容器**
Netdata 能看到主机指标,但容器级别的指标不可见。Podman socket 未挂载到 Netdata 容器中。修复:在 Netdata Quadlet 中添加 `Volume=/run/user/1000/podman/podman.sock:/var/run/docker.sock:ro`。
**缺陷 4 — 无扫描队列 Worker**
被封锁的 IP 在扫描队列中积累,但没有 worker 执行 Nuclei 侦察。计划:每 5 分钟运行一次 `recon-worker.sh` 的 `nightforge-recon.timer`。
**缺陷 5 — NightForge 未集成到集中式监控中**
NightForge 已连接到网状网络 (10.10.10.3),但未向 NOC 仪表板汇报。计划:Netdata agent、Homepage 服务卡片、集中式日志聚合。
**缺陷 6 — 无网络隔离 (VLANs)**
网络是扁平化的 10.10.20.0/24。建议的分区:DMZ (蜜罐)、Ops (服务)、Red/C2 (NightForge, Mythic)、Management (OOB)。前提条件:管理型交换机、pfSense/OPNsense 路由器。
### 已解决缺陷
以下缺陷在阶段 S1 (服务清理) 期间已关闭:
- Pi-hole 密码明文存储 → 使用带有凭据文件的系统 Quadlet
- Vaultwarden 服务冲突 → 在端口 8081 上使用单用户 Quadlet
- 无 TLS 前端 → 部署带有本地 CA 的 Caddy
- Homepage 无自启动 → 用户 Quadlet + 启用 linger
- WireGuard 重启持久化 → 启用 wg-quick@wg0
- WireGuard 网状网络不完整 → 添加 Tairn,解决发夹路由问题
- 手写的 Caddy/Gitea/Vaultwarden/Pi-hole 单元 → 迁移至 Quadlet
- NightForge DNS 单点故障 → Cloudflare 后备 DNS
- Cerberus 主机名 b-k3s → 重命名为 cerberus
- Tairn/Mythic C2 部署 → 部署 NixOS + Mythic + Poseidon
- 子网迁移 → ISP 变更后将所有配置更新至 10.10.20.0/24
## 免责声明
所有工具均部署在由作者拥有和运营的基础设施上,用于授权的安全研究和作品集开发。仅限授权使用。
**作者:** Darrius Grate (CR1MS0N-Operator) | CR1MS0N Security™
**许可证:** MIT
标签:IP 地址批量处理, Metaprompt, Mythic C2, NixOS, WireGuard组网, 流量重定向, 红队基础设施, 网络信息收集, 请求拦截