コンテンツへスキップ
IP インテリジェンス

IP インテリジェンスによるサイバー犯罪対策:サイバー攻撃を防ぐ方法

IP インテリジェンスによるサイバー犯罪対策。どの ASN、VPN、Tor、ホスティングのシグナルがどの攻撃を止めるのかを、7 つの防御のテスト済み Python コードと、本日取得した実際のルックアップとともに解説します。

著者GeoIPHub チーム公開日更新日読了時間50 分で読めます
データのスカイラインの端に立つ見張りのノードが、敵意ある光線を消し去っている図。サイバー犯罪に対する IP インテリジェンスを表している

2026 年 10 月 15 日に 3 つの公開アドレスをルックアップしたところ、プローブで確認された商用 VPN サーバーはスコア 92(block)、Tor 出口は 100(block)、Linode のクラウドサーバー上にある Nmap 自身のテストホストは 10(allow)でした。3 つともデータセンターにありますが、ブロックされたのは 2 つの匿名化ツールだけでした。「クラウド」と「犯罪者」の間のこの隔たりが、このガイドの残りの主題です。

被害の大きさは予測ではなく実測です。FBI のインターネット犯罪苦情センター(IC3)は 2025 年に 1,008,597 件の苦情を受け付け、初めて 100 万件を超えました。報告された損失は 208 億 7,700 万ドルで、2024 年から 26% 増加しています(IC3 2025 Internet Crime Report)。さらに、攻撃を運ぶトラフィックはますます人間のものではなくなっています。Imperva の 2026 Bad Bot Report は、自動化されたトラフィックが 2025 年の全ウェブトラフィックの 53% 超を占め、前年の 51% から増えたことを明らかにしました。

このガイドでは、シグナルとは何か、どの犯罪カテゴリーを妨げるのか、本日実在のアドレスに対してテストした Python 付きの 7 つの防御、シグナルと攻撃の対応表、そして IP データが何も語れない場面を扱います。

それぞれ異なるシグナルで照らされた半透明のパネルのモザイク。IP の判定を構成するシグナルを表している
送信元 IP はリクエストについて最初にわかることであり、しばしば最も役に立つ。

IP インテリジェンスが生のアドレスに付け加えるもの

IP インテリジェンスとは、生の IP アドレスに、その発信元と信頼性について明らかになるすべての情報を付加することです。生のアドレスは単なる数字です。付加のパイプラインに通すと、プロファイルになります。

  • ジオロケーション:国、地域、おおよその市区町村、タイムゾーン。
  • ネットワークの所有者:自律システム番号(ASN)と、そのアドレス空間を管理する組織。
  • 接続タイプ:住宅向けブロードバンド、モバイル、ビジネス、あるいはホスティングとデータセンター。
  • 匿名化ツールのフラグ:これは VPN、プロキシ、Tor 出口ノードか。
  • 脅威と不正のシグナル:このアドレスがスキャン、スパム送信、または DNS ブロックリストへの掲載で観測されたことがあるか。
  • 複合的なリスクスコア:上記のシグナルを統合し、allow、review、step-up、block のいずれかの判断にする 1 つの数字。

つまずきやすい区別があります。これは IP ジオロケーションと同じではありません。 ジオロケーションは「この IP はどこか」にしか答えず、IP ジオロケーションは実際どれだけ正確かで扱っているとおり、国レベルでは約 99% の精度ですが、市区町村レベルではるかに弱くなります。より広い分野は、IP インテリジェンスが位置情報以外に何をカバーするかのガイドで層ごとに説明していますが、不正対策やセキュリティのチームが本当に知りたい問い、つまりこの接続は信頼できるかに答える、ネットワーク、接続タイプ、匿名化ツール、レピュテーションの層を加えます。ほとんどの実装は国のフィールドしか読みませんが、国のフィールドだけでは、リクエストが正当かどうかについてほとんど何もわかりません。

送信元 IP がサイバー犯罪対策の最初のシグナルである理由

送信元 IP が最初のシグナルなのは、攻撃者はほかのほぼすべてを偽装できても、ルーティング可能なアドレスは見せなければならないからです。3 つの構造的な事実が、その価値を生んでいます。

1. 避けられない。 攻撃者は User-Agent を偽装し、メールアドレスを捏造し、盗まれたカードを購入し、デバイスフィンガープリントを偽造できます。できないのは、こちらが観測できる送信元 IP なしにサーバーに到達することです。インフラの背後に隠れることはできても、インフラ自体が手がかりを残します。

