InfraGuard

IP 信誉查询(AbuseIPDB)

点击任意可疑 IP,即可在应用内弹窗中查询 AbuseIPDB 威胁情报 — 可信度仪表、举报数、类别、Tor/白名单,并带有保护免费配额的 1 小时缓存。

概览 — 这个功能做什么

IP 信誉查询是一项通用功能:在安全领域的任何位置点击可疑的来源 IP(src_ip),服务器就会代你查询 AbuseIPDB 的威胁情报,并把结果渲染到应用内弹窗中。你无需离开控制台 — 就在研判现场判断「这个 IP 有多恶名昭著」。

主要特点:

本文的实时按钮会打开安全领域(/security)。信誉查询不是独立页面 — 它是一个共享弹窗,在安全界面点击 IP 旁边的盾牌放大镜符号(.infr-ipsym)或 [查询信誉] 按钮时出现。

何时使用

界面布局

弹窗(security/partials/abuse-modal.blade.php)会根据查询结果,以三种状态之一进行渲染。

成功 — 信誉卡片

区域 内容
可信度仪表 0–100 的圆锥渐变环形图 + 居中的 score%。色调随分数变化(参见判定表)。
判定标签 No reports(无举报)/ Low risk(低风险)/ Elevated(风险偏高)/ High risk(高风险)
标记 Tor node(is_tor)· Whitelisted(is_whitelisted)徽章
两个大数值 举报总数 · 去重后的举报者数
元信息 国家/地区 · 用途类型 · ISP · 域名 · 最近举报时间
最近的举报 最多 6 条 — 类别标签 + 举报者所在国家/地区 + 时间 + 备注(最多 200 字符)
查询时间戳 服务器执行查询的时间(checked_at)

可信度分数 → 判定色调

分数 判定 色调 含义
0 无举报(clean) good 该时间范围内没有滥用举报
1–24 低风险(low) info 少量举报 — 仅供参考
25–74 风险偏高(elevated) warn 存在值得重视的滥用历史
75–100 高风险(high) crit 强烈的恶意信号

未配置 / 失败状态

底部操作按钮

按钮 动作
复制 IP 把 IP 复制到剪贴板(在非安全上下文中回退到 execCommand)
IP 查询 跳转到 IP 连接(/infra/traffic/ips?src_ip=…)
打开 AbuseIPDB 在新标签页打开外部的 abuseipdb.com/check/{ip}
加入封禁列表 以深层链接预填 封禁列表(/security/blocklist?add={ip})

使用方法

  1. 在安全界面(威胁、检测、概览、封禁列表)中,点击 IP 旁边的盾牌放大镜符号或 [查询信誉] 按钮。
  2. 弹窗随加载动画打开,前端向服务器请求查询:
GET /security/ip-reputation?ip=203.0.113.10
  1. 服务器严格校验该 IP(filter_var FILTER_VALIDATE_IP),随后通过 AbuseIpdbService 查询并返回归一化后的 JSON。
  2. 查看仪表、数值和最近的举报。按需使用底部按钮复制、追踪或封禁。

响应结构(归一化后)

查询成功时,服务器返回供弹窗使用的 JSON:

{
  "ok": true,
  "configured": true,
  "ip": "203.0.113.10",
  "score": 84,
  "reports": 128,
  "distinct_users": 41,
  "country": "CN",
  "usage": "Data Center/Web Hosting/Transit",
  "isp": "Example Hosting Ltd",
  "domain": "example-host.net",
  "is_tor": false,
  "is_whitelisted": false,
  "last_reported": "2026-08-12T22:14:07+00:00",
  "recent": [
    { "at": "2026-08-12T22:14:07+00:00", "country": "US", "categories": [18, 22], "comment": "SSH brute-force" }
  ],
  "checked_at": "2026-08-13 09:31:20",
  "external_url": "https://www.abuseipdb.com/check/203.0.113.10"
}

优雅失败时:

{ "ok": false, "configured": false, "external_url": "https://www.abuseipdb.com/check/203.0.113.10" }
字段 来源(AbuseIPDB) 含义
score abuseConfidenceScore 滥用可信度 0–100
reports totalReports 举报总数
distinct_users numDistinctUsers 去重后的举报者数量
country countryCode 国家/地区代码
usage usageType 用途(数据中心 / ISP / …)
isp / domain isp / domain ISP · 域名
is_tor isTor Tor 出口节点标记
is_whitelisted isWhitelisted AbuseIPDB 白名单
last_reported lastReportedAt 最近举报时间
recent[] reports[] 最近的举报(最多 6 条,备注截断到 200 字符)

