跳至正文
IP 情报

用 IP 情报打击网络犯罪:如何预防网络攻击

用 IP 情报打击网络犯罪:哪些 ASN、VPN、Tor 和托管信号能阻止哪些攻击,附 7 种防御的实测 Python 代码,以及今天对真实地址的查询结果。

作者GeoIPHub 团队发布于更新于阅读时长阅读约 46 分钟
数据天际线边缘的一个哨兵节点正在消解敌对光束,象征用 IP 情报打击网络犯罪

2026 年 10 月 15 日,我们查询了三个公开地址:一台经探测确认的商业 VPN 服务器得分 92(block),一个 Tor 出口得分 100(block),而 Nmap 自己在 Linode 云服务器上的测试主机得分 10(allow)。三者都位于数据中心,但只有两个匿名化工具被拦截。“云”与“犯罪”之间的这道差距,正是本指南其余部分要讨论的内容。

这些风险是实测的,而不是预测的。FBI 的互联网犯罪投诉中心(IC3)在 2025 年收到了 1,008,597 起投诉,这是首次超过一百万起,报告损失达 208.77 亿美元,比 2024 年增长 26%(IC3 2025 互联网犯罪报告)。而承载攻击的流量也越来越不是人类:Imperva 的 2026 年恶意 bot 报告发现,2025 年自动化流量占全部网络流量的 53% 以上,高于前一年的 51%。

本指南涵盖这些信号是什么、它们能瓦解哪些犯罪类别、我们今天针对真实地址测试过的七种防御及其 Python 代码、一张信号与攻击的对照矩阵,以及 IP 数据无能为力的情形。

一组半透明面板,每块被不同的信号点亮,象征构成 IP 判定的各种信号
源 IP 是您对一个请求了解到的第一件事,而且往往是最有用的。

IP 情报为一个裸地址增加了什么

IP 情报是用一个原始 IP 地址所能揭示的、关于其来源和可信度的全部信息来丰富它。一个裸地址只是一个数字。把它送进信息丰富管道,它就变成了一份画像:

  • 地理位置:国家、地区、大致城市和时区。
  • 网络归属:自治系统号(ASN)以及控制该地址空间的组织。
  • 连接类型:住宅宽带、移动、企业,或托管与数据中心。
  • 匿名化标记:这是 VPN、代理还是 Tor 出口节点?
  • 威胁与滥用信号:这个地址是否曾被发现扫描、发送垃圾邮件,或出现在 DNS 黑名单上?
  • 综合风险评分:一个把上述信号融合为 allow、review、step-up 或 block 决策的数字。

最容易让人混淆的一点:这与 IP 地理定位不是一回事。 地理定位只回答“这个 IP 在哪里”,正如我们在 IP 地理定位的实际准确度中所述,它在国家级别的准确率约为 99%,但在城市级别要弱得多。更广泛的这门学科(我们在关于 IP 情报在位置之外涵盖哪些内容的指南中逐层拆解)增加了网络、连接类型、匿名化和信誉这几层,用来回答欺诈与安全团队真正关心的问题:我能信任这个连接吗? 大多数实现只读取国家字段,而单凭国家字段几乎无法说明一个请求是否合法。

为什么源 IP 是网络犯罪防御中的第一个信号

源 IP 之所以是第一个信号,是因为攻击者几乎可以伪造其他一切,却必须向您展示一个可路由的地址。三个结构性事实让它很有价值。

1. 它无法回避。 攻击者可以伪造 User-Agent、编造电子邮件、购买被盗银行卡、伪造设备指纹。但他们做不到的是:在不暴露一个您能观察到的源 IP 的情况下访问您的服务器。他们可以躲在基础设施背后,但基础设施本身会留下痕迹。

2. 攻击者大规模复用基础设施。 有利可图的网络犯罪已经工业化。撞库工具包从租用的服务器上轰炸成千上万个账户;盗卡测试团伙在数据中心网段之间轮换;抓取者和黄牛在云和代理池上运行。这种复用恰恰是网络信号能够暴露的:来自托管 ASN 的登录、来自数据中心网段的结账、通过开放代理到达的“购物者”。

3. 它在高成本步骤之前就已可用。 IP 在第一个数据包中就已存在,早于身份验证,也早于支付授权。这使它成为对风险进行初筛成本最低的地方,于是您那些昂贵的防御手段(MFA 验证、人工审核、升级 KYC)只在确有必要时才会触发。

需要注意的是(我们在下文还会谈到),IP 是一个信号,而不是判决。关键在于用它来决定谁值得更仔细的审查,而不是一刀切地封禁。

IP 信号能瓦解的网络犯罪类别

