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实验环境, 威胁情报, 安全运营中心, 开发者工具, 版权保护, 网络映射, 自托管, 请求拦截, 逆向工具