.htaccessを使うと、ディレクトリやファイルに対してアクセスの許可または拒否を指定する事ができます。そしてその許可をどういった流入に対して適用するかも設定する事が出来ます。
ここでは良く使うホストとIP情報を元に、特定の情報へのアクセスを.htaccessを使ってコントロールする方法をご紹介します。
.htaccessでアクセスの基本的な記述とは?
アクセス制限を掛けたいディレクトリの.htaccessのファイル内で、Order ~の形で指定します。「~」の部分にどういった許可とするかを指定します。
- Order Allow,Deny
- Order Deny,Allow
この2つのどちらかから記述を始めます。Allowは許可、Denyは拒否の意味を示しています。
orderで記述された内容を左側から処理を行いますので、1行目はアクセスを許可した後拒否していますのでデフォルト設定が拒否という意味になります。
2行目はアクセスを拒否した後に許可していますので,デフォルト設定は許可となります。
ここではまだどういう意味か理解しずらい所もあると思いますが、次より詳しく説明します。まずはAllowは許可、Denyは拒否の意味を持ち、order ~ の記述で書く事を覚えてください。
許可/拒否リストを記述する
どういった流入を許可または拒否するかを細かく設定できます。許可するものはAllow from ~、拒否するものはDeny from ~から始まるコードで記述します。
- Order Deny,Allow
- Allow from all
- Deny from test.hoge.com
このような形で記述します。form allは全てを意味しますので、「Allow from all」は全てのアクセスを許可という意味になります。Deny from の後の記載のように、ドメインやIPの記述で特定のアクセスに対する処理となります。
この内容は全てのアクセスを許可するが、「test.hoge.com」からのアクセスは拒否するという意味となります。
許可/拒否を決める流入元を判別するには?
どのアクセスを許可または拒否するかは、.htaccessの仕様に沿った様々な方法で記述が可能です。ここではその中でも特に多いであろうIPとホストによる記述方法をご紹介します。
IPで特定する
流入のIPを設定する事で、特定のアクセスにのみ設定を適用させる事ができます。
- Order Allow,Deny
- Allow from xxx.xxx.xxx.xxx
- Allow from xxx.xxx.xxx.yyy
このように対象としたいIPアドレスを列挙するとそのIPのみ適用させる事ができます。
この場合「Order Allow,Deny」でアクセスを拒否していますが、IPが「xxx.xxx.xxx.xxx」と「xxx.xxx.xxx.yyy」の場合はアクセスできるようにしています。
IPで指定する時の注意点としては、そのIPが固定IPかどうかを事前に確認しておいてください。家庭用のIPはほとんどが可変となりますので、これだと思って設定したIPが、次のアクセス時には別のIPとなり設定から外れるという事態となってしまいますのでご注意ください。
ホスト名で指定する
ホスト名で指定する場合は、IPと同様対象のドメインを記述するだけで指定する事ができます。
- Order Allow,Deny
- Allow from test.hoge.com
- Allow from .hoge2.jp
この場合は「text.hoge.com」ドメインと「.hoge2.jp」ドメインのアクセスを許可しています。後方一致で判断されますので.hoge2.jpは「sub.hoge2.jp」や「www.hoge2.jp」といったサブドメイン全てが対象となります。
特定のディレクトリやファイルに適用するには?
アクセス制限の設定を特定のディレクトリやファイルに適用する方法です。
特定のディレクトリに適用するには、適用したいディレクトリに設定を行った.htaccessファイルを設置するだけです。.htaccessは親フォルダには影響を及ぼす事はありません。
ただ注意が必要なのは、/a/.htaccessと/a/b/.htaccessファイルがあった場合は、/b/ディレクトリ以下には/a/b/.htaccessの内容が適用されます。このあたりは少し複雑になるので細かな部分は割愛しますが、設定した内容が反映されないと感じた場合は、その下のディレクトリに.htaccessが無いか探してみて下さい。
特定のファイルに適用する
特定のファイルのみ制限を掛けたい場合は、「<Files ~ "(ファイル名)">」で記述します。(ファイル名)の部分に正規表現で対象のファイル名を記述します
- <Files ~ "test\.php">
- Order Allow,Deny
- Allow from test.hoge.com
- </Files>
この場合はtest.phpへのアクセスのみ、「test.hoge.com」からのみ許可しています。ファイル名には正規表現が使えますので、複数のファイルに対して指定する事も可能です。
アクセスの一部を許可するシーンとは?
ここまで記述方法について順に説明してきましたが、実際の利用シーンがイメージしずらいと思いますので、どのような利用シーンがあるか具体的にご紹介したいと思います。
まずはアクセスの一部を許可する場合ですが、ほとんどのアクセスを拒否し一部のみを許可するというのは、例えば開発環境で利用する事が考えられます。ビジネスの場合は、ほとんどの法人がIPアドレスは固定化されていますので、セキュリティを強める意味でも良く使うシーンかと思います。これは関係各社のIPを登録する事で実現が出来ます。
- Order Allow,Deny
- Allow from xxx.xxx.xxx.xxx
- Allow from xxx.xxx.xxx.yyy
他には良く使われるCMS「wordpress」のセキュリティ強化の為に、wp-login.phpにアクセス制限を設定する事が考えらます。
wordpressのインストールそのままで使っている場合は攻撃者にログイン画面を特定される可能性が高いので、.htaccessでログイン画面のアクセスに制限を掛ける事でセキュリティを高める事ができます。
- <Files ~ "wp-login.php">
- Order Allow,Deny
- Allow from xxx.xxx.xxx.xxx
- </Files>
アクセスの一部を拒否するシーンとは?
アクセス制限を掛ける場合は、セキュリティを考慮して適用する事が多いので、ほとんどはアクセスを拒否し一部を許可するという使い方が多くなります。
ただ一部のアクセスを拒否するという使い方を重宝する時があり、それが不正アクセスをブロックしたい場合です。
サイトを運営していると特定のIPから連続したアクセスを受ける場合があります。そういった場合に以下のように特定のアクセスを除外し不要なアクセスを除外します。
- Order Deny,Allow
- Deny from xxx.xxx.xxx.xxx
- Deny from xxx.xxx.xxx.yyy
最後に
今回紹介した記述方法は、apache2.4からは「Require」という記述に変わります。ただ、ほとんどのサーバーでmod_access_compatというモジュールが動いており、そのおかげでapache2.4サーバーでも今回の記述方法で動く事がほとんどです。
ただ、自身がご利用されているサーバーがapache2.4で、これから.htaccessを覚える場合は「Require」を使った記述を覚えた方が良いので、その記述についてはまた別の機会にご紹介したいと思います。