dns-caveats.xml.ja revision 93e19770041a533e5b1a4a5287b086b7df6c6b58
45632c3574ce843b9e85b9f73efe75b7b809f789slive<?xml version="1.0" encoding="UTF-8" ?>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd<!DOCTYPE manualpage SYSTEM "/style/manualpage.dtd">
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd<?xml-stylesheet type="text/xsl" href="/style/manual.ja.xsl"?>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd<!-- English Revision: 507346:924467 (outdated) -->
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd<!--
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd Licensed to the Apache Software Foundation (ASF) under one or more
3f08db06526d6901aa08c110b5bc7dde6bc39905nd contributor license agreements. See the NOTICE file distributed with
6df89e6e4adeb986b41b7ec6b7593a887e031ce7nd this work for additional information regarding copyright ownership.
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim The ASF licenses this file to You under the Apache License, Version 2.0
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim (the "License"); you may not use this file except in compliance with
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim the License. You may obtain a copy of the License at
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd http://www.apache.org/licenses/LICENSE-2.0
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim Unless required by applicable law or agreed to in writing, software
3f08db06526d6901aa08c110b5bc7dde6bc39905nd distributed under the License is distributed on an "AS IS" BASIS,
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim See the License for the specific language governing permissions and
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd limitations under the License.
4b5981e276e93df97c34e4da05ca5cf8bbd937dand-->
3f08db06526d6901aa08c110b5bc7dde6bc39905nd
6df89e6e4adeb986b41b7ec6b7593a887e031ce7nd<manualpage metafile="dns-caveats.xml.meta">
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd
ed1d958582984a7c54a6ca859e15939a414fa733nd <title>DNS と Apache にまつわる注意事項</title>
ed1d958582984a7c54a6ca859e15939a414fa733nd
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim <summary>
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim <p>本文書の内容は次の一言に尽きます。「Apache が設定ファイルを読み込むときに
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim DNS を使用する必要がないようにして下さい」。Apache が設定ファイルを
7f5b59ccc63c0c0e3e678a168f09ee6a2f51f9d0nd 読み込むときに DNS を使用する必要がある場合、信頼性の問題
7f5b59ccc63c0c0e3e678a168f09ee6a2f51f9d0nd (起動しないかもしれません) やサービス拒否や盗用アタック
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end (他のユーザからヒットを盗むことを含みます)
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen の問題に直面するかもしれません。</p>
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen </summary>
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd
3f08db06526d6901aa08c110b5bc7dde6bc39905nd <section id="example">
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <title>簡単な例</title>
a29610af88e278144045bfa1bc63b4a1a4b5ff14trawick
52fff662005b1866a3ff09bb6c902800c5cc6dedjerenkrantz <example>
35b1112eadc3479a2d81ea1b836aa87f21505ee9jerenkrantz &lt;VirtualHost www.abc.dom&gt; <br />
52fff662005b1866a3ff09bb6c902800c5cc6dedjerenkrantz ServerAdmin webgirl@abc.dom <br />
a12dd6260a66f51e25119982390def72e2db4be5nd DocumentRoot /www/abc <br />
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd &lt;/VirtualHost&gt;
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd </example>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <p>Apache が正常に機能するには、バーチャルホスト毎に必ず二つの
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd 情報が必要になります。それは、
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <directive module="core">ServerName</directive>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd と、そのサーバが応答するための IP (最低一つ) です。
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd 上記例では IP アドレスを含んでいませんので、Apache は DNS
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd を使用して <code>www.abc.dom</code> を見つけなければなりません。
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd 何らかの理由で設定ファイルを読み込んでいるときに DNS
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd が利用できなかった場合、
63581ee088272ef76aa8d053609dc1705c222deesf バーチャルホストは<strong>設定されません</strong>。
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd そして、そのバーチャルホストに対するヒットには応答がなされません
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd (Apache 1.2 以前では起動すらしません)。</p>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <p><code>www.abc.dom</code> のアドレスが 192.0.2.1
0745f050c4e7b9eeac73c7f10a528ce5015854bcrbowen だとします。では、次の設定について考えてみましょう。</p>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <example>
4af55bbfdbff2cae0cd3195876c93ea991523d1fcolm &lt;VirtualHost 192.0.2.1&gt; <br />
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd ServerAdmin webgirl@abc.dom <br />
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd DocumentRoot /www/abc <br />
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd &lt;/VirtualHost&gt;
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd </example>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <p>現在のリリースでは Apache は DNS 逆引きを使用して
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd このバーチャルホストの <directive module="core">ServerName</directive>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd を見つけます。
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd その逆引きが失敗した場合は部分的にバーチャルホストを無効にします
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd (Apache 1.2 より前では起動すらしません)。
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd バーチャルホストが名前ベースであれば完全に無効になりますが、
38819b9bf8b10d6db4842fb5a4ede7828b409819rbowen IP ベースであれば概ね動作します。しかしながら、サーバ名を
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd 含む完全な URL を生成しなければならない場合は、正しい URL
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd の生成ができません。</p>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd
1844bb5f7939bd31f51dffaf8d8cf1c00657a681rbowen <p>次の例は上記の問題を解決しています。</p>
1844bb5f7939bd31f51dffaf8d8cf1c00657a681rbowen
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <example>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd &lt;VirtualHost 192.0.2.1&gt; <br />
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd ServerName www.abc.dom <br />
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd ServerAdmin webgirl@abc.dom <br />
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd DocumentRoot /www/abc <br />
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd &lt;/VirtualHost&gt;
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd </example>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd </section>
664e667e221a15fa5f456e73948c67710f43f1b4minfrin
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <section id="denial">
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <title>サービス拒否</title>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <p>サービス拒否が起こる場合、(少なくとも) 二つのケースがあります。
c5ac4f57bfd156a62495b9c6a049f05bbcb69acarbowen Apache 1.2 より前を実行している場合、バーチャルホストのための
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd 上記の二つの DNS 検索のうち一つ失敗すれば起動すらしません。
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd そしてこの DNS 検索が自分の制御下にすらない場合もありえます。
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd 例えば、<code>abc.dom</code> が顧客のサーバの一つで、
e930328445e961ade1bd37ed7ca01c293b586400noodl DNS は顧客自身で管理している場合、単に
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd <code>www.abc.dom</code> レコードを削除するだけで、
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd (1.2 より前の) サーバを起動不能にすることができます。</p>
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd
ed1d958582984a7c54a6ca859e15939a414fa733nd <p>もう一つのケースは、より気付きにくいものです。
ed1d958582984a7c54a6ca859e15939a414fa733nd 次の設定について考えてみましょう。</p>
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim <example>
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim &lt;VirtualHost www.abc.dom&gt; <br />
7f5b59ccc63c0c0e3e678a168f09ee6a2f51f9d0nd <indent>
7f5b59ccc63c0c0e3e678a168f09ee6a2f51f9d0nd ServerAdmin webgirl@abc.dom <br />
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end DocumentRoot /www/abc <br />
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen </indent>
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen &lt;/VirtualHost&gt; <br />
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd <br />
5effc8b39fae5cd169d17f342bfc265705840014rbowen &lt;VirtualHost www.def.dom&gt; <br />
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim <indent>
29fb68cf24dbdb4985cbb4734cb6074ea4bbab26nd ServerAdmin webguy@def.dom <br />
DocumentRoot /www/def <br />
</indent>
&lt;/VirtualHost&gt;
</example>
<p>192.0.2.1 を <code>www.abc.dom</code> に、
192.0.2.2 を <code>www.def.dom</code> に割り当てているとします。
また、<code>def.dom</code> は顧客自身の DNS
の制御下にあるとします。この設定で、<code>abc.dom</code>
に向けられたトラフィック全てを奪うことができる位置に
<code>def.dom</code> を設置できています。後は単に
<code>www.def.dom</code> が 192.0.2.1 を参照するように
設定するだけです。DNS は顧客側の DNS でコントロールされているので、
<code>www.def.dom</code> レコードが好きな場所を指すように
設定できてしまうのを止めさせることができません。</p>
<p>192.0.2.1 に対するリクエスト
(<code>http://www.abc.dom/whatever</code> 形式の URL
を入力したユーザからのもの全てを含みます)
は、<code>def.dom</code> バーチャルホストで応答されます。
このようなことが何故起こるかもっと良く知るためには、
応答の必要なバーチャルホストへのリクエストに対して、
Apache がどのように整合性を確保するかについて、
深い議論が必要になります。おおざっぱな説明は<a
href="vhosts/details.html">こちら</a>に記述されています。</p>
</section>
<section id="main">
<title>「主サーバ」アドレス</title>
<p>Apache 1.1 での <a href="vhost/name-based.html"
>名前ベースのバーチャルホストのサポート</a> 追加の際に、
Apache は <program>httpd</program> の実行されているホストの IP
アドレスを知る必要が出てきました。このアドレスを得るために、
(もしあれば) グローバルな
<directive module="core">ServerName</directive> を使用するか、
C 言語の関数 <code>gethostname</code> (コマンドプロンプトで
<code>hostname</code> とタイプしたときと同じものを返します)
を呼び出すかをします。
その後、得られたアドレスで DNS 検索を行ないます。
現在のところ、この DNS 検索を回避する方法はありません。</p>
<p>DNS サーバがダウンして、この検索ができない事態が起こることを
恐れているのであれば、<code>/etc/hosts</code>
にホスト名を記述しておくことができます
(マシンが正常に起動するように既に設定されているかもしれません)。
その場合、DNS 参照が失敗した場合にマシンが <code>/etc/hosts</code>
を使用するように設定していることを確認してください。
その方法は、どの OS を使用しているかに依存しますが、
<code>/etc/resolv.conf</code> か <code>/etc/nsswitch.conf</code>
を編集することで設定できます。</p>
<p>もし他の理由で DNS を利用する必要がない場合は、
<code>HOSTRESORDER</code> 環境変数を「 <code>local</code>
」に設定することでそのようにできます。以上これらの事柄は、どんな
OS 、レゾルバライブラリを使用しているかに依存します。また、
<module>mod_env</module> を使用して環境変数を制御しない限り、
CGI にも影響を与えます。man ページや使用している OS
の FAQ で調べると良いでしょう。</p>
</section>
<section id="tips">
<title>以上の問題を解決する方法</title>
<ul>
<li>
<directive module="core">VirtualHost</directive>
で IP アドレスを使用する。
</li>
<li>
<directive module="mpm_common">Listen</directive>
で IP アドレスを使用する。
</li>
<li>
全てのバーチャルホストが明示的に
<directive module="core">ServerName</directive>
を持つようにする。
</li>
<li>何も応答しない
<code>&lt;VirtualHost _default_:*&gt;</code>
サーバを作る。</li>
</ul>
</section>
<section id="appendix">
<title>付録: 将来的な方向性</title>
<p>DNS に関して、現状は全く宜しくありません。Apache 1.2 で、
DNS のイベントが失敗しても少なくとも起動プロセスが続くようにしましたが、
これが最高の解決方法ではないでしょう。アドレスの再割り当てが必要不可避
となっている今日のインターネットにおいては、
設定ファイルの中で明示的な IP アドレスを要求する仕様は、
全く宜しくありません。</p>
<p>盗用のサービスアタックに関して行なうべき事は、
DNS 順引きを行なって得られたアドレスに対する DNS
逆引きを行なって、二つの名前を比較することです。
この二つが一致しなければバーチャルホストは無効になるようにします。
こうするためには逆引き DNS が適切に設定されている必要があります
(FTP サーバや TCP ラッパーのおかげで「二重逆引き」DNS は一般的に
なっていますので、管理者にはお馴染みものでしょう)。</p>
<p>IP アドレスが使用されていなくて DNS が失敗した場合は、
どうしてもバーチャルホストウェブサーバを信頼性を確保して
起動させることは不可能のようです。
設定の一部を無効にするというような部分的な解決では、
サーバが何をするようにするかにもよりますが、
そのサーバが起動しないより確実に悪い状況になるでしょう。</p>
<p>HTTP/1.1 が開発され、ブラウザやプロキシが <code>Host</code>
ヘッダを発行するようになったので、IP ベースのバーチャルホストを
全く使用しなくても済むようになるかもしれません。
この場合、ウェブサーバは設定中に DNS 参照をしなくても済みます。
しかし 1997 年 3 月時点の状況では、
商用レベルのウェブサーバで使用できるほどには、
これらの機能は広く開発が進んでいません。</p>
</section>
</manualpage>