Fail2ban Kurulumu: Sunucunuzu Otomatik Koruma Rehberi (2026)
Fail2ban ile SSH ve web servislerini brute-force denemelerine karşı otomatik koruyun. Adım adım kurulum, jails, log analizi ve doğrulama.
Fail2ban, sunucunuza yönelik tekrarlı başarısız denemeleri (özellikle brute-force) tespit edip ilgili IP’yi otomatik olarak engelleyen bir güvenlik aracıdır. Bu sayede saldırganın deneme sayısı arttıkça sunucu kaynaklarınız boşa harcanmaz ve loglarda “sürekli hata” yükü azalır. Bu rehberde 11.10.2026 tarihli pratik senaryolarla Fail2ban’ı Linux VDS/VPS sunucunuza kuracak, doğru jail (kural seti) seçecek, loglardan çalıştığını doğrulayacak ve en sık yapılan kurulum hatalarını düzelteceksiniz.
Aşağıdaki adımlar Debian/Ubuntu tabanlı sistemler için yazılmıştır; RHEL/CentOS türevlerinde paket adı ve servis komutları küçük farklarla ilerler.
Fail2ban neyi engeller, neyi engellemez?
Fail2ban’ın yaptığı iş “uygulama katmanı” seviyesindeki girişimlere göre hareket etmektir. Yani temel mantık şudur: - Belirli bir servisin (SSH, Apache, Nginx, Postfix vb.) loglarında belirli desenler aranır. - Aynı IP adresinden belirlenen sayıda başarısız deneme olursa Fail2ban o IP’yi banned durumuna alır. - Ban süresi (bantime) bitince otomatik olarak çözülür.
Bu yaklaşım şunlarda etkilidir: - SSH brute-force - Web sunucusunda sürekli 404/401/403 denemeleri (siteyi bulma veya kimlik deneme) - Bazı mail servislerinde tekrarlı yanlış girişler
Şunlarda tek başına yeterli değildir: - Aynı anda çok sayıda IP’den gelen “dağıtık” (DDoS) saldırılar - Zafiyet (exploit) üzerinden alınan sistemler - Yanlış parola politikası, güncelleme yapılmaması gibi temel güvenlik riskleri
Fail2ban’ı, güncel işletim sistemi + doğru firewall + güçlü parola/anahtar yönetimi ile birlikte kullanın.
Kurulum öncesi net kontrol listesi
Fail2ban kurulumundan önce şu 6 noktayı netleştirin. Bunlar yanlış jails yüzünden “Fail2ban çalışmıyor” şikayetlerinin çoğunu çözer.
1) Log kaynağı doğru mu?
Fail2ban jails, doğrudan log dosyalarına bakar. Örneğin SSH için genellikle /var/log/auth.log veya /var/log/secure kullanılır.
- Debian/Ubuntu: çoğunlukla /var/log/auth.log
- CentOS/RHEL: çoğunlukla /var/log/secure
Kontrol için:
- tail -n 200 /var/log/auth.log
2) Paket yöneticisi güncel mi?
sudo apt update
3) Sunucuda firewall var mı?
Fail2ban, IP engellemelerini iptables/nftables üzerinden uygular. Sunucunuzda UFW varsa Fail2ban genelde onunla uyumlu şekilde ayarlanabilir. UFW kullanmıyorsanız bile iptables/nftables hedefi önemlidir.
4) SSH kullanıyor musunuz?
Fail2ban SSH için en değerli sonuçları verir. Ancak yönetim paneli dışından SSH erişimi kapalıysa (sadece VPN’den SSH gibi) SSH jail gereksizleşebilir.
5) Portlar özelleştirildi mi?
SSH portu 22 değilse, jail ayarında portun geçtiği satırların hedefini doğru belirtin.
6) Fail2ban’ı “test modunda” çalıştırma
İlk kurulumda kısa süreli test edin; yanlış bir regex tüm IP’leri banlatabilir. Bu yüzden önce logları inceleyin.
Debian/Ubuntu’da Fail2ban kurulum adımları
1) Fail2ban paketini yükleyin
sudo apt updatesudo apt install -y fail2ban
2) Servisi başlatın ve etkinleştirin
sudo systemctl enable --now fail2ban
3) Durum kontrolü
sudo systemctl status fail2ban --no-pagersudo fail2ban-client status
Bu noktada paket kurulu ama hangi jails’in aktif olduğunu görmeniz gerekir.
4) Aktif jails listesini inceleyin
sudo fail2ban-client status
Ek olarak:
- sudo fail2ban-client status sshd
“ssh/sshd jail is not defined” gibi mesajlar görürseniz bir sonraki bölümde jail dosyalarını kontrol edin.
Jails mantığı: SSH ve web için doğru başlangıç seti
Fail2ban’ın ana çalışma birimi jail’dir. Jails, hangi log dosyasının taranacağını, hangi “fail” desenlerinin yakalanacağını ve ban davranışının nasıl olacağını belirler.
Tavsiye edilen başlangıç jails (pratik ve dengeli)
Aşağıdaki seti ilk kurulum için temel kabul edin. Sonra log yoğunluğunuza göre süreleri güncelleyin.
sshd(SSH brute-force)nginx-http-authveyanginx-badbots(web kimlik doğrulama/otomatik bot denemeleri)nginx-https-auth(TLS üzerinden aynı tür denemeler varsa)apache-auth(Apache Basic/Digest auth denemeleri)
Hangi sunucu yazılımını kullandığınıza göre sadece ilgili jails’i etkinleştirin.
Fail2ban config dosyaları (net dosya yolu)
Fail2ban yapılandırmasında genelde şunları görürsünüz:
- /etc/fail2ban/jail.conf (paket tarafından yönetilir; düzenlemeyin)
- /etc/fail2ban/jail.d/*.local veya *.conf (düzenlemeniz önerilir)
En doğru yaklaşım: Özelleştirmeyi /etc/fail2ban/jail.d/ altına koymak.
Örnek: SSH jail ayarı ile daha kontrollü banlama
İlk hedef: SSH denemelerinde hem agresif hem de “yanlış ban” riskini yönetmek.
1) Özel SSH jail dosyası oluşturun
sudo nano /etc/fail2ban/jail.d/sshd.local
İçeriğe şu mantıkla başlayın (portunuz 22 ise):
enabled = truemaxretry = 5findtime = 10mbantime = 1h
Örnek yapı (dağıtımınıza göre satır adları paket sürümüne göre değişebilir):
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
2) SSH portu farklıysa
SSH portu 2222 gibi farklı bir portsa:
- port = 2222
3) Fail2ban’ın SSH loglarını gerçekten gördüğünü doğrulayın
Önce şu komutla log akışını izleyin:
- sudo tail -F /var/log/auth.log
Ardından yeni bir terminalde Fail2ban durumunu kontrol edin:
- sudo fail2ban-client status sshd
Bu şekilde logların jailbreak davranışına doğru bağlandığını anlarsınız.
Web servislerinde (Nginx/Apache) jail seçimi: yanlış banı azaltın
Web tarafında jails’i seçerken iki şeyi dengeleyin: 1) Gerçek saldırı paternini yakalamak 2) Gerçek kullanıcı davranışını “fail”e çevirmemek
Nginx için sık başlangıç senaryosu
- Basic auth hataları
- Sürekli 401/403 denemeleri
- Bazı bot paternleri
Örnek: nginx-http-auth gibi jails, auth hatalarında çalışır. Site admin paneliniz Basic auth ile korunuyorsa değerlidir.
Apache için sık başlangıç senaryosu
- Basic auth
- Yanlış parola tekrarları
Apache tarafında “siteyi boşa düşürecek ban” istemiyorsanız maxretry değerini SSH’ye göre daha düşük riskli olacak şekilde ayarlayın (ör. 3-6 bandı gibi).
Ban/Unban davranışını netleştiren parametreler
Jail dosyalarında sık kullanılan parametreleri sayısal düşünün.
- maxretry: Belirlenen süre içinde kaç fail olursa ban
- findtime: fail sayımının yapıldığı zaman penceresi
- bantime: ban süresi
- ignoreip: Whitelist (ör. kendi statik IP’niz)
Net öneri aralığı (ilk kurulum için)
Aşağıdaki aralıklar, “hızlı koruma” ile “yanlış ban” riskini dengeler:
- SSH: maxretry = 5, findtime = 10m, bantime = 1h
- Web auth: maxretry = 3, findtime = 10m, bantime = 30m (login denemesi az sitelerde)
- Web bot paternleri: genelde bantime = 1h gibi daha uzun uygulanır
Kritik nokta: Deneme sayısı az ama uzun süreli saldırı varsa findtime uzatmak daha doğru sonuç verir; anlık çok sayıda deneme varsa maxretry düşürülebilir.
Fail2ban log doğrulama: “çalışıyor mu, çalışmıyor mu?” sorusunu bitirin
Kurulumdan sonra şu kontrol akışını uygulayın.
1) Fail2ban log seviyesini geçici artırın
/etc/fail2ban/jail.d/altına geçici ayar eklemek yerine servis loglarını izlemek yeterli olabilir.
Temel olarak şunları izleyin:
- sudo journalctl -u fail2ban --no-pager -n 200
2) Aktif ban listesini kontrol edin
sudo fail2ban-client statussudo fail2ban-client status sshd
Ek olarak, ban listesini sistem firewall tarafında da görmek istersiniz (iptables/nftables). Fail2ban’ın bulunduğu mekanizmayı değiştirmemek önemlidir.
3) Gerçek test: kontrollü bir başarısız deneme üretin
- Kendi test IP’nizden (yani
ignoreipiçinde olmayan) 4-6 kez başarısız deneme yapın. - Ardından
fail2ban-client status sshdçıktısında “Currently banned” artışını izleyin.
Not: Test sırasında üretimde kritik hesabı kullanmayın.
Yaygın kurulum hataları (Net çözümler)
Hata 1: Jail aktif değil
Belirti:
- fail2ban-client status çıktısında jail görünmüyor.
Çözüm:
- jail.d/*.local dosyasında enabled = true kontrol edin.
Hata 2: Yanlış log dosyası
Belirti: - Fail2ban çalışır ama ban oluşmaz.
Çözüm:
- Sunucunuzda SSH hatalarının hangi loga düştüğünü doğrulayın (auth.log vs secure).
- Gerekirse ilgili jail ayarında logpath değerini doğru loga çekin.
Hata 3: Whitelist (ignoreip) sorunları
Belirti: - İstediğiniz IP banlanmıyor.
Çözüm:
- ignoreip içine istemeden kendi IP’nizin eklendiğini kontrol edin.
Hata 4: Bantime çok kısa, saldırı devam ediyor
Belirti: - Ban geliyor ama çok çabuk bitiyor.
Çözüm:
- bantime değerini artırın (ör. 15m yerine 1h).
Hata 5: Aynı anda çok fail üretimi (yanlış regex/uygunsuz jail)
Belirti: - Normal kullanıcı trafiği “fail” gibi algılanıyor.
Çözüm:
- Web tarafında doğru jail’i seçin (auth vs bot). Yanlış bir jail yüzünden banlar çok genişliyorsa maxretry ve regex hedefini gözden geçirin.
İleri seviye: Fail2ban’ı kontrollü büyütün
Ban süresi + yeniden deneme toleransı ile denge kurun
Eğer saldırılar sürüyorsa “tek seferde maksimum etki” yerine kademeli etki tercih edilebilir. Bu, kullanıcı kilitlenmesi riskini azaltır.
Özel IP’leri yönetmek için ignoreip’i net kullanın
- Statik IP’nizi ekleyin
- VPN çıkış IP’niz değişiyorsa ignoreip ile kalıcı whitelist kurmayı standart hâle getirmeyin; yerine sadece yönetim IP’sini kullanın.
İlgili portları sadece gerekli servislerde açın
Fail2ban tek başına port güvenliği değildir. SSH’nin sadece gerekli ağlardan erişilebilir olması, brute-force riskini düşürür.
Sağlayıcıdan gelen uygulama saldırıları için karar matrisi
Aşağıdaki tablo, “hangi jail”in neye odaklandığını netleştirir:
| Jail | Tipik hedef | En çok işe yaradığı durum | Yanlış ban riski |
|---|---|---|---|
| sshd | Başarısız SSH oturum denemeleri | SSH açık sunucular | Düşük (genelde doğru log/regex ile) |
| nginx-http-auth / apache-auth | Basic/Digest auth başarısızlıkları | Admin panel auth ile korunuyorsa | Orta (login yapan kullanıcılar etkilenebilir) |
| nginx-https-auth | TLS üstünden auth denemeleri | HTTPS tarafında sürekli auth hatası | Orta |
| nginx-badbots (varsa) | Şüpheli bot/desenler | Yaygın otomatik istekleri azaltmak | Orta (siteye göre değişir) |
Sonuç: 30 dakikada uygulanabilir, ölçülebilir koruma planı
Bugün yapacağınız en net aksiyon planı şöyle:
1) Fail2ban’ı kurun (apt install -y fail2ban) ve servisi aktif edin.
2) sshd jail için maxretry, findtime, bantime değerlerini üretim trafiğinize uygun şekilde ayarlayın.
3) Nginx/Apache kullanıyorsanız web auth jails’iyle başlayın; bot jails’i tek başına geniş kapsamlı kullanmayın.
4) journalctl ve fail2ban-client status çıktılarıyla “ban geliyor mu?” sorusunu doğrulayın.
5) İlk gün yanlış ban/yan etki görürseniz ignoreip, findtime ve maxretry değerlerini güncelleyerek düzeltin.
Bu adımları uyguladığınızda Fail2ban, sunucunuzun otomatik savunma katmanını güçlendirir ve özellikle SSH tarafındaki brute-force denemelerinde somut, ölçülebilir bir azalma sağlar.
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
VPS’te Windows Server Kurulumu: Adım Adım Net Rehber
VPS üzerinde Windows Server kurulumunu UEFI, ağ, lisans, rol yükleme ve güvenlik adımlarıyla net şekilde öğrenin; pratik kontrol listesiyle.
WordPress yedekleme: UpdraftPlus mı sunucu yedeği mi?
WordPress’te yedek stratejisini netleştirin: UpdraftPlus (eklenti) ile sunucu yedeği farkları, restore testi, RPO/RTO ve doğru kombinasyon.
Robots.txt ve sitemap.xml: Hosting’de en iyi yerleşim rehberi
Robots.txt ve sitemap.xml dosyalarının doğru dizilimi, hosting’de etkili yerleşimi ve hataları düzeltme adımlarıyla SEO risklerini azaltın.
WordPress Hosting Seçerken 7 Kritik Faktör (Net Rehber)
WordPress hosting seçimi için CPU/RAM, SSD, önbellek, CDN, yedek, güncelleme, destek ve ölçeklenebilirliği 7 kritik faktörle net karşılaştır.