网络犯罪不是单一的东西,因此 IP 在阻止它时扮演的角色也不是单一的。下面说明源 IP 在主要攻击类别中如何发挥作用,并附上每一类的深入指南。

账户盗用和撞库

撞库(用泄露的用户名和密码组合反复尝试登录表单)如今已成为账户盗用的主要途径。这种攻击之所以划算,只是因为它是自动化的,并分布在廉价的基础设施上。一次查询就能标记出大规模撞库所依赖的托管 ASN、代理和匿名化出口,并提供单次登录无法揭示的频率全貌(这个 IP 正在接触多少个账户?)。其中的微妙之处在于:单靠封禁 IP 会失败,因为老练的攻击者会转向住宅代理,所以 IP 必须是一项风险输入,而不是全部决策。

支付欺诈、盗卡测试和结账滥用

结账环节是网络犯罪变现的地方,因此它会吸引盗刷 bot、盗卡测试脚本,以及越来越多的自动化 AI 购物代理。盗卡测试表现为高频、小额的授权请求,往往来自数据中心和代理 IP。连接类型和风险信号让您可以对可疑的少数结账增加摩擦,同时让合法会话(包括正常的代理流量)不受影响。界线该划在哪里,可参阅应该在哪个 IP 欺诈评分处拦截。

Bot、抓取程序和爬虫冒充

如今 bot 已占网络流量的大多数,因此在每个端点上区分真实爬虫和冒充者都很重要。User-Agent: GPTBot 请求头是任何人都能发送的声明。HUMAN Security 发现,在所有观察到的、自称为 AI 爬虫或抓取程序 User-Agent 的流量中,有 5.7% 是伪造的。防御之道在于来源验证:使用反向 DNS、公布的 CIDR 网段和 Web Bot Auth 通过 IP 验证 AI 爬虫和代理。查询本身看不到 User-Agent,因此声明的名称与 threat.crawler.verified 之间的比对要在您自己的代码中完成。想了解更全面的情况,请参阅IP 数据如何将 bot 分类;针对复制您的内容或价格的抓取程序,请参阅我们的网页抓取检测指南。

匿名化滥用:VPN、代理和 Tor

匿名化是网络犯罪分子的伪装,但也被数以百万计完全合法、注重隐私的人使用。现代的 VPN 和代理检测依靠服务商服务器列表、ASN 分析和主动协议探测来区分两者,而不是依靠过时的黑名单。最危险的一类是住宅代理:通过真实消费者设备转发流量的网络。Infoblox 测得,对住宅代理域名的 DNS 查询量从 2025 年 1 月的每月近 4,000 亿次增长到 2026 年 4 月的每月超过 5,000 亿次。仅凭 IP 数据无法可靠地标记它们,而且 GeoIPHub 不检测住宅代理,因此必须借助设备、行为和频率信号来识别。如何处理匿名化流量又不拒绝合法的 VPN 用户,是在不拦截真实客户的前提下检测匿名化流量一文的主题。

虚假账户、合成身份和新账户欺诈

薅羊毛、刷推荐奖励、洗钱车手和合成身份团伙都依赖大规模创建账户。由于每个虚假账户都需要一个“看起来全新”的来源,攻击者会不断更换代理和数据中心 IP,而这正是这些信号所能暴露的基础设施。把风险评分纳入注册流程,是提高批量创建账户成本最便宜的方法之一。我们的按 IP 类型进行注册检查展示了每种地址返回什么,以及应该如何处理。

地理欺诈、位置伪造和规避制裁

促销滥用、规避内容授权限制和规避制裁都依赖于伪造位置。在这里,查询起到双重作用:地理定位确定声称的位置,而 VPN、代理和连接类型标记则揭示该位置是否被伪造。下文的地理限制防御说明了为什么没有匿名化检查与之配合,国家检查就毫无意义。

今天的三次查询:VPN 92、Tor 出口 100、云主机 10

评分跟随证据,而不是网络类型。我们在 2026 年 10 月 15 日针对公开端点(无需密钥,每分钟 30 次查询)运行了这三次查询,下面的响应是真实输出的精简版。随着网段变化,结果也会改变。

