コンテンツへスキップ
不正防止

リスクスコアの理由:detection_methods フィールドを 1 つずつ読み解く

リスクスコアの理由をフィールド別に解説。スコアリングコードが返す detection_methods の全値とその重み、そして検証済みクローラーが 64 を 35 に下げた実際のルックアップを紹介します。

著者GeoIPHub チーム公開日更新日読了時間27 分で読めます
多数の光線が 1 つの明るい点に収束している図。名前付きの理由が 1 つのリスクスコアに積み上がることを表している

顧客が決済でブロックされ、理由を問い合わせてきたとします。「ベンダーが 92 と言ったので」では、会話は後味の悪い終わり方をします。「お客様の接続は、リストに載った VPN サーバーで、OpenVPN のポートが開いているところから来ていました」なら、自信を持って説明でき、考えを改めることも、チューニングすることもできる答えです。説明可能な不正スコアが得られるのは、数字だけでなく理由コードです。

このページは、そうした答えのための辞書です。数値そのものの意味と区分の位置については、まずIP 不正スコアとは何か、どう読むかから始めてください。ここでは、計算式を示し、実際のレスポンスを理由ごとにたどり、ポイントを引く 5 つの理由を扱い、スコアリングコードが返し得るすべての detection_methods の値を、その重みと発火の条件とともに一覧にします。

太さの異なる半透明の板が 1 つの支点でつり合っている図。重み付けされたスコアリングのシグナルを表している
それぞれの理由に重みがあり、スコアはその合計で、理由は一覧で示される。

リスクスコアの理由は足し算:ポイント × 信頼度、そして範囲の制限

GeoIPHub のスコアリングでは、すべての理由が「ポイント × 信頼度」を寄与し、スコアはその合計を丸めて 0 から 100 の範囲に収めた値です。この上に隠れたモデルはありません。以下は、当社 API のスコアリングステップ(scoring.service.ts)を計算だけに絞ったものです。

GeoIPHub API
// Each fired reason: { points, confidence } from scoring.json let sum = fired.reduce((s, r) => s + r.points * r.confidence, 0); if (isCgnat && !ownThreatEvidence) sum = Math.min(sum, 50); // CGNAT cap if (isRelay) sum = Math.min(sum, 60); // relay cap const fraud_score = Math.max(0, Math.min(100, Math.round(sum))); const confidence = fired.length === 0 ? 0.1 : Math.min(0.99, Math.abs(sum) / fired.length / 50 + fired.length * 0.05);

つまずきやすい点が 2 つあります。1 つ目は、レスポンスの confidence が不正の確率ではないことです。理由の数とその平均的な大きさに応じて増えるため、控えめな理由が 4 つあれば、大きな理由が 1 つの場合より信頼度が高くなることがあります。理由がないルックアップは 0.1 を返します。2 つ目は、detection_methods の順序は、大きさ順ではなく、コードが確認する順だということです。最初の項目を主たる理由だと考えないでください。

ほかのベンダーは、理由を別の形で公開しています。MaxMind の minFraud のレスポンスには risk_score_reasons があり、これはリスクスコアに対する乗数で、ANONYMOUS_IP のようなコードが付きます。MaxMind は、これらが「通常は中程度から高リスクの取引でのみ返される」と注記しています。Socure の Sigma Identity Fraud は、0.001 から 0.999 のスコアに、「不正リスクスコアに影響した要因を理解するための詳細な情報を提供する」理由コードを組み合わせています。GeoIPHub の理由は加算されるポイントで、スコアの高低にかかわらず、スコアを動かしたすべての理由が一覧に載ります。

この計算が実データで成り立つことを確認しました。以下の 7 件のキーなしルックアップは 2026-10-29 の 04:43:09 から 04:43:54 UTC の間に約 7 秒おきに実行したもので、どのスコアも信頼度も、理由から正確に再現できます。