2. 攻撃者はインフラを大規模に再利用する。 利益の出るサイバー犯罪は産業化されています。クレデンシャルスタッフィングのキットは、借りたサーバーから何千ものアカウントを叩き、カードテストのグループはデータセンターのレンジを巡回し、スクレイパーや転売ボットはクラウドとプロキシのプールから動作します。その再利用こそ、ネットワークシグナルが暴くものです。ホスティング ASN からのログイン、データセンターのレンジからのチェックアウト、オープンプロキシ経由で現れる「買い物客」などです。

3. コストのかかるステップの前に得られる。 IP は最初のパケットの時点で、認証の前、決済のオーソリゼーションの前に存在します。そのため、リスクのトリアージを行う最も低コストな場所であり、高コストな防御(MFA のチャレンジ、手動レビュー、ステップアップ KYC)は必要なときにだけ発動します。

後で戻りますが、注意点は、IP はシグナルであって判定ではないということです。技は、全面的な禁止ではなく、誰をより厳しく調べるべきかを決めるために使うことにあります。

IP シグナルが妨げるサイバー犯罪のカテゴリー

サイバー犯罪は単一のものではないので、それを止める IP の役割も単一ではありません。主要な攻撃カテゴリーで送信元 IP がどう貢献するかを、それぞれの詳細ガイドとともに示します。

アカウント乗っ取りとクレデンシャルスタッフィング

クレデンシャルスタッフィング(漏洩したユーザー名とパスワードの組をログインフォームに再生すること)は、今やアカウント乗っ取りの主要な経路です。この攻撃が採算に合うのは、自動化されて安価なインフラに分散されているからです。ルックアップは、大量のスタッフィングが利用するホスティング ASN、プロキシ、匿名化された出口にフラグを立て、単一のログインでは見えないベロシティの全体像(この IP はいくつのアカウントに触れているか)に情報を与えます。ただし重要な点として、IP のブロックだけでは失敗します。巧妙な攻撃者はレジデンシャルプロキシに移るため、IP は判断のすべてではなく、リスクの入力でなければなりません。

決済不正、カードテスト、チェックアウトの悪用

チェックアウトはサイバー犯罪が現金に変わる場所であり、そのためカーディングボット、カードテストのスクリプト、そしてますます自動化された AI ショッピングエージェントを引き寄せます。カードテストは、高頻度で少額のオーソリゼーションとして、多くはデータセンターやプロキシの IP から行われます。接続タイプとリスクのシグナルによって、疑わしい少数のチェックアウトにはフリクションを上げ、正当なセッション(良質なエージェントのトラフィックを含む)には手を触れずにおけます。線をどこに引くかは、IP 不正スコアはいくつでブロックすべきかで答えています。

ボット、スクレイパー、クローラーのなりすまし

ボットがウェブトラフィックの過半数を占める今、本物のクローラーとなりすましを見分けることは、あらゆるエンドポイントで重要です。User-Agent: GPTBot というヘッダーは、誰でも送れる主張にすぎません。HUMAN Security は、AI クローラーまたはスクレイパーの User-Agent を提示した観測トラフィックの 5.7% がなりすましだったことを明らかにしました。防御は出所の確認です。逆引き DNS、公開された CIDR レンジ、Web Bot Auth を使った IP による AI クローラーとエージェントの検証です。ルックアップは User-Agent を見られないため、名乗っている名前と threat.crawler.verified との比較は、お客様側のコードで行います。より広い全体像はIP データがボットを種類別に分ける方法を、コンテンツや価格をコピーするスクレイパーについてはウェブスクレイピング検出ガイドをご覧ください。

匿名化の悪用:VPN、プロキシ、Tor

匿名化はサイバー犯罪者の迷彩ですが、プライバシーを重視する何百万人もの完全に正当な人々も使っています。最新の VPN・プロキシ検出は、古いブロックリストではなく、プロバイダーのサーバーリスト、ASN 分析、能動的なプロトコルプローブを使って、この 2 つを分けます。最も危険な種類はレジデンシャルプロキシで、実在の消費者のデバイスを経由してトラフィックを流すネットワークです。Infoblox は、レジデンシャルプロキシのドメインへの DNS クエリが、2025 年 1 月の月間約 4,000 億件から、2026 年 4 月には月間 5,000 億件超に増加したことを計測しました。IP データだけでは確実にフラグを立てられず、GeoIPHub はレジデンシャルプロキシを検出しないため、デバイス、行動、ベロシティのシグナルで捕捉する必要があります。正当な VPN ユーザーを断らずに匿名化されたトラフィックを扱う方法は、本物の顧客をブロックせずに匿名化されたトラフィックを検出するの主題です。

