VPN 訪問者の検査:評判と遅延を安全にスコアリングする
VPN 検出はスコア付きの推定として扱います。防御できるリクエスト事実を集め、経路を時間で測り、ブロックではなく可逆な段階的確認で対応します。
不正検知ダッシュボードが訪問者を VPN とフラグし、アナリストがブロックを求め、リクエストはベンダーのブール値だけを伴ってプラットフォームチームに届きます。そのブール値は推定であり、遅延測定とは違う方向に外れます。行動する前に、リクエスト自体が証明するもの、評判サービスが主張するもの、タイミングが示唆するだけのものを切り分けてください。そのうえで、推定が誤りだったときに取り消せる応答を選びます。
防御できるリクエスト事実を集める
サーバーが確実に知っているアドレスは、接続を完了した TCP ピアだけです。CDN やリバースプロキシがその接続を終端する場合、ピアはエッジであり、クライアントアドレスは転送ヘッダーに乗ります。それが信頼できるのは、自社のエッジが付加した場合だけです。読むべきはプロキシが書いたエントリであり、いちばん左の文字列ではありません。クライアントはその位置に好きな値を送れるからです。下流のすべてがこの区別を保たねばなりません。
安価な二つの補強がアドレスをレビュー可能にします。それを告知する自律システムと、それを指し返す PTR レコードです。どちらも挙動ではなく登録を記述し、どちらも後から再現できます。
IP=203.0.113.10
dig +short -x "$IP"
whois "$IP" | grep -iE "origin|netname" | head -5ホスティング ASN は強い手がかりであり、判決ではありません。企業の VPN 集約装置、クラウドの出口、一部の大学ネットワークもデータセンターにあります。商業的な出口を捉える同じシグナルは、正当なオフィスも捉えます。アドレスはレビューが必要とする間だけ保持してください。多くのプライバシー法制で IP は個人データです。無期限に保持せず、スケジュールで削除します。
制限する前に訪問者をスコアリングする
新しいシグナルはまず観察モードで動かします。入力と理由コードを記録し、すべてのリクエストを通し、スコア分布を正当と分かっているアカウントと比較します。これにより、誰かがアクセスを失う前に誤検知の推定が得られ、その数値がルールを有効にして安全かを決めます。
| Signal | What it supports | How it fails | Typical action |
|---|---|---|---|
| Hosting ASN | Traffic likely originated from infrastructure | Corporate VPN and cloud egress look the same | Add weight, not a block |
| Reputation verdict | A vendor's dated classification | Vendors disagree; self-hosted exits look clean | Step-up challenge |
| RTT versus baseline | The path is longer than usual | Anycast, mobile networks, in-country exits | Weak weight only |
| Forwarded header consistency | Whether the edge saw the claimed client | Misconfigured proxies produce noise | Drop the value, do not score it |
合計は二つではなく三つの行動に割り当てます。許可、段階的チャレンジ、手動レビューです。恒久的なブロックには、人が確認した反復的な悪用を要求すべきです。企業の出張者への誤検知はサポートチケットと失われたセッションを生みますが、一件のリクエストへの見逃しはほとんど何も失いません。
評判検索はサーバー側に置き、範囲を限定する
評判サービスはバックエンドから短いタイムアウトで呼び、判定を一定期間キャッシュし、タイムアウトはクリーンではなく不明として扱います。API キーをクライアント側コードに置かず、検索がページ描画を妨げないようにしてください。遅い第三者に落とすべきはスコアであり、サイトではありません。
キャッシュは範囲単位ではなくアドレス単位にします。一回の検索で /24 全体を分類すると、測っていない隣人に誤った判定が広がります。ベンダー、応答日、分類値を理由コードと並べて記録し、後日のレビューでどの判断が有効だったか分かるようにします。
二人のプロバイダーが同じアドレスを一日のうちに違う分類にすることがあります。だから判定は身元の列ではなく証拠の列に属します。これは処理の関係でもあります。訪問者全員のアドレスを第三者に送るには、法的根拠、保持規則、プライバシー通知の一行が必要です。
遅延は一つのサンプルではなく中央値で測る
往復時間は測った瞬間の経路を表します。近くの anycast エッジが遠い利用者を担当することもあり、モバイル網は地理と無関係な遅延を加え、訪問者自身の国の VPN 出口はローカルに見えます。都市単位の位置情報は人ではなくデータセンターを報告することがよくあります。
複数のサンプルを取り、中央値を使います。遅いリクエストが一つあっても結果が動かないようにするためです。下のループは五つの中央値を出力します。
for i in 1 2 3 4 5; do
curl -o /dev/null -s -w "%{time_connect} %{time_starttransfer}\n" https://www.example.com/
done | sort -n | sed -n 3pその数値は絶対しきい値ではなく、良好と分かっている利用者の分布と比べ、ASN と組み合わせます。一致する二つの弱いシグナルはどちらか単独より強いものですが、結論は依然として経路についてであり意図ではありません。だからスコアに属し、禁止には属しません。
判断し、記録し、巻き戻す
ルールを有効にする前に、一日分のトラフィックを観察モードで再生し、何が起きたかを数えます。スコアの入力、理由コード、ルールのバージョンを保存しますが、生のアドレスはレビュー期間だけ保持します。正当なアカウントで発火したら、記録は再調査なしに理由を説明できるべきです。
ルールごとに独自のスイッチを持たせます。段階的確認の完了率が下がるかサポートチケットが急増したら、そのルールだけを無効にし、残りのパイプラインは動かし続けます。単一のグローバル停止スイッチは調整の問題を障害に変えます。変更後はブロック数だけでなく、チャレンジ完了率と異議申し立ての待ち行列を見ます。
最後に、防いでいる損失に対して応答を釣り合わせます。広告詐欺では VPN 状態は偽クリックの弱い代理指標であり、コンバージョンパターンやデバイスの一貫性といった行動シグナルが実際の損害に対処します。可逆なチャレンジは収益と実利用者の両方を同時に守ります。