IP(何か)detection_methods合計スコア、アクションconfidence
185.220.101.1(Tor 出口)tor_exit, datacenter_blocklisted, no_ptr_datacenter, known_spammer108.05100, block0.74
185.213.155.73(Mullvad、リスト掲載)known_vpn_server, wireguard_open, datacenter_with_vpn_proxy, no_ptr_datacenter101.5100, block0.71
5.39.1.230(AhrefsBot)datacenter_blocklisted, no_ptr_datacenter, verified_crawler, known_spammer35.035, review0.375
45.33.32.156(scanme.nmap.org、Linode)datacenter_ip10.010, allow0.25
104.28.46.99(iCloud Private Relay)relay_ip8.59, allow0.22
107.178.192.1(Google のユーザー起点フェッチャー)datacenter_ip, rdns_hosting, verified_crawler-12.50, allow0.23
66.249.66.1(Googlebot)datacenter_ip, verified_crawler-18.50, allow0.285

実際のレスポンスを 1 件たどる:AhrefsBot、35、review

AhrefsBot の 5.39.1.230 は、3 つの理由が 63.5 ポイントを加え、検証済みクローラーとの一致が 28.5 ポイントを引いたため、35、review となりました。理由が両方向に作用するので、最もよい教材です。以下は 04:43:09 UTC のルックアップ(meta.last_classified_at 2026-10-29T04:43:09.547Z)から絞り込んだレスポンスで、値は編集していません。

GeoIPHub API
curl https://api.geoiphub.com/v1/lookup/5.39.1.230 \ -H "x-api-key: YOUR_API_KEY"
GeoIPHub API
{ "ip": "5.39.1.230", "asn": { "asn": 16276, "org": "OVH - OVH SAS", "asn_type": "hosting" }, "detection": { "is_vpn": false, "is_proxy": false, "is_hosting": true }, "threat": { "is_spammer": true, "dnsbl_sources": ["zen.spamhaus.org"], "crawler": { "verified": true, "name": "AhrefsBot", "operator": "Ahrefs", "verification_method": "ip_range_list" } }, "dns": { "ptr_record": "none" }, "scoring": { "fraud_score": 35, "confidence": 0.375, "recommended_action": "review", "detection_methods": ["datacenter_blocklisted", "no_ptr_datacenter", "verified_crawler", "known_spammer"] } }

それぞれの理由は、計算の 1 行に対応します。

理由ここで発火した理由ポイント × 信頼度加算
datacenter_blocklistedスパムリストにも載っている OVH のホスティングアドレス30 × 0.75+22.5
no_ptr_datacenter当社の記録に逆引き DNS がないホスティングアドレス10 × 0.50+5.0
verified_crawlerAhrefs が公開しているクローラーの IP レンジ内-30 × 0.95-28.5
known_spammerzen.spamhaus.org に掲載40 × 0.90+36.0
合計35.0, review

クローラーの一致を除くと合計は 63.5 で、丸めると 64、つまり step up です。検証済みのレンジファイルによって、実在し宣言どおりのクローラーが、チャレンジから記録付きの review へと動きました。allow までは動きませんでした。免責の理由は許可リストではなく重みだからです。同じアドレスへの Spamhaus の掲載は、引き続き数えられます。

このレスポンスが誤っている点

4 つの理由のうち 1 つは、当社側の欠落です。no_ptr_datacenter はアドレスに逆引き DNS がないと言っていますが、04:44 UTC の dig -x 5.39.1.230 は proxy-fr005-cip7.ahrefs.net を返しました。この理由は当社に保存された PTR 記録を読んでおり、その記録が欠けています。

欠落を直しても、このスコアは下がりません。コードを見るとその理由がわかります。当社の PTR 分類器は、「proxy」を含むホスト名をプロキシのパターンとして読みます。そのため、記録が保存されていれば no_ptr_datacenter(+5)は rdns_proxy(+14)に置き換わり、スコアは少なくとも 44 に上がります。それでも review ですが、その理由は匿名化ツールではなく、Ahrefs が自社クローラーのエグレス用に選んだホスト名によるものです。どちらも課題として記録しています。no_ptr_datacenter と rdns_* の理由は、弱い証拠として読んでください。その重みがすでにそう示しています。

免責の理由:5 つがポイントを引き、ゼロで止まる

免責の理由はマイナスのポイントを持つので、合計は下がりますが、スコアが 0 を下回ることはありません。GeoIPHub のスコアリング設定にはそれが 6 つあり、現在発火し得るのは 5 つです。

