web-dev-qa-db-ja.com

.htaccessを使用して、私以外のすべての国へのサイトアクセスを制限するにはどうすればよいですか?

私はこれを使用しました tool。htaccess allow」形式でリストをダウンロードして、私の国からのトラフィックを許可し、他のすべてを制限しますが、多数の外国のプロキシからアクセスする場合でもアクセスできます。

Apacheログの検査中に見つけた中国、ウガンダ、ロシア、およびその他の国からのトラフィックを必要としないホーム開発サーバーへのアクセスを制限しています。

どうやら、この形式は機能していないようです:

<Limit GET POST>
order deny,allow
allow from 37.18.184.0/22
allow from 37.18.188.0/22
allow from 37.19.104.0/22
allow from 37.19.108.0/22
allow from 37.35.8.0/22
allow from 37.35.12.0/22
allow from 37.35.64.0/22
allow from 37.35.68.0/22
allow from 37.77.168.0/22
allow from 37.77.172.0/22
deny from all
</Limit>
2
dzhi

CIDR表記の代わりにネットマスクを試してください:

<Limit GET POST>
order deny,allow
allow from 37.18.184.0/255.255.252.0
...
allow from 37.77.172.0/255.255.252.0
deny from all
</Limit>

または、次のようにします。

<Limit GET POST>
order deny,allow
allow from 37.18.184.
allow from 37.18.185.
allow from 37.18.186.
allow from 37.18.187.
...
allow from 37.77.172.
allow from 37.77.173.
allow from 37.77.174.
allow from 37.77.175.
deny from all
</Limit>
4

最善の方法は、既存のApache-GeoIPツール(またはモジュール)を使用することです

4
Lazy Badger

あなたの質問の情報から、何が間違っているのかを言うのは難しいです。次のテストから始めることをお勧めします。

  1. IPアドレスをエコーバックする単純なスクリプトを作成します。次のようなものです(PHPの場合)。

    Your IP address is: <?= $SERVER['REMOTE_ADDR'] ?>
    
  2. 外部プロキシからスクリプトにアクセスし、レポートするアドレスを書き留めます。アドレスを.htaccessファイルのAllow行と比較します。

この実験の結果は、可能性を少し絞り込む必要があります。

  • 報告されたIPアドレスがAllow行のいずれとも一致しない場合、Apacheは何らかの理由でアクセス制御をまったく守っていないか、要求を通過させる別のAllow行があります。

  • IPアドレスdoesAllow行のいずれかと一致するが、プロキシの正しいアドレスであるように見える場合(逆DNSルックアップを試してください) )、GeoIPデータベースが間違っているか、プロキシが考えている場所に配置されていません。

  • 報告されたIPアドレスが自分のWebホストを指している場合、Webサーバーの前の リバースHTTPプロキシ に属している可能性があります。その場合、リクエストヘッダーからクライアントのrealIPアドレスを抽出する方法を理解する必要があります(例:X-Forwarded-For )プロキシによって設定されます。

  • スクリプトによって報告されたIPアドレスが自分のものである場合は、結局プロキシを使用するようにブラウザーを正しく構成しなかったか、(おそらく)プロキシがリクエストヘッダーでIPアドレスを渡し、何らかの理由で、 Webサーバーは、このようなヘッダーを盲目的に信頼するように構成されています(これは悪い考えです。HTTP要求ヘッダーは簡単に偽造できます)。

  • 上記のいずれにも当てはまらない場合、何か変なことが起こっています。報告されたIPアドレスでDNSの逆引きやWHOISルックアップ、あるいはその両方を実行すると、何がわかるかがわかります。

追伸 おそらくアクセスコントロールの周りで<Limit>を使いたくないでしょう 、少なくとも本当にwant例えば許可するあらゆる国からのHEADおよびPUTリクエスト。

0
Ilmari Karonen