特定のホスト/IPによるアクセス制限

WEBサイトを運営している場合、「荒らし」と呼ばれる「嵐」に見舞われることが稀にあります。目には目を・・・と反撃するのもよろしいですが、大抵の場合無駄な労力を使うだけとなるでしょう。黙って「嵐」が過ぎ去るのを待つのも一つの手ですが、それはそれで泣き寝入りのようで面白くない。そのような場合は、「.htaccess」によるアクセス制限にチャレンジしてみてはいかがでしょう。アクセス制限の方法には大きく分けて二通りあります。「特定の人のアクセスのみ許す方法」と「特定の人のアクセスのみ禁止する方法」です。前者ですが、これはユーザ認証もこの中に大別されるでしょう。ただしこの方法は、会員制のサイトを作るならまだしも、悪意のない一般の訪問者のアクセスまで制限してしまいます。Dos攻撃や掲示板荒らしなどに困っている場合は、後者の方法をお奨めします。では、実際に「特定の人(ホスト/IP)のアクセスを禁止する方法」を紹介します。

order allow,deny
allow from all
deny from 123.45.67.89

この記述は、「123.45.67.89というIPアドレスからのアクセスは禁止です」ということになります(order リファレンスallow リファレンスdeny リファレンスを参照)。この記述により、「123.45.67.89」というIPアドレスからのアクセスがあった場合には、サーバは403エラーを返します。ただ、IPアドレスは接続のたびに変わることが大半です。場合によっては、

deny from 123.45.67.

といった記述方法をとり、「123.45.67.???」というIPアドレスからのアクセスを拒否する方がいいかもしれません。また、IPアドレスの指定法がよくわからない場合は、IPアドレスの変わりにホスト名(又はその一部)を指定する方法もあります(記述方法は全く変わりません)。場合によって使い分けるといいでしょう。

参考としまして、特定の人からのアクセスのみ受け付ける記述方法も示しておきます。

order deny,allow
deny from all
allow from 123.45.67.89

一行目の「allow」と「deny」の順番が入れ替わっていることに注意してください。

追記1

order deny,allow
deny from all

上の例を見てください。意味は「全てのアクセスを拒否しなさい」です。なんて無意味な記述だ・・・と思われるかもしれませんが、案外そうでもありません。例えば、CGIプログラムのみが使用するディレクトリなどは、HTTPを使用してアクセスさせる必要は皆無です。セキュリティに執着される方にお奨めします。

追記2

ホストによるアクセス制限には一つ大きな落とし穴があります。ホスト→IPアドレスというDNSの逆引きを行うことにより、ページの表示速度が著しく低下します。文字だけのページならまだしも、画像が10個も20個もあるようなページでしたら、目に見えて表示が遅くなるでしょう(画像全てに対して、アクセス制限がかかっていないかのDNS逆引きを行うため)。ホストでアクセス制限をかける際には、HTMLファイルのみに制限をかけ、画像等は別ディレクトリにて無制限とすることをお奨めします。