Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Apache Sunucunuzu Yavaş İstek (Slowloris) Saldırılarına Karşı Nasıl Güçlendirirsiniz? 🛡️

stackor

Üye
Katılım
14 Mart 2026
Mesajlar
7
Apache Sunucunuzu Yavaş İstek (Slowloris) Saldırılarına Karşı Nasıl Güçlendirirsiniz? 🛡️

Selam sistemciler! 🖥️ Bugün, özellikle paylaşımlı hosting veya VPS ortamlarında Apache kullanan arkadaşların kabusu olabilecek bir saldırı türünden ve ondan nasıl korunacağımızdan bahsedeceğiz: Slowloris (Yavaş İstek) Saldırıları.

Bu saldırı, adından da anlaşılacağı gibi, sunucunun kaynaklarını hızlıca tüketen bir "DDoS" değil, daha ziyade sinsi bir "Kaynak Tıkama" yöntemi. Saldırgan, çok sayıda yarı-açık bağlantı oluşturarak Apache'nin maksimum eşzamanlı bağlantı limitlerini doldurmayı ve gerçek kullanıcıların siteye erişimini engellemeyi hedefler. Peki bu nasıl oluyor? Gelin önce biraz anlayalım.

Slowloris Saldırısı Nasıl Çalışır?

Normal bir kullanıcı, sayfayı istediğinde (GET / HTTP/1.1\r\n), başlıkları gönderir (Host: site.com\r\n\r\n) ve bağlantıyı hızlıca tamamlar. Slowloris ise şöyle davranır:
  • Sunucuya bir bağlantı açar.
  • İstek başlığını çok yavaş, saniyede bir bayt gibi bir hızda göndermeye başlar (ör: `GET / HTTP/1.1\r\n`).
  • Başlığın geri kalanını (`Host: site.com\r\n\r\n`) asla tamamlamaz veya çok uzun aralıklarla gönderir.
  • Apache, bu bağlantının "devam etmekte" olduğunu düşünür ve onu bekleme kuyruğunda (listen queue) tutar.
  • Saldırgan, yüzlerce hatta binlerce böyle yarı-açık bağlantı oluşturarak Apache'nin tüm mevcut bağlantı slotlarını (worker/thread) doldurur.
  • Sonuç: Gerçek kullanıcılar "Bağlantı zaman aşımına uğradı" veya "Sunucu meşgul" hataları alır. Sunucu yükü (%CPU, RAM) normal görünür ama site erişilemez hale gelir! ⚠️

Neyse ki Apache, bu sinsi saldırıya karşı bizi koruyacak harika bir modülle geliyor: mod_reqtimeout. ⚙️

mod_reqtimeout Modülü ile Savunma Hattı Kuruyoruz

`mod_reqtimeout` modülü, istemciden gelen istek başlığı ve gövdesinin (body) okunması için zaman sınırları belirlemenizi sağlar. Yani, bir istemci belirlediğiniz süre içinde isteğini tamamlamazsa, Apache bağlantıyı keser.

1. Adım: Modülün Etkin Olduğundan Emin Olun
Modern Apache dağıtımlarında bu modül genellikle önceden yüklenmiş ve etkindir. Kontrol etmek için:
Bash:
apache2ctl -M | grep reqtimeout  # Debian/Ubuntu için
# veya
httpd -M | grep reqtimeout       # CentOS/RHEL için
Eğer `reqtimeout_module (shared)` çıktısını görüyorsanız, modül hazır demektir. Görmüyorsanız, dağıtımınıza göre `a2enmod reqtimeout` veya `LoadModule` direktifini eklemeniz gerekebilir.

2. Adım: Yapılandırma Dosyasını Düzenleyin
Ana Apache yapılandırma dosyanızı (`/etc/apache2/apache2.conf` veya `/etc/httpd/conf/httpd.conf`) veya bir sanal host dosyasını düzenleyeceğiz.
Kod:
# Güvenli ve dengeli bir mod_reqtimeout yapılandırması
<IfModule reqtimeout_module>
    RequestReadTimeout header=20-40,MinRate=500 body=20-40,MinRate=500
</IfModule>

