Apache Web Sunucusunda Mod_Evasive ile DDoS ve Brute Force Saldırılarına Karşı Temel Koruma 
Selam sistemciler!
Bugün terminalin tozunu alıp, Apache sunucularımızı "kaba kuvvet" saldırılarına ve temel seviye DDoS girişimlerine karşı biraz daha güçlendireceğiz. Özellikle WordPress giriş sayfaları (`wp-login.php`), admin panelleri veya herkese açık API uç noktalarınız varsa, bu rehber tam size göre.
Mod_Evasive Nedir ve Ne İşe Yarar?
mod_evasive, Apache için geliştirilmiş, oldukça hafif ve etkili bir güvenlik modülüdür. Temel mantığı basit ama güçlüdür: Sunucunuza aynı IP adresinden, kısa süre içinde çok fazla istek geldiğinde, bu IP'yi geçici olarak "kara listeye" alır ve belirli bir süre boyunca isteklerini engeller. Bu, şunları önlemeye yardımcı olur:
Kurulum (Ubuntu/Debian)
Öncelikle, sistemimizi güncelleyelim ve modülü kuralım. Ubuntu/Debian tabanlı sistemlerde işlem oldukça basit:
Kurulum tamamlandığında, modül otomatik olarak etkinleştirilir. Apache servisini yeniden başlatalım:
Modülün yüklendiğini kontrol etmek için şu komutu kullanabilirsiniz:
Çıktıda `evasive20_module` (Apache 2.4 için) görmelisiniz.
Yapılandırma ve Temel Ayarlar
Modülün ana yapılandırma dosyası genellikle `/etc/apache2/mods-enabled/evasive.conf` konumundadır. Bu dosyayı düzenlemek için nano veya favori editörünüzü kullanabilirsiniz:
Varsayılan dosya içinde birçok ayar yorum satırı olarak (`#`) bulunur. İhtiyaçlarınıza göre bunları aktif hale getirebilirsiniz. İşte en kritik ve anlaşılır birkaç ayar:
Bu ayarları nasıl yorumlamalıyız?
Ayarları değiştirdikten sonra Apache'yi yeniden başlatmayı unutmayın:
Logları İzleme ve Test Etme
Modül, engellenen IP'leri belirttiğiniz `DOSLogDir` dizininde (örneğin `/var/log/mod_evasive`) kaydeder. Bu dizini ve log dosyalarını oluşturup izinlerini ayarlamalısınız:
Basit bir test yapmak için, komut satırından `ab` (Apache Bench) aracını veya basit bir bash döngüsünü kullanabilirsiniz. Dikkat: Bu testi kendi sunucunuza yapın ve canlı bir müşteri sitesine karşı yapmayın!
Eğer ayarlarınız çalışıyorsa, birkaç istekten sonra `403 Forbidden` yanıtı almaya başlamalısınız. Log dizinindeki dosyaları kontrol ederek engellenen IP'leri görebilirsiniz.
Önemli Uyarılar ve İpuçları
Umarım bu rehber, Apache sunucularınızın güvenlik duvarına ekstra bir tuğla olarak faydalı olur. Sizin mod_evasive için favori ayarlarınız veya karşılaştığınız ilginç senaryolar var mı? Paylaşmak ister misiniz? Aşağıdaki yorumlarda buluşalım!
Selam sistemciler!
Mod_Evasive Nedir ve Ne İşe Yarar?
mod_evasive, Apache için geliştirilmiş, oldukça hafif ve etkili bir güvenlik modülüdür. Temel mantığı basit ama güçlüdür: Sunucunuza aynı IP adresinden, kısa süre içinde çok fazla istek geldiğinde, bu IP'yi geçici olarak "kara listeye" alır ve belirli bir süre boyunca isteklerini engeller. Bu, şunları önlemeye yardımcı olur:
- Brute Force (Kaba Kuvvet) Saldırıları: Login sayfalarına saniyede onlarca kez deneme yapılması.
- Temel DDoS/Hız Sınırlama Aşımı Saldırıları: Belirli bir kaynaktan gelen, sunucuyu yormayı amaçlayan yoğun istekler.
- Kaynak Tüketimi: Aynı istemciden gelen ardışık isteklerle CPU/RAM tüketimini kontrol altına almak.
Kurulum (Ubuntu/Debian)
Öncelikle, sistemimizi güncelleyelim ve modülü kuralım. Ubuntu/Debian tabanlı sistemlerde işlem oldukça basit:
Bash:
sudo apt update
sudo apt install libapache2-mod-evasive
Kurulum tamamlandığında, modül otomatik olarak etkinleştirilir. Apache servisini yeniden başlatalım:
Bash:
sudo systemctl restart apache2
Modülün yüklendiğini kontrol etmek için şu komutu kullanabilirsiniz:
Bash:
sudo apache2ctl -M | grep evasive
Çıktıda `evasive20_module` (Apache 2.4 için) görmelisiniz.
Yapılandırma ve Temel Ayarlar
Modülün ana yapılandırma dosyası genellikle `/etc/apache2/mods-enabled/evasive.conf` konumundadır. Bu dosyayı düzenlemek için nano veya favori editörünüzü kullanabilirsiniz:
Bash:
sudo nano /etc/apache2/mods-enabled/evasive.conf
Varsayılan dosya içinde birçok ayar yorum satırı olarak (`#`) bulunur. İhtiyaçlarınıza göre bunları aktif hale getirebilirsiniz. İşte en kritik ve anlaşılır birkaç ayar:
Kod:
<IfModule mod_evasive20.c>
# Aynı IP'den, site başına saniyede kaç isteğe izin verileceği.
DOSPageCount 2
# Aynı IP'den, site başına bu sınır aşılırsa engelleme süresi (saniye).
DOSPageInterval 1
# Aynı IP'den, sunucu genelinde saniyede kaç isteğe izin verileceği.
DOSSiteCount 50
# Sunucu geneli sınır aşılırsa engelleme süresi (saniye).
DOSSiteInterval 1
# Engellenen IP'lerin listesini tutmak için geçici dosya yolu.
DOSHashTableSize 3097
DOSBlockingPeriod 10
# Engellendiğinde istemciye gönderilecek HTTP kodu (örn: 403 Forbidden).
DOSEmailNotify youradmin@email.com
#DOSSystemCommand "su -c 'iptables -A INPUT -s %s -j DROP'"
DOSLogDir "/var/log/mod_evasive"
</IfModule>
Bu ayarları nasıl yorumlamalıyız?
- `DOSPageCount 2` ve `DOSPageInterval 1`: Aynı IP, aynı sayfaya (`/wp-login.php` gibi) 1 saniye içinde 2'den fazla istek gönderirse, o IP engellenir. Bu, brute force için çok sıkı bir ayardır.
- `DOSSiteCount 50` ve `DOSSiteInterval 1`: Aynı IP, tüm siteye 1 saniyede 50'den fazla istek gönderirse (bir bot basit bir tarama yapıyorsa), engellenir.
- `DOSBlockingPeriod 10`: Engellenen bir IP, 10 saniye boyunca 403 Forbidden hatası alır.
- `DOSEmailNotify`: Bir IP engellendiğinde e-posta bildirimi gönderir. (Postfix veya sendmail gibi bir MTA kurulu olmalı).
- `DOSSystemCommand`: İsteğe bağlıdır. Bir IP engellendiğinde, otomatik olarak iptables firewall kuralı eklemek için kullanılabilir. Dikkatli kullanın! Yorum satırından çıkarmadan önce iyice test edin.
Ayarları değiştirdikten sonra Apache'yi yeniden başlatmayı unutmayın:
Bash:
sudo systemctl reload apache2
Logları İzleme ve Test Etme
Modül, engellenen IP'leri belirttiğiniz `DOSLogDir` dizininde (örneğin `/var/log/mod_evasive`) kaydeder. Bu dizini ve log dosyalarını oluşturup izinlerini ayarlamalısınız:
Bash:
sudo mkdir -p /var/log/mod_evasive
sudo chown www-data:www-data /var/log/mod_evasive
Basit bir test yapmak için, komut satırından `ab` (Apache Bench) aracını veya basit bir bash döngüsünü kullanabilirsiniz. Dikkat: Bu testi kendi sunucunuza yapın ve canlı bir müşteri sitesine karşı yapmayın!
Bash:
# Örnek: Aynı sayfaya hızlı ardışık istekler gönderelim.
for i in {1..5}; do curl -I http://siteniz.com/wp-login.php; done
Eğer ayarlarınız çalışıyorsa, birkaç istekten sonra `403 Forbidden` yanıtı almaya başlamalısınız. Log dizinindeki dosyaları kontrol ederek engellenen IP'leri görebilirsiniz.
Önemli Uyarılar ve İpuçları
- Bu modül, paylaşımlı proxy (CDN) arkasındaki sunucular için sorun yaratabilir. Cloudflare veya benzeri bir hizmet kullanıyorsanız, tüm gerçek IP'ler yerine Cloudflare'in IP'sini görürsünüz. Bu durumda, modülü Cloudflare'in IP blokları için `DOSPageCount` ve `DOSSiteCount` değerlerini yüksek tutacak şekilde veya özel yapılandırmalarla kullanmalısınız.
- Çok agresif ayarlar (örn: `DOSPageCount 1`), normal kullanıcıları da engelleyebilir. Sayfa yenileme yapan bir kullanıcı bile sorun yaşayabilir. Ayarları yavaş yavaş, trafiğinizi gözlemleyerek yapın.
- `mod_evasive`, tam teşekküllü bir DDoS koruma çözümü değildir. Büyük ölçekli saldırılara karşı donanımsal firewall'lar, bulut tabanlı DDoS koruma hizmetleri veya daha gelişmiş yazılımlar (fail2ban ile entegre) gerekebilir.
- Log dosyalarını düzenli olarak temizlemeyi veya log rotate yapılandırmasını unutmayın.
Umarım bu rehber, Apache sunucularınızın güvenlik duvarına ekstra bir tuğla olarak faydalı olur. Sizin mod_evasive için favori ayarlarınız veya karşılaştığınız ilginç senaryolar var mı? Paylaşmak ister misiniz? Aşağıdaki yorumlarda buluşalım!