Apache'de Mod_Evasive ile DDoS ve Brute Force Saldırılarına Karşı Temel Koruma 
Selam sistemciler!
Bugün, özellikle paylaşımlı hosting ortamlarında veya kendi sunucunuzda Apache çalıştırıyorsanız, başınızı ağrıtabilecek bir konuya değiniyoruz: DDoS ve Brute Force saldırıları. Bu tür saldırılar, sunucu kaynaklarınızı (CPU, RAM, bağlantı) tüketerek sitenizi erişilemez hale getirebilir veya güvenlik açıklarınızı zorlayarak sisteme sızmayı deneyebilir.
Neyse ki Apache'nin güçlü ve hafif bir modülü var: mod_evasive. Adından da anlaşılacağı gibi, "saldırıdan kaçınma" mantığıyla çalışır. Temel prensibi basit: Belirli bir zaman diliminde, aynı IP adresinden veya aynı siteye yapılan çok fazla isteği tespit eder ve bu IP'yi geçici olarak kara listeye alır. Böylece saldırganın kaynak tüketmesini engellerken, normal kullanıcılarınızın erişimini kesintiye uğratmaz.
Mod_Evasive Kurulumu (Debian/Ubuntu Örneği)
İlk adım, modülü sistemimize kurmak. APT paket yöneticisini kullanacağız.
Kurulum tamamlandığında, modül otomatik olarak etkinleştirilmelidir. Etkin olduğunu kontrol etmek için şu komutu kullanabilirsiniz:
Çıktıda `evasive20_module` (Apache 2.4 için) görmelisiniz. Eğer göremiyorsanız, manuel olarak etkinleştirebilirsiniz:
Yapılandırma Dosyasını Düzenleme
Modülün davranışını, konfigürasyon dosyasını düzenleyerek kontrol ederiz. Ana yapılandırma dosyası genellikle `/etc/apache2/mods-enabled/evasive.conf` yolundadır. Bu dosyayı favori metin düzenleyicinizle açalım (nano, vim).
Dosya içeriği aşağıdakine benzer olacaktır. Şimdi en önemli direktifleri açıklayalım ve örnek bir yapılandırma yapalım:
Direktif Açıklamaları:
Ayarları yaptıktan sonra Apache'yi yeniden başlatmayı unutmayın:
Logları İzleme ve Test Etme
Modül, engelleme olaylarını belirlediğiniz dizine (`/var/log/mod_evasive`) kaydeder. Bu dizin otomatik oluşturulmaz, o yüzden manuel oluşturup Apache'nin yazma izni vermemiz gerekir.
Artık test edebiliriz! Basit bir test için `ab` (Apache Bench) aracını veya bir bash döngüsü kullanabilirsiniz. Aşağıdaki komut, `ab` ile localhost'a hızlıca 100 istek atar (saniyede 10 istek ile). Limitlerimizi aşacaktır.
Komutu çalıştırdıktan sonra, log dizinini kontrol edin:
İçinde engellenen IP'lere ait dosyalar görmelisiniz (dosya adı IP adresi olacaktır). Ayrıca, test sırasında `ab` komutunun çıktısında "403 Forbidden" hataları da görebilirsiniz. Bu, mod_evasive'nin çalıştığının kanıtıdır!
Önemli Uyarılar ve İpuçları
Umarım bu rehber, Apache sunucunuzu biraz daha güvenli hale getirmenize yardımcı olur. Sizin `mod_evasive` veya benzeri koruma yöntemleriyle ilgili deneyimleriniz neler? Paylaşımlı hosting ortamlarında bu tür ayarları yapmakta zorluk yaşıyor musunuz? Yorumlarda buluşalım!