偽アカウント、合成 ID、新規アカウント不正

ボーナスの悪用、紹介の水増し、マネーミュール、合成 ID のグループは、いずれも大量のアカウント作成に依存しています。偽アカウントはそれぞれ「新鮮に見える」発信元を必要とするため、攻撃者はプロキシとデータセンターの IP を次々に使い捨てます。これはまさに、これらのシグナルが浮き彫りにするインフラです。サインアップにリスクスコアを組み込むことは、大量のアカウント作成のコストを引き上げる最も安価な方法の 1 つです。IP タイプ別のサインアップチェックでは、各種のアドレスが何を返し、それにどう対応すべきかを示しています。

地理不正、位置情報の偽装、制裁の回避

プロモーションの悪用、コンテンツライセンスの回避、制裁の回避は、いずれも位置の偽装に依存しています。ここでルックアップは二役を務めます。ジオロケーションが主張される位置を示し、VPN、プロキシ、接続タイプのフラグが、その位置が偽装されていないかを明らかにします。以下の地理制限の防御で、匿名化ツールのチェックが隣になければ国のチェックが無意味な理由を示します。

本日の 3 つのルックアップ:VPN 92、Tor 出口 100、クラウドホスト 10

スコアはネットワークの種類ではなく、証拠に従います。これら 3 つのルックアップは 2026 年 10 月 15 日に公開エンドポイントで実行したもので(キー不要、1 分あたり 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 は、独立した 3 つの確認を示しています。IP が既知の VPN サーバーと一致し、当社のプローブがそのサーバーで実際に OpenVPN と IPsec のハンドシェイクを完了しました。この裏付けによって、vpn_provider が "none"(アドレスがどのプロバイダーのリストにも載っていないため)であっても、block 帯に押し上げられます。Tor 出口は、Tor Project の出口リストに SpamCop への掲載が重なるため、上限の 100 に達します。

Tor のレスポンスの中の 1 つのメソッドは、見た目より弱いものです。no_ptr_datacenter はアドレスに逆引き DNS がないと言っていますが、同じ朝に実行した実際の dig -x は、そのアドレスのホスト名を返しました。当社の保存済み PTR データには一部のアドレスで欠落があるため、この判定を見直すときは、そのメソッドに最も小さい重みを与えてください。

Nmap のテストホストにあるのはホスティングのシグナルだけなので、スコアは 10 で allow になります。正当な API、モニター、AI エージェントの多くがクラウドサーバー上で動作しており、ホスティングだけでは犯罪の証拠になりません。VPN の block でさえ、以下の防御が示すとおり、フローごとに上書きできるデフォルトです。

リスクスコアがブロックリストより優れている理由

スコアがブロックリストより優れているのは、IP は判定ではなくシグナルだからです。1 つの住宅向け IPv4 を、キャリアグレード NAT の背後にいる数百人が共有していることがあり、本物の顧客と不正者が同じアドレスにいることもあります。まっさらな住宅向け 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 ジオロケーションでサイバー攻撃を防ぐには、国以外も読みます。1 回のルックアップの geo、asn、detection、threat、scoring の各グループが、それぞれ別の防御を動かします。以下の 7 つは、最もよく目にするもので、それぞれ貼り付けて使える Python が付いています。どれも小さな 1 つのヘルパーを呼び出します。

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 出口をアプリケーションに触れる前に拒否し、それ以外はスコアに任せることです。重要な点が 2 つあります。検証済みクローラーを先に処理します。本物のクローラーがブロックリストに載ったレンジにいることがあるからです(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 forward プロキシに対するハンドシェイクプローブ。
  • 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. ログインのあり得ない移動にフラグを立てる

あり得ない移動は、最も信頼できるアカウント乗っ取りのシグナルの 1 つです。ロンドンからログインした 30 分後にカリフォルニアからログインする人はいません。各ログインの座標を保存し、前回のログインとの距離を計算して、時速約 900 km を超えるジェット機が必要になる組にフラグを立てます。

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 のホストは 8,617 km で step_up になりました。調整上の注意が 2 つあります。VPN ユーザーはサーバーを切り替えるたびにあり得ない移動を引き起こすので、匿名化されたログインは保存せず除外します。また、モバイルキャリアは多数のユーザーを粗い市区町村データの共有アドレス経由でルーティングするため、500 km の下限によって、位置のずれが飛行に見えないようにしています。

5. ネットワークタイプでスロットリングする

レート制限は、IP の背後にあるネットワークに沿ったほうがよく機能します。1 つのモバイルアドレスにはキャリア NAT の背後で数百人の実在の人がいる可能性があるため、強く抑制すると顧客をブロックしてしまいます。クラウドのアドレスは通常 1 つのスクリプトですが、実在の購入者のために動く 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. ボットのセッションを分析から除外する

自動化されたセッションが分析に記録される前にフィルターすれば、コンバージョンデータと、それで学習する入札モデルは、実在の人々についてのものに保たれます。検証済みクローラーには引き続き応答しますが、カウントはしません。

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 アドレスによるクリック詐欺の検出方法をご覧ください。

7 つのチェックが 6 つの実在アドレスに返したもの

上記の関数をすべて、公開されたとおりのまま、2026 年 10 月 15 日に 6 つの公開アドレスに対して実行しました。チェックアウトの列は、各 IP を米国の請求先住所と比較したものです。

IP(何か)境界のチェックログインの匿名化ツールレート制限チェックアウトと米国のカード分析に含めるか
185.220.101.47(Tor 出口)block: tor_exitblock3/min, blockhigh: require_3dsno
102.129.235.17(商用 VPN)block: score 92allow_and_log3/min, blockhigh: require_3dsno
45.33.32.156(Nmap のテストホスト、Linode)allow: score 10allow10/min, challengestandard: allowはい
162.142.125.10(Censys のスキャナー)block: scanner_or_botnetallow30/min, delaystandard: allowはい
5.39.1.230(AhrefsBot、検証済み)allow: verified_crawlerallow120/min, delayelevated: FR vs USno
104.28.46.99(iCloud Private Relay)allow: score 9allow30/min, delaystandard: private_relayはい

2 つの行が、チェックを一緒に実行すべき理由を示しています。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 km 超の距離を時速 900 km より速く移動盗まれた認証情報によるアカウント乗っ取りステップアップし、その後アカウントにフラグを立てる
geo.country_code が請求先と異なり、匿名化ツールなしカードテスト、または休暇中の顧客3DS を要求
scoring.fraud_score が 75 超(block)複数の裏付けとなるシグナルが同時に出ているブロック、または手動レビューのために保留

IP データが捕捉できないもの

IP データは一次フィルターであり、3 種類の攻撃はそのまま通過します。所有者から判定までのインシデントごとの手順は、不審な IP アドレスの調べ方をご覧ください。

評判のクリーンなレジデンシャルプロキシ。 昨日プロキシのプールに追加された IP には不正の履歴がなく、ブロックリストのチェックを通過し、GeoIPHub はレジデンシャルプロキシを検出しません。捕捉には、デバイスフィンガープリントの異常、セッションのタイミング、操作の頻度が必要です。

クリーンな接続上の乗っ取られたアカウント。 被害者の国の家庭回線から有効な認証情報を使う攻撃者は、IP データにフラグを立てるものを何も残しません。行動のシグナル(タイピングのリズム、ナビゲーション、購入履歴との乖離)が必要です。

標的型攻撃。 防御を調べ上げた攻撃者は、被害者の街のクリーンな住宅向け IP を選び、IP レベルのチェックをすべて通過します。ここでの防御は、メールアドレスの検証とデバイスのバインディングです。

正しいモデルは次のとおりです。ルックアップは、自動化された低度な攻撃の量を、リクエストあたりほぼゼロのコストでフィルターし、高コストなチェック(デバイスフィンガープリント、行動分析、手動レビュー)が残りに集中できるようにします。

本番環境でこれらのチェックを運用する

3 つの習慣が、導入後も IP ベースの防御の精度を保ちます。

IP ごとに、短くキャッシュする。 ネットワークの事実は 1 つのセッションの中ではゆっくり変わりますが、変わります。当社の VPN とプロキシのプローブは最大でも 12 時間ごとに実行され、脅威フィードは 6 時間ごとに更新されます。各ルックアップはセッションの間キャッシュし、セキュリティの判断では 1 時間以内に、単なる位置フィールドでは 1 日以内に期限切れにしてください。セッションあたり IP ごとに 1 回のルックアップが、実用的なコストモデルです。

判定だけでなく、レスポンス全体をログに残す。 ブロックが発動したとき、どのシグナルが引き金になったかを知りたくなります。すべての判断について 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}, }