GeoIPHub API
curl https://api.geoiphub.com/v1/lookup/102.129.235.17
GeoIPHub API
{ "ip": "102.129.235.17", "asn": { "asn": 834, "org": "IPXO - IPXO LLC", "asn_type": "vpn", "connection_type": "datacenter" }, "detection": { "is_vpn": true, "is_hosting": false, "is_anonymous": true, "vpn_provider": "none", "vpn_confidence": 100 }, "scoring": { "fraud_score": 92, "recommended_action": "block", "detection_methods": ["known_vpn_server", "openvpn_open", "ipsec_open"] } }
GeoIPHub API
{ "ip": "185.220.101.47", "asn": { "asn": 60729, "org": "TORSERVERS-NET - Stiftung Erneuerbare Freiheit", "asn_type": "hosting", "connection_type": "datacenter" }, "geo": { "country_code": "DE", "city": "Hamburg (Hamburg-Nord)" }, "detection": { "is_tor": true, "is_hosting": true, "is_anonymous": true }, "threat": { "is_spammer": true, "threat_types": ["spammer", "tor"], "dnsbl_sources": ["bl.spamcop.net"] }, "scoring": { "fraud_score": 100, "recommended_action": "block", "detection_methods": ["tor_exit", "datacenter_blocklisted", "no_ptr_datacenter", "known_spammer"] } }
GeoIPHub API
{ "ip": "45.33.32.156", "asn": { "asn": 63949, "org": "AKAMAI-LINODE-AP - Akamai Connected Cloud", "asn_type": "hosting", "connection_type": "datacenter" }, "detection": { "is_vpn": false, "is_hosting": true, "is_anonymous": false }, "scoring": { "fraud_score": 10, "recommended_action": "allow", "detection_methods": ["datacenter_ip"] } }

该 VPN 服务器的 detection_methods 显示了三项相互独立的确认:该 IP 与一台已知 VPN 服务器匹配,而且我们的探测在它上面完成了真实的 OpenVPN 和 IPsec 握手。这种相互印证把它推入了拦截区间,尽管 vpn_provider 为 "none",因为该地址不在任何服务商的列表上。那个 Tor 出口同时命中了 Tor Project 的出口列表和 SpamCop 黑名单,因此达到了 100 的上限。

Tor 响应中有一个检测方法比看起来要弱。no_ptr_datacenter 表示该地址没有反向 DNS,但我们当天上午实时运行的 dig -x 却为它返回了一个主机名。我们存储的 PTR 数据在部分地址上存在缺口,因此在复核这一判定时,请给这个方法最低的权重。

Nmap 的测试主机只带有托管信号,因此得分 10,结果为 allow。许多合法的 API、监控程序和 AI 代理都运行在云服务器上,仅凭托管本身并不能证明存在犯罪。即使是该 VPN 的 block,也只是一个您可以按流程覆盖的默认值,下面的防御手段会说明这一点。

为什么风险评分胜过黑名单

评分之所以胜过黑名单,是因为IP 是一个信号,而不是判决。 在运营商级 NAT 之后,一个住宅 IPv4 地址可能由数百人共享,因此真实客户和欺诈者可能位于同一个地址上。一个毫无污点的住宅 IP 上可能运行着代理。一个数据中心 IP 可能属于合法的企业 VPN。

经得起时间考验的模式是把 IP 信号转换为风险评分,再依据它来决定如何处理:

