icepaule/IceLaborVPN
GitHub: icepaule/IceLaborVPN
为恶意软件分析实验室提供基于零信任架构的安全远程访问网关,通过浏览器实现无需客户端的 SSH/VNC/RDP 连接,内置多层纵深防御与合规审计能力。
Stars: 0 | Forks: 0
# IceLaborVPN
**用于恶意软件分析实验室的安全零信任远程访问网关**
[](LICENSE)
[](docs/OPERATIONS-MANUAL.md#4-dora-compliance)
[](docs/OPERATIONS-MANUAL.md#5-mitre-attck-mapping)
## 概述
IceLaborVPN 提供安全的、基于浏览器的对隔离恶意软件分析基础设施的远程访问,无需安装客户端软件。专为受监管环境(DORA、ISO 27001)设计,它通过全面的审计日志实现了深度防御安全。

### 核心特性
- **零信任架构** - 采用 Headscale 控制平面的 WireGuard VPN mesh 网络
- **HTML5 远程访问** - 通过浏览器进行 SSH、VNC、RDP 访问 (Apache Guacamole)
- **多因素身份验证** - 所有用户强制使用 TOTP/2FA
- **会话录制** - 符合合规性的完整审计追踪
- **渐进式暴力破解防护** - 具有递增封禁时间(5 分钟 → 15 分钟 → 60 分钟)的多层防御
- **威胁情报黑名单** - 通过 6 个 OSINT 数据源(Spamhaus、Tor、Emerging Threats、Blocklist.de、AbuseIPDB)进行主动拦截
- **AbuseIPDB 集成** - 所有 11 个 fail2ban 监狱会将恶意 IP 上报给社区威胁情报
- **Fail2ban Web 仪表板** - 直接从门户查看和管理封禁(登录后)
- **Tailscale 网络仪表板** - 带有在线/离线指示器的实时节点状态
- **部署清单** - 带有进度条和审计追踪的交互式部署跟踪器
- **实时警报** - 具有防洪去重和每个监牢特定原因消息的 Pushover 通知
- **扫描器检测** - 自动检测并封禁 nmap/漏洞扫描器
- **攻击检测** - 目录遍历、敏感文件探测、PHP/管理后台探测、RCE 尝试将被自动封禁
- **符合 DORA/MITRE 规范** - 为监管机构提供全面的文档
## 截图
### 登录门户

*带有 TOTP/2FA 身份验证的安全登录*
### 仪表板

*连接概览,可快速访问实验室系统*
### SSH 会话

*带有会话录制的 HTML5 SSH 终端*
### 安全警报

*通过 Pushover 发送的实时安全通知*
## 架构

*带有 WireGuard VPN mesh 和 HTML5 远程访问的零信任架构*
## 快速开始
### 前置条件
- Ubuntu 22.04 LTS 或 Debian 12
- 公网 IPv4 地址
- 指向您服务器的 DNS A 记录
- Pushover 账户(用于通知)
### 安装说明
```
# 克隆仓库
git clone https://github.com/icepaule/IceLaborVPN.git
cd IceLaborVPN
# 配置环境
cp .env.example .env
nano .env # Fill in all values!
# 运行安装程序
chmod +x scripts/install.sh
sudo ./scripts/install.sh
```
### 首次登录
1. 访问 `https://your-domain.com/guacamole/`
2. 使用配置好的管理员凭据登录
3. 使用身份验证器应用(Google/Microsoft Authenticator)扫描二维码
4. 输入 6 位 TOTP 验证码
5. 访问您的实验室系统!
## 配置
### 环境变量
| 变量 | 描述 | 必填 |
|----------|-------------|----------|
| `HEADSCALE_DOMAIN` | 您的公共域名 | 是 |
| `GUAC_ADMIN_PASSWORD` | 管理员密码(最少 12 个字符) | 是 |
| `GUAC_DB_PASSWORD` | 数据库密码 | 是 |
| `PUSHOVER_APP_TOKEN` | Pushover 应用程序 Token | 是 |
| `PUSHOVER_USER_KEY` | Pushover 用户密钥 | 是 |
| `ABUSEIPDB_API_KEY` | 用于上报和黑名单的 AbuseIPDB API 密钥 | 是 |
| `SSL_EMAIL` | 用于 Let's Encrypt 的电子邮件 | 是 |
有关所有选项,请参见 [.env.example](.env.example)。
### 添加连接
编辑 `/opt/guacamole/db-init/02-admin-user.sql` 或使用 Guacamole Web 界面:
1. 以管理员身份登录
2. 设置 → 连接 → 新建连接
3. 配置 SSH/VNC/RDP 参数
4. 分配给用户/组
### 添加 Tailscale 节点
```
# 在网关上
/opt/IceLaborVPN/scripts/headscale-onboard.sh --generate-key
# 在新节点上
sudo tailscale up --login-server https://your-domain.com \
--authkey
```
### 自动化 Endpoint 部署
用于通过 ManageEngine Endpoint Central 或类似 MDM 解决方案进行企业部署:
```
# 部署脚本位于 deployment/ 目录中
ls deployment/
# Windows(以 SYSTEM 身份运行 PowerShell)
deploy-tailscale-windows.ps1
# Linux(以 root 身份运行 Bash)
deploy-tailscale-linux.sh
# macOS(以 root 身份运行 Bash)
deploy-tailscale-macos.sh
```
有关配置说明,请参见 [deployment/README.md](deployment/README.md)。
### Guacamole 自动同步
自动为所有 Headscale 节点创建 Guacamole 连接:
```
# 安装同步脚本
sudo cp deployment/headscale-guacamole-sync.py /opt/guacamole/
sudo chmod +x /opt/guacamole/headscale-guacamole-sync.py
# 手动运行
sudo python3 /opt/guacamole/headscale-guacamole-sync.py
# 或者设置 cron(每 5 分钟一次)
echo '*/5 * * * * root /usr/bin/python3 /opt/guacamole/headscale-guacamole-sync.py >> /var/log/headscale-sync.log 2>&1' | sudo tee /etc/cron.d/headscale-sync
```
该脚本会自动扫描所有在线节点的 SSH (22)、RDP (3389)、VNC (5900) 端口,并自动管理 Guacamole 连接。
## 安全特性
### 身份验证栈
| 层级 | 防护措施 |
|-------|------------|
| 威胁情报黑名单 | 通过 OSINT 源主动拦截约 30,000+ 个已知恶意 IP |
| AbuseIPDB 上报 | 所有封禁均上报至社区威胁情报网络 |
| TLS 1.3 | 传输层加密 |
| nginx 速率限制 | 5 次登录/分钟,30 次请求/秒 |
| Guacamole 暴力破解防护 | 5 次尝试 → 封禁 5 分钟 |
| Fail2ban (11 个 Jails) | 渐进式封禁:5 分钟 → 15 分钟 → 60 分钟 → 1 周(重犯) |
| 扫描器检测 | 在所有端口自动封禁 nmap/漏洞扫描器 |
| 凭据窃取检测 | .env/.git 探测 → 立即封禁(15 分钟 → 1 小时 → 24 小时) |
| 目录遍历检测 | `../`、`%2e%2e`、`/etc/passwd` → 立即封禁 1 小时 |
| 敏感文件探测检测 | `.env`、`.git/`、`wp-config`、credentials → 立即封禁 1 小时 |
| PHP/管理面板探测检测 | `.php`、`phpmyadmin`、`/admin/` → 2 次尝试 → 封禁 1 小时 |
| RCE/Shell 注入检测 | `cgi-bin`、Log4Shell/JNDI、扫描器 User-Agent → 立即封禁 1 小时 |
| TOTP/2FA | 强制双重验证 |
| 会话超时 | 60 分钟不活动 |
### Fail2ban Web 仪表板
登录后,门户会显示一个实时的 Fail2ban 状态面板:
- **概览** - 当前被封禁的 IP、活跃的 jails、总失败尝试次数
- **每个 Jail 详情** - 按 jail 分类展开的封禁 IP 列表
- **管理** - 直接从浏览器解封或重新封禁 IP
- **渐进式封禁** - 屡次违规者将获得递增的封禁时间(5 分钟 → 15 分钟 → 60 分钟)
### Tailscale 网络仪表板
所有 Headscale/Tailscale 节点的实时视图:
- **节点状态** - 带有最后活跃时间戳的在线/离线指示器
- **网络概览** - 总节点数、在线和离线节点计数
- **自动刷新** - 手动刷新按钮以更新状态
### 部署清单
用于多步骤基础设施发布的交互式部署跟踪器:
- **阶段与组** - 按部署阶段和目标系统组织的步骤
- **进度跟踪** - 带有已完成/待处理/已跳过计数器的可视化进度条
- **状态切换** - 点击复选框以将步骤标记为完成、跳过或还原
- **审计追踪** - 每次状态更改的时间戳和用户名
- **可折叠** - 已完成的阶段自动折叠,活跃阶段保持展开
### 监控与警报
具有防泛洪去重功能(同一 IP 在 5 分钟内仅通知一次)的实时 Pushover 通知:
- 成功登录
- 会话启动 (SSH/VNC/RDP)
- IP 封禁 (Fail2ban) 以及 GeoIP 信息
- 扫描器/攻击检测
- 服务故障
### 威胁情报黑名单
使用专用 nftables 表(`inet blocklist-table`,优先级 -10)主动拦截已知恶意 IP:
| 数据源 | 来源 | 更新间隔 | 描述 |
|------|--------|-----------------|-------------|
| Spamhaus DROP | spamhaus.org | 12 小时 | 被劫持的/垃圾邮件网络(IPv4 + IPv6) |
| Tor 出口节点 | dan.me.uk | 6 小时 | Tor 出口中继 IP |
| Emerging Threats | emergingthreats.net | 24 小时 | 已知攻击源 |
| Blocklist.de | blocklist.de | 6 小时 | 活跃攻击源(SSH、邮件、Web) |
| AbuseIPDB | abuseipdb.com | 24 小时 | 社区上报的恶意 IP(置信度 >90%) |
特性:
- 通过 systemd 实现重启持久化(无需 nftables 服务即可在重启后存活)
- 针对自身基础设施的白名单保护
- 用于离线弹性的缓存数据源
- 数据源更新失败时的 Pushover 警报
```
# 手动状态检查
/opt/IceLaborVPN/scripts/update-blocklists.sh --status
# Timer 概览
systemctl list-timers 'icelabor-blocklist*'
```
### AbuseIPDB 集成
所有 11 个 fail2ban jail 会自动将封禁的 IP 及其相应的攻击类别上报给 [AbuseIPDB](https://www.abuseipdb.com/):
| Jail | AbuseIPDB 类别 | 触发条件 |
|------|---------------------|---------|
| sshd | 暴力破解, SSH | 5 次失败尝试 |
| guacamole | 暴力破解, Web 应用攻击 | 5 次失败尝试 |
| nginx-limit-req | Web 应用攻击, 恶意 Web 机器人 | 10 次速率限制违规 |
| nginx-scan | 端口扫描, Web 应用攻击 | 5 次可疑的 404/400 响应 |
| nginx-cred-harvest | Web 应用攻击, 黑客攻击 | 2 次凭据文件探测 |
| nginx-http-auth | 暴力破解, Web 应用攻击 | 3 次 HTTP 认证失败 |
| nginx-traversal | 黑客攻击, Web 应用攻击 | 1 次目录遍历尝试 |
| nginx-sensitive-files | 黑客攻击, Web 应用攻击 | 1 次敏感文件探测 |
| nginx-php-probes | 黑客攻击, Web 应用攻击 | 2 次 PHP/管理面板探测 |
| nginx-rce-attempts | 黑客攻击, Web 应用攻击 | 1 次 RCE/Shell 注入尝试 |
| recidive | 暴力破解(屡犯者) | 12 小时内 3 次封禁 → 封禁 1 周 |
### 合规性
- **DORA** - 运维手册中的完整映射
- **MITRE ATT&CK** - 检测规则和缓解措施
- **ISO 27001** - 访问控制文档
- **审计追踪** - 5 年会话录制保留期
## 文档
| 文档 | 描述 |
|----------|-------------|
| [运维手册](docs/OPERATIONS-MANUAL.md) | 完整的 ITSO 手册 (DORA/MITRE) |
| [安装指南](docs/INSTALLATION.md) | 逐步设置说明 |
| [用户指南](docs/USER-GUIDE.md) | 终端用户文档 |
| [故障排除](docs/TROUBLESHOOTING.md) | 常见问题及解决方案 |
## 目录结构
```
IceLaborVPN/
├── .env.example # Environment template
├── README.md # This file
├── LICENSE # MIT License
├── deployment/ # Endpoint deployment scripts
│ ├── README.md # Deployment documentation
│ ├── deploy-tailscale-windows.ps1 # Windows deployment
│ ├── deploy-tailscale-linux.sh # Linux deployment
│ ├── deploy-tailscale-macos.sh # macOS deployment
│ ├── headscale-guacamole-sync.py # Auto-sync connections
│ └── checklist.json.example # Deployment checklist template
├── scripts/
│ ├── install.sh # Main installer
│ ├── backup.sh # Backup script
│ ├── pushover-notify.sh # Notification script
│ ├── guacamole-monitor.sh # Session monitor
│ ├── headscale-onboard.sh # Node onboarding
│ └── update-blocklists.sh # Threat intelligence blocklist manager
├── config/ # Configuration templates
│ ├── fail2ban-jail.conf.template # All 11 jails (nftables + AbuseIPDB + Pushover)
│ ├── fail2ban-filter-nginx-scan.conf # Scanner detection filter
│ ├── fail2ban-filter-nginx-cred-harvest.conf # Credential harvesting filter
│ ├── fail2ban-filter-nginx-traversal.conf # Directory traversal filter
│ ├── fail2ban-filter-nginx-sensitive-files.conf # Sensitive file probe filter
│ ├── fail2ban-filter-nginx-php-probes.conf # PHP/admin panel probe filter
│ ├── fail2ban-filter-nginx-rce-attempts.conf # RCE/shell injection filter
│ ├── fail2ban-action-pushover.conf # Pushover notification action (configurable reason)
│ ├── fail2ban-sudoers-webui # Sudoers for web UI management
│ ├── blocklist-whitelist.conf.example # Blocklist whitelist template
│ ├── logrotate-icelaborvpn.conf # Service log rotation config
│ └── logrotate-blocklists.conf # Blocklist log rotation config
├── guacamole/ # Docker compose & SQL
├── nginx/ # Nginx configuration
├── systemd/ # Service files (monitor + blocklist timers)
├── docs/
│ ├── OPERATIONS-MANUAL.md # ITSO handbook (DORA/MITRE)
│ └── screenshots/
└── website/ # Documentation website
├── index.html
├── css/
├── js/
├── images/
│ └── architecture.svg
└── screenshots/
```
## 故障排除
### 常见问题
**登录失败并提示“Invalid credentials”**
```
# 检查 Guacamole 日志
docker logs guacamole | grep -i auth
```
**TOTP 验证码被拒绝**
- 验证系统时间是否已同步 (`timedatectl`)
- 在用户设置中重新生成 TOTP
**连接超时**
```
# 检查 Tailscale 连接
tailscale ping
```
**Fail2ban 封禁了合法用户**
```
# 通过 CLI 解封 IP
sudo fail2ban-client set guacamole unbanip 192.0.2.1
# 或者使用 Web 仪表板(在通过 https://your-domain.com 登录后)
# Fail2ban 面板显示所有被封禁的 IP,并提供 Unban/Re-Ban 按钮
```
## 许可证
MIT License - 详见 [LICENSE](LICENSE)
## 作者
**IcePorge 项目**
- GitHub: [@icepaule](https://github.com/icepaule)
- 电子邮件: info@mpauli.de
## 致谢
- [Apache Guacamole](https://guacamole.apache.org/)
- [Headscale](https://github.com/juanfont/headscale)
- [Tailscale]( )
- [MITRE ATT&CK](https://attack.mitre.org/)
标签:2FA, AbuseIPDB, Apache Guacamole, Blocklist.de, CISA项目, Cloudflare, DORA合规, Emerging Threats, ESC4, Fail2ban, Headscale, HTML5远程桌面, ISO 27001, MFA, MITRE ATT&CK, OSINT, PB级数据处理, PE 加载器, Pushover通知, RCE防御, RDP, Spamhaus, SSH, Tailscale网络, Tor出口节点拦截, TOTP, VNC, Web网络安全, WireGuard, 会话录制, 动态API解析, 后端开发, 多因素认证, 威胁情报, 安全网关, 安全运维, 审计日志, 应用安全, 开发者工具, 恶意软件分析实验室, 插件系统, 攻击拦截, 测试用例, 目录遍历防御, 端口扫描检测, 纵深防御, 网络安全, 网络安全审计, 请求拦截, 远程访问, 逆向工具, 防暴力破解, 隐私保护, 零信任网络