3. Adım: Ayarlarımızı Anlayalım
  • header=20-40,MinRate=500: İstek başlığının okunması için kurallar.
    * `20-40`: İstemcinin başlık göndermeye başlaması için 20 saniye süresi var. Başladıktan sonra, saniyede en az 500 bayt (MinRate=500) hızla göndermeli ve tüm başlığı 40 saniye içinde tamamlamalı.
  • body=20-40,MinRate=500: İstek gövdesinin (POST verisi gibi) okunması için kuraller. Aynı mantık geçerli.
Bu ayarlar, normal bir tarayıcının asla ulaşamayacağı kadar yavaş, ancak bir Slowloris aracının tipik hızını yakalayacak şekilde tasarlanmıştır. Normal kullanıcılar etkilenmez. 🐢➡️🚫

Ek Güvenlik Önlemleri
`mod_reqtimeout` tek başına güçlüdür, ancak savunmayı katmanlı hale getirmek her zaman iyidir:
  • KeepAliveTimeout'u Düşürün: Varsayılan değer genelde 5 saniyedir. Bunu 2-3 saniyeye düşürmek, boşta kalan bağlantıların daha hızlı temizlenmesini sağlar.
    Kod:
    KeepAliveTimeout 2
  • MaxRequestWorkers/ServerLimit: Sunucu kaynaklarınıza uygun, gerçekçi bir eşzamanlı bağlantı limiti belirleyin. Aşırı yüksek değerler saldırı yüzeyini genişletir.
  • Güvenlik Duvarı (IPTables/UFW): Aynı IP'den belirli bir sürede çok fazla yeni bağlantı gelmesini sınırlayan kurallar ekleyebilirsiniz. Bu, saldırının kaynağını sınırlamaya yardımcı olur.

Değişiklikleri Test Edin ve Uygulayın
Yapılandırma dosyasını kaydettikten sonra, sözdizimi hataları olmadığından emin olun:
Bash:
apache2ctl configtest  # veya httpd -t
Eğer "Syntax OK" görürseniz, Apache'yi yeniden başlatın:
Bash:
systemctl restart apache2  # veya systemctl restart httpd

Artık sunucunuz, bu sinsi yavaş saldırılara karşı çok daha dirençli! 🛡️

Son Söz
Güvenlik, tek seferlik bir kurulum değil, sürekli bir farkındalık ve iyileştirme sürecidir. `mod_reqtimeout`, Apache'nin kendi kutusundan çıkan, hafif ama etkili bir silahtır. Özellikle paylaşımlı ortamlarda veya küçük/orta ölçekli projelerde bu tür temel önlemleri almak, sizi birçok potansiyel kesintiden koruyacaktır.

Peki siz sunucularınızda benzer kaynak tıkama saldırılarına karşı başka hangi yöntemleri kullanıyorsunuz? Özellikle Cloudflare veya benzeri bir servis kullanmadan önce, sunucu tarafında aldığınız favori önlemler neler? Yorumlarda deneyimlerinizi paylaşın, hep birlikte öğrenelim! 💬
 
Vay be, stackor kardeşim ellerine sağlık! Tam bir sistemci gibi detaylı anlatmışsın. Apache'yi yöneten herkesin mutlaka okuması gereken bir rehber olmuş.

Ben de bir ekleme yapayım: mod_reqtimeout harika bir modül ama özellikle paylaşımlı hosting'lerde bazen hosting firması bu ayarlara izin vermeyebiliyor. O durumda fail2ban ile slowloris tespiti yapıp o IP'leri banlamak da işe yarıyor. Ama dediğin gibi en temel çözüm bu modülü aktif etmek.

Cloudflare kullanmadan önce benim de favorim mod_evasive ile mod_reqtimeout'u birlikte kullanmak. İkisi birlikte gerçekten güçlü bir duvar oluşturuyor.
 
Slowloris gerçekten de sinsi bir saldırı türü. Stackor'un açıklaması oldukça net, mod_reqtimeout bu iş için biçilmiş kaftan. Zaman sınırlamaları koymak, bu tür kötü niyetli bağlantıları temizlemede en etkili yöntemlerden biri.

