.htaccess でアクセス制限をする方法

.htaccess でアクセス制限をする方法
ホームページを運営していると迷惑な投稿を行なうスパムや、不正なアクセスに悩まされることがあります。
そこで、.htaccessを利用し、アクセスを制限したいことがあるかと思います。
そのアクセス制限のメモを残したいと思います。


□ UserAgentで制限する。
ブラウザや検索クローラーなどはUserAgentという情報を残す事があります。
たとえば、Googleでは「Googlebot-Image/1.0」や「Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)」などがそれに当たります。

次の例では、Googleの検索クローラーのUserAgentを利用して制限します。
Order allow,deny
allow from all
deny from env=deny_ua
SetEnvIf User-Agent "Googlebot/2.1" deny_ua

・「SetEnvIf User-Agent "[UserAgent]" deny_ua」を改行区切りで増やしていくことが出来ます。

こちらの制限方法ですが、問題点もあります。UserAgentは自由に変更出来る点です。そのため偽りのUserAgentを通知することができるので、思った制限が出来ない場合があります。


□ Referer で制限する。
リンク元のページ情報が書かれた「Referer」を利用して制限します。
次の例では、Googleの検索から来たアクセスを制限します。
Order allow,deny
allow from all
deny from env=deny_referer
SetEnvIf Referer "^https://www.google.co.jp/" deny_referer

・「SetEnvIf Referer "^[URL]" deny_referer」を改行区切りで増やしていくことが出来ます。
こちらの制限方法も問題があります。アクセス元も偽装できるため、効果は微妙です。


□ IPアドレスで制限する。
IPアドレスを元に制限する方法です。問題を起こすユーザは、Accesslogなどに記録されますので、そちらのIPを利用して制限します。
IPアドレスを一つずつ指定する方法もありますが、ネットマスク(/12や/24と記述するもの)を範囲を指定する方法もあります。

IPアドレスを調べるには、次の「IPひろば」の検索フォームからIPアドレスを入れて下さい。
http://www.iphiroba.jp/index.php
画面をスクロールすると「WHOIS情報」があり、「IPネットワークアドレス」記述されています。
サイトでの記述方法は、「xxx.xxx.xxx.xxx/12」や「xxx.xxx.xxx.xxx - yyy.yyy.yyy.yyy」となっています。次の計算ソフトを使うと、「xxx.xxx.xxx.xxx - yyy.yyy.yyy.yyy」と書かれているIPネットワークアドレスを「xxx.xxx.xxx.xxx/12」として出力してくれます。

ネットマスクの計算は、「IPアドレス変換計算」というソフトを利用すると便利です。
※ HTML表示エラーがでますが、IPアドレスの計算はできます。


次の例は、百度(Baidu)を制限しています。
Order allow,deny
allow from all
deny from 119.63.192.0/24
deny from 119.63.193.0/24
deny from 119.63.194.0/24
deny from 119.63.195.0/24
deny from 119.63.196.0/24
deny from 119.63.197.0/24
deny from 119.63.198.0/24
deny from 119.63.199.0/24

※ 以前には、絨毯爆撃のようにクローリングしてきましたが、私のサイトでは落着いていると思います。しかし、このサーチエンジンからの流入は「皆無」でしたので、制限したままとなっています。


□ 指定した拡張子のファイルのみアクセス制限する。
HTMLや画像などは表示させるが、CGIやPHPなどの実行ファイルは、アクセスを禁止したい場合があると思います。
次の例では、CGIとPHPに対して、IPアドレス「xxx.xxx.xxx.xxx/12」を制限しています。
<Files ~ "\.(cgi|php)$">
Order allow,deny
allow from all
deny from xxx.xxx.xxx.xxx/12
</Files>

・deny from [IPアドレス] を改行区切りで複数指定することができます。


スパムだけでなく、情報を盗もうとする不正アクセスを防ぐ方法の一つですので、積極的にブロックしていくことをオススメいたします。
最近はよく分からないスパムが届いたりしますので、ご参考になれば幸いです。


□ 関連記事
ブログのデザインを変えてみました。
さくらインターネットで大きいファイルを split を使って分割する方法
にゃ〜〜ん!
JavaScript BASE64 変換
CSS3で文字をぶるぶる震わす!
パラメータ付URLを.htaccessでリダイレクトするメモ
またまたアクセス制限
アドレス変更と.htaccessのHTTPリダイレクト。

2016.11.10

コメント投稿フォーム