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:
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:
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.
3. Adım: Ayarlarımızı Anlayalım



Ek Güvenlik Önlemleri
`mod_reqtimeout` tek başına güçlüdür, ancak savunmayı katmanlı hale getirmek her zaman iyidir:
Değişiklikleri Test Edin ve Uygulayın
Yapılandırma dosyasını kaydettikten sonra, sözdizimi hataları olmadığından emin olun:
Eğer "Syntax OK" görürseniz, Apache'yi yeniden başlatın:
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!
Selam sistemciler!
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
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.
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
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!