Apache HTTP Sunucusu Sürüm 2.2

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ı kullanıcıların diğerlerine giden sayfaları çalma olasılığı dahil) saldırılarına açık hale gelebilir.
      <VirtualHost falan.fesmekan.dom>
      
        ServerAdmin filanca@fesmekan.dom 
        DocumentRoot /siteler/fesmekan
      
      </VirtualHost>
    
Apache’nin beklendiği gibi işlemesi için her sanal konak için iki
      veriye mutlaka ihtiyacı vardır: ServerName ve sunucunun bağlantı kabul edip hizmet
      sunacağı en az bir IP adresi. Yukarıdaki örnekte IP adresi
      bulunmamaktadır, dolayısıyla Apache, falan.fesmekan.dom
      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 yapılandırılmayacak (hApache 1.2
      öncesinde sunucu hiç başlatılmazdı) ve bu sanal konağa yapılan
      isteklere yanıt verilemeyecektir.
falan.fesmekan.dom’un 192.168.2.1 IP adresine sahip
      olduğunu varsayarsak yapılandırma şöyle olurdu:
      <VirtualHost 192.168.2.1> 
      
        ServerAdmin filanca@fesmekan.dom 
        DocumentRoot /siteler/fesmekan
      
      </VirtualHost>
    
Ancak, bu sefer de bu sanal konağın sunucu ismini öğrenmek için Apache’nin bir ters DNS sorgusu yapması gerekecektir. Eğer bu sorgu başarısız olursa kısmi bir yapılandırmaya gidilir (Apache 1.2 öncesinde sunucu hiç başlatılmazdı). 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 sunucu ismini içeren tam bir adres üretilmesini gerektiren bir durumda, sunucu geçerli bir adres üretemez.
Her iki sorunu da çözen yapılandırma şöyle olurdu:
      <VirtualHost 192.168.2.1> 
      
        ServerName falan.fesmekan.dom 
        ServerAdmin filanca@fesmekan.dom 
        DocumentRoot /siteler/fesmekan
      
      </VirtualHost>
    
Hizmet reddinin meydana gelebilecek (en az) iki türü vardır.
      Apache’nin 1.2 öncesi bir sürümünü kullanıyorsanız sanal
      konaklarınızdan herhangi biri için yukarıdaki iki sorgudan biri
      başarısız olursa sunucunuzu asla başlatamazsınız. Bazı durumlarda, DNS
      sorgularından alınacak yanıtlar sizin denetiminizde olmayabilir;
      örneğin fesmekan.dom müşterilerinizden birine aitse ve
      kendi DNS sunucuları varsa falan.fesmekan.dom kaydını
      silerek sunucunuzun hiç başlatılamamasına (1.2 öncesi) sebep
      olabilirler.
Diğer türü biraz daha sinsidir. Şöyle bir yapılandırmanız olsun:
      <VirtualHost falan.fesmekan.dom>
      
        ServerAdmin filanca@fesmekan.dom 
        DocumentRoot /siteler/fesmekan
      
      </VirtualHost>
      
      <VirtualHost misal.mesela.dom>
      
        ServerAdmin falanca@mesela.dom
        DocumentRoot /siteler/mesela
      
      </VirtualHost>
    
falan.fesmekan.dom’a 192.168.2.1,
      misal.mesela.dom’a 192.168.2.2 atadığınızı fakat,
      mesela.dom’un DNS kaydının sizin denetiminizde olmadığını
      varsayalım. Bu yapılandırmayla, mesela.dom’u
      fesmekan.dom’a giden tüm trafiği çalabilecek duruma
      getirirsiniz. Bunu gerçekleştirmek için DNS kaydında
      misal.mesela.dom’a 192.168.2.1 adresinin atanması
      yeterlidir. Kendi DNS’lerine sahip olduklarından dolayı
      misal.mesela.dom’a istedikleri IP adresini atamaktan
      onları alıkoyamazsınız.
192.168.2.1’e gelen isteklerin hepsine
      (http://falan.fesmekan.dom/biryer şeklinde yazılan
      adresler dahil) mesela.dom 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  bir belgemiz
      mevcuttur.
Apache 1.1’de isme dayalı sanal konak
      desteğine ek olarak, Apache’nin, httpd’nin
      çalıştığı makinenin IP adres(ler)ini de bilmeye ihtiyacı vardır. Bu
      adresi elde etmek için sunucu, ya sunucu genelinde geçerli ServerName yönergesine bakar ya da bir C
      işlevi olan gethostname’i kullanır (işlev, komut
      isteminden hostname 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.
Eğer bu sorgunun (DNS sunucusunun çökmüş olması gibi bir nedenle)
      başarısız olabileceğinden korkuyorsanız, makine ismini ve IP adresini
      /etc/hosts 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
      /etc/resolv.conf veya /etc/nsswitch.conf
      dosyasında bulunması gerekebilir.
Herhangi bir nedenle sunucunuz bir DNS sorgusu yapmıyorsa veya
      yapmamalıysa, Apache’yi HOSTRESORDER ortam değişkenine
      "local" 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 mod_env
      kullanmıyorsanız, CGI’ler de bundan etkilenir. En iyisi işletim
      sisteminizin SSS belgelerini ve kılavuz sayfalarını okumaktır.
VirtualHost yönergelerinizde
        IP adresleri kullanınız.Listen yönergelerinizde
        IP adresleri kullanınız.ServerName yönergesi olsun.<VirtualHost
        _default_:*> sanal konağınız olsun.DNS ile ilgili durum hiç de arzu edildiği gibi değildir. Apache 1.2 için, DNS sorguları başarısız olsa bile sunucunun başlatılabilmesini sağlamaya çalıştık, fakat belki yapabildiğimizden daha da iyisi mümkündür. Günümüz Genel Ağ’ında IP adresleri sık sık değiştiğinden yapılandırma dosyasına doğrudan IP adresini yazma gerekliliği asla arzu edilen davranış değildir.
Yukarıda nasıl yapıldığı açıklanan hizmet hırsızlığı saldırısına karşı önlem olarak, normal sorgudan dönen IP adresine bir ters DNS sorgusu yapıp bu iki sonucu karşılaştırmak ve eşleşmeme durumunda sanal konağı iptal etmek bir çözüm olabilir. Fakat bunun mümkün olabilmesi için uygun bir ters DNS kaydına ihtiyaç vardır. (FTP sunucuları ve TCP sarmalayıcılar tarafından yapılan çifte ters DNS sorgusu kullanımından dolayı çoğu ağ yöneticisi bu konuda zaten bilgi sahibidir.)
Her halükarda, IP adreslerinin kullanılmaması nedeniyle yapılan DNS sorgularının başarısız olması durumunda sanal konaklı bir sunucuyu düzgün bir şekilde başlatmak olası görünmektedir. Yapılandırmayı kısmen iptal etmek gibi kısmi çözümler, sunucudan beklentinizin ne olduğuna bağlı olarak sunucuyu hiç başlatmamaktan daha iyi olabilir.
HTTP/1.1’de belirtildiği gibi Host başlığını göndererek
      işlem yapabilen tarayıcılar ve vekiller IP’ye dayalı sanal konak
      kullanımını tamamen ortadan kaldırmanın mümkün olabileceğini
      göstermektedir. Bu durumda yapılandırmanın çözümlenmesi aşamasında DNS
      sorgusu yapma gereği kalmayacaktır. Fakat 1997 Mart’ından beri önemli
      sunucular üzerinde bunların yeterince geniş bir uygulama alanı
      bulmadığı görülmektedir.