海外からのアクセスを遮断する方法

海外からのアクセスはスパムが多いので、海外在住の日本人に見せる必要がないのなら、海外からのアクセスは全て遮断するのがいいです。私はいつもそうしています。

方法は、.htaccessに日本のIPアドレスを並べて、それだけを許可すればいいです。日本のIPアドレスはこちらで手に入ります。

ただ、これをそのまま使うと、検索エンジンのクローラーまで拒否してしまうので、検索エンジンのクローラーだけは許可する必要があります。

それにはこう書きます。

#検索エンジンのユーザーエージェントを列挙し、ラベルを付ける。
SetEnvIf User-Agent "Googlebot" allow_ua
SetEnvIf User-Agent "bingbot" allow_ua
SetEnvIf User-Agent "msnbot" allow_ua
SetEnvIf User-Agent "Slurp" allow_ua
SetEnvIf User-Agent "Y!J" allow_ua
SetEnvIf User-Agent "archive.org_bot" allow_ua

#allowした後、denyする設定。
order allow,deny

#検索エンジンをユーザーエージェントで識別してアクセスを許可。
allow from env=allow_ua

この後に日本のIPアドレスを全部並べて、それぞれ許可します。

allow from 1.0.16.0/20
allow from 1.0.64.0/18
allow from 1.1.64.0/18
(以下略)

つまり結局、こうなります。

#検索エンジンのユーザーエージェントを列挙し、ラベルを付ける。
SetEnvIf User-Agent "Googlebot" allow_ua
SetEnvIf User-Agent "bingbot" allow_ua
SetEnvIf User-Agent "msnbot" allow_ua
SetEnvIf User-Agent "Slurp" allow_ua
SetEnvIf User-Agent "Y!J" allow_ua
SetEnvIf User-Agent "archive.org_bot" allow_ua

#allowした後、denyする設定。
order allow,deny

#検索エンジンをユーザーエージェントで識別してアクセスを許可。
allow from env=allow_ua

#日本国内のIPアドレスからのアクセスを許可。
allow from 1.0.16.0/20
allow from 1.0.64.0/18
allow from 1.1.64.0/18
(以下略)

この方法の有効性ですが、今までにこれでもスパム投稿をしてきた人は一人か二人なので、ずいぶん平和になるかと思います。

この.htaccessの記述は、掲示板を設置した場合には必須です。他に方法はありません。それから、以前は、ドメインで検索エンジンのクローラーを許可できましたが、最近はドメインでは許可や拒否ができませんので、ユーザーエージェントで区別するしかありません。

ついでながら、「#」を先頭につけるコメント行ですが、独立した行にしないとだめです。昔は、コード(正式にはdirectiveと言う)と同じ行につけることができましたが、今ではそれをやると500のエラー(Internal Server Error)が出ますから、必ず独立した行に書きましょう。なお、コメント行はなくても動作しますので、いらないと思ったら、削除しても大丈夫です。

なお、一般に流布しているやり方では、許可と拒否の順番が「全部拒否→日本のIPだけ許可」になっています。それでも全然問題はありませんが、実は、ここで紹介しているように「許可→拒否」の順番を指定して、許可するIPアドレスを記載しておくだけで十分です。

私のやり方のメリットは、その後に日本国内のスパム元のIPアドレスを列挙して拒否できるという点です。その方がいいでしょう?

関連ページ:
IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess (CGI’s)