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, 插件系统, 测试用例, 网络安全, 网络流量审计, 网络测绘, 自定义请求头, 蜜罐技术, 请求拦截, 通知系统, 防御系统, 防火墙, 隐私保护