Fail2ban Kurulumu: SSH Kaba Kuvvet Saldırılarını Engelleme
Fail2ban kurulumu, SSH gibi servislerin günlüklerini sürekli okuyan ve tekrar tekrar başarısız giriş deneyen IP adreslerini güvenlik duvarı kuralıyla engelleyen bir koruma katmanı eklemektir. İnternete açık her Linux sunucunun SSH günlüğünde otomatik şifre denemeleri görülür; fail2ban bu denemeleri birkaç hatadan sonra keser ve günlüklerinizi okunur hâlde tutar.
Anahtarla giriş ve kapatılmış şifreli giriş asıl korumadır; fail2ban bunların üzerine eklenen ikinci katmandır. Örnekler, Ubuntu 24.04 LTS ya da Debian 12–13 kurulu bir VPS sunucuda sudo yetkili bir kullanıcıyla çalıştırılmak üzere hazırlanmıştır. VPS’inize Plesk lisansıyla Plesk kurduysanız Fail2Ban’ı panelin IP Address Banning ekranından yönetirsiniz; ayrıntılar Plesk güvenlik ayarları rehberindedir.
Kısa cevap
Fail2ban kurulumu, sunucu günlüklerini izleyip kısa sürede çok sayıda hatalı giriş deneyen IP adreslerini güvenlik duvarında geçici olarak engelleyen aracı devreye almaktır. Debian ve Ubuntu’da sudo apt install fail2ban ile kurulur; ayarlar jail.conf yerine /etc/fail2ban/jail.local dosyasına yazılır. [sshd] bölümü SSH’yi korur; bantime, findtime ve maxretry değerleri engelin süresini ve hassasiyetini belirler.
Fail2ban nedir, nasıl çalışır?
Fail2ban, günlük dosyalarını ya da systemd journal’ı düzenli ifadelerle tarayan ve eşik aşıldığında bir eylem çalıştıran bir Python hizmetidir. Her koruma birimine jail denir; bir jail bir filtre, bir eylem ve sayısal eşiklerden oluşur:
| Terim | Görevi | Örnek |
|---|---|---|
| filter | Günlükte hatalı girişi tanıyan kalıp | filter.d/sshd.conf |
| banaction | IP’yi engelleyen eylem | iptables, nftables, ufw |
| maxretry | Engel için gereken hata sayısı | 5 |
| findtime | Hataların sayıldığı zaman penceresi | 10m |
| bantime | Engelin süresi | 1h |
| ignoreip | Hiç engellenmeyecek adresler | Ofis IP’niz |
Örneğin maxretry = 5 ve findtime = 10m ise on dakika içinde beş kez hata yapan IP, bantime boyunca sunucuya bağlanamaz; süre dolunca engel kendiliğinden kalkar. Paketle birlikte Nginx, Postfix ve Dovecot gibi servisler için de hazır filtreler gelir; WordPress giriş sayfası gibi uygulama düzeyindeki önlemler için WordPress güvenliği yazısına bakın.
SSH kaba kuvvet denemeleri günlükte nasıl görünür?
Kaba kuvvet denemeleri SSH günlüğünde art arda gelen Failed password ve Invalid user satırları olarak görünür; fail2ban’ın sshd filtresi bu tür satırları sayar. Kurulumdan önce sunucunuzun bugün kaç deneme aldığını ve denemelerin en çok hangi adreslerden geldiğini görmek için:
sudo journalctl -u ssh --since today | grep -c "Invalid user"
sudo journalctl -u ssh --since today | grep "Invalid user" | awk '{print $(NF-2)}' | sort | uniq -c | sort -rn | headİlk komut geçersiz kullanıcı adıyla yapılan denemelerin sayısını, ikincisi en çok deneme yapan IP adreslerini verir. /var/log/auth.log kullanan sistemlerde aynı aramayı sudo grep "Invalid user" /var/log/auth.log ile yapabilirsiniz. Fail2ban devreye girdikten birkaç gün sonra komutları yeniden çalıştırdığınızda tekrar eden adreslerden gelen deneme sayısının belirgin biçimde azaldığını görürsünüz; sudo fail2ban-client status sshd çıktısındaki Total banned değeri bu etkiyi özetler.
Fail2ban kurulumu nasıl yapılır?
Fail2ban kurulumu Debian ve Ubuntu’da resmî depolardaki tek paketle yapılır:
- Paket listesini yenileyip kurun:
sudo apt update && sudo apt install fail2ban -y - Servisin açılışta başlayacağından emin olun:
sudo systemctl enable --now fail2ban - Durumu kontrol edin:
sudo systemctl status fail2banvesudo fail2ban-client status
Son komut etkin jail listesini verir. Debian ve Ubuntu paketleri /etc/fail2ban/jail.d/defaults-debian.conf dosyasıyla sshd jail’ini genellikle açık getirir; yine de ayarları bir sonraki bölümdeki gibi kendi dosyanızda açıkça yazmak, hangi değerin geçerli olduğunu netleştirir. Servis başlamıyorsa nedeni sudo journalctl -u fail2ban -n 50 çıktısında görünür; en sık sebep, okunacak günlük dosyasının bulunamamasıdır.
jail.conf neden düzenlenmez, jail.local nasıl yazılır?
jail.conf paketle gelen varsayılan dosyadır ve güncellemelerde değişebilir; kendi ayarlarınızı /etc/fail2ban/jail.local ya da jail.d/ altındaki .local dosyalarına yazın. Fail2ban sırasıyla jail.conf, jail.d/*.conf, jail.local ve jail.d/*.local dosyalarını okur; sonra okunan değer öncekini geçersiz kılar. sudo nano /etc/fail2ban/jail.local ile yeni bir dosya açın:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 203.0.113.10
[sshd]
enabled = true
port = sshignoreip satırına sabit ofis ya da VPN IP’nizi ekleyin; böylece kendi hatalı denemeleriniz sizi kilitlemez. SSH’yi farklı bir porta taşıdıysanız port = 2222 yazın, aksi hâlde engel yanlış porta uygulanır. Değişiklikten sonra sudo fail2ban-client -t ile yapılandırmayı sınayın ve sudo systemctl restart fail2ban ile uygulayın.
jail.conf dosyasını doğrudan düzenlemeyin; paket güncellemesi dosyayı değiştirdiğinde ayarlarınız kaybolabilir ya da çakışma sorusuyla karşılaşırsınız./var/log/auth.log yoksa systemd arka ucu nasıl ayarlanır?
Bazı sistemler SSH günlüğünü dosyaya değil yalnızca systemd journal’a yazar; rsyslog kurulmamış Debian 12 minimal kurulumları buna örnektir. Bu durumda fail2ban “Have not found any log file for sshd jail” hatasıyla başlamaz. Önce dosyanın varlığını kontrol edin:
ls -l /var/log/auth.logDosya yoksa jail.local içindeki [sshd] bölümüne günlüğü journal’dan okumasını söyleyin:
[sshd]
enabled = true
port = ssh
backend = systemdsystemd arka ucu python3-systemd paketini kullanır; apt bu paketi genellikle önerilen bağımlılık olarak kurar, eksikse sudo apt install python3-systemd ile ekleyin. backend satırını [DEFAULT] yerine yalnızca ihtiyaç duyan jail’e yazın; dosyadan okuyan diğer jail’ler böylece etkilenmez. Ubuntu 24.04’te rsyslog kurulu geldiği için /var/log/auth.log genellikle mevcuttur ve bu ayara gerek kalmaz.
Fail2ban UFW ile birlikte nasıl kullanılır?
Fail2ban engelleri varsayılan olarak dağıtıma göre iptables ya da nftables kuralı biçiminde ekler ve bu kurallar UFW ile birlikte sorunsuz çalışır. Engellerin ufw status listesinde de görünmesini istiyorsanız eylemi UFW’ye çevirin:
[DEFAULT]
banaction = ufwBu ayarla her yasaklı IP, UFW kural listesinin başına eklenir ve süre dolunca kaldırılır; bunun için UFW’nin etkin olması gerekir. Hangi yöntemi seçerseniz seçin, önce güvenlik duvarının kendisini doğru kurun: SSH izni, varsayılan politikalar ve limit kuralı için UFW firewall kurulumu rehberine bakın. UFW’nin limit kuralı bağlantı sayısına, fail2ban ise günlükteki başarısız girişlere bakar; ikisi birbirini tamamlar.
Tekrarlayan saldırganlar recidive jail’iyle nasıl uzun süre engellenir?
Recidive jail’i, fail2ban’ın kendi günlüğünü (/var/log/fail2ban.log) okuyarak kısa sürede defalarca yasaklanan IP’leri çok daha uzun süre ve tüm portlarda engeller. Tanımı jail.conf içinde hazırdır; jail.local dosyasında açmanız yeterlidir:
[recidive]
enabled = true
bantime = 1w
findtime = 1d
maxretry = 3Bu örnekte bir gün içinde üç kez yasaklanan adres bir hafta boyunca sunucunun hiçbir portuna bağlanamaz. Alternatif olarak [DEFAULT] altına bantime.increment = true eklerseniz aynı IP her yakalandığında engel süresi kademeli olarak uzar. İki yöntemi birlikte kullanabilirsiniz; ancak uzun engeller dinamik IP kullanan meşru kullanıcıları da etkileyebileceğinden ignoreip listenizi güncel tutun.
Durum nasıl izlenir, engel nasıl kaldırılır ve kurulum nasıl test edilir?
Günlük yönetim fail2ban-client komutuyla yapılır:
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 203.0.113.50
sudo fail2ban-client set sshd banip 198.51.100.7
sudo fail2ban-client -d | grep -i sshd
sudo tail -f /var/log/fail2ban.logİlk komut anlık hatalı deneme sayısını, toplam engelleri ve yasaklı IP listesini gösterir; ikincisi yanlışlıkla engellenen bir adresi serbest bırakır, üçüncüsü bir IP’yi elle yasaklar. -d çıktısı ayrıştırılmış yapılandırmayı dökerek hangi değerlerin gerçekten uygulandığını gösterir. Canlı test için yönetim IP’niz dışındaki bir bağlantıdan (örneğin telefonun mobil verisi) var olmayan bir kullanıcı adıyla birkaç kez bağlanmayı deneyin; fail2ban.log içinde Ban satırı görmelisiniz. Testten sonra o adresin engelini unbanip ile kaldırın. tail ve grep kullanımına yabancıysanız Linux temel komutlar rehberine göz atın.
Sık Sorulan Sorular
Fail2ban kendi IP adresimi engellediyse ne yapmalıyım?
Başka bir IP’den, örneğin telefonunuzun mobil verisinden sunucuya bağlanın ve sudo fail2ban-client set sshd unbanip ENGELLI_IP komutunu çalıştırın. Hiçbir yoldan bağlanamıyorsanız engelin bantime süresi sonunda kalkmasını bekleyin ya da LIONFIN müşteri panelinden destek talebi açın. Tekrarlanmaması için sabit IP’nizi jail.local içindeki ignoreip satırına ekleyin ve istemcilerinizde kayıtlı eski şifreleri temizleyin.
SSH anahtarı kullanıyorsam fail2ban yine de gerekli mi?
Anahtarla giriş ve kapalı şifreli giriş, şifre tahminine dayalı saldırıları zaten başarısız kılar; fail2ban ise bu denemelerin sunucuyu meşgul etmesini ve günlükleri doldurmasını engeller. Ayrıca yanlışlıkla şifreli girişi açık kalmış bir hesap ya da başka bir servis için ikinci bir savunma katmanı oluşturur. Kurulumu ve bakımı hafif olduğundan anahtar kullanılan sunucularda da önerilir.
bantime, findtime ve maxretry için hangi değerler önerilir?
Başlangıç için findtime 10 dakika, maxretry 5 ve bantime 1 saat dengeli bir seçimdir; şifresini birkaç kez yanlış giren meşru bir kullanıcı kısa sürede yeniden erişebilir. Saldırı yoğunsa bantime değerini bir güne çıkarın ya da tekrar edenler için recidive jail’ini açın. Değerleri aşırı sıkı tutmak, ortak IP kullanan ofislerin ya da mobil kullanıcıların gereksiz yere engellenmesine yol açabilir.
Fail2ban SSH dışında hangi servisleri koruyabilir?
Web sunucusu kimlik doğrulaması, Postfix ve Dovecot gibi e-posta servisleri, FTP sunucuları ve daha birçok yazılım için filter.d klasöründe hazır filtreler bulunur. İlgili jail’i jail.local içinde enabled = true ile açmanız ve günlük yolunun doğru olduğunu doğrulamanız yeterlidir. Hazır filtresi olmayan bir uygulama için kendi düzenli ifadenizi yazıp fail2ban-regex komutuyla gerçek günlüğe karşı test edebilirsiniz.
Fail2ban ile UFW limit kuralı aynı işi mi yapar?
Hayır. UFW’nin limit kuralı yalnızca bağlantı sayısına bakar ve 30 saniyede 6 bağlantıyı aşan IP’yi geçici olarak reddeder; girişin başarılı olup olmadığını bilmez. Fail2ban ise günlükleri okuyarak başarısız kimlik doğrulamalarını sayar ve süresini sizin belirlediğiniz engeller uygular. Biri bağlantı hızını, diğeri hatalı girişleri sınırladığı için ikisi birlikte kullanılabilir.
Bu makale yardımcı oldu mu?
Geri bildiriminiz için teşekkürler!
kişi faydalı buldu