1 回の GeoIPHub ルックアップが各脅威に対して返すもの

GeoIPHub は、この層全体を 1 回の API 呼び出しにまとめています。1 回のルックアップで、10 のレスポンスグループにわたる 100 を超えるデータフィールド(ジオロケーション、ASN とネットワーク、接続タイプ、モバイルキャリア、逆引き DNS、匿名化ツールのフラグ、算出されたリスクスコア)が返るため、1 つの問いに答えるために 5 社のベンダーをつなぎ合わせる必要はありません。各脅威に対して機能しているのは次のものです。

  • 36 の重み付けされた理由による 0 から 100 のリスクスコア。 はい・いいえのフラグではなく、GeoIPHub は組み込みの判断帯、allow(25 以下)、review(50 以下)、step-up(75 以下)、block(75 超)を備えた、説明可能なスコアを返します。そのため、同じルックアップを、ログインよりチェックアウトで厳しく調整できます。
  • 能動的なプローブによる VPN とプロキシの検出。 静的なリストにとどまらず、GeoIPHub は 25 以上のポートと 8 つのプロトコルで実際のハンドシェイクプローブを実行し、VPN プロバイダー自身のサーバーリストと公開されている第三者リストを照合します。そのため、答えは先月のブロックリストではなく、稼働中のインフラを反映します。
  • データセンターとホスティングの検出。 カバー範囲は、厳選した 853 のホスティング ASN と、10 のクラウドプロバイダーの公式レンジに及びます。ブラウザーを装うカーディングボット、スクレイパー、スタッフィングのインフラを暴くシグナルです。
  • 毎日更新される Tor 出口データと、19 の公式クローラーおよび AI ボットのレンジフィード(Googlebot、GPTBot、ClaudeBot、PerplexityBot など)。これにより、匿名化された出口と、自己申告したボットは、最新の事実に照らしてスコアリングされます。
  • 30 以上のデータソースと 5 つの RIR WHOIS フィードがそのすべての背後にあり、キャッシュされたルックアップはサブミリ秒、未知の IP は 2.5 秒未満でリアルタイムに分類されます。ログイン、サインアップ、チェックアウトにインラインで置けるほど高速です。

