]> granicus.if.org Git - apache/blob - docs/manual/dns-caveats.xml.ja
update transformation
[apache] / docs / manual / dns-caveats.xml.ja
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
4 <!-- English Revision: 507346:1174747 (outdated) -->
5
6 <!--
7  Licensed to the Apache Software Foundation (ASF) under one or more
8  contributor license agreements.  See the NOTICE file distributed with
9  this work for additional information regarding copyright ownership.
10  The ASF licenses this file to You under the Apache License, Version 2.0
11  (the "License"); you may not use this file except in compliance with
12  the License.  You may obtain a copy of the License at
13
14      http://www.apache.org/licenses/LICENSE-2.0
15
16  Unless required by applicable law or agreed to in writing, software
17  distributed under the License is distributed on an "AS IS" BASIS,
18  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  See the License for the specific language governing permissions and
20  limitations under the License.
21 -->
22
23 <manualpage metafile="dns-caveats.xml.meta">
24
25   <title>DNS と Apache にまつわる注意事項</title>
26
27   <summary>
28     <p>本文書の内容は次の一言に尽きます。「Apache が設定ファイルを読み込むときに
29     DNS を使用する必要がないようにして下さい」。Apache が設定ファイルを
30     読み込むときに DNS を使用する必要がある場合、信頼性の問題
31     (起動しないかもしれません) やサービス拒否や盗用アタック
32     (他のユーザからヒットを盗むことを含みます)
33     の問題に直面するかもしれません。</p>
34   </summary>
35
36   <section id="example">
37     <title>簡単な例</title>
38
39     <example>
40       &lt;VirtualHost www.abc.dom&gt; <br />
41       ServerAdmin webgirl@abc.dom <br />
42       DocumentRoot /www/abc <br />
43       &lt;/VirtualHost&gt;
44     </example>
45
46     <p>Apache が正常に機能するには、バーチャルホスト毎に必ず二つの
47     情報が必要になります。それは、
48     <directive module="core">ServerName</directive>
49     と、そのサーバが応答するための IP (最低一つ) です。
50     上記例では IP アドレスを含んでいませんので、Apache は DNS
51     を使用して <code>www.abc.dom</code> を見つけなければなりません。
52     何らかの理由で設定ファイルを読み込んでいるときに DNS 
53     が利用できなかった場合、
54     バーチャルホストは<strong>設定されません</strong>。
55     そして、そのバーチャルホストに対するヒットには応答がなされません
56     (Apache 1.2 以前では起動すらしません)。</p>
57
58     <p><code>www.abc.dom</code> のアドレスが 192.0.2.1
59     だとします。では、次の設定について考えてみましょう。</p>
60
61     <example>
62       &lt;VirtualHost 192.0.2.1&gt; <br />
63       ServerAdmin webgirl@abc.dom <br />
64       DocumentRoot /www/abc <br />
65       &lt;/VirtualHost&gt;
66     </example>
67
68     <p>現在のリリースでは Apache は DNS 逆引きを使用して
69     このバーチャルホストの <directive module="core">ServerName</directive>
70     を見つけます。
71     その逆引きが失敗した場合は部分的にバーチャルホストを無効にします
72     (Apache 1.2 より前では起動すらしません)。
73     バーチャルホストが名前ベースであれば完全に無効になりますが、
74     IP ベースであれば概ね動作します。しかしながら、サーバ名を
75     含む完全な URL を生成しなければならない場合は、正しい URL
76     の生成ができません。</p>
77
78     <p>次の例は上記の問題を解決しています。</p>
79
80     <example>
81       &lt;VirtualHost 192.0.2.1&gt; <br />
82       ServerName www.abc.dom <br />
83       ServerAdmin webgirl@abc.dom <br />
84       DocumentRoot /www/abc <br />
85       &lt;/VirtualHost&gt;
86     </example>
87   </section>
88
89   <section id="denial">
90     <title>サービス拒否</title>
91
92     <p>サービス拒否が起こる場合、(少なくとも) 二つのケースがあります。
93     Apache 1.2 より前を実行している場合、バーチャルホストのための
94     上記の二つの DNS 検索のうち一つ失敗すれば起動すらしません。
95     そしてこの DNS 検索が自分の制御下にすらない場合もありえます。
96     例えば、<code>abc.dom</code> が顧客のサーバの一つで、
97     DNS は顧客自身で管理している場合、単に
98     <code>www.abc.dom</code> レコードを削除するだけで、
99     (1.2 より前の) サーバを起動不能にすることができます。</p>
100
101     <p>もう一つのケースは、より気付きにくいものです。
102     次の設定について考えてみましょう。</p>
103
104     <example>
105       &lt;VirtualHost www.abc.dom&gt; <br />
106       <indent>
107         ServerAdmin webgirl@abc.dom <br />
108         DocumentRoot /www/abc <br />
109       </indent>
110       &lt;/VirtualHost&gt; <br />
111       <br />
112       &lt;VirtualHost www.def.dom&gt; <br />
113       <indent>
114         ServerAdmin webguy@def.dom <br />
115         DocumentRoot /www/def <br />
116       </indent>
117       &lt;/VirtualHost&gt;
118     </example>
119
120     <p>192.0.2.1 を <code>www.abc.dom</code> に、
121     192.0.2.2 を <code>www.def.dom</code> に割り当てているとします。
122     また、<code>def.dom</code> は顧客自身の DNS
123     の制御下にあるとします。この設定で、<code>abc.dom</code>
124     に向けられたトラフィック全てを奪うことができる位置に
125     <code>def.dom</code> を設置できています。後は単に 
126     <code>www.def.dom</code> が 192.0.2.1 を参照するように
127     設定するだけです。DNS は顧客側の DNS でコントロールされているので、
128     <code>www.def.dom</code> レコードが好きな場所を指すように
129     設定できてしまうのを止めさせることができません。</p>
130
131     <p>192.0.2.1 に対するリクエスト
132     (<code>http://www.abc.dom/whatever</code> 形式の URL 
133     を入力したユーザからのもの全てを含みます) 
134     は、<code>def.dom</code> バーチャルホストで応答されます。
135     このようなことが何故起こるかもっと良く知るためには、
136     応答の必要なバーチャルホストへのリクエストに対して、
137     Apache がどのように整合性を確保するかについて、
138     深い議論が必要になります。おおざっぱな説明は<a
139     href="vhosts/details.html">こちら</a>に記述されています。</p>
140   </section>
141
142   <section id="main">
143     <title>「主サーバ」アドレス</title>
144
145     <p>Apache 1.1 での <a href="vhost/name-based.html"
146     >名前ベースのバーチャルホストのサポート</a> 追加の際に、
147     Apache は <program>httpd</program> の実行されているホストの IP
148     アドレスを知る必要が出てきました。このアドレスを得るために、
149     (もしあれば) グローバルな
150     <directive module="core">ServerName</directive> を使用するか、
151     C 言語の関数 <code>gethostname</code> (コマンドプロンプトで
152     <code>hostname</code> とタイプしたときと同じものを返します)
153     を呼び出すかをします。
154     その後、得られたアドレスで DNS 検索を行ないます。
155     現在のところ、この DNS 検索を回避する方法はありません。</p>
156
157     <p>DNS サーバがダウンして、この検索ができない事態が起こることを
158     恐れているのであれば、<code>/etc/hosts</code>
159     にホスト名を記述しておくことができます
160     (マシンが正常に起動するように既に設定されているかもしれません)。
161     その場合、DNS 参照が失敗した場合にマシンが <code>/etc/hosts</code>
162     を使用するように設定していることを確認してください。
163     その方法は、どの OS を使用しているかに依存しますが、
164     <code>/etc/resolv.conf</code> か <code>/etc/nsswitch.conf</code>
165     を編集することで設定できます。</p>
166
167     <p>もし他の理由で DNS を利用する必要がない場合は、
168     <code>HOSTRESORDER</code> 環境変数を「 <code>local</code>
169     」に設定することでそのようにできます。以上これらの事柄は、どんな
170     OS 、レゾルバライブラリを使用しているかに依存します。また、
171     <module>mod_env</module> を使用して環境変数を制御しない限り、
172     CGI にも影響を与えます。man ページや使用している OS
173     の FAQ で調べると良いでしょう。</p>
174   </section>
175
176   <section id="tips">
177     <title>以上の問題を解決する方法</title>
178
179     <ul>
180       <li>
181         <directive module="core">VirtualHost</directive>
182         で IP アドレスを使用する。
183       </li>
184
185       <li>
186         <directive module="mpm_common">Listen</directive>
187         で IP アドレスを使用する。
188       </li>
189
190       <li>
191         全てのバーチャルホストが明示的に
192         <directive module="core">ServerName</directive>
193         を持つようにする。
194       </li>
195
196       <li>何も応答しない
197       <code>&lt;VirtualHost _default_:*&gt;</code>
198       サーバを作る。</li>
199     </ul>
200   </section>
201
202   <section id="appendix">
203     <title>付録: 将来的な方向性</title>
204
205     <p>DNS に関して、現状は全く宜しくありません。Apache 1.2 で、
206     DNS のイベントが失敗しても少なくとも起動プロセスが続くようにしましたが、
207     これが最高の解決方法ではないでしょう。アドレスの再割り当てが必要不可避
208     となっている今日のインターネットにおいては、
209     設定ファイルの中で明示的な IP アドレスを要求する仕様は、
210     全く宜しくありません。</p>
211
212     <p>盗用のサービスアタックに関して行なうべき事は、
213     DNS 順引きを行なって得られたアドレスに対する DNS 
214     逆引きを行なって、二つの名前を比較することです。
215     この二つが一致しなければバーチャルホストは無効になるようにします。
216     こうするためには逆引き DNS が適切に設定されている必要があります
217     (FTP サーバや TCP ラッパーのおかげで「二重逆引き」DNS は一般的に
218     なっていますので、管理者にはお馴染みものでしょう)。</p>
219
220     <p>IP アドレスが使用されていなくて DNS が失敗した場合は、
221     どうしてもバーチャルホストウェブサーバを信頼性を確保して
222     起動させることは不可能のようです。
223     設定の一部を無効にするというような部分的な解決では、
224     サーバが何をするようにするかにもよりますが、
225     そのサーバが起動しないより確実に悪い状況になるでしょう。</p>
226
227     <p>HTTP/1.1 が開発され、ブラウザやプロキシが <code>Host</code>
228     ヘッダを発行するようになったので、IP ベースのバーチャルホストを
229     全く使用しなくても済むようになるかもしれません。
230     この場合、ウェブサーバは設定中に DNS 参照をしなくても済みます。
231     しかし 1997 年 3 月時点の状況では、
232     商用レベルのウェブサーバで使用できるほどには、
233     これらの機能は広く開発が進んでいません。</p>
234   </section>
235 </manualpage>