xhusnain/geoiphub-core

GitHub: xhusnain/geoiphub-core

基于 Rust 的开源 IP 情报扫描仪,整合多源数据与主动探测,实现高精度 IP 分类与欺诈评分。

Stars: 0 | Forks: 0

# GeoIPHub Core [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![Rust](https://img.shields.io/badge/Rust-1.88%2B-orange.svg)](https://www.rust-lang.org/) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791.svg)](https://www.postgresql.org/) [![Docker](https://img.shields.io/badge/Docker-Hub-2496ED.svg)](https://hub.docker.com/r/husnainbabar/geoiphub-core) **开源IP情报扫描仪与分类引擎。** GeoIPHub Core 是一个基于 Rust 的威胁情报管道,能够检测 VPN、代理、Tor 出口、僵尸网络、爬虫、垃圾邮件来源等。它结合了 60 多个开源数据源与 109 个端口的主动协议探测,生成高置信度的 IP 分类和欺诈评分。 ## 检测内容 | 类别 | 检测方法 | 数据源 | |------|----------|--------| | **VPN 检测** | ASN 匹配(152 个 VPN ASN)、13 个供应商 API、36 个 DNS 列表、主动端口探测、rDNS 模式匹配、WHOIS 关键词分析 | NordVPN、Mullvad、ProtonVPN、Surfshark、PIA、IPVanish、Windscribe、AirVPN、IVPN 等 | | **代理检测** | 49 个代理列表来源、95+ 端口上的 SOCKS5/HTTP/CONNECT 协议探测、7 个 DNSBL 区域、行为分析 | Geonode、ProxyScrape、Spamhaus、DroneBL | | **Tor 检测** | 出口节点列表、Onionoo 中继 API、目录权威映射 | Tor Project 官方数据源 | | **数据中心/云** | 主要云提供商的 IP 范围匹配 | AWS、Google Cloud、Azure、Oracle、DigitalOcean、Cloudflare、Fastly、阿里巴巴 | | **僵尸网络/恶意软件** | C2 服务器跟踪、恶意软件分发、SSL 黑名单 | abuse.ch Feodo Tracker、URLhaus、SSLBL | | **爬虫/机器人** | 10 多个运营指纹、4 层验证(已验证、未验证、伪造、未知) | Googlebot、Bingbot、GPTBot、Ahrefs 等 | | **垃圾邮件检测** | 7 个 DNSBL 区域、25 个以上阻断列表 | Spamhaus、Firehol、DShield、Team Cymru | | **住宅代理** | 行为分析——UA 多样性、突发模式、跨客户访问 | 内部行为管道 | | **Bogon 检测** | IANA 保留范围、Team Cymru fullbogon(IPv4 + IPv6) | IANA、Team Cymru | | **IP 地理位置** | RFC 8805 地理源、RIR 委托文件、rDNS 城市提取、WHOIS 地址解析、ASN HQ 回退 | OpenGeoFeed、RIPE NCC、ARIN、APNIC、LACNIC、AFRINIC、GeoNames | ## 快速开始 运行 GeoIPHub Core 最快的方式是使用 Docker Compose。这将同时启动 PostgreSQL、Redis 和扫描器: ``` git clone https://github.com/xhusnain/geoiphub-core.git cd geoiphub-core cp .env.example .env # 编辑 .env 将 INTERNAL_SECRET 设置为随机字符串 docker compose up -d ``` 扫描器将立即开始摄取威胁情报数据源。内部 API 在 `http://localhost:8080` 可用。 ## 独立 Docker 运行 如果你已经运行了 PostgreSQL 和 Redis,可以只运行扫描器容器: ``` docker run -d \ --name geoiphub-scanner \ --restart unless-stopped \ -p 8080:8080 \ -e DATABASE_URL=postgres://USER:PASS@HOST:5432/DBNAME \ -e REDIS_URL=redis://HOST:6379 \ -e INTERNAL_SECRET=any-random-string \ -e RUST_LOG=info \ husnainbabar/geoiphub-core:latest ``` ## 架构 ``` Scanner (Rust Binary) ├── crates/scanner — 22 feed modules, active probing orchestrator ├── crates/engine — classification, scoring, behavioral analysis └── crates/common — shared types, config │ ┌────┴────┐ ▼ ▼ PostgreSQL Redis ``` **scanner** crate 负责驱动整个管道:它调度 22 个数据源的摄取(从 60 多个来源拉取),在 109 个端口上使用 13 种协议实现运行主动协议探测,并将结果写入 PostgreSQL。Redis 用于行为追踪(UA 多样性、突发检测、跨客户分析)和缓存。 **engine** crate 处理分类逻辑:它结合所有来源的证据,运行协议检测(OpenVPN、WireGuard、SOCKS5、Shadowsocks、IKEv2、L2TP、PPTP、SSH 隧道、V2Ray、Tor 桥、HTTP 代理、HTTP 正向代理),使用 44 个加权信号计算欺诈评分,并为每个字段生成置信度评分。 **common** crate 提供共享类型(ASN、分类、代理、rDNS、声誉)和配置加载。 ## 项目结构 ``` geoiphub-core/ ├── Cargo.toml # Workspace manifest ├── Dockerfile # Multi-stage build ├── docker-compose.yml # Full stack (Postgres + Redis + Scanner) ├── .env.example # Environment variable reference ├── config/ │ ├── default.toml # Default runtime configuration │ ├── production.toml # Production overrides │ ├── feeds.json # 22 feed schedules with intervals │ ├── scoring.json # 44 fraud scoring signals with weights │ └── dblimits.json # DB write throttling per component ├── crates/ │ ├── scanner/ # Threat intelligence pipeline │ │ └── src/ │ │ ├── main.rs # Entry point, scheduler │ │ ├── internal_api.rs # HTTP API (port 8080) │ │ ├── db_limiter.rs # DB write rate limiting │ │ ├── enrich.rs # IP enrichment pipeline │ │ ├── feed/ # 22 feed modules │ │ │ ├── tor.rs # Tor exit nodes │ │ │ ├── vpn_asns.rs # VPN ASN matching │ │ │ ├── vpn_servers.rs # VPN server lists │ │ │ ├── proxy_lists.rs # Proxy list aggregation │ │ │ ├── datacenter.rs # Cloud provider ranges │ │ │ ├── abusech.rs # abuse.ch feeds │ │ │ ├── blocklist.rs # Blocklist aggregation │ │ │ ├── crawler.rs # Crawler fingerprints │ │ │ ├── dnsbl.rs # DNS blocklist checks │ │ │ ├── fullbogon.rs # Bogon ranges │ │ │ ├── geofeed.rs # RFC 8805 geofeeds │ │ │ ├── rir.rs # RIR delegation files │ │ │ ├── rdns_geo.rs # rDNS geolocation │ │ │ ├── bgp.rs # BGP route data │ │ │ ├── relay.rs # Relay detection │ │ │ ├── ip_to_asn.rs # IP-to-ASN mapping │ │ │ ├── asn_classify.rs # ASN classification │ │ │ ├── asn_hq.rs # ASN HQ geolocation │ │ │ ├── cloud_region_geo.rs # Cloud region geo │ │ │ ├── ripe_atlas.rs # RIPE Atlas probes │ │ │ ├── reserved.rs # Reserved ranges │ │ │ ├── decay.rs # Evidence decay │ │ │ └── cleanup.rs # Data cleanup │ │ ├── probes/ # Active probing │ │ │ └── orchestrator.rs │ │ └── protocols/ # Protocol implementations │ │ ├── socks5.rs, openvpn.rs, wireguard.rs │ │ ├── ikev2.rs, l2tp.rs, pptp.rs │ │ ├── shadowsocks.rs, v2ray.rs │ │ ├── ssh_tunnel.rs, tor_bridge.rs │ │ └── http_proxy.rs, http_forward.rs │ ├── engine/ # Classification engine │ │ └── src/ │ │ ├── engine.rs # Core classification logic │ │ ├── behavioral.rs # Behavioral analysis │ │ ├── scoring/ # Fraud scoring (44 signals) │ │ ├── detectors/ # rDNS, RDAP detectors │ │ ├── protocols/ # Protocol fingerprinting │ │ ├── ip_table/ # IP lookup tables │ │ ├── canary/ # Canary detection │ │ └── models/ # Data models │ └── common/ # Shared types │ └── src/ │ ├── config/ # Configuration loading │ ├── types/ # ASN, classification, proxy, rDNS, reputation │ └── errors/ # Error types ├── migrations/ # PostgreSQL schema │ ├── 001_ip_intelligence.sql │ ├── 003_ip_geolocation.sql │ └── 004_feed_state.sql └── scripts/ # Utility scripts ├── seed-asn-data.sh └── seed-tor-exits.sh ``` ## 配置 ### `config/default.toml` 主配置文件,涵盖 API 绑定地址、数据库连接池、Redis 设置、扫描器调优(并发、批大小、超时)以及数据馈送行为。启动时通过 `GEOIPHUB_CONFIG` 环境变量加载。 ### `config/production.toml` 生产环境覆盖配置,增加连接池大小、并发限制和批大小以适配更高资源部署。 ### `config/feeds.json` 定义全部 22 个数据馈送模块的调度计划。每个条目指定馈送名称、摄取间隔以及任何源特定参数。馈送以独立计时器运行——部分每几分钟更新(Tor 出口),部分每日更新(RIR 委托)。 ### `config/scoring.json` 包含全部 44 个欺诈评分信号及其权重和置信值。每个信号对应一条证据(例如“存在于 VPN ASN 列表”、“响应 SOCKS5 探测”、“列入 DNSBL”)。引擎结合这些信号生成最终欺诈评分(0-100)以及每个字段的置信评级。 ### `config/dblimits.json` 控制每个组件对数据库写入的节流,以防止在大量数据馈送摄取期间压垮 PostgreSQL。定义每个馈送模块每批次和每个周期的最大行数。 ## 内部 API 扫描器在 8080 端口暴露一个内部 HTTP API 用于实时 IP 分类。 - **端点:** `POST /internal/classify` - **认证:** 基于 HMAC,使用 `INTERNAL_SECRET` 环境变量 - **用途:** 允许你的 API 层(或任何授权服务)请求按需 IP 查询。扫描器查询其本地数据库,可选择触发实时增强,并返回完整的分类响应。 此 API 仅供内部使用,不应暴露于公共互联网。请使用反向代理或防火墙规则限制访问。 ## 环境变量 | 变量 | 是否必需 | 默认值 | 描述 | |------|----------|--------|------| | `DATABASE_URL` | 是 | -- | PostgreSQL 连接字符串 | | `REDIS_URL` | 是 | -- | Redis 连接字符串 | | `INTERNAL_SECRET` | 是 | -- | 用于内部 API 认证的 HMAC 密钥 | | `RUST_LOG` | 否 | `info` | 日志级别过滤器(例如 `info,geoiphub_scanner=debug`) | | `GEOIPHUB_CONFIG` | 否 | `config/default.toml` | TOML 配置文件路径 | | `API_BIND` | 否 | `0.0.0.0:8080` | 内部 API 绑定地址 | | `RIPE_ATLAS_API_KEY` | 否 | -- | 用于地理三角测量的 RIPE Atlas API 密钥 | | `DNSBL_MAX_PER_RUN` | 否 | `10000` | 每次 DNSBL 循环最多检查的 IP 数 | | `DNSBL_BATCH_SIZE` | 否 | `500` | DNSBL 批大小 | | `DNSBL_CONCURRENCY` | 否 | `20` | DNSBL 并发查询数 | | `PROBE_CONCURRENCY` | 否 | `100` | 并发主动端口扫描数 | | `PROBE_BATCH_SIZE` | 否 | `200` | 主动探测批大小 | | `PROBE_MAX_PER_RUN` | 否 | `5000` | 每次循环最多探测的 IP 数 | | `RIPE_WHOIS_BATCH_SIZE` | 否 | `500` | RIPE WHOIS 增强批大小 | | `RIPE_API_DELAY_MS` | 否 | `500` | RIPE API 调用间隔(毫秒) | ## 自我托管建议 ### 最低要求 - **内存:** 512 MB(建议 1 GB 用于主动探测) - **CPU:** 1 vCPU(建议 2+ 用于并发数据馈送摄取) - **磁盘:** 10 GB(PostgreSQL 数据会随追踪的 IP 数量增长) ### 生产部署 1. 设置 `GEOIPHUB_CONFIG=config/production.toml` 以使用更高的并发和连接池限制。 2. 生成一个强 `INTERNAL_SECRET`:`openssl rand -hex 32`3. 将 PostgreSQL 部署在 SSD 存储上以获得写入性能。 4. 监控磁盘使用情况——`ip_intelligence` 表会随时间增长。`cleanup` 和 `decay` 馈送负责清理陈旧数据。 ### 调节参数 - **馈送并发:** 根据可用 CPU 和网络带宽调整 `PROBE_CONCURRENCY` 和 `DNSBL_CONCURRENCY`。 - **数据库写入压力:** 使用 `config/dblimits.json` 在 PostgreSQL 负载较高时限制写入密集型馈送。 - **Redis 内存:** 默认的 Docker Compose 设置 `maxmemory 256mb` 并启用 LRU 驱逐。如需更大的行为分析窗口,请增加内存。 - **主动探测:** 在低带宽连接上降低 `PROBE_MAX_PER_RUN`。某些网络或云提供商可能会限制出站扫描。 ## 与商业替代方案的对比 | 功能 | GeoIPHub Core | MaxMind GeoIP2 | IPinfo | IP2Location | |------|---------------|----------------|--------|-------------| | 开源 | 是(AGPL-3.0) | 否 | 否 | 否 | | VPN 检测 | 8 层检测 | 基础 | 是 | 基础 | | 主动探测 | 109 端口,13 种协议 | 否 | 否 | 否 | | 置信评分 | 每个字段 | 否 | 否 | 否 | | 行为分析 | UA 多样性、突发、交叉客户 | 否 | 否 | 否 | | 自托管 | 是 | 是(仅数据库) | 否 | 是(仅数据库) | | 爬虫验证 | 4 层(已验证/伪造等) | 否 | 否 | 否 | | 定价 | 免费 | $0-$3000/年 | $0-$999/月 | $0-$899/年 | ## 许可证 本项目根据 [GNU Affero General Public License v3.0](LICENSE) 授权。 如果你以网络服务形式运行修改后的版本,必须将该服务的源代码以相同许可证提供给用户。 ## 感谢 GeoIPHub Core 建立在许多开源数据提供者和项目的贡献之上: - [RIPE NCC](https://www.ripe.net/) —— RIR 数据、WHOIS 和 Atlas 基础设施 - [Team Cymru](https://www.team-cymru.com/) —— Fullbogon 馈送和 IP 到 ASN 映射 - [Tor Project](https://www.torproject.org/) —— 出口节点列表和 Onionoo API - [abuse.ch](https://abuse.ch/) —— Feodo Tracker、URLhaus 和 SSLBL - [GeoNames](https://www.geonames.org/) —— 地理名称解析 - [Spamhaus](https://www.spamhaus.org/) —— DNS 阻断列表 - [OpenGeoFeed](https://opengeofeed.org/) —— RFC 8805 地理源聚合 - 提供服务器列表的 VPN 供应商,使透明检测成为可能

使用 Rust 构建。由开放数据驱动。为关心准确性的开发者而造。

标签:109端口探测, 60+威胁源, ASN匹配, DNSBL, Docker, GeoIP, IP分类引擎, IP地理位置, IP情报, masscan, PostgreSQL, rDNS反查, Rust, Tor检测, VPN检测, WHOIS分析, WHOIS查询, 主动探测, 云提供商检测, 代理检测, 信誉库, 协议探测, 反欺诈, 可视化界面, 垃圾邮件检测, 多源融合, 威胁情报, 威胁情报平台, 安全防御评估, 开发者工具, 开源, 恶意软件, 搜索引擎查询, 数据中心IP检测, 数据统计, 机器人检测, 欺诈分数, 测试用例, 爬虫检测, 端口扫描, 管道处理, 网络安全, 网络流量审计, 评分系统, 请求拦截, 隐私保护, 高置信度