Nginx ile Fail2ban Entegrasyonu: Otomatik IP Engelleme Rehberi 
Selam sistemciler!
Bugün, özellikle Nginx kullanan sunucularımızı brute-force saldırılarına, tarama botlarına ve kötü niyetli isteklere karşı nasıl otomatik bir koruma kalkanıyla donatabileceğimizi konuşacağız. El ile IP engellemek tarih oldu, hadi Fail2ban ile işleri otomatikleştirelim.
Fail2ban Nedir ve Neden Önemli?
Fail2ban, temelde bir "hücre gardiyanı" gibi çalışır.
Sunucunuzdaki log dosyalarını (Nginx, SSH, FTP vs.) sürekli tarar. Önceden tanımladığınız kurallara (örneğin, 5 dakikada 404 hatası için 10 başarısız deneme) uyan IP adreslerini otomatik olarak tespit eder ve bu IP'leri sistem firewall'ınızda (iptables veya firewalld) belirli bir süreliğine engeller. Bu sayede:
Adım 1: Fail2ban'ı Kuruyoruz
Öncelikle, paket listemizi güncelleyip Fail2ban'ı kuralım. Ben örnekleri Ubuntu/Debian üzerinden vereceğim.
Kurulum tamamlandığında servisi başlatalım ve sistem açılışında otomatik başlamasını sağlayalım.
Adım 2: Nginx için Özel Bir "Jail" (Hapishane) Oluşturuyoruz
Fail2ban yapılandırması "jail" dosyaları üzerinden yönetilir. Önce varsayılan yapılandırma dosyasının bir kopyasını oluşturalım (orijinal dosyayı bozmamak için).
Şimdi, Nginx'e özel kurallarımızı tanımlayacağımız bir filtre ve jail oluşturacağız. İlk olarak, Nginx'in 404 (Bulunamadı) hatalarını tarayacak bir filtre oluşturalım. Bu, genellikle dosya/dizin tarama yapan botları yakalamak için etkilidir.
Açılan dosyaya aşağıdaki içeriği yapıştırın:
Bu regex kuralı, Nginx access log'unda 404 durum kodu döndüren GET isteklerini yakalar. `Ctrl+X`, `Y`, `Enter` ile kaydedip çıkın.
Şimdi, bu filtreyi kullanacak jail'i `jail.local` dosyamıza ekleyelim.
Dosyanın en altına aşağıdaki bölümü ekleyin:
Parametrelerin Anlamı:
Adım 3: Fail2ban Servisini Yeniden Başlatıyoruz
Yapılandırma değişikliklerinin etkili olması için servisi yeniden başlatalım.
Durumu kontrol edelim:
Adım 4: Test ve Monitor Etme
Fail2ban'ın çalışıp çalışmadığını ve hangi IP'leri engellediğini aşağıdaki komutlarla takip edebilirsiniz.
Şu anda aktif olan jail'leri ve engellenen IP sayılarını görmek için:
Belirli bir jail (örneğin `nginx-404`) için engellenen IP'leri listelemek için:
Eğer bir IP'yi manuel olarak engellemek veya engelini kaldırmak isterseniz:
Ekstra İpuçları ve Gelişmiş Konfigürasyon
1. Nginx Rate Limiting ile Birlikte Kullanın: Fail2ban reaktiftir (saldırı olduktan sonra engeller). Nginx'te `limit_req` modülü ile proaktif istek sınırlaması yaparsanız, Fail2ban'ın iş yükü azalır ve koruma katmanınız güçlenir.
2. Özel Saldırı Desenleri: `failregex` kısmını, özel zararlı User-Agent'ları veya belirli URI desenlerini (ör. `wp-admin`, `xmlrpc.php` taramaları) yakalayacak şekilde genişletebilirsiniz.
3. E-posta Bildirimi: `jail.local` dosyasında `destemail` ve `action` ayarlarını yaparak, bir IP engellendiğinde size e-posta bildirimi göndermesini sağlayabilirsiniz.
4. Logrotate Dikkati: Nginx loglarınız `logrotate` ile döndürülüyorsa, Fail2ban'ın log dosyasını takip etmeye devam etmesi için `sudo fail2ban-client reload` komutunu `logrotate` konfigürasyonunuza eklemeyi düşünebilirsiniz.
Umarım bu rehber, Nginx sunucunuzun güvenliğini bir üst seviyeye taşımanıza yardımcı olur.
Fail2ban kurulumunuzda takıldığınız bir nokta oldu mu? Veya sizin "olmazsa olmaz" dediğiniz özel Fail2ban filtre kurallarınız var mı? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim! 
Selam sistemciler!
Fail2ban Nedir ve Neden Önemli?
Fail2ban, temelde bir "hücre gardiyanı" gibi çalışır.
- Brute-force saldırılarına karşı proaktif koruma sağlarsınız.
- Sunucu loglarınız gereksiz isteklerle dolmaz.
- Sistem kaynaklarınız (CPU, RAM) daha verimli kullanılır.
- Manuel müdahaleye gerek kalmaz, her şey otomatik yürür.
Adım 1: Fail2ban'ı Kuruyoruz
Öncelikle, paket listemizi güncelleyip Fail2ban'ı kuralım. Ben örnekleri Ubuntu/Debian üzerinden vereceğim.
Bash:
sudo apt update
sudo apt install fail2ban -y
Kurulum tamamlandığında servisi başlatalım ve sistem açılışında otomatik başlamasını sağlayalım.
Bash:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Adım 2: Nginx için Özel Bir "Jail" (Hapishane) Oluşturuyoruz
Fail2ban yapılandırması "jail" dosyaları üzerinden yönetilir. Önce varsayılan yapılandırma dosyasının bir kopyasını oluşturalım (orijinal dosyayı bozmamak için).
Bash:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Şimdi, Nginx'e özel kurallarımızı tanımlayacağımız bir filtre ve jail oluşturacağız. İlk olarak, Nginx'in 404 (Bulunamadı) hatalarını tarayacak bir filtre oluşturalım. Bu, genellikle dosya/dizin tarama yapan botları yakalamak için etkilidir.
Bash:
sudo nano /etc/fail2ban/filter.d/nginx-404.conf
Açılan dosyaya aşağıdaki içeriği yapıştırın:
NGINX:
[Definition]
failregex = ^<HOST> -.*GET.*HTTP.*" 404 .*$
ignoreregex =
Bu regex kuralı, Nginx access log'unda 404 durum kodu döndüren GET isteklerini yakalar. `Ctrl+X`, `Y`, `Enter` ile kaydedip çıkın.
Şimdi, bu filtreyi kullanacak jail'i `jail.local` dosyamıza ekleyelim.
Bash:
sudo nano /etc/fail2ban/jail.local
Dosyanın en altına aşağıdaki bölümü ekleyin:
Bash:
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 300
bantime = 3600
action = %(action_)s
Parametrelerin Anlamı:
- maxretry=10: 5 dakika içinde maksimum 10 başarısız deneme.
- findtime=300: Bu denemeleri kontrol edeceği süre (5 dakika = 300 saniye).
- bantime=3600: Yakalanan IP'yi 1 saat (3600 saniye) boyunca engelle.
- logpath: Nginx access log'unuzun yolu. Log yolunuz farklıysa (ör. `/var/log/nginx/access.log`) düzenlemeyi unutmayın.
Adım 3: Fail2ban Servisini Yeniden Başlatıyoruz
Yapılandırma değişikliklerinin etkili olması için servisi yeniden başlatalım.
Bash:
sudo systemctl restart fail2ban
Durumu kontrol edelim:
Bash:
sudo systemctl status fail2ban
Adım 4: Test ve Monitor Etme
Fail2ban'ın çalışıp çalışmadığını ve hangi IP'leri engellediğini aşağıdaki komutlarla takip edebilirsiniz.
Şu anda aktif olan jail'leri ve engellenen IP sayılarını görmek için:
Bash:
sudo fail2ban-client status
Belirli bir jail (örneğin `nginx-404`) için engellenen IP'leri listelemek için:
Bash:
sudo fail2ban-client status nginx-404
Eğer bir IP'yi manuel olarak engellemek veya engelini kaldırmak isterseniz:
Bash:
# IP Engelleme
sudo fail2ban-client set nginx-404 banip 123.123.123.123
# IP Engelini Kaldırma
sudo fail2ban-client set nginx-404 unbanip 123.123.123.123
Ekstra İpuçları ve Gelişmiş Konfigürasyon
1. Nginx Rate Limiting ile Birlikte Kullanın: Fail2ban reaktiftir (saldırı olduktan sonra engeller). Nginx'te `limit_req` modülü ile proaktif istek sınırlaması yaparsanız, Fail2ban'ın iş yükü azalır ve koruma katmanınız güçlenir.
2. Özel Saldırı Desenleri: `failregex` kısmını, özel zararlı User-Agent'ları veya belirli URI desenlerini (ör. `wp-admin`, `xmlrpc.php` taramaları) yakalayacak şekilde genişletebilirsiniz.
3. E-posta Bildirimi: `jail.local` dosyasında `destemail` ve `action` ayarlarını yaparak, bir IP engellendiğinde size e-posta bildirimi göndermesini sağlayabilirsiniz.
4. Logrotate Dikkati: Nginx loglarınız `logrotate` ile döndürülüyorsa, Fail2ban'ın log dosyasını takip etmeye devam etmesi için `sudo fail2ban-client reload` komutunu `logrotate` konfigürasyonunuza eklemeyi düşünebilirsiniz.
Umarım bu rehber, Nginx sunucunuzun güvenliğini bir üst seviyeye taşımanıza yardımcı olur.