Bir web sunucusunu ayağa kaldırmak kolay; onu saldırılara karşı dayanıklı hale getirmek asıl mesele. Yıllardır yönettiğim Linux sunucularda Apache sıkılaştırması her kurulumun standart adımı haline geldi. Bu yazıda, varsayılan kurulumdaki bir Apache’yi hem daha güvenli hem daha dayanıklı yapmak için uyguladığım temel ayarları paylaşıyorum.

Ayarların tamamı Apache yapılandırma dosyasında yapılıyor. Dosyanın yerini bilmiyorsanız:

1. Sürüm bilgisini gizleyin

Saldırganın ilk yaptığı şey keşiftir: sunucunuzun hangi yazılımın hangi sürümünü çalıştırdığını öğrenip bilinen açıkları dener. Apache’nin yanıt başlıklarında sürüm bilgisi vermesini kapatmak için:

Bu ikili sayesinde hata sayfalarında ve HTTP başlıklarında yalnızca “Apache” yazar; sürüm, işletim sistemi ve modül bilgisi sızmaz.

2. Timeout değerlerini sıkın

Varsayılan timeout değerleri oldukça cömert. Saldırı anında (özellikle slowloris tarzı yavaş isteklerde) düşük timeout, sunucunun kaynaklarını koruyacaktır:

3. KeepAlive dengesini kurun

Apache, TCP üzerinde çalışır. KeepAlive Off olursa her GET/POST isteği için üçlü el sıkışma yeniden yapılır ve bu kaynak israfıdır; bu yüzden açık olmalı. Ama sınırsız da bırakmamak gerekiyor, çünkü tek bağlantı üzerinden istek yağdıran saldırılara kapı açar. Dengeli bir ayar:

MaxKeepAliveRequests bağlantı başına istek sayısını sınırlar; KeepAliveTimeout ise boşta kalan bağlantının kaç saniye açık tutulacağını belirler. Yoğun sitelerde timeout’u 5 saniyeye kadar çekmek bağlantı havuzunu rahatlatıyor.

4. MPM ayarlarınızı tanıyın

Apache’nizin hangi çoklu süreç modülüyle (MPM) çalıştığını öğrenin:

Prefork: Her istek için ayrı süreç açar, her süreç tek thread kullanır. İstekler birbirinden yalıtıldığı için kararlıdır ama kaynak tüketimi yüksektir. Eski PHP kurulumlarının (mod_php) mecburiyetiydi.

Worker/Event: Süreç başına birden çok thread kullanır; daha az bellek tüketir ve daha hızlıdır. Günümüzde PHP-FPM ile birlikte Event MPM fiili standart; yeni kurulumda tercihiniz bu olmalı.

Parametrelerin mantığı şöyle: StartServers açılışta kaç child süreç oluşturulacağını, MinSpareThreads/MaxSpareThreads boşta hazır bekleyecek thread aralığını, MaxRequestWorkers ise aynı anda hizmet verilecek istek tavanını belirler. Tavana takılan istekler kuyruğa alınır. Değerleri sunucunuzun RAM’ine göre ayarlayın; bellek dolup swap’e düşen Apache, saldırı olmadan da kendini yıkar.

5. Dizin listelemeyi kapatın

Index dosyası olmayan bir klasöre gelen ziyaretçinin dosya listesini görmesi, bilgi sızıntısının klasiğidir. Kök ayarda kapatın:

Listelemenin gerektiği belirli bir dizin varsa sadece orayı açın:

6. PHP sıkılaştırması

Apache’yi sıkılaştırıp PHP’yi varsayılan bırakmak, kapıyı kilitleyip pencereyi açık bırakmaya benzer. php.ini tarafında dokunulması gereken başlıca ayarlar:

  • expose_php = Off: PHP sürümünün HTTP başlıklarında görünmesini engeller
  • display_errors = Off: Hata mesajları ziyaretçiye değil log’a yazılmalı; hatalar dosya yolları ve yapı bilgisi sızdırır
  • max_execution_time: Script’in çalışma süresi tavanı; uygulamanızın gerçek ihtiyacına göre olabildiğince kısa tutun
  • max_input_time: Girdi verisinin işlenmesi için maksimum süre
  • memory_limit: Script başına RAM tavanı; sunucu kapasitenize göre optimize edin
  • enable_dl = Off: Çalışma zamanında modül yüklenmesini kapatır
  • disable_functions: exec, shell_exec, system, passthru gibi tehlikeli fonksiyonları, uygulamanız kullanmıyorsa kapatın

Toparlayalım

Özet reçete: sürüm bilgisini gizle, timeout ve KeepAlive’ı dengele, MPM’i donanımına göre ayarla, dizin listelemeyi kapat, PHP’nin ağzını sıkı tut. Bunların üzerine ModSecurity gibi bir WAF ve düzenli güncelleme rutini eklerseniz, Apache’niz internetin gürültüsüne karşı gayet dayanıklı hale gelir.

Sunucu güvenliği ve Linux yönetimi üzerine diğer yazılarım Linux kategorisinde. Kendi sıkılaştırma rutininizde farklı neler var, yorumlarda konuşalım.

5
Sending
User Review
5 (1 vote)

Yorum Bırakın

Bu site istenmeyenleri azaltmak için Akismet kullanır. Yorum verilerinizin nasıl işlendiğini öğrenin.