blob: 0e5607076be4a61eb756b3f31034b227a4db2ad9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>DNS と Apache にまつわる注意事項 - Apache HTTP サーバ</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="./images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p>
<p class="apache">Apache HTTP サーバ バージョン 2.3</p>
<img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="./">バージョン
2.3</a></div><div id="page-content"><div id="preamble"><h1>DNS と Apache にまつわる注意事項</h1>
<div class="toplang">
<p><span>言語: </span><a href="./en/dns-caveats.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="./fr/dns-caveats.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
<a href="./ja/dns-caveats.html" title="Japanese"> ja </a> |
<a href="./ko/dns-caveats.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/dns-caveats.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
<div class="outofdate">この日本語訳はすでに古くなっている可能性があります。
更新された内容を見るには英語版をご覧下さい。</div>
<p>本文書の内容は次の一言に尽きます。「Apache が設定ファイルを読み込むときに
DNS を使用する必要がないようにして下さい」。Apache が設定ファイルを
読み込むときに DNS を使用する必要がある場合、信頼性の問題
(起動しないかもしれません) やサービス拒否や盗用アタック
(他のユーザからヒットを盗むことを含みます)
の問題に直面するかもしれません。</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#example">簡単な例</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#denial">サービス拒否</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#main">「主サーバ」アドレス</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#tips">以上の問題を解決する方法</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#appendix">付録: 将来的な方向性</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="example" id="example">簡単な例</a></h2>
<div class="example"><p><code>
<VirtualHost www.abc.dom> <br />
ServerAdmin webgirl@abc.dom <br />
DocumentRoot /www/abc <br />
</VirtualHost>
</code></p></div>
<p>Apache が正常に機能するには、バーチャルホスト毎に必ず二つの
情報が必要になります。それは、
<code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
と、そのサーバが応答するための IP (最低一つ) です。
上記例では IP アドレスを含んでいませんので、Apache は DNS
を使用して <code>www.abc.dom</code> を見つけなければなりません。
何らかの理由で設定ファイルを読み込んでいるときに DNS
が利用できなかった場合、
バーチャルホストは<strong>設定されません</strong>。
そして、そのバーチャルホストに対するヒットには応答がなされません
(Apache 1.2 以前では起動すらしません)。</p>
<p><code>www.abc.dom</code> のアドレスが 192.0.2.1
だとします。では、次の設定について考えてみましょう。</p>
<div class="example"><p><code>
<VirtualHost 192.0.2.1> <br />
ServerAdmin webgirl@abc.dom <br />
DocumentRoot /www/abc <br />
</VirtualHost>
</code></p></div>
<p>現在のリリースでは Apache は DNS 逆引きを使用して
このバーチャルホストの <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
を見つけます。
その逆引きが失敗した場合は部分的にバーチャルホストを無効にします
(Apache 1.2 より前では起動すらしません)。
バーチャルホストが名前ベースであれば完全に無効になりますが、
IP ベースであれば概ね動作します。しかしながら、サーバ名を
含む完全な URL を生成しなければならない場合は、正しい URL
の生成ができません。</p>
<p>次の例は上記の問題を解決しています。</p>
<div class="example"><p><code>
<VirtualHost 192.0.2.1> <br />
ServerName www.abc.dom <br />
ServerAdmin webgirl@abc.dom <br />
DocumentRoot /www/abc <br />
</VirtualHost>
</code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="denial" id="denial">サービス拒否</a></h2>
<p>サービス拒否が起こる場合、(少なくとも) 二つのケースがあります。
Apache 1.2 より前を実行している場合、バーチャルホストのための
上記の二つの DNS 検索のうち一つ失敗すれば起動すらしません。
そしてこの DNS 検索が自分の制御下にすらない場合もありえます。
例えば、<code>abc.dom</code> が顧客のサーバの一つで、
DNS は顧客自身で管理している場合、単に
<code>www.abc.dom</code> レコードを削除するだけで、
(1.2 より前の) サーバを起動不能にすることができます。</p>
<p>もう一つのケースは、より気付きにくいものです。
次の設定について考えてみましょう。</p>
<div class="example"><p><code>
<VirtualHost www.abc.dom> <br />
<span class="indent">
ServerAdmin webgirl@abc.dom <br />
DocumentRoot /www/abc <br />
</span>
</VirtualHost> <br />
<br />
<VirtualHost www.def.dom> <br />
<span class="indent">
ServerAdmin webguy@def.dom <br />
DocumentRoot /www/def <br />
</span>
</VirtualHost>
</code></p></div>
<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>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="main" id="main">「主サーバ」アドレス</a></h2>
<p>Apache 1.1 での <a href="vhost/name-based.html">名前ベースのバーチャルホストのサポート</a> 追加の際に、
Apache は <code class="program"><a href="./programs/httpd.html">httpd</a></code> の実行されているホストの IP
アドレスを知る必要が出てきました。このアドレスを得るために、
(もしあれば) グローバルな
<code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> を使用するか、
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 、レゾルバライブラリを使用しているかに依存します。また、
<code class="module"><a href="./mod/mod_env.html">mod_env</a></code> を使用して環境変数を制御しない限り、
CGI にも影響を与えます。man ページや使用している OS
の FAQ で調べると良いでしょう。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="tips" id="tips">以上の問題を解決する方法</a></h2>
<ul>
<li>
<code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code>
で IP アドレスを使用する。
</li>
<li>
<code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
で IP アドレスを使用する。
</li>
<li>
全てのバーチャルホストが明示的に
<code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
を持つようにする。
</li>
<li>何も応答しない
<code><VirtualHost _default_:*></code>
サーバを作る。</li>
</ul>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="appendix" id="appendix">付録: 将来的な方向性</a></h2>
<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>
</div></div>
<div class="bottomlang">
<p><span>言語: </span><a href="./en/dns-caveats.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="./fr/dns-caveats.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
<a href="./ja/dns-caveats.html" title="Japanese"> ja </a> |
<a href="./ko/dns-caveats.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/dns-caveats.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div><div id="footer">
<p class="apache">Copyright 2010 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p></div>
</body></html>
|