今回はローカル環境構築が目的なのでローカル以外からのアクセスを拒否するように設定します。
httpd.conf(Apacheの設定ファイル)編集
/Applications/MAMP/conf/apache/httpd.confを編集します。
(Windows7 64bit環境ではXAMPPの環境設定(セキュリティ設定)で外部からのアクセス制限設定を行なっていますが本記事を参考にhttpd.confを編集することで同様にアクセス制限設定を行うことができます。)
ソースの以下の箇所を変更します。
[httpd.conf](変更前)
<Directory "/Applications/MAMP/htdocs"> 中略 Order allow,deny Allow from all </Directory>
↓
[httpd.conf](変更後)
<Directory "/Applications/MAMP/htdocs"> 中略 # Order allow,deny # Allow from all Order Deny,Allow Deny from all Allow from 127.0.0.1 Allow from localhost Allow from 192.168 </Directory>
Order,Allow,Denyディレクティブについて
処理の流れの説明の前にOrder,Allow,Denyディレクティブについて簡単に解説。
Order ディレクティブ
Order ディレクティブはデフォルトのアクセスの状態と Allow ディレクティブと Deny ディレクティブが評価される順番を制御します。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order
Allow ディレクティブ
Allow ディレクティブはどのホストがサーバのある領域をアクセスできるかに影響を与えます。
アクセスはホスト名、IP アドレス、IP アドレスの範囲や、 環境変数として取得された、その他のクライアントのリクエストの 特徴によって制御することができます。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow
Deny ディレクティブ
Deny ディレクティブはホスト名、IP アドレス、環境変数に基づいてサーバへのアクセスを制限します。
Deny ディレクティブの引数は Allow ディレクティブとまったく同じです。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#deny
デフォルトでの処理
デフォルトでは以下のような流れで処理が行われています。
<Directory "/Applications/MAMP/htdocs">
ドキュメントルート(/Applications/MAMP/htdocs)を対象に設定を行います。
Order allow,deny
デフォルトでは全てのアクセス拒否するようにし、次に続くallow,denyの評価の順番を制御しています。この場合、次行のallow,denyの記述の順番に関わらず、allow,denyの順番で評価されます。
Allow from all
全てのホストからのアクセスを許可します。
</Directory>
対象ディレクトリを閉じます。
ローカル環境からのみアクセス許可の処理
デフォルトの設定ではドキュメントルートへ全てのホストからアクセス出来てしまうのでローカル環境からのみアクセスできるようにしたのが以下の流れとなります。
<Directory "/Applications/MAMP/htdocs">
ドキュメントルート(/Applications/MAMP/htdocs)を対象に設定を行います。
# Order allow,deny # Allow from all
とりあえずデフォルトの設定はコメントアウト。
Order Deny,Allow
デフォルトでは全てのアクセス許可するようにし、次に続くallow,denyの評価の順番を制御しています。この場合、次行のallow,denyの記述の順番に関わらず、deny,allowの順番で評価されます。
Deny from all
まず全てのホストからのアクセスを拒否します。
Allow from 127.0.0.1 Allow from localhost Allow from 192.168
Allowディレクティブの設定により以下からのアクセスに対して許可を与えます。
- 127.0.0.1(ループバックアドレス:ネットワーク上における自分自身の仮想的なアドレス)
- localhost(127.0.0.1の通常用いられているホスト名)
- 192.168(一般的に用いられているプライベートIPアドレス:192.168.n.n)
</Directory>
対象ディレクトリを閉じます。
以上の設定で外部からのアクセスを制限することは出来たのですが問題が一つ発生してしまっています。
ドキュメントルートの確認の際に作成した sample.php を表示しようと http://127.0.0.1/sample.php へアクセスすると問題なく表示されるのですが、 http://localhost/sample.php へアクセスするとその表示に非常に時間が掛かるようになってしまいました。
原因はMac OS X v10.3以降ではデフォルトでIPv6が有効になっている事です。(Windows環境もVistaからIPv6が有効になっているようです)結果 http://localhost/ にアクセスした際に以下の段階でページが表示されるため表示まで時間が掛かってしまいます。
- http://localhost/ にアクセスするとまずIPv6で繋ごうとする
- タイムアウト発生
- IPv4でのアクセスに切り替えてアクセス
- ページが表示される
そこでlocalhostでのアクセスがIPv4で行われるよう変更します。
localhostからのアクセスをIPv4にする
まず /Applications/Utilities/Terminal.app からターミナルを起動します。
hostsファイル(ホスト名とIPアドレスの対応を定義するためのテキストファイル)を編集するために開く。viエディタが有名なようですが私は使い方が分からないのでnanoエディタで編集
sudo nano /etc/hosts
上記入力後root権限パスワードを求められるので入力するとエディタが起動します。
::1 localhost をコメントアウトします。
control+xでエディタを終了します。
“Save modified buffer (ANSERING “No” WILL DESTROY CHANGES) ? ” と聞かれるので “y”
“File Name to Write: /etc/hosts” と上書きするか聞かれるので “enter”
ターミナルで以下を入力してDNSキャッシュを削除。
sudo dscacheutil -flushcache
これで http://localhost/ でアクセスしても問題なく表示されるようになりました。
[2011/11/16追加] Mac OS X のファイアウォールについて
Mac OS X にはファイアウォールが搭載されていますがデフォルトでは無効になっているので有効にしておきます。
システム環境設定 > セキュリティとプライバシー > ファイアウォール
次はPHP環境設定を行なっていきます。