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
|
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
<!-- English Revision: 1174747 -->
<!-- =====================================================
Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
Reviewed by: Orhan Berent <berent belgeler.org>
========================================================== -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manualpage metafile="dns-caveats.xml.meta">
<title>Apache HTTP Sunucusu ve DNS ile ilgili Konular</title>
<summary>
<p>Bu sayfanın konusu şöyle özetlenebilirdi: Yapılandırma dosyalarınızda
DNS sorguları yapılmasını gerektirecek ayarlamalardan kaçınınız. Eğer
yapılandırma dosyalarınızda DNS sorgusu yapılarak çözümlenebilecek
adresler bulunursa sunucunuz beklenmedik davranışlar (hiç
başlamayabilir) gösterebileceği gibi hizmet reddi veya hizmet
hırsızlığı (bazı sanal konakların diğerlerine giden sayfaları çalma
olasılığı dahil) saldırılarına açık hale gelebilir.</p>
</summary>
<section id="example">
<title>Basit Bir Örnek</title>
<example>
# Bu yetersiz bir yapılandırma örneğidir, sunucunuzda kullanmayın. <br />
<VirtualHost falan.fesmekan.dom>
<indent>
ServerAdmin filanca@fesmekan.dom <br />
DocumentRoot /siteler/fesmekan
</indent>
</VirtualHost>
</example>
<p>httpd’nin beklendiği gibi işlemesi için her sanal konak için iki
veriye mutlaka ihtiyacı vardır: <directive module="core"
>ServerName</directive> ve sunucunun bağlantı kabul edip hizmet
sunacağı en az bir IP adresi. Yukarıdaki örnekte IP adresi
bulunmamaktadır, dolayısıyla Apache, <code>falan.fesmekan.dom</code>
adresi için bir DNS sorgusu yapmak zorundadır. Eğer sunucu,
yapılandırma dosyasını çözümlediği sırada bir sebeple DNS sunucusuna
erişemezse bu sanal konak <em>yapılandırılmayacak</em> ve bu sanal konağa
yapılan isteklere yanıt verilemeyecektir.</p>
<p><code>falan.fesmekan.dom</code>’un 192.168.2.1 IP adresine sahip
olduğunu varsayarsak yapılandırma şöyle olurdu:</p>
<example>
# Bu yetersiz bir yapılandırma örneğidir, sunucunuzda kullanmayın. <br />
<VirtualHost 192.168.2.1> <br />
<indent>
ServerAdmin filanca@fesmekan.dom <br />
DocumentRoot /siteler/fesmekan
</indent>
</VirtualHost>
</example>
<p>Ancak, bu sefer de bu sanal konağın sunucu ismini öğrenmek için
httpd’nin bir ters DNS sorgusu yapması gerekecektir. Eğer bu sorgu
başarısız olursa kısmi bir yapılandırmaya gidilir.
Eğer sanal konak isme dayalı ise sanal konak
kısmen bile yapılandırılmaz. IP’ye dayalı sanal konaklar büyük oranda
çalışır, fakat (örneğin, bir Redirect varlığında olduğu gibi) sunucu ismini
içeren tam bir adres üretilmesini gerektiren bir durumda, sunucu geçerli
bir adres üretemez.</p>
<p>Her iki sorunu da çözen yapılandırma şöyle olurdu:</p>
<example>
<VirtualHost 192.168.2.1> <br />
<indent>
ServerName falan.fesmekan.dom <br />
ServerAdmin filanca@fesmekan.dom <br />
DocumentRoot /siteler/fesmekan
</indent>
</VirtualHost>
</example>
</section>
<section id="denial">
<title>Hizmet Reddi</title>
<p>Şöyle bir yapılandırmanız olsun:</p>
<example>
<VirtualHost falan.fesmekan.dom><br />
<indent>
ServerAdmin filanca@fesmekan.dom <br />
DocumentRoot /siteler/fesmekan
</indent>
</VirtualHost><br />
<br />
<VirtualHost misal.mesela.dom><br />
<indent>
ServerAdmin falanca@mesela.dom<br />
DocumentRoot /siteler/mesela<br />
</indent>
</VirtualHost>
</example>
<p><code>falan.fesmekan.dom</code>’a 192.168.2.1,
<code>misal.mesela.dom</code>’a 192.168.2.2 atadığınızı fakat,
<code>mesela.dom</code>’un DNS kaydının sizin denetiminizde olmadığını
varsayalım. Bu yapılandırmayla, <code>mesela.dom</code>’u
<code>fesmekan.dom</code>’a giden tüm trafiği çalabilecek duruma
getirirsiniz. Bunu gerçekleştirmek için DNS kaydında
<code>misal.mesela.dom</code>’a 192.168.2.1 adresinin atanması
yeterlidir. Kendi DNS’lerine sahip olduklarından dolayı
<code>misal.mesela.dom</code>’a istedikleri IP adresini atamaktan
onları alıkoyamazsınız.</p>
<p>192.168.2.1’e gelen isteklerin hepsine
(<code>http://falan.fesmekan.dom/biryer</code> şeklinde yazılan
adresler dahil) <code>mesela.dom</code> sanal konağınca hizmet
sunulacaktır. Apache’nin gelen istekleri sunduğu sanal konaklarla nasıl
eşleştirdiğini bilirseniz bunun sebebini kolayca anlarsınız. Bunu
kabataslak açıklayan <a href="vhosts/details.html">bir belgemiz
mevcuttur</a>.</p>
</section>
<section id="main">
<title>"Ana Sunucu" Adresi</title>
<p><a href="vhosts/name-based.html">İsme dayalı sanal konak
desteği</a>, httpd’nin çalıştığı makinenin IP adres(ler)ini de bilmesini
gerektirir. Bu adresi elde etmek için sunucu, ya sunucu genelinde geçerli
<directive module="core">ServerName</directive> yönergesine bakar ya da bir
C işlevi olan <code>gethostname</code>’i kullanır (işlev, komut
isteminden <code>hostname</code> komutuna dönen yanıtın aynısını
döndürür) ve ardından bu adresle ilgili olarak bir DNS sorgusu yapar.
Bu sorgudan kaçınmanın henüz bir yolu yoktur.</p>
<p>Eğer bu sorgunun (DNS sunucusunun çökmüş olması gibi bir nedenle)
başarısız olabileceğinden korkuyorsanız, makine ismini ve IP adresini
<code>/etc/hosts</code> dosyanıza yazabilirsiniz (Makinenizin düzgün
olarak açılabilmesi için zaten bu kaydı yapmış olmanız gerekir).
Kullandığınız işletim sistemine bağlı olarak bu kaydın
<code>/etc/resolv.conf</code> veya <code>/etc/nsswitch.conf</code>
dosyasında bulunması gerekebilir.</p>
<p>Herhangi bir nedenle sunucunuz bir DNS sorgusu yapmıyorsa veya
yapmamalıysa, httpd’yi <code>HOSTRESORDER</code> ortam değişkenine
"<code>local</code>" değerini atadıktan sonra çalıştırabilirsiniz. Bu
tamamen işletim sistemine ve kullandığınız çözümleyici kütüphanelere
bağlıdır. Ayrıca, ortamı denetlemek için <module>mod_env</module>
kullanmıyorsanız, CGI’ler de bundan etkilenir. En iyisi işletim
sisteminizin SSS belgelerini ve kılavuz sayfalarını okumaktır.</p>
</section>
<section id="tips">
<title>Bu Sorunlardan Kaçınmak için İpuçları</title>
<ul>
<li><directive module="core">VirtualHost</directive> yönergelerinizde
IP adresleri kullanınız.</li>
<li><directive module="mpm_common">Listen</directive> yönergelerinizde
IP adresleri kullanınız.</li>
<li>Tüm sanal konakların ayrı birer <directive module="core"
>ServerName</directive> yönergesi olsun.</li>
<li>Hiçbir sayfa sunulmayan bir <code><VirtualHost
_default_:*></code> sanal konağınız olsun.</li>
</ul>
</section>
</manualpage>
|