GeoIPHub API
Incoming request | v [ IP lookup ] ASN, connection type, VPN / proxy / Tor, hosting, reputation | v [ Risk score 0-100 ] fuse with device, behavioral, velocity and identity signals | +-- low : allow (don't punish the legitimate majority) +-- medium : step-up / challenge (MFA, CAPTCHA, manual review) +-- high : block or hold

这就是将 IP 列入黑名单(脆弱、误报率高、容易规避)与对连接进行风险评分(分级、可解释、有韧性)之间的区别。一个可解释的评分所能给出的每一项原因及其权重,都列在逐字段解读风险评分原因中。

如何利用 IP 地理定位和网络信号预防网络攻击

要利用 IP 地理定位预防网络攻击,就不能只读取国家:一次查询中的 geo、asn、detection、threat 和 scoring 这几组字段各自驱动一种不同的防御。下面七种是我们最常见到的,每一种都附有可直接粘贴的 Python 代码。它们都调用同一个小型辅助函数:

GeoIPHub API
import json import urllib.request API = "https://api.geoiphub.com/v1/lookup/" def geoiphub_lookup(ip: str, api_key: str = "") -> dict: # The API currently answers 403 to urllib's default User-Agent, so send your own. # Without a key you get 30 lookups a minute; with one, 1,500 a day on the free tier. headers = {"User-Agent": "my-app/1.0"} if api_key: headers["x-api-key"] = api_key req = urllib.request.Request(API + ip, headers=headers) with urllib.request.urlopen(req, timeout=5) as resp: return json.load(resp)

1. 在边缘拦截已知滥用,但放行经过验证的爬虫

成本最低的防御是在扫描器、僵尸网络节点和 Tor 出口触及您的应用之前就拒绝它们,其余一切交给评分处理。有两个细节很重要。经过验证的爬虫要最先处理,因为真实爬虫可能位于被列入黑名单的网段上(AhrefsBot 的 5.39.1.230 返回 is_abusive: true)。而扫描器标记要直接读取,因为它不会影响 fraud_score:位于 162.142.125.10 的 Censys 扫描器得分为 0。

GeoIPHub API
def check_ip_at_entry(ip: str) -> dict: data = geoiphub_lookup(ip) threat, scoring = data["threat"], data["scoring"] # Verified search and AI crawlers can sit on blocklisted ranges: let them through if threat["crawler"]["verified"]: return {"action": "allow", "reason": "verified_crawler"} # Scanner and botnet flags don't move fraud_score, so read them directly if threat["is_scanner"] or threat["is_botnet"]: return {"action": "block", "reason": "scanner_or_botnet"} # Tor exit at an entry point that handles accounts or money if data["detection"]["is_tor"]: return {"action": "block", "reason": "tor_exit"} return {"action": scoring["recommended_action"], "fraud_score": scoring["fraud_score"]}

按流程进行校准。密码重置表单可以对 step_up 采取行动,而公开内容端点可能只对 block 采取行动。scoring.confidence 字段(0.0 到 1.0)表示评分背后有多少证据,因此请把硬性拦截留给证据充分的判定。

2. 按流程处理 VPN、代理和 Tor 流量

匿名化工具应当按流程区别对待,因为商业 VPN 承载着数以百万计的普通用户,而出现在结账环节的开放代理和 Tor 出口则很少属于普通用户。对大多数产品来说,拦截所有 VPN 的范围太宽了。

GeoIPHub API
SENSITIVE_FLOWS = {"login", "signup", "checkout"} def anonymization_response(ip: str, flow: str) -> str: det = geoiphub_lookup(ip)["detection"] sensitive = flow in SENSITIVE_FLOWS if det["is_tor"] or det["is_proxy"]: return "block" if sensitive else "challenge" # Commercial VPNs carry millions of ordinary users: add friction only where money moves if det["is_vpn"]: return "challenge" if flow == "checkout" else "allow_and_log" # iCloud Private Relay is a Safari setting, not an attack tool return "allow"

每个标记背后的证据:

  • detection.is_vpn:与服务商自己的服务器列表以及一份公开的第三方列表(包括这些列表所带的 WireGuard 标签)进行匹配,并由我们的探测完成真实的 OpenVPN 和 IPsec 握手。
  • detection.is_proxy:针对 SOCKS4、SOCKS5、HTTP CONNECT 和 HTTP 正向代理的握手探测。
  • detection.is_tor:Tor Project 官方的出口列表,每日刷新。
  • detection.is_relay:iCloud Private Relay 和 Cloudflare 隐私出口,我们有意放行它们。

住宅代理不在此列。API 不检测住宅代理,因此不要基于 is_residential_proxy 构建规则。

3. 只有配合 VPN 检测才能执行地理限制

只有国家检查与匿名化检查同时运行,地理限制才能生效。如果您屏蔽了一个受制裁国家,却允许 is_vpn: true 的请求,那么那里的用户就会通过德国的 VPN 服务器连接,屏蔽随之失效。

GeoIPHub API
BLOCKED_COUNTRIES = {"KP", "IR", "CU"} # example only: your compliance team owns this list RESTRICTED_FLOWS = {"checkout", "download", "api_access"} def check_geo_compliance(ip: str, flow: str) -> dict: if flow not in RESTRICTED_FLOWS: return {"action": "allow"} data = geoiphub_lookup(ip) det = data["detection"] # Behind an anonymizer the apparent country is the server's, not the user's if det["is_anonymous"]: return {"action": "block", "reason": "country_unverifiable"} # Relay geolocation is approximate: confirm the country from Apple's egress list if det["is_relay"]: return {"action": "verify_country", "reason": "private_relay"} if data["geo"]["country_code"] in BLOCKED_COUNTRIES: return {"action": "block", "reason": "geo_compliance"} return {"action": "allow"}

中继分支之所以存在,是因为我们在自己的数据中发现了一个缺口。Apple 会把 Private Relay 的出口保持在用户所在国家,但对于中继地址 104.28.46.99,我们的数据库显示为安哥拉,而 Apple 自己的出口列表显示为赞比亚。中继会报告 is_anonymous: false,因此如果没有这个分支,国家检查就会采信错误的答案。

4. 在登录时标记不可能旅行

不可能旅行是最可靠的账户盗用信号之一:没有人能先从伦敦登录,30 分钟后又从加利福尼亚登录。存储每次登录的坐标,计算与上一次登录的距离,并标记那些需要时速超过约 900 公里的喷气式飞机才能完成的登录对。

GeoIPHub API
import math from datetime import datetime, timezone MIN_DISTANCE_KM = 500 # below this, city-level geolocation error can fake a "jump" MAX_SPEED_KMH = 900 # roughly a commercial jet def haversine_km(lat1, lon1, lat2, lon2) -> float: r = 6371 dlat = math.radians(lat2 - lat1) dlon = math.radians(lon2 - lon1) a = (math.sin(dlat / 2) ** 2 + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(dlon / 2) ** 2) return r * 2 * math.asin(math.sqrt(a)) def check_impossible_travel(previous, current_ip: str) -> dict: # previous: your last stored login for this user, e.g. # {"latitude": 51.5, "longitude": -0.12, "at": datetime(..., tzinfo=timezone.utc)} data = geoiphub_lookup(current_ip) det, geo = data["detection"], data["geo"] # A VPN, Tor or relay location is not where the person is: don't compare it or store it if det["is_anonymous"] or det["is_relay"]: return {"action": "skip", "reason": "location_not_reliable"} if previous is None: return {"action": "allow"} distance_km = haversine_km(previous["latitude"], previous["longitude"], geo["latitude"], geo["longitude"]) hours = (datetime.now(timezone.utc) - previous["at"]).total_seconds() / 3600 if distance_km > MIN_DISTANCE_KM and hours < distance_km / MAX_SPEED_KMH: return {"action": "step_up", "reason": "impossible_travel", "distance_km": round(distance_km), "hours_elapsed": round(hours, 1)} return {"action": "allow"}

在存储了一条 30 分钟前的伦敦登录记录的情况下,位于弗里蒙特的 Linode 主机返回了 step_up,距离为 8,617 公里。有两点校准说明。VPN 用户每次切换服务器都会触发不可能旅行,这就是为什么匿名化登录会被跳过而不是存储。此外,移动运营商会让许多用户通过城市数据粗略的共享地址上网,因此 500 公里的下限可以防止位置漂移看起来像一次飞行。

5. 按网络类型限速

当速率限制跟随 IP 背后的网络时,效果会更好。在运营商 NAT 之后,一个移动地址可能承载数百名真实用户,因此对它严格限速会拦截客户。云地址通常只是一个脚本,但有时也可能是代表真实买家行事的 AI 代理,因此应对其发起验证,而不是直接封禁。

GeoIPHub API
RATE_LIMITS = { "isp": {"per_minute": 60, "on_exceed": "delay"}, "mobile": {"per_minute": 120, "on_exceed": "delay"}, # carrier NAT puts many people on one IP "hosting": {"per_minute": 10, "on_exceed": "challenge"}, # usually one script, sometimes a real AI agent "vpn": {"per_minute": 20, "on_exceed": "challenge"}, } DEFAULT_LIMIT = {"per_minute": 30, "on_exceed": "delay"} # "unknown" and any new type def rate_limit_for(ip: str) -> dict: data = geoiphub_lookup(ip) if data["threat"]["crawler"]["verified"]: return {"per_minute": 120, "on_exceed": "delay"} if data["scoring"]["recommended_action"] == "block": return {"per_minute": 3, "on_exceed": "block"} return RATE_LIMITS.get(data["asn"]["asn_type"], DEFAULT_LIMIT)

这些数字是需要根据您自己的流量进行调整的起始值,而不是经过测量的最优值。请保留一个默认值:Censys 扫描器返回的是 asn_type: "unknown",任何固定的表格都不会列出它。租用家庭和移动 IP 的抓取程序可以绕过任何基于网络类型的规则,我们的如何判断您的网站是否正在被抓取指南介绍了能发现它们的日志级检查。

6. 在结账时比较 IP 所在国家与账单国家

一张账单地址在英国的银行卡在另一个国家的 IP 上使用,是支付欺诈的一种高信号模式,前提是您能信任该 IP 的国家。当匿名化工具隐藏了国家时,请改为要求 3-D Secure(3DS)验证。

GeoIPHub API
def assess_checkout_geo_risk(ip: str, billing_country: str) -> dict: data = geoiphub_lookup(ip) det = data["detection"] if det["is_vpn"] or det["is_proxy"] or det["is_tor"]: return {"risk": "high", "reason": "anonymizer_hides_country", "action": "require_3ds"} # Private Relay keeps the user's country but our relay geolocation can miss it: skip the compare if det["is_relay"]: return {"risk": "standard", "reason": "private_relay", "action": "allow"} ip_country = data["geo"]["country_code"] if ip_country != billing_country: return {"risk": "elevated", "reason": f"ip_{ip_country}_billing_{billing_country}", "action": "require_3ds"} return {"risk": "standard", "action": "allow"}

不要维护一份手写的“高风险国家”列表。攻击者会刻意通过低风险国家中看起来干净的 IP 进行路由,因此应针对基础设施(匿名化状态、滥用标记、ASN 类型),而不是它看似来自的地理位置。我们的减少拒付指南对结账流程有更深入的讨论。

7. 把 bot 会话排除在分析之外

在自动化会话被记入分析之前将其过滤掉,可以让您的转化数据(以及基于这些数据训练的任何出价模型)反映的是真实的人。经过验证的爬虫仍会得到服务,只是不被计入。

GeoIPHub API
def should_record_session(ip: str) -> bool: data = geoiphub_lookup(ip) det, threat, scoring = data["detection"], data["threat"], data["scoring"] if threat["crawler"]["verified"]: return False # serve the crawler, but keep it out of analytics if det["is_tor"] or det["is_proxy"]: return False if scoring["recommended_action"] == "block": return False if det["is_hosting"] and scoring["fraud_score"] > 50: return False return True

付费流量有它自己的一套做法,第一步就是放弃 IP 排除列表:请参阅如何通过 IP 地址检测点击欺诈。

七项检查对六个真实地址返回了什么

2026 年 10 月 15 日,我们把上面的每个函数按原样针对六个公开地址运行了一遍。结账一列把每个 IP 与一个美国账单地址进行比较。

IP(它是什么)边缘检查登录匿名化检查速率限制结账 vs 美国银行卡计入分析
185.220.101.47(Tor 出口)block: tor_exitblock3 次/分钟,blockhigh: require_3ds否
102.129.235.17(商业 VPN)block: 评分 92allow_and_log3 次/分钟,blockhigh: require_3ds否
45.33.32.156(Nmap 测试主机,Linode)allow: 评分 10allow10 次/分钟,challengestandard: allow是
162.142.125.10(Censys 扫描器)block: scanner_or_botnetallow30 次/分钟,delaystandard: allow是
5.39.1.230(AhrefsBot,已验证)allow: verified_crawlerallow120 次/分钟,delayelevated: FR vs US否
104.28.46.99(iCloud Private Relay)allow: 评分 9allow30 次/分钟,delaystandard: private_relay是

有两行说明了为什么这些检查必须一起运行。Censys 扫描器通过了除边缘检查之外的所有检查,因为扫描器标记是它唯一的信号。而边缘检查仅凭评分就拦截的那个 VPN,在登录时只被记录下来,这正是您想要的按流程区别处理:在按评分硬性拦截的地方拦截它,在 VPN 属于正常现象的地方记录它。

哪个 IP 信号阻止哪种攻击

每个信号都对应一种特定的攻击和一种特定的处理方式。请把下表作为初始配置,然后按流程进行调整。

信号它能发现什么建议处理方式
detection.is_tor: true撞库、盗刷和欺诈中的 Tor 匿名化在敏感流程中拦截
detection.is_proxy: true开放的 SOCKS 或 HTTP 代理,通常是滥用工具在登录、结账、注册中拦截
detection.is_vpn: true商业 VPN,合法与滥用用途混杂在结账时验证;其他地方放行并记录
detection.is_relay: trueiCloud Private Relay 或 Cloudflare 隐私出口放行;不要信任其城市
消费者流程中的 detection.is_hosting: true脚本,或代表真实用户购物的 AI 代理验证;仅在评分高时拦截
threat.is_scanner 或 is_botnet: true扫描和僵尸网络基础设施(不影响评分)在边缘拦截
threat.crawler.verified: true位于其运营方公布网段上的真实搜索或 AI 爬虫放行;排除在分析之外
距离超过 500 公里且速度超过 900 公里/小时使用被盗凭据的账户盗用升级验证,然后标记该账户
geo.country_code 与账单国家不同,且无匿名化盗卡测试,或正在度假的客户要求 3DS
scoring.fraud_score 超过 75(block)多个相互印证的信号同时出现拦截或暂扣以待人工审核

IP 数据无法发现什么

IP 数据是第一道筛选,有三类攻击会直接穿过它。关于从归属到判定的单次事件调查流程,请参阅如何调查可疑的 IP 地址。

信誉干净的住宅代理。 昨天才被加入代理池的 IP 没有任何滥用历史,能通过黑名单检查,而且 GeoIPHub 不检测住宅代理。要发现它们,需要设备指纹异常、会话时序和交互速率。

在干净连接上使用的被盗账户。 持有有效凭据、在受害者所在国家使用家庭网络的攻击者,在 IP 数据中不会留下任何可标记的东西。这时需要行为信号(打字节奏、浏览路径、与购买历史的偏离)。

定向攻击。 研究过您防御措施的攻击者会挑选受害者所在城市的一个干净住宅 IP,并通过所有 IP 级别的检查。这里的防御手段是电子邮件验证和设备绑定。

正确的模型是:查询以接近零的单次请求成本过滤掉大量自动化和低水平的攻击,这样昂贵的检查(设备指纹、行为分析、人工审核)就可以集中处理剩下的部分。

在生产环境中运行这些检查

三个习惯能让基于 IP 的防御在上线后保持准确。

按 IP 短时缓存。 网络事实在一个会话内变化缓慢,但确实会变化:我们的 VPN 和代理探测最多每 12 小时运行一次,威胁情报源每 6 小时刷新一次。在会话期间缓存每次查询的结果;用于安全决策时在一小时内过期,用于普通地理字段时在一天内过期。每个 IP 每个会话一次查询,就是切实可行的成本模型。

记录完整响应,而不只是判定结果。 当一次拦截触发时,您需要知道是哪个信号触发了它。每次决策都要存储 scoring.detection_methods 和原始的 scoring.fraud_score。这样您才能发现误报(例如上文 Tor 示例中过时的 PTR 方法)并调整阈值。

按流程而不是按站点调整阈值。 密码重置应当比阅读博客有更低的拦截阈值。把阈值放在配置中,让您的安全团队无需部署就能调整:

GeoIPHub API
FLOW_THRESHOLDS = { "checkout": {"block_above": 75, "challenge_above": 50}, "login": {"block_above": 80, "challenge_above": 55}, "signup": {"block_above": 85, "challenge_above": 60}, "api_read": {"block_above": 90, "challenge_above": 75}, }

一次 GeoIPHub 查询针对每种威胁返回什么

GeoIPHub 把这一整层打包进一次 API 调用。一次查询会返回分布在 10 个响应组中的 100 多个数据字段(地理位置、ASN 与网络、连接类型、移动运营商、反向 DNS、匿名化标记以及计算得出的风险评分),因此您无需拼凑五家供应商来回答一个问题。以下是针对每种威胁真正发挥作用的部分:

  • 由 36 项加权原因得出的 0-100 风险评分。 GeoIPHub 返回的不是“是或否”的标记,而是一个可解释的评分,并内置决策区间:allow(25 及以下)、review(50 及以下)、step-up(75 及以下)和 block(高于 75),因此同一次查询在结账时可以比在登录时调得更严。
  • 通过主动探测进行 VPN 和代理检测。 除了静态列表之外,GeoIPHub 还会在 25 个以上的端口和 8 种协议上运行真实的握手探测,并与 VPN 服务商自己的服务器列表以及一份公开的第三方列表交叉比对,因此答案反映的是实时基础设施,而不是上个月的黑名单。
  • 数据中心和托管检测。 覆盖范围包括 853 个精心整理的托管 ASN,以及来自 10 家云服务商的官方网段,这正是能揭露冒充浏览器的盗刷 bot、抓取程序和撞库基础设施的信号。
  • 每日刷新的 Tor 出口数据和 19 个官方爬虫与 AI bot 网段数据源(Googlebot、GPTBot、ClaudeBot、PerplexityBot 等),因此匿名化出口和自报身份的 bot 都是对照当前的真实情况进行评分的。
  • 这一切背后有 30 多个数据源和 5 个 RIR WHOIS 数据源,缓存查询在亚毫秒级完成,未知 IP 在 2.5 秒内实时分类,速度足以内嵌在登录、注册和结账流程中。

它在设计上也尊重隐私:您只需发送要分类的 IP,即可获得网络和风险属性。对请求进行评分不需要姓名、电子邮件或支付数据。

您可以直接用免费的 IP 查询工具试用这些信号,检查任意 IP 的欺诈评分,或在您自己的连接上测试 VPN 检测。当您准备好将其接入您的应用时,10 分钟集成指南会逐步演示如何使用 cURL、Node 和 Python 为每个请求评分,免费套餐即可返回全部字段,每天 1,500 次查询,不限制任何字段。

提高攻击者的成本,而不是客户的摩擦

网络犯罪是工业化、自动化的,而且越来越不是由人发起的,而它的每一部分都经由一个您可以首先检查的 IP 地址传输。IP 数据本身无法阻止欺诈,任何诚实的论述都会这样说。但作为分层防御中的来源层(告诉您哪些会话值得仔细查看的信号),它是您能部署的最有用、摩擦最低的控制手段之一。用得好,它能提高犯罪少数派的攻击成本,而不给合法的大多数增加负担。

常见问题

什么是 IP 情报?

IP 情报是指用一个原始 IP 地址所能揭示的、关于其来源和可信度的全部信息来丰富它:地理位置、所属网络(ASN)、连接类型、是否为数据中心、VPN、代理或 Tor 出口、滥用历史,以及计算得出的风险评分。它把任何在线请求中最普遍的属性变成一个决策信号,让您在密码被输入、银行卡被扣款之前就能采取行动。它比 IP 地理定位的范围更广:地理定位只回答“这个 IP 在哪里”,而这种信息丰富还回答“我能信任它吗”。

IP 数据如何帮助预防网络攻击?

几乎每一种攻击(撞库、盗卡测试、数据抓取、批量注册虚假账户、欺诈性结账)都经由某个 IP 地址到达,而攻击者会大规模复用基础设施。一次查询就能暴露这些基础设施留下的痕迹:来自托管 ASN 的登录、来自经探测确认的 VPN 服务器的结账、实际上是云端脚本的“浏览器”。在登录、注册和结账环节将其用作实时风险信号,您就能对可疑的少数发起验证或拦截,而不给合法的大多数增加摩擦。

仅靠 IP 地理定位能阻止网络攻击吗?

不能,任何声称可以的供应商都在夸大其词。IP 数据是纵深防御模型中的一层。一个共享的移动 IP 上可能同时有欺诈者和真实客户,一个干净的住宅 IP 上可能运行着代理,而一个持有被盗凭据、在受害者所在城市使用家庭网络的攻击者能通过所有 IP 检查。IP 信号与设备、行为、频率和身份信号结合时最为有效。用风险评分来决定哪些会话值得更仔细审查,而不是一刀切地封禁。

IP 信号能检测哪些类型的网络犯罪?

IP 信号有助于检测账户盗用和撞库、新账户和合成身份欺诈、支付和盗卡测试欺诈、自动化 bot 和抓取流量、冒用某个名称但 IP 无法佐证的爬虫,以及借助 VPN 和代理规避政策或制裁的行为。在每种情况下,它们都是来源层:告诉您该连接来自与真实个人相符的基础设施,还是来自自动化或匿名化的活动。它们无法识别住宅代理;住宅代理需要设备和行为信号。

什么是不可能旅行检测,它如何运作?

不可能旅行检测会标记同一账户的两次登录:两地相距太远,在两次登录的间隔时间内不可能到达。伦敦和新加坡相距约 10,850 公里,因此在伦敦登录后 30 分钟又在新加坡登录,说明其中一次不是账户所有者本人。存储每次登录的纬度和经度,计算与上一次登录的距离,并标记所需速度超过约 900 公里/小时(大致相当于商用喷气式飞机)的登录对。跳过来自 VPN、Tor 或中继地址的登录,因为它们的位置并不是用户的位置。

我应该屏蔽来自某些国家的全部流量吗?

国家级屏蔽是一种粗暴的手段,附带损害很大。在屏蔽整个国家之前,请检查您在那里是否有合法用户,因为一次设置的屏蔽也会打到他们。更有针对性的替代方案:对支付和密码重置等敏感流程要求升级验证,仅在法律或合同要求时使用硬性地理限制,并将国家与网络信号(托管 ASN、VPN 检测)结合使用,这样您针对的是被滥用的基础设施,而不是它看似来自的人群。

IP 情报和 IP 地理定位是一回事吗?

不是。IP 地理定位是其中的一个子集。地理定位把 IP 映射到国家、地区和大致城市,在国家级别的准确率约为 99%,但在城市级别要弱得多。完整的查询包含地理定位,但还加上了网络归属(ASN)、连接类型、VPN、代理、Tor 和数据中心标记、滥用信号以及综合风险评分。地理定位告诉您在哪里;其余部分告诉您是否可以信任它。

基于 IP 的风险评分是否侵犯用户隐私或违反 GDPR?

它处理的是 IP 地址和网络元数据,而不是姓名、电子邮件或支付信息。使用 GeoIPHub 时,您只需发送要分类的 IP,并获得网络和风险属性。对请求进行评分不需要交换任何个人数据。根据 GDPR,IP 地址可能属于个人数据,因此仍须遵循正确的做法:将其用于欺诈防范和安全这一正当目的,尽量缩短保留时间,并做好记录。对 IP 进行风险评分是一项安全控制措施,而不是用户追踪。

作者

GeoIPHub 团队

GeoIPHub API 背后的团队

由 GeoIPHub 团队撰写,即构建 GeoIPHub IP 情报 API 及其扫描器的团队。草稿在 AI 辅助下完成,并由团队编辑;除非标注为示例,API 示例均为针对线上 API 的真实查询。

分享本文
更多文章

相关 文章