举报类别(1–23)

recent[].categories 是数字 ID 的数组。弹窗通过 security.abuse.cat 语言映射渲染标签。

ID 标签 ID 标签 ID 标签
1 DNS 遭入侵 9 开放代理 17 身份伪造
2 DNS 投毒 10 Web 垃圾信息 18 暴力破解
3 欺诈订单 11 垃圾邮件 19 恶意 Web 爬虫
4 DDoS 攻击 12 博客垃圾信息 20 被入侵的主机
5 FTP 暴力破解 13 VPN IP 21 Web 应用攻击
6 Ping of Death 14 端口扫描 22 SSH
7 钓鱼 15 黑客攻击 23 针对 IoT
8 VoIP 欺诈 16 SQL 注入

数据来源

该功能不新建任何表。 它完全依靠一次外部 API 调用 + 一份密钥登记表 + 一层缓存来工作。

组件 说明
AbuseIPDB API https://api.abuseipdb.com/api/v2/check(verbose=1,maxAgeInDays=提供方设定值·默认 90)。超时 8 秒。
AbuseIpdbService 负责查询、归一化、缓存,并消费轮换的密钥。check($ip)(带缓存)· checkWithKey()(管理员单密钥测试,不带缓存)。
ReputationProviderService 密钥池的唯一事实来源。按 priority·id 排序提供启用的 infr_reputation_provider 行,缓存 30 秒;rotated() 用于轮询;若一个都没登记则回退到 .env ABUSEIPDB_KEY。
infr_reputation_provider AbuseIPDB 多密钥登记表(迁移 000733)。密钥以 secret_enc(Crypt,只写)存储 — 绝不返回给浏览器。在 信誉 API 中管理。
缓存 Cache 键为 infr:sec:abuse:{ip},TTL 3600 秒(1 小时)。轮询计数器是 infr:reputation:rr。
config/services.php abuseipdb.key(=.env ABUSEIPDB_KEY)· abuseipdb.max_age_days(默认 90)。仅在没有任何已登记密钥时作为回退。

密钥轮换 / 故障切换流程

check(ip)
  ├ cache hit? → return
  └ miss → iterate providers.rotated()
        key#1 → 200? → normalize·cache·return
              → 429/401/403 → fail over to next key (secret never printed)
        key#2 → …
        all fail → { ok:false, error:"http_429"|"unreachable" }

登记多个免费版密钥,它们的配额就会汇聚成池。当某个密钥用尽当日配额并返回 429 时,服务会自动前进到下一个 — 调查负荷较重的团队应在 信誉 API 中登记 2–3 个密钥。

访问权限

排错与常见问题

弹窗提示「未配置 API 密钥」

infr_reputation_provider 中没有登记任何密钥,且 .env ABUSEIPDB_KEY 为空。请在 信誉 API 中添加一个 AbuseIPDB 密钥,或在 .env 中设置 ABUSEIPDB_KEY=YOUR_KEY。在此期间,可使用 [打开 AbuseIPDB] 按钮到外部站点查看。

一直出现「查询失败」

刚封禁的 IP 分数仍然很低

结果会按 IP 缓存 1 小时(infr:sec:abuse:{ip})。如果需要最新数值,请最多等待一小时后重新查询。这层缓存的存在正是为了保护你的免费配额。

可以从这里向 AbuseIPDB 举报该 IP 吗?

不可以。该功能仅供查询。 举报提交(国际协作)属于另行推迟的响应阶段 — 这里不会向外部发布任何内容。

我只看到 6 条最近的举报

归一化步骤只保留最新的 6 条(MAX_REPORTS=6)。请通过 [打开 AbuseIPDB] 到外部站点查看完整历史。

这是白名单/内部 IP,但查询按钮被隐藏了

安全界面会给已登记实例的 IP(也就是你自己的网络)打上 Internal 徽章并隐藏信誉按钮(SecurityScope) — 这样可以避免 Suricata 的方向标签把我们自己的服务器标为「来源」时造成的困惑。内部网络的定义在 运维策略 中管理。

相关内容

위협 화면의 IP 조사 진입점
위협 화면의 IP 조사 진입점