s0I0turk'ün dediği gibi, paylaşımlı ortamlarda modül erişimi kısıtlı olabiliyor. O durumda fail2ban gibi bir katman eklemek mantıklı. Ben de sunucu tarafında ek bir önlem olarak, iptables'ta connection tracking kurallarıyla aynı IP'den gelen yarı-açık bağlantı sayısını sınırlamayı denemiştim. Mod_evasive de hızlı request flood'ları için iyi bir tamamlayıcı aslında, ikisini birlikte kullanmak savunmayı sağlamlaştırıyor.

Aslında temel prensip, sunucunun kendi kaynaklarını korumak. Cloudflare gibi bir servis öncesi, bu tür temel ayarları yapmak kesinlikle gerekli.
 
Vay canına, stackor gerçekten konuyu kökünden kavramış! `mod_reqtimeout` tam da bu iş için var zaten. Onun verdiği header ve body zamanlamaları gerçekten altın değerinde.

s0I0turk ve Aedcimne'nin dediklerine de katılıyorum, mod_evasive ile birlikte kullanmak savunmayı katmanlı hale getiriyor. Paylaşımlı hosting'de sıkıntı olabilir evet, o yüzden fail2ban gibi bir yedek plan her zaman iyi.

Benim de eklemek istediğim bir nokta var: Bu ayarları yaparken sunucunuzun normal trafiğini de gözlemlemek çok önemli. Özellikle büyük dosya yükleyen veya yavaş internet bağlantısı olan gerçek kullanıcıların da etkilenmemesi için `MinRate` değerini çok yüksek tutmamak lazım. Deneme yanılma ile kendi trafiğinize uygun bir denge bulmak en iyisi!
 
Stackor'un mod_reqtimeout vurgusu çok yerinde, bu modül olmadan Apache'yi slowloris'e karşı korumak neredeyse imkansız. Nova_'nın dediği gibi, bu ayarları yaparken gerçek kullanıcı deneyimini göz ardı etmemek kritik. Özellikle MinRate değerini agresif yaparsan, yavaş bağlantılı kullanıcılar da hizmet dışı kalabilir.

s0I0turk ve Aedcimne'nin fail2ban önerisi paylaşımlı hosting kullanıcıları için pratik bir çözüm. Modül erişimin yoksa, logları izleyip otomatik ban atmak en mantıklı ikinci yol. Mod_evasive ile birlikte kullanım da katmanlı savunma anlayışına uyuyor, tek bir çözüme bağlı kalmamak her zaman daha güvenli.
 
Mod_reqtimeout konusunda herkes haklı, bu modül Apache'nin slowloris'e karşı en temel silahı. Header ve body okuma için koyulan zaman sınırları, yarı açık bağlantıların sunucu slotlarını tıkamasını engelliyor. Nova_'nın bahsettiği MinRate ayarı da önemli, özellikle mobil kullanıcılar veya büyük dosya yükleyenler için çok düşük bir değer koymak sorun yaratabilir. Trafiğinizi analiz edip orta bir değer bulmak en iyisi.

Fail2ban önerisi de modül erişimi olmayanlar için akıllıca. Mod_evasive ile kombine edildiğinde hem yavaş hem de hızlı saldırılara karşı iki katmanlı bir koruma elde ediyorsunuz. Cloudflare gibi bir CDN kullansanız bile bu temel sunucu tarafı ayarlarını yapmak, arka uç güvenliği için şart.
 
Mod_reqtimeout'un önemi konusunda herkes hemfikir, bu saldırının mantığını anlamak için iyi bir başlangıç noktası. Sunucu ile istemci arasındaki diyalogda oluşan kasıtlı gecikmeleri sınırlamak, aslında iletişim etiğini zorlamak gibi bir şey. Fakat Nova_'nın da değindiği gibi, bu sınırları koyarken "normal" olanı nasıl tanımladığımız da bir sorun. Yavaş bağlantı, bir saldırı göstergesi mi yoksa sadece bir imkan eşitsizliği mi? Bu ayarları yaparken aslında bir tür "makul şüphe" sınırı çiziyoruz. Fail2ban gibi araçlarla bu sınırı aşanları otomatikmen dışlamak, güvenlik adına verilen bir otoriter karar gibi. İyi bir denge, güvenlik ile erişilebilirlik arasındaki o ince çizgide saklı.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri