アクセス制限用.htaccessの書き方を分かりやすく解説!
2022.12.14
「アクセス制限用の.htaccessファイルは、コードの書き方が難しそう…」と思っているWeb担当者も多いようです。
確かに、パッと見は何を書いているのか分かりにくいのも事実。
そこで今回は、目的に合わせたケースごとに記述例を提示したうえで、コードの意味や書き方のコツについてまとめてみました。
.htaccessシリーズの関連記事
アクセス制限とは?
大きく分けて2種類の方法で実現します。
❶特定のホスト、IPからのアクセスのみ拒否、その他のホスト、IPからのアクセスは許可
❷特定のホスト、IPからのアクセスのみ許可、その他のホスト、IPからのアクセスは拒否
アクセス制限とは、特定の相手に対して閲覧を拒否または許可するために、サーバーの設定を変更するセキュリティ対策の一種です。
例えば「ブログ荒らしのIPをブロックしたい!」、反対に「本来は社外秘だがクライアントにだけは見て欲しい!」といった場合に、設定ファイルである「.htaccess」を使用してアクセス制限をかけます。
ちなみに、ユーザーIDとパスワードによって制御するベーシック認証もアクセス制限の一種です。
BASIC認証用.htaccessの書き方については、下記の記事で詳しく解説しております。
関連記事
.htaccessでアクセス制限を設定する流れ
アクセス制限に.htaccessを用いる場合は、下記の3ステップで設定します。
.htaccessを使ったアクセス制限の手順
- テキストエディタに、サーバー宛の指示を書く
- 「.htaccess」というファイル名で保存する
- .htaccessファイルをFTPでアクセス制限したいディレクトリにアップロードする
2番でテキストエディタを表す拡張子「txt」が消せない場合は、サーバーにアップロードした後でファイル名を「.htaccess」に修正すれば問題ありません。
なお、パーミッションは「604」が一般的ではあるものの、サーバーごとに異なっているため確認が必要です。
特定IP・ドメインに対するアクセス制限
ここからは、下記の4項目について個別に見ていきましょう。
特定IP・ドメインに対するアクセス制限
- 特定IP・ドメインからのアクセスを拒否する
- 特定IP・ドメインからのアクセスを許可する
- .htaccessの書き方ヒント(特定IP・ドメイン編)
- IP・ドメインの指定方法
特定IP・ドメインからのアクセスを拒否する
「掲示板を荒らしている利用者をブロックしたい!」など、一般ユーザーからのアクセスは許可しつつ、特定のIPアドレス・ドメインからのアクセスだけを拒否したい時は、下記の構文を.htaccessファイルに記述します。
アクセス拒否の記述例
order allow,deny
allow from all
deny from 111.222.333.444
deny from .tokyo.example.ne.jp
書き方のコツ
- 1行目:「order allow,deny」で、特定のIPのみアクセスを拒否すると宣言する
- 2行目:一旦「allow from all」で全てのアクセスを許可する
- 3行目~:「deny from」で特定の相手のみアクセスを拒否する
特定IP・ドメインからのアクセスを許可する
一方、「社内スタッフだけに公開したい!」など、不特定多数からのアクセスを拒否し、特定のIPアドレス・ドメインからのアクセスだけを許可したい時は、下記の構文を.htaccessファイルに記述します。
アクセス許可の記述例
order deny,allow
deny from all
allow from 111.222.333.444
allow from .tokyo.example.ne.jp
書き方のコツ
- 1行目:「order deny,allow」で、特定のIPのみアクセスを許可すると宣言する
- 2行目:一旦「deny from all」で全てのアクセスを拒否する
- 3行目~:「allow from」で特定の相手のみアクセスを許可する
.htaccessの書き方ヒント(特定IP・ドメイン編)
ここでは、初めて.htaccessを作成する方でも分かりやすいよう、書き方のヒントについてまとめてみました。
allow/deny |
allow→許可
deny→拒否 |
order |
判定順を指定する。
「order allow,deny」なら、許可allowに該当→拒否denyを判定(特定の相手だけ拒否する)
「order deny,allow」なら、拒否denyに該当→許可allowを判定(特定の相手だけ許可する) |
allow |
許可(allow)の条件を指定。
「allow from all」は、すべて許可するという意味。 |
deny |
拒否(deny)の条件を指定。
「deny from all」は、すべて拒否するという意味。 |
deny from |
アクセス制限・許可するIPやホスト名の指定。
複数指定する場合は、改行して1行ずつ指定する。 |
IP・ドメインの指定方法
下記は、対象者を指定する方法についてまとめた一覧表です。
deny from(拒否の対象)またはallow from(許可の対象)以下を記述する際には、下記の一覧表を参考にしてください。
ホスト名 |
意 味 |
all |
全て |
111.111.333.444 |
IPアドレスの完全一致 |
111.222.333.444/555 |
IPアドレスの範囲(サブネットマスク)の指定 |
111.222.333. |
IPアドレスの先頭一致 |
sample.com |
アクセスを許可する特定ドメイン
アクセス元のドメインが、 sample.comに後方一致する場合のみ許可 |
特定のファイルに対するアクセス制限
「公開してネット上でチェックしたいが、また担当者以外には見られたくない!」という場合もあるでしょう。
もちろん、経営者にとっては社員に見せたくない資料もあるはずです。
そんな時は、下記の手法を試してみてはいかがでしょうか。
特定のファイルに対するアクセス制限
- 特定のファイルへのアクセスを拒否する
- 複数ファイルへのアクセスを拒否する
特定のファイルへのアクセスを拒否する
下記のコードは、見られたくないファイル・ディレクトリ・ログなどをピンポイントで指定して、アクセスを拒否する時に使います。
記述例
<Files ~ "^sample.dwt$">
Deny from all
</Files>
書き方のコツ
- 1行目:見せたくないファイルとして、テンプレートの「dwt」を指定する
- 2行目:一旦「deny from all」で全てのアクセスを拒否する
複数ファイルへのアクセスを拒否する
上記のコードを応用して、複数ファイルへのアクセスを拒否することも可能です。
ポイントは、1行目にアクセスを拒否したいファイル名をパイプ( |)で繋げて増やすだけ。
たとえば、下記の記述例では「sample1.dwt」と「sample2.dwt」の両方に対し、アクセスを拒否することができます。
記述例
<Files ~ "^(sample1.dwt|sample2.dwt)$">
Deny from all
</Files>
海外IPに対するアクセス制限
ここからは、下記の項目について解説します。
海外IPに対するアクセス制限
- 全海外IPからのアクセス拒否(国内IPのみ許可)
- 特定の国だけ指定してアクセスを拒否する
- 各国のIPアドレスを調べる方法
- 各国のコード(CC)を調べる方法
- 海外からのアクセスを拒否できているか確認する方法
全海外IPからのアクセス拒否(国内IPのみ許可)
海外からの接続をすべてアクセス制限で拒否し、反対に国内IPからは自由に閲覧できるようにするには、.htaccessファイルに下記のコードを記述します。
記述例
SetEnvIf User-Agent "Googlebot" allowbot
SetEnvIf User-Agent "msnbot" allowbot
SetEnvIf User-Agent "bingbot" allowbot
SetEnvIf User-Agent "Slurp" allowbot
order deny,allow
deny from all
allow from env=allowbot
allow from googlebot.com
allow from google.com
allow from 1.0.16.0/20
allow from 1.0.64.0/18
中略
allow from 223.252.64.0/19
allow from 223.252.112.0/20
書き方のコツ
- 1~4行目:最初に、各種検索クローラーに対し「ユーザーエージェント」を許可する
- 6~7行目:一旦、すべてのアクセスを拒否する
- 9行目:検索結果に表示されるよう、Googlebotなど検索クローラーからのアクセスのみ許可する
- 11~12行目:SearchConsoleやアナリティクスを使っている場合、指定して許可する
- 14行目~:日本のIPアドレスを全て記載し、国内からのアクセスを許可する
特定の国だけ指定してアクセスを拒否する
ロシア(.ru)と中国(.cn)だけをアクセス制限によって拒否し、日本を含めたその他の国からは自由に閲覧できるようにするには、.htaccessファイルに下記のように記述します。
記述例
order Allow,Deny
Allow from all
Deny from .ru
Deny from .cn
書き方のコツ
- 1行目:「order allow,deny」で、特定のIPのみアクセスを拒否すると宣言する
- 2行目:一旦「allow from all」で全てのアクセスを許可する
- 3行目~:「deny from」で特定の国だけ指定してアクセスを拒否する
各国のIPアドレスを調べる方法
海外からのアクセスを全てブロックするには、日本に割り当てられているIPアドレスを1つ残らず調べておかなければなりません。
そんな時に便利なのが、APNICから取得したIP情報をリスト化して公開している「IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess CGI’s」というサイトです。
ダウンロードファイルには4,000件以上もの膨大なIPアドレスが含まれていますが、そのまま全てを.htaccessファイルに記述しましょう。
その際、必ず行の先頭に「allow from」を付けたうえで1行ごとに改行して下さい。
各国のコード(CC)を調べる方法
特定の国を指定してアクセ制限を設定したい時は、あらかじめ対象国のコード(CC)を調べておく必要があります。
Fetusが提供している「国/地域別IPアドレス割り振り一覧」なら、国別のコードだけでなくIPアドレスも掲載されていてとっても便利。
こちらのサイトを参照しながら、用途に合わせてアクセス制限用の.htaccessファイルを作成してみましょう。
海外からのアクセスを拒否できているか確認する方法
海外IPに対して設定したアクセス制限が有効になっているか確認するには、下記のような無料サイトが便利です。
出展:WebPageTwst
確認する手順
- ステップ1:WebPageTwstにアクセスする
- ステップ2:アクセス制限の対象URLを入力する
- ステップ3:画面下部の「Advanced Configuration」をクリック
- ステップ4:「Test Location」から外国名を1つ選択
- ステップ5:「START TEST」をクリック
表示されたテスト結果の画面に切り替わり、「Screenshot」の欄が下記のどちらかになっていれば成功です。
成功した時の表示
- 404エラー(not found):存在しないページを意味するHTTPステータスコード
- 403エラー(Forbidden):アクセス拒否、または閲覧禁止を示すHTTPステータスコード
まとめ
今回は、.htaccessを使ってアクセス制限を設定する方法についてご紹介してきましたが、いかがだったでしょうか。
一見、難解にも思える.htaccessのコードも、各パートの意味さえ分かれば書き方に悩む必要はありません。
本記事では特にニーズの高いケースをピックアップしていますので、ぜひ参考にしてください。
関連