femboyisp/blackwall

GitHub: femboyisp/blackwall

Blackwall 是一个基于 Rust 和 nftables 的欺骗防火墙平台,通过将所有未显式开放的端口伪装为交互式 honeypot 来混淆攻击者侦察,同时为运营商提供多租户管理和 DDoS 缓解能力。

Stars: 1 | Forks: 0

# Blackwall **一个 Rust 欺骗防火墙和 DDoS 缓解平台,专为运营自有 IP 空间的运营商设计。** 默认情况下,您的 IPv4/IPv6 前缀下的每个地址和端口都*看起来*是开放的,并且运行着 服务 —— 扫描器和攻击者无法分辨哪些端口是真实的。只有当您显式开放某个端口时(通过 FireHOL 风格的配置、API 或 Incus 自动发现),它才会成为真正的、 转发的服务;其他所有请求都由一个行为像真实服务一样的交互式 honeypot 引擎来应答。Blackwall 专为高数据包速率和多租户托管而构建,目前拥有快速 nftables 数据平面,并在路线图中规划了 XDP/eBPF 快速路径、BGP 清洗和 DNS fast-flux。 ## 工作原理 您的前缀中的每个 `(IP, protocol, port)` 都恰好处于以下三种状态之一: | 状态 | 行为 | |-------|-----------| | **Open** | 真实服务 —— 流量被转发(NAT'd)到支持的主机、VM 或 container,并搭乘 nftables flowtable 快速路径。欺骗引擎从不触及它,因此真实流量保持接近线速。 | | **Deception** *(默认)* | 看起来开放且活跃。关闭的端口会回应真实的 TCP 握手,并像交互式 honeypot 一样进行可信的、感知协议的对话(SSH、HTTP、SMTP、数据库等)—— 但永远无法触及真实内容,并且每次探测都会被记录。 | | **Closed** | 静默丢弃(例如管理端口)。 | 因此,对您其中一台主机的扫描会显示*大量*开放端口,而您那一两个真实 服务则隐藏在噪音中 —— 并且伪造的指纹会随时间轮换(移动目标 欺骗),而真实服务则保持稳定。 ## 功能 - 跨整个 IPv4 + IPv6 前缀的**全端口开放欺骗**。 - **交互式 honeypot 引擎** *(里程碑 2)* —— 针对扫描/洪泛 流量提供无状态 SYN-cookie 应答,以及保持真实多轮对话并捕获 攻击者活动的特定协议模拟器。 - **FireHOL 风格的配置 DSL** —— 高级、可读的规则,被编译为 nftables。 - **快速 nftables 数据平面** —— 真实流量在 flowtable 快速路径上被接受/DNAT'd;欺骗 流量被移交给 userspace;设计上以便后续能无缝接入 XDP/AF_XDP 快速路径。 - **多租户** —— 每个租户的 IP/前缀所有权;租户只能通过配置或 API 管理 自己 地址上的端口。 - **PostgreSQL 支持的状态**,带有每次策略更改的完整审计日志。 - **Incus 自动发现** *(里程碑 3)* —— 实例声明端口,Blackwall 自动 打开/关闭它们。 - **移动目标 & DNS fast-flux,自动 CAKE 流量整形,REST API + Prometheus 指标** *(后期里程碑)*。 - **DDoS 缓解** *(子项目)* —— XDP/eBPF 快速丢弃、SYNPROXY 以及运营商级别的 BGP 清洗 (RTBH、FlowSpec),适用于宣告自己 ASN 的运营商。 ## 配置 策略使用一种小巧、可读的 DSL 编写,该语言可编译为 nftables: ``` interface wan eth0 ipv4 203.0.113.0/24 ipv6 2001:db8::/48 default deception # everything not listed below looks open but is fake tenant acme { owns 203.0.113.5, 2001:db8::5 allow tcp 443 incus:web01 # real service -> forwarded to a container allow udp 53 incus:dns01 } ``` ## 构建与运行 需要最新稳定的 Rust 工具链以及(用于状态层的)PostgreSQL。 ``` # 启动开发数据库(主机端口可通过 BW_PG_PORT 覆盖;默认为 5432) docker compose up -d postgres # 解析 config 并打印它将应用的 nftables ruleset(无 DB,无需 root) cargo run -p blackwalld -- render --config path/to/blackwall.conf # 持久化 policy 并将 ruleset 应用到内核(需要 CAP_NET_ADMIN) export DATABASE_URL=postgres://blackwall:blackwall@localhost:5432/blackwall sudo -E cargo run -p blackwalld -- apply --config path/to/blackwall.conf ``` ## 开发 ``` cargo fmt --all -- --check cargo clippy --workspace --all-targets -- --deny warnings DATABASE_URL=postgres://blackwall:blackwall@localhost:5432/blackwall cargo test --workspace cargo llvm-cov --workspace --fail-under-lines 90 # ≥90% line coverage is enforced ``` 该仓库遵循严格的编码指南(deny-warnings lints、精确的依赖版本锁定、公共项的 rustdoc)并自带 pre-commit 配置(`pre-commit install`)。 ### Workspace 布局 | Crate | 职责 | |-------|----------------| | `blackwall-core` | 领域类型、单端口状态机、策略解析和验证。 | | `blackwall-config` | 配置 DSL:lexer + parser → 策略模型。 | | `blackwall-state` | PostgreSQL 持久化(migrations、租户、服务、审计日志)。 | | `blackwall-nft` | 将策略渲染为 nftables 规则集并原子化应用。 | | `blackwalld` | 将一切组装起来的 daemon/CLI(`render`、`apply`)。 | 完整的设计规范位于 [`docs/superpowers/specs/`](docs/superpowers/specs/)。 ## 路线图 Blackwall 作为四个独立的子项目构建,每个都以里程碑形式交付: **A — 欺骗防火墙 + 编排器** *(进行中)* - ✅ **M1 — 核心基础:** workspace、领域/策略模型、配置 DSL、PostgreSQL 状态、 nftables 渲染 + 原子化应用、CLI。 - ⏳ **M2 — 欺骗引擎:** 双层无状态 + 带有协议模拟器的交互式 honeypot。 - ⏳ **M3 — 发现、整形、flux:** 主机/Incus 发现、自动 CAKE 整形 + 速度测试、 签名轮换、DNS fast-flux(Knot DNS)。 - ⏳ **M4 — API 与运维:** 租户范围内的 REST API、Prometheus 指标、daemon 监督。 **B — DDoS 数据平面** — XDP/eBPF + AF_XDP 快速丢弃、SYNPROXY、conntrack、速率限制。 **C — ISP/BGP 控制平面** — 自有 ASN 前缀宣告、RTBH、FlowSpec、清洗、dn42。 **D — 检测与遥测** — 驱动 B 和 C 的 sFlow/NetFlow/IPFIX 摄取。 ## 许可证 采用 [GNU 通用公共许可证 v3.0](LICENSE) 授权。
标签:nftables, Rust, XXE攻击, 主机安全, 可视化界面, 密码管理, 抗DDoS, 插件系统, 测试用例, 网络安全, 网络流量审计, 网络测绘, 自定义请求头, 蜜罐技术, 请求拦截, 通知系统, 防御系统, 防火墙, 隐私保护