設計上、プライバシーにも配慮しています。分類したい IP だけを送信し、ネットワークとリスクの属性が返ってきます。リクエストをスコアリングするのに、氏名、メールアドレス、決済データは不要です。

シグナルは、無料の IP ルックアップツールで直接試せます。任意の IP の不正スコアを確認することも、ご自身の接続で VPN 検出をテストすることもできます。アプリに組み込む準備ができたら、10 分での導入ガイドで、cURL、Node、Python ですべてのリクエストをスコアリングする方法を説明しています。無料プランでは、フィールドの制限なく、すべてのフィールドが 1 日 1,500 回のルックアップで使えます。

攻撃者のコストを上げ、顧客のフリクションは上げない

サイバー犯罪は産業化され、自動化され、ますます人間のものではなくなっていますが、そのすべてが、こちらが最初に調べられる IP アドレスを通じて届きます。IP データだけでは不正を止められず、誠実な説明であればそう述べます。しかし、多層防御における出所の層(どのセッションをより詳しく見るべきかを教えるシグナル)として、導入できる最も有用でフリクションの低い対策の 1 つです。うまく使えば、正当な大多数に負担をかけることなく、犯罪者である少数の攻撃コストを引き上げられます。

よくある質問

IP インテリジェンスとは何ですか?

IP インテリジェンスとは、生の IP アドレスに、その発信元と信頼性について明らかになるすべての情報を付加することです。ジオロケーション、所有ネットワーク(ASN)、接続タイプ、データセンター・VPN・プロキシ・Tor 出口かどうか、不正の履歴、そして算出されたリスクスコアが含まれます。あらゆるオンラインリクエストに共通する最も普遍的な属性を、パスワードが入力される前、カードが課金される前に行動に移せる判断シグナルへと変えます。「この IP はどこか」にしか答えない IP ジオロケーションよりも広く、この付加情報は「信頼できるか」にも答えます。

IP データはサイバー攻撃の防止にどう役立ちますか?

ほぼすべての攻撃(クレデンシャルスタッフィング、カードテスト、スクレイピング、偽アカウントの作成、不正なチェックアウト)は IP アドレスを通じて届き、攻撃者はインフラを大規模に再利用します。ルックアップは、そのインフラが残す手がかりを明らかにします。ホスティング ASN からのログイン、プローブで確認された VPN サーバーからのチェックアウト、実はクラウド上のスクリプトである「ブラウザー」などです。ログイン、サインアップ、チェックアウトでのリアルタイムのリスクシグナルとして使えば、正当な大多数にフリクションを加えることなく、疑わしい少数にチャレンジしたりブロックしたりできます。

