
Fail2ban, sunucu günlüklerini izleyerek tekrar tekrar hatalı giriş deneyen IP adreslerini otomatik olarak güvenlik duvarında engelleyen açık kaynaklı bir araçtır. İnternete açık bir Linux sunucunun SSH günlüğüne birkaç saat bakmanız, dünyanın dört bir yanından gelen sistematik parola denemelerini görmeniz için yeterlidir. Bu denemelerin çoğu basit botlardan gelir; ancak sürekli devam etmeleri hem günlükleri şişirir hem de zayıf bir parolanın er ya da geç bulunma riskini taşır. Bu rehberde Fail2ban ile brute force saldırılarını nasıl engelleyeceğinizi; Ubuntu 22.04/24.04 ve AlmaLinux 9 üzerinde kurulumu, SSH korumasını, yasak yönetimini ve web servisleri için ek korumaları adım adım anlatıyoruz.
Fail2ban Nasıl Çalışır?
Fail2ban'ın mantığı üç parçadan oluşur:
- Filtre (filter): Günlük satırlarında başarısız giriş denemelerini tanıyan düzenli ifadeler.
/etc/fail2ban/filter.d/altında bulunur. - Eylem (action): Bir IP engellenmesi gerektiğinde ne yapılacağı; genellikle iptables, nftables, UFW veya firewalld üzerinden kural eklemek.
/etc/fail2ban/action.d/altında bulunur. - Hapishane (jail): Bir filtreyi, izlenecek günlüğü, eylemi ve eşik değerlerini bir araya getiren tanım. Örneğin
sshdjail'i SSH günlüklerini izler.
Bir IP adresi findtime süresi içinde maxretry kadar hatalı deneme yaparsa bantime süresince engellenir. Süre dolduğunda yasak otomatik olarak kalkar.
Fail2ban Kurulumu
Ubuntu 22.04 / 24.04
sudo apt update
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
Ubuntu paketinde /etc/fail2ban/jail.d/defaults-debian.conf dosyası sshd jail'ini varsayılan olarak etkinleştirir; yani kurulumdan hemen sonra temel SSH koruması devrededir.
AlmaLinux 9
Fail2ban AlmaLinux'un ana depolarında yer almaz; EPEL deposundan kurulur. firewalld kullanan sistemlerde fail2ban-firewalld paketi, engellemelerin firewalld üzerinden yapılmasını sağlayan hazır ayarı ekler:
sudo dnf install -y epel-release
sudo dnf install -y fail2ban fail2ban-firewalld
sudo systemctl enable --now fail2ban
AlmaLinux'ta jail'ler varsayılan olarak etkin gelmez; aşağıdaki yapılandırmayı yapmanız gerekir.
Yapılandırma Dosyaları: jail.conf'u Değiştirmeyin
Ana ayar dosyası /etc/fail2ban/jail.conf'tur, ancak bu dosya paket güncellemelerinde değişebilir. Kendi ayarlarınızı her zaman .local uzantılı dosyalara yazın. Fail2ban dosyaları şu sırayla okur ve sonraki dosyadaki değer öncekini ezer:
/etc/fail2ban/jail.conf/etc/fail2ban/jail.d/*.conf(alfabetik sırayla)/etc/fail2ban/jail.local/etc/fail2ban/jail.d/*.local(alfabetik sırayla)
Bu sayede jail.local dosyasında yalnızca değiştirmek istediğiniz ayarları yazmanız yeterlidir.
SSH İçin Temel Jail Yapılandırması
/etc/fail2ban/jail.local dosyasını oluşturun:
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# Kendi sabit IP adresinizi ekleyin; asla engellenmez
ignoreip = 127.0.0.1/8 ::1 198.51.100.20
bantime = 1h
findtime = 10m
maxretry = 5
# Tekrar eden saldırganlarda yasak süresi katlanarak artar
bantime.increment = true
bantime.maxtime = 1w
[sshd]
enabled = true
port = ssh
# SSH'ı özel porta taşıdıysanız: port = 2222
port = ssh ifadesi 22 numaralı portu temsil eder. SSH portunu değiştirdiyseniz burada da yeni portu yazmalısınız; aksi halde yasak, saldırganın kullanmadığı bir porta uygulanır ve hiçbir işe yaramaz. Port değiştirme adımları için SSH portu değiştirme rehberimize bakabilirsiniz.
Fail2ban, dağıtıma göre doğru günlük dosyasını kendisi bilir: Ubuntu'da SSH kayıtları /var/log/auth.log, AlmaLinux'ta /var/log/secure dosyasına yazılır. Sisteminizde bu dosyalar yoksa ve kayıtlar yalnızca systemd günlüğünde tutuluyorsa jail'e backend = systemd satırını ekleyin.
Temel parametreler
| Parametre | Anlamı | Örnek değer |
|---|---|---|
| maxretry | Yasaklanmadan önce izin verilen hatalı deneme sayısı | 5 |
| findtime | Hatalı denemelerin sayıldığı zaman penceresi | 10m |
| bantime | Yasağın süresi (-1 kalıcı yasak demektir) | 1h |
| bantime.increment | Tekrar yasaklanan IP'lerde sürenin artması | true |
| ignoreip | Hiçbir zaman yasaklanmayacak adresler | Kendi ofis IP'niz |
| banaction | Yasağı uygulayan güvenlik duvarı eylemi | Dağıtıma göre değişir |
Güvenlik duvarı entegrasyonu
Ubuntu'da varsayılan eylem, paket sürümüne göre iptables veya nftables kurallarıyla çalışır ve UFW ile birlikte kullanılabilir; Ubuntu paketinin hangi değerleri kullandığını defaults-debian.conf dosyasında görebilirsiniz. Yasakların ufw status çıktısında görünmesini isterseniz [DEFAULT] bölümüne banaction = ufw ekleyebilirsiniz. AlmaLinux'ta fail2ban-firewalld paketi yasakları firewalld rich rule'ları ile uygulayacak ayarı /etc/fail2ban/jail.d/00-firewalld.conf dosyasıyla otomatik olarak getirir. Güvenlik duvarı tarafının ayrıntıları için UFW ve firewalld rehberlerimize göz atabilirsiniz.
Yapılandırmayı Test Etmek ve Uygulamak
# Yapılandırmayı sözdizimi açısından test et
sudo fail2ban-client -t
# Servisi yeniden başlat
sudo systemctl restart fail2ban
# Aktif jail'leri listele
sudo fail2ban-client status
# SSH jail'inin ayrıntıları
sudo fail2ban-client status sshd
status sshd çıktısında o ana kadar sayılan başarısız denemeleri, şu an engelli IP sayısını ve engelli adreslerin listesini görürsünüz. Bir filtrenin günlükteki satırları doğru tanıyıp tanımadığını görmek için fail2ban-regex kullanılır:
# Ubuntu
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
# AlmaLinux
sudo fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf
Çıktıdaki matched sayısı, filtrenin kaç satırı başarısız deneme olarak yakaladığını gösterir.
Yasakları Yönetmek
Bir IP adresini elle engellemek veya yanlışlıkla engellenen bir adresi serbest bırakmak için:
# Elle yasaklama
sudo fail2ban-client set sshd banip 192.0.2.50
# Belirli bir jail'den yasağı kaldırma
sudo fail2ban-client set sshd unbanip 198.51.100.77
# Tüm jail'lerdeki tüm yasakları kaldırma
sudo fail2ban-client unban --all
Kendinizi engellediyseniz başka bir IP'den (örneğin mobil bağlantı üzerinden) veya sunucu panelindeki konsoldan girip yasağı kaldırabilirsiniz. Bunun yaşanmaması için sabit IP adreslerinizi ignoreip satırına eklemek en pratik çözümdür. Fail2ban'ın kendi kayıtları /var/log/fail2ban.log dosyasında tutulur; hangi IP'nin ne zaman ve hangi jail tarafından engellendiğini buradan izleyebilirsiniz.
Web Servisleri ve Tekrar Eden Saldırganlar İçin Ek Jail'ler
Fail2ban yalnızca SSH ile sınırlı değildir. Hazır gelen filtrelerle web sunucusu ve diğer servisler için de koruma ekleyebilirsiniz. jail.local dosyasının sonuna şunları ekleyebilirsiniz:
[nginx-http-auth]
enabled = true
[nginx-botsearch]
enabled = true
[recidive]
enabled = true
bantime = 1w
findtime = 1d
maxretry = 5
nginx-http-auth, parola korumalı alanlara yapılan hatalı giriş denemelerini; nginx-botsearch, var olmayan yönetim panellerini ve bilinen açık adreslerini tarayan botları yakalar. recidive jail'i ise Fail2ban'ın kendi günlüğünü izler: Bir gün içinde defalarca yasaklanan IP adreslerini bir hafta boyunca tüm portlardan engeller. Hangi jail'in hangi günlük dosyasını okuduğunu jail.conf içindeki tanımlardan kontrol edebilirsiniz; Nginx günlüklerini varsayılan dışında bir konuma yazıyorsanız logpath değerini kendi yolunuzla değiştirmeniz gerekir.
WordPress giriş sayfası veya API uç noktaları gibi uygulamaya özel hedefler için özel filtreler yazmak mümkündür, ancak yoğun ve dağıtık HTTP saldırılarında sunucu üzerindeki günlük tabanlı engelleme yetersiz kalır. Bu senaryolarda trafiği sunucuya ulaşmadan süzen bir Layer 7 WAF koruma hizmeti daha uygun bir çözümdür.
Önerilen Kurulum Sırası
Yeni bir sunucuda Fail2ban'ı diğer güvenlik adımlarıyla birlikte devreye alırken şu sırayı izlemek, hem kilitlenme riskini hem de gereksiz uğraşı azaltır:
- Güvenlik duvarını (UFW veya firewalld) etkinleştirin ve SSH portunun açık olduğunu doğrulayın.
- Fail2ban'ı kurun ve servisi etkinleştirin.
jail.localdosyasında kendi sabit IP adresleriniziignoreipsatırına ekleyin.- SSH portunu değiştirdiyseniz
sshdjail'indekiportdeğerini güncelleyin. fail2ban-client -tile test edip servisi yeniden başlatın.- Birkaç saat sonra
fail2ban-client status sshdçıktısını kontrol ederek yasakların gerçekten uygulandığını görün. - Web sunucusu kurduğunuzda ilgili jail'leri ekleyin ve
recidivejail'ini etkinleştirin.
Değişiklik yaptıktan sonra yasakların güvenlik duvarına gerçekten yansıdığını görmek için Ubuntu'da sudo iptables -S | grep f2b veya sudo nft list ruleset | grep f2b, AlmaLinux'ta sudo firewall-cmd --list-rich-rules komutlarını kullanabilirsiniz. Fail2ban'ın oluşturduğu zincir ve kümeler f2b- önekiyle adlandırılır.
Fail2ban'ın Sınırları
- DDoS koruması değildir. Fail2ban günlüklerdeki başarısız girişlere tepki verir; yüksek hacimli ağ saldırılarını durduramaz.
- Dağıtık saldırılarda etkisi azalır. Her IP'den yalnızca birkaç deneme yapan geniş bot ağları eşik değerlerin altında kalabilir.
- Asıl çözüm güçlü kimlik doğrulamadır. SSH'ta parola girişini kapatıp anahtarla giriş kullandığınızda brute force denemeleri zaten sonuçsuz kalır; Fail2ban ise günlükleri temiz tutan ve kaynak tüketimini azaltan ek bir katman olur.
Sık Sorulan Sorular
Fail2ban kurduktan sonra ek ayar yapmam gerekir mi?
Ubuntu'da SSH koruması kurulumla birlikte gelir, ancak ignoreip, yasak süresi ve özel SSH portu gibi ayarları jail.local ile kendi ihtiyacınıza göre düzenlemeniz önerilir. AlmaLinux'ta ise jail'leri kendiniz etkinleştirmeniz gerekir.
Kalıcı yasak (bantime = -1) kullanmalı mıyım?
Genellikle önerilmez. IP adresleri zamanla el değiştirir ve kalıcı yasak listesi sürekli büyür. bantime.increment ile süreyi katlayarak artırmak ve recidive jail'i kullanmak, ısrarcı saldırganları uzun süre dışarıda tutarken listeyi yönetilebilir bırakır.
Engellenen IP'leri nasıl görebilirim?
sudo fail2ban-client status sshd komutu ilgili jail'deki engelli adresleri listeler. Geçmiş kayıtlar için /var/log/fail2ban.log dosyasını inceleyebilirsiniz.
Fail2ban sunucuyu yavaşlatır mı?
Normal koşullarda Fail2ban çok az kaynak tüketir; yalnızca izlediği günlüklere eklenen yeni satırları okur. Çok büyük ve hızla büyüyen günlük dosyaları ya da binlerce engelli IP içeren listelerde işlemci ve bellek kullanımı artabilir. Bu durumda günlük döndürmenin (logrotate) düzgün çalıştığını kontrol etmek ve kalıcı yasak yerine artan süreli yasak kullanmak yeterli olur.
Fail2ban Windows sunucularda çalışır mı?
Fail2ban Linux için geliştirilmiştir. Windows Server'da RDP denemelerine karşı hesap kilitleme politikası, güvenlik duvarında IP kısıtlaması ve ağ seviyesinde kimlik doğrulama gibi yerleşik yöntemler kullanılır; bu adımları Windows Server VDS güvenlik ayarları yazımızda anlattık.
Fail2ban, birkaç dakikalık yapılandırmayla sunucunuza yönelik otomatik deneme saldırılarını büyük ölçüde etkisiz hale getirir. DDoS korumalı altyapı ve NVMe SSD diskler üzerinde çalışan Linux VDS sunucu paketlerimizle bu korumayı ilk günden devreye alabilirsiniz.
Hizmet Sözleşmemiz
Web Koruma
İade Politikamız
