rahulkakade-dev/telemetry-pipeline-for-deception-tech
GitHub: rahulkakade-dev/telemetry-pipeline-for-deception-tech
一个用于欺骗技术的遥测管道项目,解决多源日志采集、流转与查询的自动化问题。
Stars: 0 | Forks: 0
## 组件 1:诱饵(蜜罐发射器)
诱饵组件**模拟**一个欺骗技术蜜罐。它在一个**无限循环**中同时向标准输出和本地日志文件 `(decoy_output.log)` 发射看似真实的安全事件。当前实现是一个**未完成的骨架**。
### 你的任务:
**配置双输出日志**:实现 `setup_logger()`,使其能够将日志同时写入标准输出(以便 Docker 套接字可以捕获)和磁盘上的**滚动日志文件**。文件记录器必须配置为最大 1MB,保留最多 3 个备份。
**增强遥测真实性**:提供的 RAW_EVENTS 列表较为基础。请向列表中添加至少 5 条新的、**高度真实的蜜罐信号**(例如端口扫描、凭证暴力破解、横向移动、数据外泄尝试或可疑的 SQL 查询)。
**实现发射循环**:更新 `main()` 函数,使其能够**随机选择并持续发射这些事件**,使用你配置好的记录器。
## 组件 2:代理(双源日志捕获)
代理作为一个**轻量级守护进程**,负责从两个不同的来源并发捕获诱饵服务的日志,将其格式化后转发到**RabbitMQ** 消息代理。
### 你的任务:
**实现 Docker 套接字跟踪**:完成 `agent/app.py` 中的 `tail_docker_logs` 函数。代理必须读取本地 Docker 套接字 `(/var/run/docker.sock)`,解析 CONFIG 中定义的容器,并实时(follow=true)流式输出其标准输出。注意:必须正确剥离每个数据块的 8 字节 Docker 多路复用头,然后再进行解码。
**实现具有弹性的文件跟踪**:完成 `tail_file_logs` 函数。代理必须像 `tail -f` 一样持续读取共享日志文件。它应等待文件存在,在打开时定位到文件末尾(**忽略历史数据**),并产出新行。至关重要的是,它必须能够优雅地检测并从日志轮转中恢复(例如检测文件缩小或 inode 变更)。
**处理并发布**:完成 `process_and_publish` 函数。读取目标交换机和路由键,将摄入的行格式化为结构化的 JSON 载荷 `({"source": source_name, "raw_log": clean_line})`,并使用共享的 `RMQ.publish_task()` 方法进行发布。
**协调并发**:更新 `main()` 以连接到 RabbitMQ,部署拓扑,并使用 `asyncio.gather()` 并发运行两个跟踪任务。
## 组件 3:后端(消费者与 REST API)
后端是一个**异步应用程序**,它从 RabbitMQ 摄取遥测流,将其持久化到 MongoDB,并通过 REST API 提供数据。
### 你的任务:
**实现 RMQ 消费者**:完成 `consume_logs(db)` 后台任务。它必须从活跃的 RMQ 连接中获取一个信道,声明/获取 **telemetry_queue**,解析传入的 JSON 消息,并将其直接插入数据库的 logs 集合中。
**管理应用程序生命周期**:完成 FastAPI 的**生命周期上下文管理器**。连接 MongoDB(将引用存储在 `app.state.db` 中),连接 RabbitMQ,应用拓扑,并将消费者作为后台任务启动。确保在关闭时优雅地关闭所有连接和任务。
**暴露 REST API**:完成 **GET /logs** 端点,使用提供的 skip 和 limit 参数查询数据库,并返回一个结构化的 LogResponse 对象列表。
## 组件 4:基础设施与编排
该流水线使用 `docker-compose.yml` 进行编排。你需要将基础设施和应用程序组件连接起来,以便能够通过单个命令启动。
### 你的任务:
**定义基础设施**:在 compose 文件中添加 MongoDB 和 RabbitMQ,使用官方镜像。暴露它们的标准端口(27017 和 5672/15672),以便在本地测试时可访问。
**连接应用程序**:定义 decoy、agent 和 backend 服务。确保它们从各自的 Dockerfile 构建,使用仓库根目录作为构建上下文。
**配置环境**:加载 `.env` 文件,并设置正确的 `depends_on` 启动顺序(基础设施必须在应用程序启动前保持健康)。
**挂载卷**:确保代理对 `/var/run/docker.sock` 有只读访问权限,并与 decoy 容器共享一个卷以访问 `decoy_output.log`。
PS:`.env` 文件已为你准备好。
标签:Docker 日志, MongoDB, PMD, RabbitMQ, REST API, SEO, 凭证填充, 威胁情报, 守护进程, 实时流处理, 容器日志, 开发者工具, 持久化存储, 数据外泄, 数据统计, 文件轮转, 日志仿真, 日志回溯, 日志脱敏, 日志转发, 日志采集, 查询接口, 横向移动, 欺骗技术, 消息队列, 滚动日志, 端口扫描, 编程规范, 网络安全监控, 蜜罐, 计算机取证, 证书利用, 请求拦截, 逆向工具, 遥测管道, 驱动开发