VPNまたはプロキシを使用するサーバーへのすべての接続をブロックしたいと思います。とにかく、VPNまたはプロキシ接続が使用されていることを検出する方法はありますか?そうでない場合は、とにかく、VPNまたはプロキシが使用されている可能性を確認できますか?最後に、VPNまたはプロキシを使用しているかどうかを確認するためにクエリまたはプロンプトをユーザーに表示できるものはありますか?場所、真のIPなど、ユーザーからの情報は必要ありません。 VPNまたはプロキシからの接続を完全に禁止したいだけです。
編集:VPN IPへのpingとクライアントの検出可能なレイテンシとの間に一貫した矛盾があるかどうかを確認するためのテストを実行できると考えていますが、それはかなり信頼できないように思えます。
編集2:プロキシまたはVPNサーバーは、標準のホーム接続よりも多くのポートを開いている可能性が高いため、開いているポートの数を使用して、接続している人のポートスキャンを実行することによりVPNからの接続の可能性を測定するのに役立ちます.
残念ながら、必要な情報を取得するための適切な技術的方法はありません。いくつかのテストを考案することもできますが、それらは現実との相関が非常に低くなります。そのため、必要なものをキャッチできなかったり、誤検出が増えたりします。どちらも意味をなすとは考えられません。
着信クライアント(ポートスキャン、または単純なpingでも)に応答してインターネットサーバーから逆方向にあらゆる種類のトラフィックを生成することは、一般的に嫌われています。または、ポートスキャンの場合、たとえば、クライアントが中央の企業ファイアウォールの背後に住んでいる場合、最悪の場合、クライアントが中央政府のネットワークファイアウォールプールの背後から来た場合、さらに悪化する可能性があります。
率直に言って、IPベースの禁止(または、実際には、パブリックIPアドレスだけを所有していない人々に焦点を合わせたあらゆる種類の制限:プロキシサーバー、VPN、NATデバイスなど)は非現実的です長い間、世界の多くの地域でIPv4プールが枯渇するにつれて、ISPは大きなプールの背後にますます多くのクライアントを配置しています。NATプール(私の国では今週のニュースはDeutsche Telekomの子会社である最大のISPは、プライベートIPv4アドレスを標準的なビジネス方法として顧客に配布し始めており、人々はプロバイダーにパブリックIPアドレスの取得を明示的に依頼する必要があります)クライアントを禁止する場合は、IPアドレスではなくID(アカウント)に基づいてクライアントを禁止する必要があります。
これを行う最も簡単な方法は、APIなどの外部サービスを使用して、VPNまたはプロキシユーザーをブロックすることです。
MaxMind と GetIPIntel の両方がAPIを介して提供しています。試してみてください。 GetIPIntelは無料のAPIサービスを提供していますので、まず試してみることをお勧めします。
OpenVPNの場合、 誰かが一意のMSS値を使用してVPN接続を識別しました しかし、セットアップは複雑で、現在「パッチ」されている可能性があります。
編集で言及した戦略は、多くの誤検知に遭遇するため、あまり良いアイデアとは思えません。サービスに接続するたびにポートスキャンを送信すると、結果を得るまでに多くの時間とリソースが必要になります。
次のようなIPアドレスを追跡するWeb APIを使用できます。 http://xioax.com/Host-blocker/
Javaライブラリ: https://github.com/HiddenMotives/Java-VPNDetection
はい、 Shodan を使用して、IPがVPN /プロキシに属しているかどうかを検出できます。次のPythonコードはそれを行う方法を示しています:
import shodan
# Setup the API wrapper
api = shodan.Shodan('YOUR API KEY') # Free API key from https://account.shodan.io
# Lookup the list of services an IP runs
ipinfo = api.Host(VISITOR_IP)
# Check whether the IP runs a VPN service by looking for the "vpn" tag
if 'tags' in ipinfo and 'vpn' in ipinfo['tags']:
print('{} is connecting from a VPN'.format(VISITOR_IP))
ポートのリストを見て、訪問者がHTTPプロキシから接続している可能性を判断することもできます。
if 8080 in ipinfo['ports']:
print('{} is running a web server on a common proxy port'.format(VISITOR_IP))
既知のプロキシIPアドレスのリストをダウンロードし、ローカルでルックアップして、VPNかオープンプロキシかなどを確認できます。
市場にはいくつかの商用製品があります。 IP2Proxy LITE は無料ですぐに試すことができます。
Tor出口ノードのリストは 一般公開 です。 「exit nodes」のみが必要で、CSVとして使用できます。これは、Torディレクトリから直接生成されるため、100%完全かつ正確でなければなりません。
オープンプロキシの無料リストは、 iblocklist.com から入手できます。 ip2location.com のオープンプロキシ、Torノード、VPNエンドポイントを組み込んだ無料のリスト。
最後の2つは、特にVPN出口ノードに関しては、カバレッジと精度が制限されている可能性があります-それらの数が多すぎます。一部のプロバイダーは別のアプローチを採用し、エンドユーザーは「コンシューマ」サブネットから接続する必要があるため、すべての「ホストサブネット」(ISPがホストサーバーにクライアントIPを割り当てるサブネット)を何らかのVPNまたはプロキシと見なします。