Shyn17/Threat-Security-system-microservices

GitHub: Shyn17/Threat-Security-system-microservices

基于 Spring Boot 和 Kafka 的微服务化威胁情报平台,自动接入外部情报源并完成 IOC 的提取、评级与存储,提供实时可查询的威胁数据分析能力。

Stars: 0 | Forks: 0

# 威胁情报处理平台 ## 架构概述 ``` External APIs Kafka Topics MySQL (CCP DB) ───────────── ───────────────────────────────── ───────────── AbuseIPDB ──► [raw-threat-data] ──► [extracted-iocs] ──► ioc_records AlienVault ──► ◄── (shared) ``` ### 微服务管道 | # | 服务 | 端口 | 角色 | 协议 | |---|---------|------|------|----------| | 1 | **接入服务 (Ingestion Service)** | 8081 | 从 AbuseIPDB 和 AlienVault 获取原始数据 | REST (外部) → Kafka | | 2 | **提取服务 (Extraction Service)** | 8082 | 解析 JSON,提取 IP 和域名 | Kafka 消费者 → Kafka 生产者 | | 3 | **处理服务 (Processing Service)** | 8083 | 验证、去重、存储至 MySQL | Kafka 消费者 + REST | | 4 | **评级服务 (Ranking Service)** | 8084 | 查询 AbuseIPDB `/check`,分配严重程度 | REST + 调度器 | | 5 | **数据库服务 (Database Service)** | 8085 | 专用读取/查询层 | REST | | 6 | **分析服务 (Analytics Service)** | 8086 | 聚合统计与报告 | REST | ## 数据流 ``` 1. GET /api/v1/ingest/all │ ▼ 2. IngestionService fetches AbuseIPDB blacklist + AlienVault OTX data │ ▼ (Kafka: raw-threat-data) 3. ExtractionService parses JSON ├── AbuseIPDB format: data[].ipAddress, data[].domain └── AlienVault format: results[].indicator (type: IPv4|domain) │ ▼ (Kafka: extracted-iocs) 4. ProcessingService validates format, filters private IPs, de-duplicates └── Saves IocRecord with status=VALIDATED to MySQL │ ▼ (REST: scheduled every 60s) 5. RankingService queries AbuseIPDB /check for each IP ├── Gets abuseConfidenceScore (0-100) ├── Assigns severity: LOW/MEDIUM/HIGH/CRITICAL └── Calls PATCH /api/v1/processing/iocs/{id}/severity │ ▼ 6. IocRecord updated: status=RANKED, severity, countryCode, reportCount │ ▼ (REST query) 7. DatabaseService / AnalyticsService serve enriched data ``` ## 快速开始 ### 前置条件 - Java 17+ - Maven 3.8+ - Docker Desktop ### 1. 启动基础设施 ``` docker-compose up -d zookeeper kafka mysql kafka-setup ``` ### 2. 启动服务(需要单独的终端) ``` # Terminal 1 – Ingestion cd services/ingestion-service/ingestion && mvnw spring-boot:run # Terminal 2 – Extraction cd services/extraction-service/extraction && mvnw spring-boot:run # Terminal 3 – Processing cd services/processing-service/processing && mvnw spring-boot:run # Terminal 4 – Ranking cd services/ranking-service/ranking && mvnw spring-boot:run # Terminal 5 – Database cd services/database-service/database && mvnw spring-boot:run # Terminal 6 – Analytics cd services/analytics-service/analytics && mvnw spring-boot:run ``` **或者在 Windows 上:** 双击 `start-all.bat` ### 3. 触发接入 ``` # 从两个来源 Ingest curl http://localhost:8081/api/v1/ingest/all # 仅从 AbuseIPDB Ingest curl http://localhost:8081/api/v1/ingest/abuseipdb # 仅从 AlienVault Ingest curl http://localhost:8081/api/v1/ingest/alienvault ``` ## 📡 REST API 参考 ### 接入服务 (Ingestion Service) (8081) | 端点 | 描述 | |----------|-------------| | `GET /api/v1/ingest/abuseipdb` | 获取并流式传输 AbuseIPDB 黑名单 | | `GET /api/v1/ingest/alienvault` | 获取并流式传输 AlienVault OTX | | `GET /api/v1/ingest/all` | 从所有来源获取 | | `GET /api/v1/ingest/health` | 健康检查 | ### 处理服务 (Processing Service) (8083) | 端点 | 描述 | |----------|-------------| | `GET /api/v1/processing/iocs` | 所有 IOC(按严重程度排序) | | `GET /api/v1/processing/iocs/{id}` | 获取单个 IOC | | `GET /api/v1/processing/iocs/status/{status}` | 按 PENDING/VALIDATED/RANKED 筛选 | | `GET /api/v1/processing/iocs/type/{type}` | 按 IP 或 DOMAIN 筛选 | | `GET /api/v1/processing/iocs/severity/{severity}` | 按严重程度级别筛选 | | `GET /api/v1/processing/iocs/source/{source}` | 按来源筛选 | | `GET /api/v1/processing/iocs/top?minScore=75` | 头部威胁 | | `PATCH /api/v1/processing/iocs/{id}/severity` | 更新严重程度分数 | | `GET /api/v1/processing/stats` | IOC 统计信息 | ### 评级服务 (Ranking Service) (8084) | 端点 | 描述 | |----------|-------------| | `POST /api/v1/rank?iocId=1&value=1.2.3.4&type=IP` | 评级并更新 IOC | | `GET /api/v1/rank/check/ip?ip=1.2.3.4` | 快速 IP 检查 | | `GET /api/v1/rank/check/domain?domain=example.com` | 快速域名检查 | ### 数据库服务 (Database Service) (8085) | 端点 | 描述 | |----------|-------------| | `GET /api/v1/db/iocs` | 所有 IOC | | `GET /api/v1/db/iocs/ranked` | 已完全评级的 IOC | | `GET /api/v1/db/iocs/top?minScore=75` | 关键威胁 | | `GET /api/v1/db/iocs/country/{code}` | 按国家筛选 | | `GET /api/v1/db/iocs/recent?hours=24` | 最近的 IOC | | `GET /api/v1/db/stats` | 完整统计信息 | ### 分析服务 (Analytics Service) (8086) | 端点 | 描述 | |----------|-------------| | `GET /api/v1/analytics/summary` | 完整仪表盘摘要 | | `GET /api/v1/analytics/by-severity` | 按严重程度分布 | | `GET /api/v1/analytics/by-type` | IP 与 DOMAIN 细分 | | `GET /api/v1/analytics/by-source` | 来源细分 | | `GET /api/v1/analytics/by-country?limit=10` | 头部威胁国家 | | `GET /api/v1/analytics/top-threats?limit=20` | 最高分数的 IOC | | `GET /api/v1/analytics/trend?hours=24` | 近期活动趋势 | ## 🗄 数据库模式 ``` Table: ioc_records ┌──────────────┬─────────────┬──────────────────────────────────┐ │ Column │ Type │ Description │ ├──────────────┼─────────────┼──────────────────────────────────┤ │ id │ BIGINT PK │ Auto-increment primary key │ │ value │ VARCHAR(255)│ IP address or domain name │ │ type │ VARCHAR(20) │ IP | DOMAIN │ │ source │ VARCHAR(50) │ AbuseIPDB | AlienVault │ │ status │ VARCHAR(20) │ PENDING|VALIDATED|RANKED|FAILED │ │ severity_score│ INT │ 0–100 (from AbuseIPDB /check) │ │ severity │ VARCHAR(20) │ LOW|MEDIUM|HIGH|CRITICAL │ │ country_code │ VARCHAR(5) │ ISO country code (IPs) │ │ report_count │ INT │ Number of abuse reports │ │ created_at │ DATETIME │ Ingestion timestamp │ │ updated_at │ DATETIME │ Last update timestamp │ └──────────────┴─────────────┴──────────────────────────────────┘ ``` ## 🔑 API 密钥配置 | 服务 | 属性 | 密钥位置 | |---------|----------|--------------| | AbuseIPDB | `abuseipdb.api.key` | ingestion-service 和 ranking-service 的 `application.properties` | | AlienVault OTX | `alienvault.api.key` | ingestion-service 的 `application.properties` | ## 📊 IOC 严重程度等级 | 分数 | 严重程度 | 颜色 | |-------|----------|-------| | 0–25 | LOW | 🟢 | | 26–50 | MEDIUM | 🟡 | | 51–75 | HIGH | 🟠 | | 76–100| CRITICAL | 🔴 | ## 🛠 技术栈 - **语言**:Java 17 - **框架**:Spring Boot 3.2.5 - **消息代理**:Apache Kafka 7.4.0(通过 Confluent Platform) - **数据库**:MySQL 8.0 - **ORM**:Spring Data JPA / Hibernate - **容器**:Docker + Docker Compose - **外部 API**:AbuseIPDB v2,AlienVault OTX v1 ## 📁 项目结构 ``` Microservices/ ├── docker-compose.yml # Infrastructure (Kafka, MySQL) ├── start-all.bat # Windows startup script ├── infrastructure/ │ └── schema.sql # MySQL schema reference └── services/ ├── ingestion-service/ # Port 8081 ├── extraction-service/ # Port 8082 ├── processing-service/ # Port 8083 ├── ranking-service/ # Port 8084 ├── database-service/ # Port 8085 └── analytics-service/ # Port 8086 ```
标签:AbuseIPDB, API网关, IOC提取, IP 地址批量处理, Kafka, masscan, REST API, SonarQube插件, Spring Boot, 事件流处理, 事件驱动架构, 入侵指标, 可扩展性, 域名枚举, 威胁情报平台, 威胁数据流, 威胁源, 安全评分, 安全运营, 实时分析, 微服务开发, 微服务架构, 扫描框架, 数据去重, 数据库分层, 数据摄取, 消息队列, 版权保护, 网络信息收集, 网络安全, 网络调试, 自动化, 请求拦截, 软件成分分析, 隐私保护, 黑名单