IP ジオロケーションだけでサイバー攻撃を止められますか?

いいえ。止められると主張するベンダーは誇張しています。IP データは多層防御モデルの 1 つの層です。共有されたモバイル IP には不正者と本物の顧客の両方がいることがあり、クリーンな住宅向け IP がプロキシを抱えていることもあり、被害者と同じ街の家庭回線から盗まれた認証情報を使う攻撃者は、IP のチェックをすべて通過します。IP シグナルは、デバイス、行動、ベロシティ、本人確認のシグナルと組み合わせたときに最も強力です。リスクスコアは、全面的なブロックのためではなく、どのセッションをより厳しく調べるべきかを決めるために使ってください。

IP シグナルはどのような種類のサイバー犯罪を検出できますか?

IP シグナルは、アカウント乗っ取りとクレデンシャルスタッフィング、新規アカウントと合成 ID の不正、決済とカードテストの不正、自動化されたボットとスクレイパーのトラフィック、IP が裏付けない名前を名乗るクローラー、VPN やプロキシによるポリシーや制裁の回避の検出に貢献します。いずれの場合も、出所を示す層です。その接続が本物の人間と整合するインフラから来ているのか、自動化または匿名化された活動から来ているのかを教えてくれます。レジデンシャルプロキシは捕捉できません。それにはデバイスと行動のシグナルが必要です。

あり得ない移動の検出とは何で、どう動作しますか?

あり得ない移動の検出は、同じアカウントへの 2 回のログインが、その間の時間では移動できないほど離れた場所から行われた場合にフラグを立てます。ロンドンとシンガポールは約 10,850 km 離れているため、ロンドンからのログインの 30 分後にシンガポールからログインがあれば、どちらかはアカウントの所有者ではありません。各ログインの緯度と経度を保存し、前回のログインとの距離を計算して、時速約 900 km(おおよそ旅客機の速度)を超える移動が必要になる組にフラグを立てます。VPN、Tor、リレーのアドレスからのログインは、その位置がユーザーのものではないため除外してください。

特定の国からのトラフィックをすべてブロックすべきですか?

国単位のブロックは鈍い道具で、大きな巻き添え被害を生みます。国全体をブロックする前に、その国に正当なユーザーがいないかを確認してください。一度設定したブロックは、その人たちにも及ぶからです。より的を絞った代替策があります。決済やパスワードリセットなどの機微なフローでステップアップ認証を求める、法律や契約が要求する場合にのみ厳格な地理制限を使う、そして国とネットワークのシグナル(ホスティング ASN、VPN 検出)を組み合わせて、悪用されているインフラを狙い、その発信元に見える住民を狙わないようにすることです。

IP インテリジェンスは IP ジオロケーションと同じですか?

いいえ。IP ジオロケーションはその一部です。ジオロケーションは IP を国、地域、おおよその市区町村に対応づけるもので、国レベルでは約 99% の精度ですが、市区町村レベルではるかに弱くなります。完全なルックアップにはジオロケーションが含まれますが、さらにネットワークの所有者(ASN)、接続タイプ、VPN・プロキシ・Tor・データセンターのフラグ、不正のシグナル、そして複合的なリスクスコアが加わります。ジオロケーションは場所を教え、それ以外は信頼すべきかどうかを教えます。

IP ベースのリスクスコアリングは、ユーザーのプライバシーや GDPR に違反しますか?

IP アドレスとネットワークのメタデータを扱うだけで、氏名、メールアドレス、決済情報は扱いません。GeoIPHub では、分類したい IP だけを送信し、ネットワークとリスクの属性が返ってきます。リクエストをスコアリングするために個人データを交換する必要はありません。GDPR では IP アドレスが個人データとなり得るため、適切な運用は引き続き必要です。不正防止とセキュリティという正当な目的に使い、保持を最小限にし、文書化してください。IP のリスクスコアリングはセキュリティ対策であり、ユーザーの追跡ではありません。

執筆者

GeoIPHub チーム

GeoIPHub API を支えるチーム

GeoIPHub IP インテリジェンス API とそのスキャナーを開発している GeoIPHub チームが執筆しています。下書きは AI の支援を受けて作成し、チームが編集しています。API の例は、「説明用」と明記したものを除き、本番 API に対する実際のルックアップです。

この記事をシェア
その他の記事

関連 記事