Fail2ban Kurulumu: Sunucunuzu Otomatik Koruyun (Net Rehber)
Fail2ban ile SSH ve web servislerini otomatik korumak için kurulumu, filtreleri, jail ayarlarını ve test adımlarını net şekilde görün.
Fail2ban, saldırı denemelerini gerçek zamanlı izleyip belirli sayıda başarısız denemeden sonra IP’leri otomatik engelleyen (banning) bir güvenlik aracıdır. Bu rehberde, Linux tabanlı bir VDS/VPS sunucuda Fail2ban kurulumundan başlayarak en sık kullanılan jail’leri (SSH, nginx/apache, Postfix vb.) net ayarlarla yapılandıracaksınız. Ayrıca yapılandırmayı doğrulamak için test planı ve günlük (log) kontrol adımları da var.
Amaç: “Kuruldu ama işe yarıyor mu?” sorusunu karşılaştırılabilir kanıtlarla kapatmak.
Fail2ban tam olarak ne yapar? (Kurulum öncesi net çerçeve)
Fail2ban; /var/log/* benzeri log dosyalarını izler, ön tanımlı veya kendi yazdığınız kurallara (regex/filter) göre eşleşme yakaladığında eylem (action) çalıştırır. Bu eylem çoğunlukla firewall üzerinden IP banlamak şeklindedir.
Banal ama kritik farklar
- Fail2ban log okur, canlı trafiği “otomatik engellemez”: Eşleşme sonrası ban tetiklenir.
- Jail = kural seti + hangi log + hangi eylem: Bir sunucuda birden fazla jail paralel çalışabilir.
- Engelleme süresi (bantime) ve “kaç denemede ban” (findtime/maxretry) saldırganın davranışına göre netleştirilmelidir.
Desteklenen senaryolar ve gereksinimler
Fail2ban genellikle Debian/Ubuntu ve CentOS/RHEL türevlerinde sorunsuz çalışır. Aşağıdaki paketler çoğu sistemde yeterlidir:
- Python tabanlı paket:
fail2ban - Loglar: Sisteminizin servis loglarını üretecek şekilde ayarlı olması
- Firewall: Fail2ban genelde
iptablesveyanftablesile uyumlu çalışır (sisteminize göre)
Log konumları neden önemlidir?
Fail2ban filtrelerinin doğru çalışması için log dosyası yolu doğru olmalıdır. Örneğin:
- SSH başarısız denemeleri çoğu sistemde /var/log/auth.log veya /var/log/secure içinde olur.
- nginx/Apache için web hata logları ilgili vhost bazlı dizinlerde olabilir.
Bu yüzden bir sonraki adımda log yolunu doğrulayacağız.
Adım adım Fail2ban kurulumu
Aşağıdaki komutlar dağıtıma göre değişir.
Ubuntu/Debian
1) Güncelleme:
- sudo apt update
2) Paket kurulumu:
- sudo apt install -y fail2ban
3) Servisi aktif etme:
- sudo systemctl enable --now fail2ban
CentOS/RHEL/AlmaLinux/Rocky
1) Paket kurulumu:
- sudo dnf install -y fail2ban (veya bazı sürümlerde yum)
2) Servisi aktif etme:
- sudo systemctl enable --now fail2ban
Hızlı durum kontrolü
sudo systemctl status fail2ban --no-pagersudo fail2ban-client status
Bu çıktılar, servisin ayağa kalktığını ve jail’lerin tanımlı olduğunu gösterir.
En pratik jail ayarları: SSH + web servisleri
Fail2ban kurulunca tek başına “her şeyi doğru yapar” demek doğru değildir. En azından SSH ve sunucuda çalıştırdığınız web sunucusu için jail’leri netleştirmek gerekir.
1) Varsayılan yapılandırmayı koruyup özelleştirin
Direkt /etc/fail2ban/jail.conf üzerinde oynamayın. Bunun yerine override yaklaşımını kullanın:
- sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ardından sadece jail.local içinde düzenleme yapın.
2) SSH jail (varsayılan ama net ayarlarla)
Aşağıdaki parametreler “otomatik koruma” hedefini doğrudan etkiler: - maxretry: kaç başarısız denemede ban - findtime: bu denemelerin ölçüldüğü pencere - bantime: IP’nin kaç saniye engelleneceği
/etc/fail2ban/jail.local içine (örnek):
enabled = trueport = sshmaxretry = 5findtime = 10mbantime = 1h
Ayrıca SSH’de kimlik doğrulama yanlışlarında hedef ülke/ülke değil, deneme sayısı üzerinden ölçüm yapılır. Bu ayar, brute-force girişimlerini “gereksiz uzatmadan” keser.
3) nginx veya Apache jail
Web servislerinde saldırılar çoğunlukla:
- çok sayıda 401/403
- sık denenen /wp-login.php veya benzeri endpoint’ler
- anormal 404/400 kombinasyonları
üzerinden tetiklenir.
Fail2ban filtreleri genelde hazır gelir. Örneğin nginx için nginx-http-auth, Apache için apache-auth gibi isimler kullanılabilir.
Net yaklaşım: 1) Sunucunuz hangi web sunucusunu çalıştırıyor belirleyin (nginx mi Apache mi). 2) İlgili logları doğrulayın. 3) Jail’i açın ve minumum banttime/maxretry ile başlayın.
Örnek mantık (değerleri kendinize göre net ayarlayın):
- maxretry = 6
- findtime = 10m
- bantime = 30m
Bu, normal bot trafiği ile gerçek saldırıyı karıştırma riskini azaltır.
4) Postfix (eğer mail sunucusu varsa)
Eğer Postfix gibi bir MTA kullanıyorsanız brute-force denemelerinde SMTP kaynaklı log eşleşmeleri oluşur. Fail2ban’ın mail odaklı jail’leri bu logları izler.
Buradaki net kural: - Mail trafiğinde yüksek hacimli meşru denemeleriniz varsa banttime’ı agresif artırmayın. - Önce test edin; yanlış pozitif (false positive) riskini azaltın.
Eylem (action) ve firewall uyumu: Ban gerçekten uygulanıyor mu?
Fail2ban’ın banı ne ile uyguladığı çok önemlidir. Birçok dağıtımda iptables uyumu vardır; modern sistemlerde nftables da olabilir.
Kurulumdan sonra kontrol listesi
- Fail2ban logu:
/var/log/fail2ban.log - Aktif jail durumu:
sudo fail2ban-client statussudo fail2ban-client status sshd- Banlanan IP’lerin görülmesi:
- nftables/iptables tabloları (sisteminize göre)
Önemli: Eğer fail2ban çalışıyor ama firewall’da kural oluşmuyorsa, action tarafında uyumsuzluk vardır. Bu durumda ban “sadece logda kalır”.
Yapılandırmayı test etme: “Çalışıyor mu?” kanıt planı
Kurulumun işe yaradığını görmek için kontrollü test yapın.
1) Fail2ban yeniden yükleyin
Yapılandırma dosyasını güncellediğinizde:
- sudo fail2ban-client reload
Ardından:
- sudo fail2ban-client status
2) SSH için gerçek başarısız deneme simülasyonu
- Bir süre boyunca yanlış kullanıcı/yanlış parola ile SSH denemesi yapın.
- Fail2ban logunda eşleşme satırlarını arayın.
Log kontrol komutu:
- sudo tail -n 200 /var/log/fail2ban.log
Eşleşme beklenen işaretler: - “Ban” tetiklendiğine dair satır - Hangi jail’in devreye girdiği
3) Ban süresinin dolduğunu doğrulayın
Ban süresini (bantime) 30-60 dk gibi test edilebilir seviyede ayarlayın. - Bant süresi dolunca IP’nin tekrar erişim alıp alamadığını doğrulayın.
Bu adım kritik çünkü bazen yanlış action nedeniyle kural kalkmaz.
Log ve dashboard kontrolü: Operasyonel bakım için net yol
Fail2ban “set and forget” gibi görünür; ancak operasyon için düzenli kontrol gerekir.
Fail2ban loglarını periyodik izleme
/var/log/fail2ban.log
Dikkat edilecek noktalar: - Sürekli “unknown filter” hataları (yanlış filter adı) - Log path eşleşmemesi (jail aktif ama hiç fail yakalanmaması) - Aşırı ban sayısı (yanlış pozitif veya saldırı büyüklüğü)
Gereksiz banları azaltma stratejisi
1) maxretry ve findtime dengesini kademeli ayarlayın.
2) nginx/apache jail’lerinde sadece doğrulanmış hata türlerini kullanın.
3) Meşru bot trafiği varsa ilgili endpoint’leri ayrı jail mantığıyla koruyun.
Sık hatalar ve net çözümleri
Hata 1: Jail çalışıyor ama hiçbir IP banlanmıyor
Muhtemel nedenler: - Yanlış log dosyası yolu - Fail2ban’a doğru filter eklenmemesi - Servisin log formatı farklı (dağıtım/konfig farkı)
Çözüm:
- Hangi logların geldiğini doğrulayın.
- Fail2ban jail’inde ilgili logpath veya filtreyi doğru seçin.
Hata 2: SSH’ye bağlanamıyorum, kendi IP’m de banlandı
Muhtemel neden:
- Kendi IP’niz test sırasında banlandı
- bantime çok uzun ayarlandı
Çözüm:
- Acil durumda ban’ı kaldırın (örnek: jail bazlı unban).
- Testleri kendi IP’nizden yaparken bantime’ı düşük tutun.
Hata 3: Firewall kuralları oluşmuyor
Muhtemel neden: - action tarafında sisteminizin firewall motoru ile uyumsuzluk
Çözüm:
- action ayarını sistem firewall’una göre netleştirin.
- nftables/iptables durumunu kontrol edin.
Sonuç: Otomatik koruma için doğru başlangıç planı
Fail2ban kurulumunu tek seferlik bir işlem gibi düşünmeyin. En doğru yol şu: (1) SSH jail’i net ayarlarla açın, (2) web servisiniz için ilgili jail’i doğru log üzerinden bağlayın, (3) yapılandırmayı fail2ban-client reload ile yeniden yükleyin, (4) kontrollü testle ban’ın loglandığını ve firewall’da gerçekten uygulandığını doğrulayın. Son olarak bant davranışını (maxretry/findtime/bantime) log sonuçlarına göre kademeli düzenleyin.
Aksiyona öneri: Bu rehberdeki sırayı uygulayıp ilk 24 saatte /var/log/fail2ban.log üzerinden hangi jail’lerin çalıştığını kontrol edin; ardından web endpoint’leri ve SSH için ban hassasiyetini tek tek netleştirerek kalıcı hale getirin.
Hosting karşılaştırması yapmaya hazır mısın?
100+ firmanın fiyatlarını tek tıkla karşılaştır, en uygun paketi bul.
Hosting Karşılaştır →İlgili Yazılar
Sunucu CPU %100: Sebepler ve Net Çözümler Rehberi (2026)
Sunucu CPU yüzde 100 olduğunda hangi süreçler suçludur? Net teşhis adımları, log kontrolleri ve kalıcı çözümlerle sistemi yeniden dengeleyin.
Network Throttling Nedir? Hosting Sağlayıcılar Neden Uygular?
Network throttling; aşırı yük veya kaynak paylaşımı nedeniyle hızın kısıtlanmasıdır. Hosting sağlayıcıların neden uyguladığını ve etkilerini net anlatıyoruz.
Küçük işletme için multi-cloud: Mantıklı mı, nasıl kurulur?
Multi-cloud küçük işletmede ne zaman mantıklıdır? Maliyet, yedekleme, taşıma ve güvenlik adımlarını net kriterlerle anlatıyoruz.
Sunucuda otomatik Image Optimization nasıl yapılır? (Net rehber)
Sunucuda otomatik image optimization için doğru pipeline: görsel dönüştürme, kalite ayarı, cache ve düşen TTFB/TTFB etkisi net adımlarla.
