第9回 IP認証によるアクセス制限のテクニック
一志 達也<ichishi@pochi.tis.co.jp>
TIS株式会社
2001/9/29
Apacheのセキュリティ機能の構成要素と設定
Apacheにおけるアクセス制限には、Apacheの設定ファイル(httpd.conf)を使う方法と、制限を設けたいディレクトリに「.htaccess」という名称のファイルを作成する方法の2種類がある。.htaccessには、そのディレクトリ以下のコンテンツ(サブディレクトリも含む)に対する制限を記述する。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 図 .htaccessの影響範囲。.htaccessが置かれたディレクトリとそのサブディレクトリにも及ぶが、さらに.htaccessがある場合はそちらが使われる | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
重要なことは、アクセス制限を行う設定ファイルはhttpd.confではなく.htaccessを使うこと。.htaccessの名前が限定されていること(httpd.confのAccessFileNameディレクティブで規定)。.htaccessによる制限の影響範囲は、そのディレクトリのコンテンツ(ファイル)だけでなくサブディレクトリに含まれるファイルにまで及ぶこと。サブディレクトリにさらに.htaccessが置かれている場合は、その内容が優先することである(図)。
httpd.confにも記述できるのに、なぜディレクトリに.htaccessを用意するのだろうか? それは、.htaccessを使えばApacheの管理者以外に対してもコンテンツへのアクセス制限の管理を任せられるからである(編注)。
| 編注:もう1つ重要な点は、httpd.confに記述した場合は設定を変更するたびにApacheの再起動が必要だが、.htaccessであればApacheの再起動なしにアクセス制限の設定変更が可能なことにある。 |
通常、Apacheの設定ファイルは限られた管理者によってのみ編集される。それに対し、Webサーバでコンテンツを公開するのは管理者だけとは限らない。特に、ユーザーディレクトリを利用して、多くのユーザーにコンテンツ配信を許可する場合、いちいちユーザーの要求に合わせてアクセス制限を設けてはいられない。各ユーザーに.htaccessファイルを作成・管理させれば、管理者は面倒から解放される。
■.htaccessファイルで制限可能な範囲の設定
各ディレクトリに.htaccessファイルを配置したアクセス制限を設ける場合、以下の点についても理解しておきたい。
AllowOverrideディレクティブは、.htaccessファイルによるアクセス制限やディレクトリ固有の設定について、指定可能な範囲を制限する。このディレクティブには、5種類のオプションと、その5種類すべてを指定する「All」、すべてを不可にする「None」オプションがある。5つのオプションすべてを指定するのと、Allオプションを指定するのは同じであり、
AllowOverride All |
と指定すれば、それは「.htaccessファイルで指定できるすべてのアクセス制限を利用する」ということである。
All/None以外には、次のオプションがある。これらを複数指定する場合は、
AllowOverride Options Limit |
のように、空白(半角スペース)で区切って記述する。
- AuthConfig
ユーザー認証に関する指定を可能にする。
- FileInfo
MIME-Typeの指定やエラードキュメントの指定など、ドキュメントタイプに関する指定を可能にする。
- Indexes
ファイル一覧の表示やファイル名が省略された場合にデフォルトで表示されるファイル名など、ディレクトリインデックスに関する指定を可能にする。
- Limit
アクセス制限を行うためのallow、deny、orderの指定を可能にする。
- Options
オプション命令(Optionsディレクティブ)の指定を可能にする。
| コラム .htaccessファイルへの読み込み制限の設定 | |
不正アクセスを試みようとする者に.htaccessファイルの内容を読み取られるのは望ましくない。しかし、.htaccessファイルはコンテンツと同じディレクトリに配置される。従って、何の防御策も施さなければ、コンテンツ・ファイルと同じように容易に読み取ることができてしまう。そうした事態を防ぐために、Apacheの設定ファイルには以下のように記述されている。
これは、.htで始まるファイルについて、読み取りを拒否する設定である。最初から設定ファイルに記述されているはずだが、再度確認しておきたい。もし記述されていなかったり、「#」を先頭に付けてコメントアウトされているようなら修正して有効化すべきだ。 |
■IP認証を定義する3つの要素と記述方法
アクセス制限1つ設定するにも、理解しなければならない事柄は多い。しかし、IP認証に関する制限内容の記述は思いのほか簡単だ。「order」「allow」「deny」の3つさえ理解していれば、どのような制限も表現できる。
orderは、その後に続くallow(許可)とdeny(拒否)の評価順を指定する。例えば、
order allow,deny |
とすれば、allowを先に、denyを後に評価する。基本的にアクセスを拒否し、allowで明記されているアクセスを許可する。逆に、
order deny,allow |
とあれば、denyを先に、allowを後に評価する。基本的にアクセスを許可し、denyの記述にマッチしたアクセスを拒否する。
allowとdenyの使い方も難しくはない。
allow from 許可する対象 |
と記述するか、または
deny from 拒否する対象 |
と記述する。例えば、atmarkit.co.jpドメインからのアクセスのみを許可するなら、
allow from .atmarkit.co.jp |
とするわけだ。また、すべての対象からアクセスの許可/拒否を行う場合は
allow from all |
または
deny from all |
と記述できる。
上記の内容を総合すると、atmarkit.co.jpドメインからのアクセスのみを許可(それ以外からのアクセスは拒否)する場合、以下の3行で表現できる。
order deny,allow |
ここではドメイン名を使った認証を例にしたが、ホスト名やIPアドレスで指定することもできる。その場合は、ドメイン名の部分を置き換えればいい。
もう1つ付け加えるなら、複数のドメイン名やIPアドレスを指定する方法だろう。対象を複数にするには、それに応じて複数の行を記述することになる。例えば、atmarkit.co.jpとtis.co.jpからのアクセス、さらに192.168.1.*(つまりイントラネット)からのアクセスを許可する場合、記述する内容は以下のとおりになる。
order deny,allow |
■アクセス制限を行う範囲の指定
制限内容の記述は理解できたとしても、問題は、その記述をどこに書けばいいのか、ということである。ファイルとしてはhttpd.confと.htaccessの2種類があることはすでに説明したが、それらのファイルにどう記述すればいいのかを明確にしていない。
まず、httpd.confへの記述について解説しよう。httpd.confは、Apacheで構築されるWebサイト全体の設定をつかさどる。従って、このファイルにアクセス制限を記述するには、その制限対象を明確にしなければならない。
httpd.confでアクセス制限を設定できる対象は、以下の3つである。
1.実ディレクトリ
実ディレクトリに対する設定は、<Directory>〜</Directory>ディレクティブに記述する。このディレクティブは、
<Directory "/usr/local/apache/htdocs"> |
のようにディレクトリ名を指定するが、
<Directory /> |
という指定は全ディレクトリ共通の設定(デフォルト設定)として用いられる特別な記法だ。
実ディレクトリを指定した制限の設定は.htaccessファイルを用意することに等しく、ディレクトリ単位でのアクセス制限に有効である。
例えば、/usr/local/apache/htdocsというディレクトリ以下に対してアクセス制限を設けるならば、以下のように記述する。
<Directory "/usr/local/apache/htdocs"> |
2.仮想ディレクトリ
実ディレクトリに対して設定するのと同様に、仮想ディレクトリに対しても設定を行うことができる。この場合には、<Location>〜</Location>ディレクティブを用いる。仮想ディレクトリの場合は、制限対象を直感的に把握するのが実ディレクトリよりも難しいものの、仮想ディレクトリに対するマッピングの変更に影響を受けない利点がある。
この場合の記述方法は、<Directory>ディレクティブと同様なので、サンプルについては省略する。
3.ファイル
ファイル単位でのアクセス制限も可能で、<Files>〜</Files>ディレクティブを用いる。このディレクティブを普通に指定すると、サイト全体に共通する設定となる。ただし、<Directory>ディレクティブや<Location>ディレクティブの中に記述することで、特定のディレクトリ内のみを対象とすることもできる。
例えば、次のように記述すれば、/usr/local/apache/htdocsというディレクトリ以下の、拡張子が画像形式(gif、jpeg、jpg、png)のファイルのみを対象にすることができる。
<Directory "/usr/local/apache/htdocs"> |
このように、<Files>ディレクティブにおけるファイルの指定には「正規表現」を用いる。もちろん、特定のファイル名を指定することもできるが、この例のように正規表現を用いる場合の方が多いだろう。
■.htaccessのアクセス制限記述方法
.htaccessに制限を設定する場合、ディレクトリを明確にする必要はない。なぜなら、.htaccessファイルを保存したディレクトリ以下が対象になることは、わざわざ指定しなくても明白だからである。従って、.htaccessファイルにおいては、必要であれば<Files>ディレクティブを用いて対象となるファイルを指定する以外あり得ない。
<Files>ディレクティブでファイル単位の制限を行う必要がなければ、以下のように直接制限内容を記述する。
order deny,allow |
次回はユーザー認証
IP認証について設定方法を解説してきたが、セキュリティの設定はこれで終わりではない。次回は、今回の内容を基礎としてユーザー認証について解説する。
|
2/2
|
|
| Index | |
| ApacheによるWebサーバ構築 | |
| Apacheでできるセキュリティ対策 アクセス制限を実現する2つの方法 |
|
| Apacheのセキュリティ機能の構成要素と設定 .htaccessファイルで制限可能な範囲の設定 IP認証を定義する3つの要素と記述方法 アクセス制限を行う範囲の指定 .htaccessのアクセス制限記述方法 |
|
| 次回はユーザー認証 | |
| 連載 ApacheによるWebサーバ構築 |
| Linux Squareフォーラム サーバ構築・運用関連記事 |
| 連載:Heartbeatでかんたんクラスタリング(連載中) オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します |
|
| 特集:Apache 2.2でWebサイトをパフォーマンスアップ! 最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する |
|
| 連載:実用 Apache 2.0運用・管理術(全8回) 本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える |
|
| 連載:実用
BIND 9で作るDNSサーバ(全15回) 本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく |
|
| 連載:実用qmailサーバ運用・管理術(全14回) 本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで |
|
| 特集:Samba
3.0の全貌 改訂版 Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する |
|
|
TechTargetジャパン
- クライアントがアクセスできる範囲を制限する (2012/2/10)
今回は、サーバ上のファイルの扱いに関係する設定項目について解説します - 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします - エラーメッセージをどう扱うか? (2012/2/2)
今回は、スクリプト実行時にエラーが発生したことを知らせるメッセージの扱い方を説明します - ファイルのアップロードを制限する (2012/1/30)
HTTPクライアントがアップロードしてくるファイルの扱いについて解説します。そもそも受け入れる必要があるのか? ということのほかにも、いろいろ設定が必要です
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