理由ポイント × 信頼度引く量発火の条件
verified_crawler-30 × 0.9528.5アドレスが、公式のクローラー IP レンジファイル 19 個のいずれか(Googlebot、Bingbot、GPTBot、ClaudeBot、AhrefsBot など)の内側にある
residential_isp-20 × 0.8517VPN、プロキシ、Tor の証拠がない家庭用ブロードバンド回線
rdns_residential-20 × 0.8016逆引き DNS が家庭用回線に見える(dsl、pool、dynamic、cable、customer)
mobile_carrier-15 × 0.8012匿名化ツールの証拠がないモバイルネットワーク(キャリアのデータ、モバイルのホスト名、または当社の CGNAT フラグ)
rdns_mobile-10 × 0.707逆引き DNS がモバイルネットワークに見える
rdns_cgnat-15 × 0.7010.5現在は発火しない:当社のホスト名分類器に CGNAT のパターンがない

検証済みクローラーの割引は、Googlebot のルックアップに現れています。datacenter_ip が 10 を加え、verified_crawler が 28.5 を引き、API は 0 を返しました。残りのマイナス 18.5 は破棄されます。後の理由に対するクレジットとして積み立てられることはなく、これが正しい動作です。検証済みのレンジが、ボットネットへの掲載を隠せてはいけないからです。verified_crawler の裏にある 19 個のレンジファイルは、日付と許可リストビルダー付きで当社の検証済みクローラー IP リストに載せています。Google のファイルについては、IP による Googlebot の検証方法で詳しく扱っています。

住宅向けの割引は、実在のアドレスでは示せません。家庭の回線のルックアップを公開すると、世帯が特定されてしまうからです。そこで、コードの経路を文章で説明します。住宅向けの理由は逆引き DNS に依存します。当社のコードが回線を住宅向けと判断するのは、PTR のホスト名が dsl、pool、dynamic などの家庭用パターンに一致する場合だけです。一致し、かつ回線がモバイルや CGNAT としてもフラグ付けされていなければ、residential_isp(-17)と rdns_residential(-16)が一緒に発火し、合計はマイナス 33 です。モバイルまたは CGNAT の回線では residential_isp の代わりに mobile_carrier(-12)が付くので、その組はマイナス 28 です。ISP が逆引き DNS を公開していない、あるいは当社が認識しないパターンでホストに名前を付けている家庭用回線には、どちらの割引も付きません。ほかに不利な材料がなければ、単にスコアは 0 です。同じスコアなので、この欠落が問題になるのは、ほかの理由が発火するときだけです。

割引は反転もします。住宅向けの回線がプロキシ、Tor、VPN プロトコルの証拠(IPsec のタグだけでは数えません)を持つ場合、residential_isp は residential_with_threat(+21.25)に置き換わります。モバイル回線では mobile_with_threat(+16)が同じ役割を果たします。家庭に見えることへの割引は、その家庭がトラフィックを中継し始めた瞬間に取り消されます。

割引と並んで、2 つの上限があります。リレーのアドレスは 60 が上限なので、iCloud Private Relay のエグレスが block に達することはありません。Private Relay と WARP のトラフィックの検出方法と、それを通す理由を説明しています。当社の CGNAT ステップがフラグ付けしたアドレスは、VPN、プロキシ、Tor、VPN プロトコル、ボットネット、または不正の証拠を自ら持たない限り、50 が上限です。

すべての detection_methods の値をフィールド別に

GeoIPHub のスコアリングコードが名前を付けられる理由は 41 個で、現在レスポンスに現れ得るのは 36 個です。以下の表は、その 36 個すべてを、ポイント、信頼度、寄与とともに、それぞれが答える問いごとにまとめたものです。

そのアドレスは匿名化ツールか。 これらは、Tor Project の出口リスト、プロバイダーが公開しているサーバーリスト、当社独自のプロトコルプローブ、第三者のプロキシリストに由来します。プローブがカバーするのは SOCKS5、SOCKS4、HTTP CONNECT、HTTP forward、OpenVPN、IKE(v1 と v2)、PPTP、L2TP です。WireGuard のプローブはありません。

