01rabbit/Azazel-Pi
GitHub: 01rabbit/Azazel-Pi
一款基于树莓派的便携式主动网络防御网关,利用诱饵欺骗和流量延迟战术在不受信任的网络环境中误导并牵制攻击者。
Stars: 6 | Forks: 0
# AZ-01X Azazel-Edge - 赛博替罪羊网关
English | [日本語](README_ja.md)









## 项目状态 (EOL)
本仓库已于 **2026-05-16 起停止维护 (EOL)**。
- 本仓库的开发工作已结束。
- 所有维护的功能已移交给 **Azazel-Edge**。
- 仅在以下仓库接受新功能、错误修复和安全修复:
- [https://github.com/01rabbit/Azazel-Edge](https://github.com/01rabbit/Azazel-Edge)
- EOL 归档操作清单:
- [EOL_ARCHIVE_CHECKLIST.md](EOL_ARCHIVE_CHECKLIST.md)
在提出任何 issue 或 pull request 之前,请使用 Azazel-Edge 仓库,而不是本仓库。
## 概念
您知道**迟滞行动**这个术语吗?在军事战略中,这是一种防御性作战,防御部队在不断交战的同时避免决定性冲突,尽可能延缓敌军的推进速度以争取时间。在当今的网络战中,攻击是快速且自动化的,资产可能在几秒钟内被攻破。我们认为,这种经典的战术概念应该被重新诠释并应用于现代网络安全。
基于这一理念,我们开发了 **Azazel System**。该工具实现了一种**替罪羊式诱饵**,能够吸收攻击、误导对手,并在战术上延缓他们的进度。与仅用于观察的传统蜜罐不同,Azazel 主动限制攻击者,实现了**网络空间中的迟滞行动**。
该系统被设计为一个**便携式安全网关**,可在连接到**不受信任的外部网络**(如酒店 Wi-Fi、活动场馆)时主动保护用户,或用于保护**临时实验室环境**。
虽然现代战场已转移到网络空间,但“限制敌人以争取时间”的概念依然有效。**Azazel System** 体现了数字化战争中战术性“网络牵制”的一个答案。
## 设计原则
**Azazel System** 的防御理念灵感来源于两个日本战术概念:
**战场牵制**:基于旧日本陆军的“将敌人牵制在战场上”的防御原则。这种方法不是简单地阻挡攻击,而是有意将对手引入受控环境,限制其行动自由,同时为准备和反攻争取时间。Azazel 同样将入侵者引导至诱饵和通信延迟中,限制攻击媒介并将主动权转移给防御者。
**后之先**:一种“在响应中夺取主动权”的高级武术策略。虽然看似处于反应状态,但这种技术利用对手的动作来获得控制权并创造反击机会。Azazel 通过在 Suricata 检测后触发延迟控制来实现这一理念,有意识地接受、观察和控制攻击——体现了这种战术响应模式。
因此,Azazel 实现了“防御不仅是保护,更是控制敌人行为并争取时间”的理念——一款根植于日本战略思想的网络欺骗工具。
## 实现细节
### 基础平台
- **Raspberry Pi 5 Model B**(便携式安全网关)
- 为现场部署和临时网络保护进行了优化
- 用于小规模网络防御的低成本解决方案
### 与 Azazel-Zero 的比较
- **Azazel-Edge**
- 基于 Raspberry Pi 5 构建的便携式安全网关(赛博替罪羊网关)
- 旨在为临时搭建的小规模网络提供低成本保护的概念模型
- 具有强烈的实验性质,作为多项技术元素的测试平台
- **Azazel-Zero**
- 轻量级版本,通过限制用例和剥离不必要功能来进行实际操作
- 作为便携式物理屏障构建,优先考虑移动性和实用性
- 与作为概念模型的 Azazel-Edge 不同,Azazel-Zero 定位于具备实战能力的实用模型
### 核心防御功能
#### 实时威胁检测与响应
- **Suricata IDS/IPS**:入侵检测和防御系统
- **OpenCanary**:用于误导攻击者的蜜罐服务
- **动态流量控制**:使用 `tc` 和 `iptables` 进行战术延迟
- DNAT 强制使用 iptables NAT 规则将流量透明重定向至蜜罐服务。
#### 防御模式
- **Portal 模式**(绿色):具有最少限制的正常操作
- **Shield 模式**(黄色):具有流量整形和 QoS 控制的加强监控
- **Lockdown 模式**(红色):全面牵制,具有严格的防火墙规则和仅限白名单的通信
#### 状态显示与监控
- **电子墨水屏显示**:实时状态可视化,显示当前防御模式、威胁评分、网络状态和警报计数器
- **交互式 TUI 菜单**:包含键盘导航和安全功能的全面终端控制界面
- **Rich CLI 界面**:带有颜色编码模式指示器的终端状态监控
- **Web 仪表盘**:Mattermost 集成,用于警报和通知
### 架构组件
| 组件 | 用途 |
|-----------|---------|
| `azazel_edge/core/state_machine.py` | 控制防御姿态之间的转换 |
| `azazel_edge/core/actions/` | 将 tc/iptables 操作建模为幂等计划 |
| `azazel_edge/core/ingest/` | 解析 Suricata EVE 日志和 OpenCanary 事件 |
| `azazel_edge/core/display/` | 电子墨水屏状态可视化和渲染 |
| `azctl/` | 命令行界面、守护进程管理和交互式 TUI 菜单 |
| `configs/` | 带有 schema 验证的声明式配置 |
| `deploy/` | 第三方服务部署配置 |
| `scripts/install_azazel.sh` | 自动化配置和安装 |
## 功能特性
### 战术迟滞实现
将军事概念中的“迟滞行动”应用于网络空间——允许入侵的同时,通过流量整形和误导策略性地控制其进展。
### 替罪羊诱饵系统
利用 OpenCanary 和自定义服务来误导和隔离攻击者,而不是仅仅观察他们,且不影响合法用户。
### 自适应响应系统
- **Portal → Shield**:激活流量控制和增强监控
- **Shield → Lockdown**:实施带有医疗 FQDN 白名单的严格防火墙规则
- **动态评分**:持续的威胁评估与自动模式转换
### 内网 QoS 控制 (v2.2.0 新增)
针对 LAN 设备的基于权限的流量整形和安全执行:
- **基于标记的分类**:使用 HTB 带宽整形的 Premium、standard、best effort 和 restricted 流量类别
- **MAC 验证**:三种安全模式 用于防止 ARP 欺骗和 IP/MAC 不匹配攻击
- **动态优先级**:可选的基于评分的自动类别调整,用于自适应带宽分配
- **CSV 注册表**:基于简单 CSV 的特权主机管理,带有 IP/MAC 白名单功能
- **交互式 TUI**:用于特权主机管理和模式切换的命令行菜单
- **安全测试**:用于在不修改网络的情况下验证配置的 DRY_RUN 模式
有关架构请参阅 [`docs/INTERNAL_NETWORK_CONTROL.md`](docs/INTERNAL_NETWORK_CONTROL.md),测试指南请参阅 [`docs/QOS_TESTING.md`](docs/QOS_TESTING.md)。
### 便携式部署
专为 Raspberry Pi 优化的轻量级配置,可在灾难恢复、现场操作或临时网络搭建中实现快速部署。
## 技术栈
- **基础操作系统**:Raspberry Pi OS (64-bit Lite)
- **IDS/IPS**:带有自定义规则集的 Suricata
- **蜜罐**:用于服务欺骗的 OpenCanary
- **日志处理**:用于集中式日志收集的 Vector
- **流量控制**:`tc` (Traffic Control) + `iptables`
- **告警**:Mattermost 集成
- **显示屏**:使用 Python 渲染的 Waveshare 电子墨水屏
- **语言**:Python 3.8+ 及 asyncio、rich 和交互式 TUI 库
## 安装说明
### 前置条件
- Raspberry Pi 5 Model B(推荐)或兼容的 ARM64 设备
- Raspberry Pi OS (64-bit Lite) 或基于 Debian 的发行版
- 用于安装依赖项的互联网连接
- 管理员权限
- 可选:用于状态可视化的 Waveshare 2.13 英寸电子墨水屏
### 快速设置
克隆仓库或下载发行版后,运行完整的自动安装程序:
```
sudo scripts/install_azazel_complete.sh --start
# 或逐步安装:
# 1. 基础安装
sudo scripts/install_azazel.sh
# 2. 完整配置设置(推荐)
sudo scripts/install_azazel_complete.sh --start
# 3. Ollama AI 模型设置
sudo scripts/setup_ollama_model.sh
```
**完整的安装程序 (`install_azazel_complete.sh`) 包含:**
- 基础依赖项
- 电子墨水屏支持 (Pillow, NumPy)
- PostgreSQL 和 Ollama 容器
- 所有配置文件的部署
- Nginx 反向代理设置
- Systemd 服务配置
- Ollama 模型设置说明
**Ollama 模型设置:**
安装程序将提示您下载 AI 模型文件:
```
wget -O /opt/models/Qwen2.5-1.5B-Instruct-uncensored.Q4_K_M.gguf \
https://huggingface.co/bartowski/Qwen2.5-1.5B-Instruct-GGUF/resolve/main/Qwen2.5-1.5B-Instruct-uncensored.Q4_K_M.gguf
```
或使用自动模型设置脚本:
```
sudo scripts/setup_ollama_model.sh
```
有关完整的安装说明、故障排除和电子墨水屏设置,请参阅 [`docs/en/INSTALLATION.md`](docs/en/INSTALLATION.md)。
### 电子墨水屏设置 (可选)
如果使用 Waveshare 电子墨水屏:
```
# 在完整安装程序中启用 E-Paper 集成
sudo scripts/install_azazel_complete.sh --enable-epd --start
# 如果未连接硬件,请使用 emulation
sudo scripts/install_azazel_complete.sh --enable-epd --epd-emulate --start
# 测试显示器(如果硬件不存在,请使用 --emulate)
sudo python3 -m azazel_edge.core.display.epd_daemon --mode test --emulate
# 启用 E-Paper 服务(如果您没有使用 --start)
sudo systemctl enable --now azazel-epd.service
```
有关完整的电子墨水屏配置说明,请参阅 [`docs/en/EPD_SETUP.md`](docs/en/EPD_SETUP.md)。
## 运行测试 (开发者)
本项目使用位于 `.venv` 的本地虚拟环境进行开发测试。要运行在仿真模式下执行电子墨水屏渲染的单元测试,请执行以下操作:
1. 激活或创建虚拟环境(示例):
```
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e '.[test]'
```
2. 安装电子墨水屏渲染使用的可选依赖项:
```
pip install pillow
```
3. 运行测试(示例):
```
.venv/bin/pytest tests/core/test_epd_daemon.py -q
```
注意事项:
- 电子墨水屏渲染器支持 `--emulate`,它避免了硬件访问,并在以 `--mode test` 运行时写入一个 PNG 文件。
- 使用 `--wan-state-path` 将渲染器/收集器指向自定义的 WAN 状态文件以进行集成测试。
### 可选:使用 Nginx 作为 Mattermost 前端
要通过 Nginx 反向代理提供 Mattermost 服务(推荐),请使用提供的模板和设置脚本:
```
sudo scripts/setup_nginx_mattermost.sh
```
这将:
- 安装 Nginx(如果尚未安装)
- 从 `deploy/nginx-site.conf` 部署反向代理配置
- 启用该站点并重新加载 Nginx
之后,应该可以通过 `http://<设备IP>/`(端口 80)访问 Mattermost,并被代理到 `127.0.0.1:8065`。
对于 HTTPS,请添加您的 TLS server 块或使用 Certbot。
### 可选:Flask Web UI 仪表盘
Azazel-Edge 现在在 `azazel_web/` 中包含了一个基于 Flask 的 Web UI 后端和仪表盘资产。
```
# local run (dev)
python3 azazel_web/app.py
# systemd run (installed host)
sudo systemctl enable --now azazel-web.service
```
默认绑定地址是 `127.0.0.1:8084`。可通过以下方式更改:
```
export AZAZEL_WEB_HOST=0.0.0.0
export AZAZEL_WEB_PORT=8084
python3 azazel_web/app.py
```
### 统一 Textual TUI (移植自 Azazel-Zero)
旧的 `azctl/menu` 模块化 TUI 已被移除,取而代之的是 Azazel-Zero 风格的统一 Textual TUI。
```
# 启动 unified TUI 菜单
python3 -m azctl.cli menu
# 使用特定接口配置(可选)
python3 -m azctl.cli menu --lan-if ${AZAZEL_LAN_IF:-wlan0} --wan-if ${AZAZEL_WAN_IF:-wlan1}
```
- 运行时实现:`azctl/tui_zero.py` + `azctl/tui_zero_textual.py`
- 依赖项:`textual`
- 按键控制:
- `u`:刷新
- `a`:开放阶段 (`portal`)
- `r`:重新探测 (`shield`)
- `c`:牵制 (`lockdown`)
- `m`:切换菜单
- `l`:切换详情
- `q`:退出
## 使用说明
### 命令行界面
#### 状态监控
```
# 基本状态(文本输出)
python3 -m azctl.cli status
# 用于脚本编写的 JSON 输出
python3 -m azctl.cli status --json
# 带有 color-coded panels 的 Rich TUI
python3 -m azctl.cli status --tui
# Continuous monitoring
python3 -m azctl.cli status --watch --interval 2
```
#### 模式管理
```
# Long-running daemon (automatic mode switching)
python3 -m azctl.cli serve
# Manual mode transitions
echo '{"mode": "shield"}' | azctl events --config -
echo '{"mode": "lockdown"}' | azctl events --config -
```
#### 交互式 TUI 菜单
```
# 启动 unified Textual TUI。如果省略了 --wan-if,azctl 将参考
# WAN manager 以选择活动的 WAN 接口。要覆盖选择,请使用
# 下面描述的 CLI flags 或 environment variables。
python3 -m azctl.cli menu
# 指定自定义接口(显式 override)
python3 -m azctl.cli menu --lan-if ${AZAZEL_LAN_IF:-wlan0} --wan-if ${AZAZEL_WAN_IF:-wlan1}
# 或者让系统自动选择 WAN:
python3 -m azctl.cli menu --lan-if ${AZAZEL_LAN_IF:-wlan0}
```
### 配置工作流
1. **编辑核心配置**:修改 `/etc/azazel/azazel.yaml` 以调整延迟值、带宽控制和 Lockdown 白名单(模板位于 `configs/network/azazel.yaml`)。
- 接口默认值:`${AZAZEL_LAN_IF:-wlan0}` 通常被视为内部局域网 (AP);`${AZAZEL_WAN_IF:-lan1}` 和 `${AZAZEL_WAN_IF:-eth0}` 是常见的外部 (WAN/上行链路) 候选接口,并在 `configs/network/azazel.yaml` 中的 `interfaces.external` 下列出。
注意:Azazel 现在优先使用在未提供 `--wan-if` 时由 WAN 管理器生成的运行时 WAN 选择。要显式覆盖所选接口,请在运行命令或脚本之前设置环境变量 `AZAZEL_WAN_IF` 和/或 `AZAZEL_LAN_IF`。
- 覆盖选项:
- CLI:向 `azctl` 命令传递 `--lan-if` 和/或 `--wan-if` 以显式设置接口。
- 环境变量:设置 `AZAZEL_LAN_IF` 或 `AZAZEL_WAN_IF` 以更改脚本和服务的默认值。
- 动态:如果省略了 `--wan-if`,`azctl` 将查询 WAN 管理器(推荐),以根据运行时健康检查选择活跃的 WAN 接口。
2. **生成 Suricata 规则**:使用 `scripts/suricata_generate.py` 渲染特定环境的 IDS 配置
3. **重启服务**:使用 `sudo systemctl restart azctl-unified.service` 应用更改
4. **健康检查**:使用 `scripts/sanity_check.sh` 验证服务状态
5. **监控操作**:分析 `decisions.log` 中的评分结果,并在事件发生时使用 `azctl` 进行手动模式切换
### 动态 WAN 选择 (新功能)
- `azctl wan-manager` 服务会在启动后以及运行期间持续评估所有候选的 WAN 接口(来自 `interfaces.external`)。
- 健康快照(链路状态、IP 存在状态、估计速度)将被写入 `runtime/wan_state.json`(或在已部署的系统上为 `/var/run/azazel/wan_state.json`),并显示在电子墨水屏上。您可以在测试期间或对于非标准部署使用 `AZAZEL_WAN_STATE_PATH` 环境变量覆盖默认路径。
- WAN 管理器按优先级顺序读取候选列表:显式的 CLI `--candidate` 参数、`AZAZEL_WAN_CANDIDATES` 环境变量(逗号分隔)、在 `configs/network/azazel.yaml` 中声明的值(`interfaces.external` 或 `interfaces.wan`),然后是安全的备用选项。使用 `AZAZEL_WAN_CANDIDATES` 可以强制指定特定的候选顺序而无需更改配置文件。
- 当活跃接口发生更改时,管理器会重新应用 `bin/azazel-traffic-init.sh`,刷新 NAT (`iptables -t nat`),并重启依赖服务(Suricata 和 `azctl-unified`),以便它们立即使用新接口。
- Suricata 现在通过 `azazel_edge.core.network.suricata_wrapper` 启动,该封装程序会读取同一个 WAN 状态文件,因此只需重启服务即可跟进最新选择。
开发者注记 — 非 root 测试与备用行为
- 当作为系统服务运行时,WAN 管理器将尝试把运行时状态文件写入系统运行时路径(例如 `/var/run/azazel/wan_state.json`)。在进程没有权限创建 `/var/run/azazel` 的系统上,管理器现在会自动回退到仓库本地路径 `runtime/wan_state.json`,以便开发者可以在没有 root 权限的情况下运行和测试 `azctl wan-manager`。
- 为了在测试或非标准部署中进行显式控制,请在运行管理器之前将 `AZAZEL_WAN_STATE_PATH` 设置为可写入的路径。示例(开发环境):
```
# 将状态写入 repository runtime 目录(无需 root)
AZAZEL_WAN_STATE_PATH=runtime/wan_state.json python3 -m azctl.cli wan-manager --once
```
- 对于生产系统,请通过 systemd (root) 运行 WAN 管理器,以便 traffic-init、iptables/nft 和服务重启具备所需的权限。示例(推荐用于已部署系统):
```
sudo systemctl enable --now azazel-wan-manager.service
```
这些选项允许安全的开发者测试,同时保留了在生产环境中预期的特权行为。
### 防御模式操作
- **Portal 模式**:以最小网络影响的基线监控
- **Shield 模式**:由中等威胁评分激活;应用流量整形和增强的日志记录
- **Lockdown 模式**:由高严重性警报触发;限制除医疗/紧急 FQDN 之外的所有流量
模式转换将连同时间戳、评分和触发事件一起记录到 `/var/log/azazel/decisions.log` 中。
## 文档
### 英文文档
- [`docs/en/INSTALLATION.md`](docs/en/INSTALLATION.md) — 完整的安装和设置指南
- [`docs/en/OPERATIONS.md`](docs/en/OPERATIONS.md) — 操作程序和维护
- [`docs/en/NETWORK_SETUP.md`](docs/en/NETWORK_SETUP.md) — 网络配置和网关设置
- [`docs/en/TROUBLESHOOTING.md`](docs/en/TROUBLESHOOTING.md) — 全面的问题解决指南
- [`docs/en/EPD_SETUP.md`](docs/en/EPD_SETUP.md) — 电子墨水屏配置
- [`docs/en/ARCHITECTURE.md`](docs/en/ARCHITECTURE.md) — 系统架构和组件关系
- [`docs/en/API_REFERENCE.md`](docs/en/API_REFERENCE.md) — Python 模块和脚本参考
## 开发背景
现代网络攻击日益快速和自动化,使得传统的蜜罐显得力不从心。该系统的设计不仅是为了**观察或阻断,而是为了战术性延迟**——将时间转化为防御资产。
其核心理念在于认识到,在不对称网络战中,防御者往往无法阻止最初的沦陷,但可以控制攻击者的后续行动。通过实施战略性的延迟和误导,Azazel 为检测、分析和响应创造了机会。
### 开发者注记与辅助 API
`TrafficControlEngine` 提供了两个辅助函数,使测试和开发更容易:
- `TrafficControlEngine.set_subprocess_runner(runner_callable)`
- 在测试中注入自定义子进程运行器,以模拟 `tc`/`nft` 输出而无需运行系统命令。
- 该运行器应接受 `(cmd, **kwargs)` 并返回一个具有 `returncode`、`stdout` 和 `stderr` 属性的对象(一个 `subprocess.CompletedProcess` 是理想选择)。
- 测试中的用法示例:
from azazel_edge.core.enforcer.traffic_control import get_traffic_control_engine, make_completed_process
engine = get_traffic_control_engine()
engine.set_subprocess_runner(lambda cmd, **kw: make_completed_process(cmd, 0, stdout='ok'))
- `make_completed_process(cmd, returncode=0, stdout='', stderr='')`
- 便捷工厂函数(可在 `traffic_control.py` 的模块级别使用),用于为测试生成类似 CompletedProcess 的对象。
这些 API 使得在不要求 root 或修改主机网络堆栈的情况下,能够简单地对执行器行为进行单元测试。
## 最新动态
### 增强的 AI 集成 (v3) - 2024 年 11 月
- **多层威胁分析**:3 阶段评估系统(异常阻断 → 模拟 LLM → Ollama 深度分析)
- **Ollama 深度学习**:使用 qwen2.5-threat-v3 模型分析未知威胁(3-8 秒详细分析)
- **增强的 JSON 处理**:具有智能回退机制的 100% 可靠 JSON 提取
- **性能优化**:已知威胁 0.0-0.2ms,需要深度分析的未知威胁 3-8s
- **规范符合性**:100% 验证符合威胁路由规范 (2024-11-06)
### 系统特性
- **电子墨水屏集成**(灵感来自 Azazel-Zero):实时状态可视化,显示当前防御模式、威胁评分、网络状态和警报计数器,并带有开机/关机动画
- **Rich CLI 界面**:带有颜色编码模式指示器和实时更新的终端监控
- **模块化配置**:带有 JSON schema 验证的声明式配置系统
- **便携式设计**:专为现场部署和临时网络保护而优化
- **自动化配置**:带有依赖项管理的单脚本安装
### AI 驱动的威胁情报
```
Alert Detection Flow:
Alert → Exception Blocking (0.0ms) → Mock LLM (0.2ms) → Ollama Analysis (3-8s) → Response
Known Threats: Instant blocking (Exception Blocking)
General Attacks: Fast analysis (Mock LLM)
Unknown Threats: Deep analysis (Ollama) with Enhanced Fallback guarantee
```
## 部署状态
**当前状态**:**95% 具备实战能力** 🚀
### ✅ 运行组件
- **流量控制系统**:tc 延迟注入 (100ms/200ms/300ms),集成了 DNAT+QoS
- **威胁检测**:Suricata IDS,带有实时 OpenCanary 流量转移
- **网络服务**:WiFi AP (Azazel_Internal),DHCP/DNS,外部网络连接
- **核心服务**:azctl-unified(AI 控制守护进程),Vector 日志处理,OpenCanary 蜜罐
- **自动启动**:所有关键服务在开机时自动启动
### 🔧 剩余事项
- 电子墨水屏功能(取决于硬件,在 issues 中跟踪)
该系统**可用于现场部署**,并提供完整的恶意流量延迟功能以及自动威胁检测和响应。
## 留言
## 许可证
MIT License
## 贡献指南
本仓库已停止维护 (EOL),不再接受代码贡献。
- 请不要向本仓库提交 PR。
- 请改为为 **Azazel-Edge** 做贡献:
- [https://github.com/01rabbit/Azazel-Edge](https://github.com/01rabbit/Azazel-Edge)
- 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 中已归档的贡献政策。
## 安全披露
请勿在本仓库报告新的安全问题。
- 将安全问题报告给 **Azazel-Edge**:
- [https://github.com/01rabbit/Azazel-Edge/security](https://github.com/01rabbit/Azazel-Edge/security)
- 请参阅 [SECURITY.md](SECURITY.md) 了解本仓库的 EOL 安全策略。
*Azazel-Edge:通过战略性延迟与欺骗实现战术网络防御*
标签:AI风险缓解, BOF, DNS枚举, IP 地址批量处理, Metaprompt, 信息战, 安全防护, 密码管理, 延缓战术, 插件系统, 未信任网络, 欺骗技术, 欺骗防御, 测试用例, 网关, 网络安全, 网络安全工具, 蜜罐, 证书利用, 诱饵技术, 请求拦截, 资产保护, 逆向工具, 隐私保护