Fazzycode1O1/threat-intelligence-platform
GitHub: Fazzycode1O1/threat-intelligence-platform
基于 Spring Boot 和 Kafka 的分布式威胁情报处理平台,实现从 IOC 数据接入、验证、评分到存储的完整事件驱动流水线。
Stars: 0 | Forks: 0
# 威胁情报处理平台
一个用于处理网络安全威胁情报的分布式、事件驱动微服务平台。基于 Java 17、Spring Boot 3、Apache Kafka 和 MySQL 构建。
## 架构
```
POST /api/ingest
|
ingestion-service (8081)
|
[ioc_raw] --> extraction-service (8082) -- validates IPs & domains
|
[ioc_validated] --> ranking-service (8083) -- scores & classifies
|
[ioc_ranked] --> database-service (8084) -- persists to MySQL
|
analytics-service (8085) <--
(read-only REST queries)
```
## 服务
| 服务 | 端口 | 职责 |
|---------|------|----------------|
| ingestion-service | 8081 | REST 入口 - 接受源名称并将模拟 IOC 数据发布到 Kafka |
| extraction-service | 8082 | 消费原始 IOC,使用正则表达式验证 IP 和域名,转发有效条目 |
| ranking-service | 8083 | 对 IOC 进行评分 (0-100) 并将其分类为 LOW / MEDIUM / HIGH |
| database-service | 8084 | 将已评分的 IOC 持久化到 MySQL,在启动时创建 schema |
| analytics-service | 8085 | 只读 REST API,用于查询已存储的 IOC |
| consumer-service | - | 占位 Kafka 监听器 (无 HTTP 端口) |
| shared-models | - | 共享的 IocData DTO 和 Kafka topic 常量 |
## 技术栈
- **Java 17**
- **Spring Boot 3.2**
- **Apache Kafka** - 服务间的异步事件总线
- **MySQL 8** - 通过 JPA/Hibernate 进行持久化 IOC 存储
- **Maven** - 多模块构建
## 前置条件
- Java 17+
- Maven 3.8+
- MySQL 8 运行在 localhost:3306 (用户名: root, 密码: password)
- Apache Kafka 运行在 localhost:9092
## Kafka 设置
启动 Zookeeper 和 broker (在单独的终端中):
```
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
```
创建三个必需的 topic:
```
bin/kafka-topics.sh --create --topic ioc_raw --bootstrap-server localhost:9092
bin/kafka-topics.sh --create --topic ioc_validated --bootstrap-server localhost:9092
bin/kafka-topics.sh --create --topic ioc_ranked --bootstrap-server localhost:9092
```
## 构建
从项目根目录运行 (构建全部 7 个模块):
```
mvn clean install -DskipTests
```
## 运行
按以下顺序在单独的终端中启动每个服务:
```
cd database-service && mvn spring-boot:run # port 8084 - creates schema first
cd ingestion-service && mvn spring-boot:run # port 8081
cd extraction-service && mvn spring-boot:run # port 8082
cd ranking-service && mvn spring-boot:run # port 8083
cd analytics-service && mvn spring-boot:run # port 8085
cd consumer-service && mvn spring-boot:run # no HTTP port
```
database-service 必须首先启动 - analytics-service 使用 ddl-auto: validate,需要 iocs 表已存在。
## API 参考
**触发 IOC 摄取**
```
POST http://localhost:8081/api/ingest
Content-Type: application/json
{ "source": "abuseipdb" }
```
**获取所有 IOC**
```
GET http://localhost:8085/api/iocs
GET http://localhost:8085/api/iocs?severity=HIGH&type=IP&source=abuseipdb
```
**获取高风险 IOC (严重程度评分 >= 50)**
```
GET http://localhost:8085/api/iocs/high-risk
```
**按来源获取 IOC**
```
GET http://localhost:8085/api/iocs/source/abuseipdb
```
## 数据流
1. POST /api/ingest 触发 ingestion-service 将两个模拟 IOC 发布到 ioc_raw Kafka topic。
2. extraction-service 从 ioc_raw 消费,使用正则表达式验证 IP 地址和域名,将有效条目转发到 ioc_validated。
3. ranking-service 从 ioc_validated 消费,计算严重程度评分 (0-100),分配 LOW / MEDIUM / HIGH,发布到 ioc_ranked。
4. database-service 从 ioc_ranked 消费,并将每个 IOC 持久化到 MySQL 的 iocs 表中。
5. analytics-service 暴露 REST 端点,以直接从 MySQL 查询已存储的 IOC。
## 数据库 Schema
```
CREATE TABLE iocs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
type VARCHAR(20),
value VARCHAR(255),
source VARCHAR(255),
severity_score INT,
risk_level VARCHAR(10),
timestamp DATETIME
);
```
## 项目结构
```
threat-intelligence-platform/
├── pom.xml
├── shared-models/
├── ingestion-service/
├── extraction-service/
├── ranking-service/
├── database-service/
├── analytics-service/
├── consumer-service/
└── doc/
├── INSTALLATION.md
└── report.md
```
## 故障排除
| 症状 | 解决方案 |
|---------|-----|
| Kafka 连接被拒绝 | 先启动 Zookeeper 然后启动 broker;检查端口 9092 |
| analytics-service 启动失败 | 先启动 database-service |
| MySQL 连接错误 | 检查 MySQL 是否正在运行;更新 application.yml 中的凭据 |
| /ingest 返回 404 | 请使用 /api/ingest |
| analytics API 无结果 | 摄取后等待几秒钟,以等待 Kafka pipeline 完成 |
| 编译错误 | 在项目根目录运行 mvn clean install -DskipTests |
标签:Apache Kafka, IOC提取, IP 地址批量处理, Java 17, JPA/Hibernate, Maven, REST API, Spring Boot 3, Spring Boot微服务, 事件驱动架构, 分布式系统, 后端开发, 响应大小分析, 多模块项目, 失陷标示, 威胁分级, 威胁情报, 威胁评分, 密码管理, 开发者工具, 微服务架构, 情报处理平台, 数据分析服务, 数据验证, 消息队列, 漏洞验证, 网络安全, 软件成分分析, 隐私保护