detection_methods の値ポイント × 信頼度加算意味
tor_exit45 × 0.9944.55Tor Project の公式出口リストに掲載。6 時間ごとに再読み込み
known_vpn_server40 × 0.9036is_vpn が true:プロバイダーのサーバーリストに掲載、VPN サーバーを運用していると当社が把握しているネットワーク内、または当社の VPN プロトコルプローブに応答
multi_source_vpn30 × 0.8525.5WHOIS または RDAP の記録にも VPN のキーワードがある VPN。2 つの情報源が一致している
openvpn_open35 × 0.9031.5当社のプローブがそのアドレスから OpenVPN の応答を得た
ipsec_open30 × 0.8024当社のプローブが IKE の応答を得た、またはプロバイダーのサーバーリストがそのサーバーを IKEv2 とタグ付けしている(NordVPN、Surfshark、Windscribe のリストが該当)
pptp_open30 × 0.9227.6当社のプローブが PPTP の応答を得た
l2tp_open30 × 0.8525.5当社のプローブが L2TP の応答を得た
wireguard_open35 × 0.7024.5VPN プロバイダーの公開サーバーリストが、このサーバーを WireGuard とタグ付けしている。ハンドシェイクではない
socks5_open35 × 0.9533.25SOCKS5 または SOCKS4 のプロキシが当社のプローブに応答した
http_proxy_open35 × 0.9533.25HTTP CONNECT または HTTP forward のプロキシが当社のプローブに応答した
blocklist_proxy25 × 0.7017.5自前の SOCKS や HTTP のリスナーを持たずにプロキシとしてフラグ付けされたもの。たとえば、オープンプロキシが当社のテストトラフィックを渡すのを観測した出口アドレス
proxy_observed_third_party25 × 0.7017.5直近 1 日にトラフィックを中継しているのが観測されたアドレスの、第三者リストに掲載
residential_proxy40 × 0.9036当社のデータが住宅向けまたはモバイルと判断する回線上で、当社自身がフラグ付けしたプロキシ。大まかな推論であり、レジデンシャルプロキシの検出ではない
relay_ip10 × 0.858.5iCloud Private Relay などのプライバシーリレーのエグレス。スコアの上限も 60 になる

そのアドレスは不正を働いたか。 これらは 3 つの DNSBL ゾーンと、当社の不正およびボットネットのフィードに由来します。

detection_methods の値ポイント × 信頼度加算意味
known_spammer40 × 0.9036zen.spamhaus.org、b.barracudacentral.org、bl.spamcop.net のいずれかに掲載
abusive_listed30 × 0.8024当社の不正フィードに掲載、または 3 つの DNSBL ゾーンのうち少なくとも 2 つに掲載
botnet_c250 × 0.9547.5ボットネットのフィードがコマンド・アンド・コントロールサーバーとして掲載
botnet_infected35 × 0.8028ボットネットのフィードが、感染したマシンなど、それ以外の役割で掲載

サーバーインフラか。 ホスティングとは、厳選した 853 のホスティング ASN のいずれか、当社が読み込む 10 のクラウドプロバイダーのレンジ、またはエニーキャストのレンジのいずれかを指します。3 つの datacenter_* の理由のうち発火するのは 1 つだけで、強い順に適用されます。

detection_methods の値ポイント × 信頼度加算意味
datacenter_with_vpn_proxy40 × 0.9036上記のいずれかの VPN またはプロキシのプロトコルの証拠(リストの WireGuard タグを含む)があるホスティングアドレス
datacenter_blocklisted30 × 0.7522.5不正、スパム、またはボットネットのリストにも載っているホスティングアドレス
datacenter_ip20 × 0.5010ほかに不利な材料がないホスティングアドレス
no_ptr_datacenter10 × 0.505保存された記録(欠落がある)に逆引き DNS がないホスティングアドレス
whois_vpn_keywords20 × 0.7014WHOIS または RDAP の記録に VPN のキーワードがあるが、アドレスは VPN としてフラグ付けされていない
whois_hosting15 × 0.558.25WHOIS または RDAP の記録にホスティングのキーワードがあるが、アドレスは当社のホスティングリストに載っていない

