broxcat/athena
GitHub: broxcat/athena
基于 Docker Compose 的自托管 OpenCTI 威胁情报实验室部署方案,预配置了多个主流情报源连接器。
Stars: 1 | Forks: 0
# Athena — OpenCTI 家庭实验室
这是一个用于威胁情报家庭实验室 / SOC 实验室目的的自托管 OpenCTI 部署。它通过 Docker Compose 运行在 nginx 反向代理之后,预配置了一组精选的 connector(MITRE ATT&CK、AlienVault OTX、ThreatFox、Ransomware.live、MalwareBazaar、AbuseIPDB),并集成了 XTM One。
## 前置条件
- 一台至少拥有 16 GB 内存(最低 8 GB,参见下文的 `ELASTIC_MEMORY_SIZE`)的 Linux 主机(已在 Ubuntu/Debian 上测试)
- Docker 和 Docker Compose
- OpenSSL(用于生成密钥和证书)
- Git
## 安装说明
### 1. 安装 Docker 及其依赖项
```
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common git docker.io docker-compose -y
sudo systemctl enable --now docker
sudo usermod -aG docker $USER && newgrp docker
```
### 2. 克隆仓库
```
git clone https://github.com/broxcat/athena.git
cd athena
```
### 3. 配置你的环境
复制示例文件并填入你自己的值:
```
cp .env.sample .env
nano .env
```
你需要自行生成以下几个值:
- **UUID**(用于 `OPENCTI_ADMIN_TOKEN`、每个 `CONNECTOR_*_ID`、`XTM_COMPOSER_ID` 等)——逐个生成,切勿在不同的变量之间重复使用同一个 UUID:
```
python3 -c "import uuid; print(uuid.uuid4())"
```
或者如果你喜欢使用网页工具,可以使用 [uuidgenerator.net/version4](https://www.uuidgenerator.net/version4)。
- **随机密钥**(`OPENCTI_ENCRYPTION_KEY`、`PLATFORM_REGISTRATION_TOKEN`、`XTM_ONE_SECRET_KEY` 等):
```
openssl rand -hex 32 # for hex-format secrets
openssl rand -base64 32 # for OPENCTI_ENCRYPTION_KEY specifically
```
- 需要用到的 connector 的 **API key**:
- `ALIENVAULT_API_KEY` —— 在 [otx.alienvault.com](https://otx.alienvault.com) 获取
- `ABUSEIPDB_API_KEY` —— 在 [abuseipdb.com](https://www.abuseipdb.com) 获取
- **密码**(`OPENCTI_ADMIN_PASSWORD`、`MINIO_ROOT_PASSWORD`、`RABBITMQ_DEFAULT_PASS`、`XTM_ONE_ADMIN_PASSWORD`、`XTM_ONE_POSTGRES_PASSWORD` 等)——选择强且唯一的值。不要将任何密码保留为 `changeme`。
### 4. 生成自签名 TLS 证书(供 nginx 使用)
```
mkdir -p certs
openssl req -x509 -nodes -newkey rsa:2048 \
-keyout certs/opencti.key \
-out certs/opencti.crt \
-days 365 \
-subj "/CN=localhost"
```
### 5. 应用 Elasticsearch 所需的内核设置
```
sudo sysctl -w vm.max_map_count=1048575
echo "vm.max_map_count=1048575" | sudo tee -a /etc/sysctl.conf
```
这可以避免导致 Elasticsearch 无法启动的经典 `vm.max_map_count` 错误。
### 6. 启动技术栈
```
docker compose up -d
```
查看日志,直到平台报告 GraphQL server 已就绪且 worker 已连接到 RabbitMQ:
```
docker compose logs -f opencti
```
首次启动还会为初始数据集(基础 taxonomy、MITRE ATT&CK 导入)填充数据,这可能需要几分钟。
### 7. 访问平台
浏览 `https://localhost`(或你配置的 `OPENCTI_URL`)并使用 `OPENCTI_ADMIN_EMAIL` / `OPENCTI_ADMIN_PASSWORD` 登录。你的浏览器会警告自签名证书的问题——这对于本地/家庭实验室环境是正常的。
## 包含的 Connector
| Connector | 类型 | 需求 |
|---|---|---|
| MITRE ATT&CK | External import | — |
| AlienVault OTX | External import | `ALIENVAULT_API_KEY` |
| ThreatFox | External import | — |
| Ransomware.live | External import | — |
| MalwareBazaar(最近添加项) | External import | — |
| AbuseIPDB | External import | `ABUSEIPDB_API_KEY` |
可以在 OpenCTI 用户界面的 **Data > Ingestion > Connectors** 下监控 Connector 状态并进行手动运行。
## 安全说明
- **`.env` 和 `certs/`** 已通过 `.gitignore` 排除,严禁将其推送到此仓库或任何此仓库的 fork 中。如果你不小心提交了它们,请将里面的所有机密视为已泄露,并轮换所有机密(API key、token、密码、加密密钥)——不要仅仅依赖于在后续的提交中删除该文件。
- **`docker.sock` 挂载**(由 `xtm-composer` 使用)授予了该 container 对 Docker 宿主机等同于 root 的访问权限。请勿将此服务或其网络暴露给不受信任的方。
- **自签名 TLS** 对于本地家庭实验室是可以的。如果你将此实例暴露在 `localhost` 之外,请将其替换为来自真实 CA(例如 Let's Encrypt)的证书,并将其置于适当的网络访问控制之后。
- **端口**:只有 nginx(`80`/`443`)旨在供外部访问。除非你在本地进行明确调试,否则不应将 OpenCTI 的直接端口(`8080`)和 MinIO 的端口(`9000`)暴露在 Docker 网络之外。
## 维护
- 通过拉取新 tag 并重新运行 `docker compose up -d` 来更新镜像(检查 `docker-compose.yml` 中的镜像 tag —— 尽可能固定到特定版本,而不是使用 `latest`)。
- 如果此实例包含你希望保留的情报,请定期备份 Elasticsearch 数据和 MinIO bucket。
## 致谢 / 灵感来源
此设置受到以下内容的启发并改编自:
- Deepanshu Khanna 撰写的 ["像专家一样构建你自己的网络威胁情报 (CTI) 平台"](https://medium.com/@deepanshu_khanna/build-your-own-cyber-threat-intelligence-cti-platform-like-a-pro-515227cedc30)
- Ahmed Elshahat 撰写的 ["OpenCTI 是什么,以及如何真正让它运行起来"](https://medium.com/@mrstarkeg/what-opencti-is-and-how-to-actually-get-it-running-653b0f623c41)
标签:Docker-Compose, Nginx, OpenCTI, SOC实验环境, 威胁情报, 安全运营中心, 开发者工具, 版权保护, 网络映射, 自托管, 请求拦截, 逆向工具