Selam sistemciler!
Neyse ki Apache'nin güçlü ve hafif bir modülü var: mod_evasive. Adından da anlaşılacağı gibi, "saldırıdan kaçınma" mantığıyla çalışır. Temel prensibi basit: Belirli bir zaman diliminde, aynı IP adresinden veya aynı siteye yapılan çok fazla isteği tespit eder ve bu IP'yi geçici olarak kara listeye alır. Böylece saldırganın kaynak tüketmesini engellerken, normal kullanıcılarınızın erişimini kesintiye uğratmaz.
Mod_Evasive Kurulumu (Debian/Ubuntu Örneği)
İlk adım, modülü sistemimize kurmak. APT paket yöneticisini kullanacağız.
Bash:
sudo apt update
sudo apt install libapache2-mod-evasive
Kurulum tamamlandığında, modül otomatik olarak etkinleştirilmelidir. Etkin olduğunu kontrol etmek için şu komutu kullanabilirsiniz:
Bash:
sudo apache2ctl -M | grep evasive
Çıktıda `evasive20_module` (Apache 2.4 için) görmelisiniz. Eğer göremiyorsanız, manuel olarak etkinleştirebilirsiniz:
Bash:
sudo a2enmod evasive
sudo systemctl restart apache2
Yapılandırma Dosyasını Düzenleme
Modülün davranışını, konfigürasyon dosyasını düzenleyerek kontrol ederiz. Ana yapılandırma dosyası genellikle `/etc/apache2/mods-enabled/evasive.conf` yolundadır. Bu dosyayı favori metin düzenleyicinizle açalım (nano, vim).
Bash:
sudo nano /etc/apache2/mods-enabled/evasive.conf
Dosya içeriği aşağıdakine benzer olacaktır. Şimdi en önemli direktifleri açıklayalım ve örnek bir yapılandırma yapalım:
Kod:
<IfModule mod_evasive20.c>
# Aynı IP'nin, aynı sayfaya saniyede kaç istek yapabileceğini belirler.
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
# E-posta bildirimi için (opsiyonel, postfix/sendmail kurulu olmalı)
# DOSEmailNotify you@yourdomain.com
# Engellenen IP'ler için bir sistem komutu çalıştırma (opsiyonel, örn: iptables ile engelleme)
# DOSSystemCommand "sudo /usr/bin/iptables -A INPUT -s %s -j DROP"
# Beyaz liste dosyası (engelleme yapılmayacak IP'ler)
DOSWhitelist 127.0.0.1
# Loglama seviyesi
DOSLogDir "/var/log/mod_evasive"
</IfModule>
Direktif Açıklamaları:
- DOSPageCount: Aynı IP'nin, DOSPageInterval saniyesi içinde aynı sayfaya (URI) yapabileceği maksimum istek sayısı. Örnekte 1 saniyede aynı sayfaya 2'den fazla istek yapılırsa şüpheli kabul edilir. Bu, Brute Force login saldırılarına karşı çok etkilidir.
- DOSSiteCount: Aynı IP'nin, DOSSiteInterval saniyesi içinde tüm siteye yapabileceği toplam istek sayısı. Örnekte 1 saniyede 50'den fazla toplam istek.
- DOSBlockingPeriod: Yukarıdaki limitler aşıldığında, o IP'nin kaç saniye boyunca engelleneceği. Örnekte 10 saniye.
- DOSEmailNotify: Bir IP engellendiğinde e-posta bildirimi almak isterseniz bu satırın başındaki `#` işaretini kaldırıp e-posta adresinizi yazın.
- DOSSystemCommand: Daha kalıcı bir engelleme için (örn: iptables firewall), bu satırın yorumunu kaldırıp bir komut tanımlayabilirsiniz. `%s` engellenen IP adresini temsil eder. **Dikkat:** Bu komutun `sudo` şifresiz çalışabilmesi için gerekli sudoers ayarlarını yapmalısınız, aksi halde çalışmaz.
- DOSWhitelist: Asla engellemek istemediğiniz IP'leri buraya ekleyin. Sunucunun kendi IP'si (127.0.0.1) ve belki monitoring araçlarınızın IP'si varsayılan olarak eklenmelidir.
Ayarları yaptıktan sonra Apache'yi yeniden başlatmayı unutmayın:
Bash:
sudo systemctl restart apache2
Logları İzleme ve Test Etme
Modül, engelleme olaylarını belirlediğiniz dizine (`/var/log/mod_evasive`) kaydeder. Bu dizin otomatik oluşturulmaz, o yüzden manuel oluşturup Apache'nin yazma izni vermemiz gerekir.
Bash:
sudo mkdir -p /var/log/mod_evasive
sudo chown www-data:www-data /var/log/mod_evasive
Artık test edebiliriz! Basit bir test için `ab` (Apache Bench) aracını veya bir bash döngüsü kullanabilirsiniz. Aşağıdaki komut, `ab` ile localhost'a hızlıca 100 istek atar (saniyede 10 istek ile). Limitlerimizi aşacaktır.
Bash:
ab -n 100 -c 10 http://localhost/
Komutu çalıştırdıktan sonra, log dizinini kontrol edin:
Bash:
sudo ls -la /var/log/mod_evasive/
İçinde engellenen IP'lere ait dosyalar görmelisiniz (dosya adı IP adresi olacaktır). Ayrıca, test sırasında `ab` komutunun çıktısında "403 Forbidden" hataları da görebilirsiniz. Bu, mod_evasive'nin çalıştığının kanıtıdır!
Önemli Uyarılar ve İpuçları
- Aşırı Hassas Ayarlardan Kaçının: `DOSPageCount` veya `DOSSiteCount` değerlerini çok düşük ayarlamak, özellikle CDN (Cloudflare, Sucuri) arkasındaysanız veya NAT arkasından çoklu kullanıcı erişimi olan bir IP'den (örneğin bir ofis ağı) gelen normal trafiği engelleyebilir. CDN kullanıyorsanız, gerçek kullanıcı IP'lerini Apache'ye doğru şekilde iletmek (`mod_remoteip`) ve CDN'nin IP aralıklarını beyaz listeye eklemek çok önemlidir.
- Log Dizini Temizliği: `mod_evasive` log dosyalarını otomatik temizlemez. Eski log dosyalarının birikip inode tüketmesini engellemek için bir `cron` işi oluşturmayı düşünebilirsiniz.
- Kapsamlı Bir Çözüm Değildir: `mod_evasive`, temel ve orta seviye saldırılar için harika bir ilk savunma hattıdır. Ancak büyük ölçekli DDoS saldırılarına karşı tek başına yeterli olmaz. Bu durumlarda donanım tabanlı firewall'lar, bulut tabanlı DDoS koruma hizmetleri ve yük dengeleyiciler devreye girmelidir.
- Test Ortamında Deneyin: Bu ayarları canlı, yüksek trafikli bir sunucuda hemen uygulamadan önce, bir test/staging ortamında deneyip, normal trafik akışınızı etkilemediğinden emin olun.
Umarım bu rehber, Apache sunucunuzu biraz daha güvenli hale getirmenize yardımcı olur. Sizin `mod_evasive` veya benzeri koruma yöntemleriyle ilgili deneyimleriniz neler? Paylaşımlı hosting ortamlarında bu tür ayarları yapmakta zorluk yaşıyor musunuz? Yorumlarda buluşalım!