逆引き DNS は何を示すか。 これらは、保存された PTR のホスト名を単純なパターンで読むため、それぞれの配点は軽くなっています。

detection_methods の値ポイント × 信頼度加算意味
rdns_tor30 × 0.8024ホスト名が Tor 出口に見える
rdns_vpn20 × 0.7515ホスト名に "vpn" または VPN のブランド名が含まれる
rdns_proxy20 × 0.7014ホスト名に "proxy"、"squid"、"socks" が含まれる
rdns_hosting10 × 0.606ホスト名がサーバーやクラウドホストに見える
fcrdns_mismatch5 × 0.402ホスト名がそのアドレスに正引きで戻らない
rdns_residential-20 × 0.80-16ホスト名が家庭用回線に見える
rdns_mobile-10 × 0.70-7ホスト名がモバイルネットワークに見える

どんな種類の回線で、既知のクローラーか。 ネットワークの種類に関する理由は常に対になっています。匿名化ツールの証拠がない場合の割引か、ある場合のペナルティです。

detection_methods の値ポイント × 信頼度加算意味
residential_isp-20 × 0.85-17逆引き DNS から推論した住宅向け回線で、匿名化ツールの証拠がない
residential_with_threat25 × 0.8521.25プロキシ、Tor、VPN プロトコルの証拠(IPsec のタグだけでは数えない)がある住宅向け回線
mobile_carrier-15 × 0.80-12匿名化ツールの証拠がないモバイル回線
mobile_with_threat20 × 0.8016匿名化ツールの証拠があるモバイル回線
verified_crawler-30 × 0.95-28.5公式のクローラー IP レンジファイルの内側。毎日再取得

コードは知っているが返さない 5 つの理由

GeoIPHub のスコアリングコードには、現在レスポンスに現れ得ない名前が 5 つあります。それらを待つルールは作らないでください。

  • spoofed_crawler(+42.75)。当社のパイプラインでこれを設定するものはなく、ルックアップが見るのは IP だけで、User-Agent は見ません。名乗っているボット名と threat.crawler の比較は、お客様側のコードで行います。
  • honeypot_hit(+33.25)。ハニーポットのカウントはプレースホルダーで、常に 0 です。
  • known_vpn_asn(+22.5)。当社のコードがネットワークを VPN とラベル付けするのは、アドレスがすでに VPN の場合だけなので、常に known_vpn_server が優先されます。
  • rdns_cgnat(-10.5)。当社のホスト名分類器に CGNAT のパターンがありません。
  • shadowsocks_suspected(+10)。当社に Shadowsocks のプローブはなく、読み込んでいるプロバイダーリストにも Shadowsocks をタグ付けしているものはありません。

設定ファイルには、ルックアップの経路が一度も読まない重みがさらに 11 個あり、それらの名前もレスポンスには届きません。休眠中の理由は、待ち続けて気づいていただくより、一覧にしておくほうがよいと考えています。

生の数値ではなく、理由に基づいてルールを書く

これらの名前を覚える実用上の理由は、理由に基づいて書いたルールは当社のデータの欠落に耐えるが、合計に基づいて書いたルールは耐えないことです。ログイン、サインアップ、決済のブロックしきい値が区分を定めます。その内側では、理由レベルのいくつかのルールが仕事の大半を担います。

  • tor_exit、socks5_open、http_proxy_open、botnet_c2 は、それぞれ単独で強いものとして扱う。いずれも 33 以上を加え、リストか当社独自のプローブに由来する。
  • no_ptr_datacenter、fcrdns_mismatch、rdns_* の理由は、単独では動かない。配点は 2 から 24 ポイントで、欠落や古さのあり得る保存済みホスト名を読んでいる。
  • verified_crawler は、threat.crawler.verified と、User-Agent が名乗るボットに一致するオペレーターと合わせて読む。threat.crawler.name は使わない。2026 年 10 月 29 日の AhrefsBot のようにスパムリストに載った検証済みクローラーは、決済ではなく、クロールの許可リストに置く。
  • wireguard_open は、プローブの結果ではなく、リストの証拠として扱う。プロバイダーの公開リストが、そのサーバーは WireGuard を実行していると述べているという意味である。
  • すべての判断で、detection_methods の配列全体をログに残す。サポート担当者やチャージバックの審査担当者が求める監査証跡になる。

