Makale Başlıkları
Kısaca
Fail2ban, log dosyalarını izleyerek tekrarlayan başarısız giriş denemelerini yakalar ve saldırgan IP’leri güvenlik duvarı seviyesinde otomatik engeller. SSH, FTP, posta ve panel giriş ekranlarını kaba kuvvet saldırılarından korumak için en pratik ilk savunma katmanıdır. Doğru çalışması; jail.local dosyasını düzgün kurmaya, log yolunu ve firewall arka ucunu (iptables/nftables) doğru seçmeye ve kendi IP’nizi izin listesine almaya bağlıdır.
- Kurulum + örnek SSH jail ile 5 dakikada aktif koruma
- Tekrarlı saldırganlar için recidive ve artan ban süresi (
bantime.increment) - nftables, IPv6 ve panel sunucularında (cPanel/Plesk) dikkat edilmesi gerekenler
Fail2ban, sunucunuzu kaba kuvvet (brute-force) saldırılarına karşı koruyan, hafif ve etkili bir güvenlik aracıdır. Log dosyalarını sürekli izler; aynı IP’den gelen tekrarlayan başarısız giriş denemelerini tespit ettiğinde o IP’yi belirli bir süre güvenlik duvarıyla engeller (ban). Özellikle SSH, FTP ve web giriş sayfalarına yönelik otomatik saldırıları durdurmada vazgeçilmezdir. İnternete açık bir sunucunun SSH portuna, ilk dakikalardan itibaren dünyanın dört bir yanından otomatik bot taramaları düşer; Fail2ban bu gürültüyü sessize alarak hem güvenliği hem de log okunabilirliğini artırır. Bu rehberde Fail2ban’in kurulumunu, doğru yapılandırmasını ve ileri seviye senaryolarını adım adım anlatıyoruz.
Fail2ban, root erişiminiz olan bir VPS/sunucuda kurulur. Paylaşımlı hosting hesaplarında doğrudan kurulamaz; orada sistem yöneticisi tarafından sağlanan koruma katmanları devrededir.
Fail2ban Nasıl Çalışır?
Fail2ban iki kavram üzerine kuruludur: filter ve jail. Filter, log dosyasında neyin “başarısız deneme” sayılacağını tanımlayan bir desen (regex) kümesidir; jail ise hangi servisin izleneceğini, kaç denemeden sonra ve ne kadar süreyle ban uygulanacağını belirler. Örneğin SSH için “10 dakikada 3 başarısız denemeden sonra 1 saat ban” gibi bir kural tanımlarsınız.
Akış basittir: Fail2ban arka planda çalışan bir servis (fail2ban-server) olarak ilgili log dosyalarını takip eder. Bir IP, belirlenen findtime penceresi içinde maxretry sınırını aşan sayıda başarısız deneme yaparsa, Fail2ban firewall’a bir kural ekleyerek o IP’yi bantime süresince engeller. Süre dolduğunda kural otomatik kaldırılır. Yani Fail2ban bir antivirüs değil, bir davranış tabanlı erişim filtresidir: kötü amaçlı yazılımı taramaz, saldırganın tekrar tekrar kapıyı zorlamasını engeller.
Temel Parametreler
Yapılandırmanın belkemiğini birkaç parametre oluşturur. Bu dördünü anladığınızda Fail2ban’in tamamını yönetebilirsiniz:
| Parametre | Anlamı | Tipik Değer |
|---|---|---|
maxretry |
Ban tetiklenmeden önce izin verilen başarısız deneme sayısı | 3 – 5 |
findtime |
Bu denemelerin sayılacağı zaman penceresi (saniye) | 600 (10 dk) |
bantime |
IP’nin engelli kalacağı süre (saniye; -1 = kalıcı) | 3600 (1 saat) |
ignoreip |
Asla banlanmayacak güvenilir IP/ağlar (izin listesi) | kendi IP’niz |
Fail2ban Kurulumu
Fail2ban, tüm yaygın Linux dağıtımlarının depolarında bulunur. RHEL ailesinde (AlmaLinux, Rocky) paket EPEL deposunda yer aldığı için önce EPEL’i etkinleştirmeniz gerekir.
# Debian/Ubuntu sudo apt update && sudo apt install fail2ban # RHEL/Rocky/AlmaLinux (EPEL gerekir) sudo dnf install epel-release sudo dnf install fail2ban sudo systemctl enable --now fail2ban
Kurulumdan sonra servisin ayakta olduğunu doğrulayın:
sudo systemctl status fail2ban sudo fail2ban-client ping # cevap: Server replied: pong
jail.local ile Yapılandırma
Ana yapılandırma dosyası jail.conf asla doğrudan düzenlenmez (güncellemede üzerine yazılır). Bunun yerine /etc/fail2ban/jail.local oluşturulur. Fail2ban, bu iki dosyayı birleştirir ve .local içindeki değerler önceliklidir. Önce tüm jail’ler için geçerli olacak varsayılanları belirleyen bir [DEFAULT] bölümü, ardından SSH jail’ini örnekleyelim:
[DEFAULT] # Bu IP/aglar asla banlanmaz - kendi sabit IP nizi ekleyin ignoreip = 127.0.0.1/8 ::1 88.99.X.X bantime = 1h findtime = 10m maxretry = 5 [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 findtime = 600 bantime = 3600
Yeni bir terminal oturumunu kapatmadan değişiklikleri uygulayın; böylece bir hata yaparsanız mevcut oturumunuz açık kalır:
sudo systemctl restart fail2ban
Doğru Log Yolu (logpath)
Fail2ban’in en sık karşılaşılan “çalışmıyor” sorunu, yanlış logpath değeridir. Dağıtım ailesine göre kimlik doğrulama logu farklı yere yazılır:
| Dağıtım | SSH log yolu | Önerilen backend |
|---|---|---|
| Debian / Ubuntu | /var/log/auth.log |
auto veya systemd |
| AlmaLinux / Rocky / RHEL | /var/log/secure |
systemd |
| systemd-journald tabanlı | (dosya yok) | backend = systemd |
Modern dağıtımlarda log artık dosyaya değil yalnızca journald’a yazılabiliyor. Bu durumda logpath yerine ilgili jail’e backend = systemd ekleyin; Fail2ban logları doğrudan journal’dan okur.
Temel Komutlar
sudo fail2ban-client status # tum aktif jail ler sudo fail2ban-client status sshd # sshd jail detayi (banli IP ler) sudo fail2ban-client set sshd unbanip 1.2.3.4 # IP ban kaldir sudo fail2ban-client set sshd banip 5.6.7.8 # IP yi elle banla sudo fail2ban-client reload # yapilandirmayi yeniden yukle
status sshd çıktısında “Currently banned” ve “Total banned” sayaçlarını görürsünüz. Sayaçlar saatler içinde dolmaya başlıyorsa, Fail2ban beklendiği gibi çalışıyor demektir.
Tekrarlı Saldırganlar: recidive Jail ve Artan Ban Süresi
Sıradan bir bot, banlandıktan sonra çoğu zaman pes eder. Ama bazıları ban süresi dolar dolmaz geri döner. Bu inatçı IP’leri daha uzun, hatta kalıcı engellemek için iki güçlü mekanizma vardır.
recidive jail, Fail2ban’in kendi log dosyasını izler: Bir IP yeterince çok kez (örneğin birden fazla jail tarafından) banlanmışsa, recidive onu çok daha uzun süre engeller.
[recidive] enabled = true logpath = /var/log/fail2ban.log filter = recidive maxretry = 5 findtime = 1d bantime = 1w
Artan ban süresi ise daha şık bir yaklaşımdır: Aynı IP her geri dönüşünde ban süresi katlanarak büyür. [DEFAULT] bölümüne ekleyin:
bantime.increment = true bantime.factor = 2 bantime.maxtime = 60d
Bu ayarla ilk ban örneğin 1 saat olur; ikinci ihlalde 2 saat, sonra 4, 8… şeklinde tavan değere (60 gün) kadar büyür. Tek seferlik yanlış parola giren gerçek kullanıcıyı uzun süre cezalandırmazken, ısrarlı botları pratikte kalıcı olarak dışarıda tutar.
iptables, nftables ve IPv6
Fail2ban, IP’yi engellemek için bir banaction (yasaklama eylemi) kullanır ve arka planda bir firewall ister. Geçmişte varsayılan iptables’tı; 2022’den bu yana nftables tüm büyük dağıtımların standart firewall çatısıdır. Güncel Fail2ban sürümleri nftables’ı yerel olarak destekler.
nftables kullanmak için ilgili jail’de ya da [DEFAULT] içinde:
banaction = nftables-multiport banaction_allports = nftables-allports
| Backend | Ne zaman? | IPv6 |
|---|---|---|
iptables-multiport |
Eski/klasik kurulumlar; firewalld kapalı | otomatik ip6tables’a geçer |
nftables-multiport |
Modern dağıtımlar (önerilen) | tek kuralla iki aileyi yönetir |
firewalld / ufw |
Bu firewall’ları zaten kullanıyorsanız | backend desteğine bağlı |
IPv6 uyarısı: Sunucunuz IPv6’dan da erişilebilir durumdaysa, yalnızca IPv4 banlamak yarım koruma demektir. nftables backend’i tek kuralda hem IPv4 hem IPv6 aileleriyle çalışır. ignoreip satırına IPv6 loopback (::1) adresini ve varsa kendi IPv6 ön ekinizi eklemeyi unutmayın.
Panel Sunucularında (cPanel / Plesk) Dikkat Edilmesi Gerekenler
Yönetim panellerinin çoğu kendi koruma sistemiyle gelir; gereksiz çakışmayı önlemek için durumu bilmek önemlidir:
- cPanel + CSF/LFD: CSF’nin LFD bileşeni, Fail2ban’e çok benzer biçimde başarısız girişleri izleyip banlar. İkisini aynı SSH jail’i için birlikte çalıştırmak çakışmalara yol açabilir; genellikle birini seçmek en sağlıklısıdır.
- Plesk: Plesk, Fail2ban’i kendi arayüzüne entegre eder (“IP Adresi Engelleme” / Fail2ban). Bu durumda jail’leri komut satırından değil, panel üzerinden yönetmek tutarlılığı korur.
- Bulut güvenlik duvarı: Sağlayıcı tarafında ayrı bir ağ firewall’ı varsa, Fail2ban’in eklediği kuralların sunucu içi firewall’da geçerli olduğunu, ağ firewall’ından bağımsız çalıştığını unutmayın.
Alastyr sunucularında yönetimli sunucu hizmeti alıyorsanız, Imunify360 ve CageFS gibi çift WAF katmanları zaten arka planda saldırı yüzeyini daraltır; Fail2ban’i bunların üzerine ek bir SSH/servis koruması olarak konumlandırabilirsiniz.
İyi Uygulamalar ve Sık Yapılan Hatalar
logpathdoğru olmalı: Debian/Ubuntu’da/var/log/auth.log, RHEL ailesinde/var/log/secure(veyabackend = systemd).- Kendi IP’nizi yanlışlıkla banlamamak için
ignoreip = 127.0.0.1/8 ::1 KENDI_IPekleyin. Sabit IP’niz yoksa, en azından güvendiğiniz bir VPN/atlama sunucusu IP’sini ekleyin. bantime = -1kalıcı ban demektir; dikkatli kullanın; yanlış kuralla kendi erişiminizi kalıcı kesebilirsiniz.- CSF/LFD kullanıyorsanız, aynı SSH jail’i için ikisini birden çalıştırmak çakışabilir.
- SSH portunu standart 22 dışına almak tarama gürültüsünü ciddi azaltır; ancak port değiştirdiyseniz jail’de
portsatırını da güncelleyin. - Fail2ban bir antivirüs değildir. Güçlü parola, SSH anahtarı, güncel yazılım ve düzenli yedekle birlikte bir katman olarak düşünün.
Sıkça Sorulan Sorular
Fail2ban ücretsiz mi?
Evet, açık kaynaklı ve ücretsizdir. GPL lisansıyla dağıtılır; tüm yaygın Linux depolarından bedava kurabilirsiniz.
Fail2ban neyi korur?
SSH, FTP, posta sunucuları ve web/panel giriş sayfaları gibi servisleri brute-force (kaba kuvvet) saldırılarına karşı korur. Log dosyasına yazan hemen her servis için filter tanımlayarak izleyebilirsiniz.
Banlanan IP ne zaman açılır?
bantime süresi dolduğunda otomatik olarak açılır. Erken açmak isterseniz fail2ban-client set <jail> unbanip 1.2.3.4 komutunu kullanabilirsiniz.
jail.conf mu jail.local mı düzenlenir?
Daima jail.local düzenlenir. jail.conf paket güncellemelerinde üzerine yazılır; orada yaptığınız değişiklikler kaybolur.
SSH anahtarı kullanıyorken Fail2ban gerekir mi?
SSH anahtarı parolaya göre çok daha güçlü bir korumadır, ancak Fail2ban ek bir savunma katmanı sağlar: başarısız denemeleri keserek log gürültüsünü azaltır ve diğer servisleri (FTP, posta, panel) de korur.
Yanlışlıkla kendi IP’mi banlarsam ne yaparım?
Sunucuya başka bir IP’den (örneğin sağlayıcının konsolu, VPN veya farklı bir ağ) erişip unbanip ile banı kaldırın. Bunu baştan önlemek için kendi sabit IP’nizi ignoreip listesine ekleyin.
Fail2ban nftables ile çalışır mı?
Evet. Güncel sürümler nftables’ı yerel olarak destekler; banaction = nftables-multiport ayarıyla modern dağıtımlarda hem IPv4 hem IPv6 trafiğini tek kuralla engelleyebilirsiniz.
Tekrar tekrar dönen IP’leri nasıl kalıcı engellerim?
İki yöntem var: recidive jail ile çok kez banlanan IP’leri uzun süre engelleyebilir, ya da bantime.increment = true ile her tekrar ihlalde ban süresini katlayarak büyütebilirsiniz.
cPanel sunucumda Fail2ban kurabilir miyim?
Kurabilirsiniz, fakat cPanel genellikle CSF/LFD ile gelir ve bu da benzer işi yapar. Aynı servis için ikisini birden çalıştırmak çakışabileceğinden, çoğu yöneticinin tercihi tek bir araçta karar kılmaktır.
Güvenli Sunucu Altyapısı
Fail2ban ve diğer güvenlik araçlarını özgürce kurabileceğiniz root erişimli VPS ve sunucu çözümleri; İzmir’deki kendi veri merkezimizde, Imunify360 ve anti-DDoS koruması ile.