これをコードにすると次のようになります。使っているのは実在のフィールドだけです。

GeoIPHub API
const { recommended_action, detection_methods: why } = data.scoring; const strong = ["tor_exit", "socks5_open", "http_proxy_open", "botnet_c2"]; if (why.some((m) => strong.includes(m))) return block(why); // isCrawlPath is your own route check, not an API field. // claimMatchesOperator compares the bot your User-Agent names with // threat.crawler.operator; /blog/verified-crawler-ip-list has a working version. if (why.includes("verified_crawler") && isCrawlPath(req) && claimMatchesOperator(req, data.threat.crawler)) return allow(why); if (recommended_action === "block") return block(why); if (recommended_action === "step_up") return challenge(why); return allow(why);

理由は、証拠がどこから来たかも教えてくれます。顧客が異議を唱えるとき、それが重要になります。vpn_confidence が 95 の known_vpn_server は、プロバイダー自身のリストを意味します。IP の背後にある VPN プロバイダーを特定する方法と、各信頼度の値の意味を説明しています。プローブの側面については、VPN とプロキシの検出の仕組みが、最も重い匿名化ツールの理由の出どころを扱い、IP データフィールドの全一覧がレスポンスの残りを文書化しています。

スコアを自分で足し合わせてみる

任意のアドレスを GeoIPHub の無料の IP 不正スコアチェッカーに貼り付け、理由をコピーして、上の表から数字を再現してみてください。ご自身の合計と当社のスコアが食い違うなら、どちらかにバグがあります。どちらなのか、ぜひお知らせください。

よくある質問

scoring.detection_methods には何が含まれますか?

スコアを動かしたすべての理由の名前が、大きさ順ではなく、GeoIPHub のスコアリングコードが確認する順に入っています。各名前には、スコアリング設定で固定のポイントと信頼度が定められており、スコアはポイントと信頼度の積の合計を丸めて、0 から 100 の範囲に収めたものです。GeoIPHub のコードが名前を付けられる理由は 41 個で、現在レスポンスに現れ得るのは 36 個です。

検証済みクローラーでも review のスコアになるのはなぜですか?

GeoIPHub のスコアリングでは、verified_crawler は許可リストではなく重みだからです。28.5 ポイントを引きます(信頼度 0.95 では 30 ポイント)。5.39.1.230 の AhrefsBot は 2026-10-29 に Spamhaus への掲載も抱えていたため、スパムとブロックリストの理由が割引を上回りました。クローラーの一致がなければ 64(step up)になるところが、35 の review になっています。

スコアがゼロを下回ることはありますか?

加重合計は下回りますが、スコアは下回りません。66.249.66.1 の Googlebot は 2026-10-29 に合計がマイナス 18.5(datacenter_ip と verified_crawler)になり、GeoIPHub の API は 0 を返しました。マイナスの残高が、ほかの何かのクレジットとして持ち越されることはありません。

wireguard_open は、GeoIPHub が WireGuard のハンドシェイクを完了したという意味ですか?

いいえ。GeoIPHub に WireGuard のプローブはありません。wireguard_open は、VPN プロバイダー自身が公開しているサーバーリストがそのサーバーを WireGuard とタグ付けしているという意味です。当社のプローブがカバーするのは SOCKS5、SOCKS4、HTTP CONNECT、HTTP forward、OpenVPN、IKE(v1 と v2)、PPTP、L2TP なので、openvpn_open、pptp_open、l2tp_open、socks5_open、http_proxy_open がプローブの結果です。

逆引き DNS があるアドレスで no_ptr_datacenter が出るのはなぜですか?

この理由は、実際のクエリではなく GeoIPHub に保存された逆引き DNS の記録を読んでおり、その記録には欠落があるからです。2026-10-29 には AhrefsBot の 5.39.1.230 と Tor 出口の 185.220.101.1 で発火しましたが、dig -x ではどちらも解決できました。配点は 5 ポイントなので、生の件数ではなく、信頼できる理由に基づいてルールを書いてください。

執筆者

GeoIPHub チーム

GeoIPHub API を支えるチーム

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

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

関連 記事