Bir sunucuyu internete açtığınız andan itibaren, SSH portunuz otomatik taramaların hedefi olur. Bu taramaların büyük kısmı kaba kuvvet (brute force) saldırısıdır: bir betik, saniyede onlarca parola kombinasyonu dener ve zayıf bir parola bulana kadar durmaz. Sunucu günlüklerini ilk kez açan pek çok kişi, dakikada onlarca başarısız SSH denemesi görünce şaşırır; bu, istisna değil internete açık her sunucunun standart trafiğidir.
Fail2ban, bu saldırıları günlük dosyalarından tespit edip saldırgan IP'yi otomatik olarak engelleyen, kurulumu ve mantığı basit ama etkisi büyük bir araç.
Fail2ban Ne Yapar
Fail2ban, sunucunuzun günlük dosyalarını (SSH, web sunucusu, e-posta servisi ne varsa) sürekli izler ve başarısız giriş denemesi gibi şüpheli işlemleri arar. Belirlediğiniz eşiği aşan bir IP tespit ettiğinde, güvenlik duvarı kuralı üzerinden bu IP'yi otomatik olarak engeller. İnsan müdahalesi gerekmez; kurulum bittikten sonra arka planda sessizce çalışır.
Çalışma mantığı basit: bir saldırgan beş dakika içinde beş kez yanlış parola denerse, altıncı denemesinde artık sunucuya bağlanamaz. Bu, otomatik betiklerin sonsuz deneme yapmasını fiilen imkansız hale getirir. Fail2ban'ın resmi GitHub deposu güncel kurulum ve yapılandırma dokümantasyonunu barındırıyor.
Aracın Python ile yazılmış olması, filtre ve eylem tanımlarını okunur ve düzenlenebilir olmasını sağlıyor. Yeni bir servisi korumak istediğinizde sıfırdan kod yazmanız gerekmiyor; mevcut filtre dosyalarını örnek alıp birkaç regex satırıyla kendi servisinize uyarlayabilirsiniz. Bu esneklik, Fail2ban'ı yalnızca SSH için değil, ihtiyaç duyduğunuz her giriş noktası için kullanılabilir kılıyor.
Neden SSH Bu Kadar Hedef Alınıyor
SSH, sunucu yönetiminin standart aracı olduğu için saldırganların da öncelikli hedefi. Otomatik tarama botları, internetteki açık 22 portlarını sürekli tarar ve her birine yaygın kullanıcı adı ve parola kombinasyonlarını dener; "root/123456" gibi kombinasyonlar hâlâ şaşırtıcı derecede sık kullanılıyor.

Bu saldırıların tehlikesi kalıcılıklarında yatıyor. Bir betik yorulmaz, molalar vermez, saldırgan başarılı olana veya engellenene kadar denemeye devam eder. Zayıf bir parolayla korunan bir hesap, günler içinde değil çoğu zaman saatler içinde ele geçirilebilir; Fail2ban bu sürekli baskıyı daha altıncı-yedinci denemede keserek devreye girer.
SSH dışında web giriş formları, e-posta sunucuları ve FTP servisleri de aynı tür saldırılara maruz kalır. Fail2ban, doğru filtre yapılandırmasıyla bu servislerin hepsini aynı anda koruyabilir; tek bir araçla sunucunun farklı giriş noktalarını kapatmış olursunuz.
WordPress gibi popüler bir CMS çalıştırıyorsanız, wp-login.php sayfasına yönelik kaba kuvvet denemeleri de aynı mantıkla engellenebilir. Nginx veya Apache günlüklerinde başarısız giriş denemelerini yakalayan özel bir filtre tanımlayıp bunu ayrı bir jail'e bağlamak, WordPress'e özgü güvenlik eklentilerine ihtiyaç duymadan aynı korumayı sağlar.
Kurulum ve İlk Yapılandırma
Debian/Ubuntu tabanlı sistemlerde kurulum tek satır:
sudo apt update && sudo apt install fail2ban -y
CentOS/RHEL tabanlı sistemlerde EPEL deposu gerekir:
sudo yum install epel-release -y
sudo yum install fail2ban -y
Kurulumdan sonra varsayılan yapılandırma dosyasını doğrudan düzenlemeyin; bir güncelleme geldiğinde değişiklikleriniz silinir. Bunun yerine kendi yerel dosyanızı oluşturun:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
jail.local dosyasında SSH hapishanesini (jail) etkinleştirmek için şu satırları düzenlemeniz yeterli:
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 3600
findtime = 600
Bu yapılandırma, 600 saniyelik bir pencerede beş başarısız denemeden sonra IP'yi bir saat (3600 saniye) boyunca engeller. Değerleri sunucunuzun trafiğine göre ayarlayabilirsiniz; yüksek trafikli bir sunucuda maxretry değerini biraz yükseltmek, meşru kullanıcıların yanlış parola girme ihtimaline karşı gereksiz engellemeleri azaltır. Servisi yeniden başlatıp durumunu kontrol etmek son adım:
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
Temel Kavramlar: Jail, Filter, Action
Fail2ban'ı esnek kılan üç yapı taşı var. Jail (hapishane), belirli bir servisi hangi kurallarla koruyacağınızı tanımlar; SSH için ayrı, Nginx giriş formu için ayrı bir jail kurabilirsiniz. Her jail kendi günlük dosyasını, eşiğini ve yasaklama süresini taşır; bu modülerlik sayesinde bir servisteki ayarı değiştirmek diğerlerini etkilemez.

Filter, hangi günlük satırının "şüpheli" sayılacağını belirleyen regex tabanlı kurallardır. Fail2ban, yaygın servisler için hazır filtre dosyalarıyla gelir (/etc/fail2ban/filter.d/ altında); SSH, Nginx, Postfix gibi popüler servislerin çoğu için sıfırdan filtre yazmanıza gerek kalmaz.
Action ise tespit sonrası ne olacağını tanımlar. Varsayılan eylem IP'yi iptables veya nftables üzerinden engellemektir, ama isterseniz aynı anda e-posta bildirimi de gönderebilirsiniz:
[sshd]
enabled = true
action = %(action_mwl)s
destemail = [email protected]
action_mwl, engellemenin yanına günlük kaydını da e-postaya ekler; bu, hangi saldırı kalıplarının göründüğünü takip etmek isteyenler için pratik bir seçenek. E-posta bildirimlerini çok sık gelen kutusunu doldurmayacak şekilde ayarlamak da önemli; yüksek trafikli bir sunucuda her engellemede bildirim almak, kısa sürede göz ardı edilen bir gürültüye dönüşebilir.
Beyaz Liste ve Kendinizi Kilitlememek
Fail2ban kurduktan sonra en can sıkıcı hata, kendi yönetim IP'nizi yanlışlıkla engellemek. Ofis veya ev IP'nizi baştan beyaz listeye eklemek bu riski ortadan kaldırır:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.42
Statik IP'niz yoksa ve dinamik bir bağlantıdan yönetim yapıyorsanız, yasaklama süresini test aşamasında kısa tutmak (bantime = 600 gibi) daha güvenli; kendinizi yanlışlıkla kilitlediğinizde bir saat değil on dakika beklemiş olursunuz. Sunucuya ikinci bir erişim yolunuz varsa, örneğin sağlayıcının web tabanlı konsolu, kendinizi kilitleme riskini tamamen sıfırlayan bir güvenlik ağı olarak kullanabilirsiniz.
Anahtar tabanlı SSH kimlik doğrulamasına geçmek, Fail2ban'ın etkisini katlar. Parola kimlik doğrulamasını tamamen kapatıp yalnızca SSH anahtarına izin verdiğinizde, kaba kuvvet saldırısının başarı ihtimali pratik olarak sıfırlanır çünkü tahmin edilecek bir parola artık yok. Varsayılan 22 portunu değiştirmek de otomatik tarama botlarının büyük kısmını devre dışı bırakır; bu tek başına bir güvenlik önlemi değil ama Fail2ban ve anahtar kimlik doğrulamasıyla birlikte gürültüyü belirgin biçimde azaltır:
sudo nano /etc/ssh/sshd_config
# PasswordAuthentication no
sudo systemctl restart sshd
Günlükleri İzlemek ve Durumu Kontrol Etmek
Fail2ban'ın ne yaptığını görmek için durum komutları yeterli. Hangi jail'lerin aktif olduğunu görmek için:
sudo fail2ban-client status
Belirli bir jail'in kaç IP'yi engellediğini ve hangi IP'lerin şu an yasaklı olduğunu görmek için:
sudo fail2ban-client status sshd
Bir IP'yi elle engellemek veya yanlışlıkla engellenmiş birini çözmek gerektiğinde şu komutlar işe yarar:
sudo fail2ban-client set sshd banip 198.51.100.7
sudo fail2ban-client set sshd unbanip 198.51.100.7
Fail2ban'ın kendi günlüğü /var/log/fail2ban.log dosyasında tutulur; burayı düzenli gözden geçirmek, sunucunuzun ne tür saldırılara maruz kaldığı konusunda somut bir fikir verir. Bu bilgi, hangi servislerin ek koruma gerektirdiğine karar vermenizde de yol gösterici olur.
Belirli bir zaman aralığındaki engellenen IP sayısını görmek isterseniz günlük dosyasını basit bir grep ile filtreleyebilirsiniz:
grep "Ban " /var/log/fail2ban.log | wc -l
Bu tür basit komutlar, sunucunuzun maruz kaldığı saldırı yoğunluğunu zaman içinde karşılaştırmanıza olanak tanır; ani bir artış, hedefli bir saldırı kampanyasının işareti olabilir.
Tek Başına Yeterli Değil
Fail2ban, kaba kuvvet saldırılarına karşı güçlü bir savunma ama sunucu güvenliğinin tamamı değil. Bir güvenlik duvarı (ufw veya firewalld), yalnızca gerekli portları açık tutarak saldırı yüzeyini baştan daraltır; Fail2ban ile birlikte çalıştığında ikisi birbirini tamamlar.
sudo ufw allow OpenSSH
sudo ufw enable
Düzenli güncellemeler, bilinen açıkların kapatılması için vazgeçilmez; güncellenmemiş bir paket, saldırganlar için Fail2ban'ın bile engelleyemeyeceği bir arka kapı olabilir. Otomatik güvenlik güncellemelerini açmak (Debian/Ubuntu'da unattended-upgrades), bu takibi büyük ölçüde otomatikleştirir:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades
Bu paket kurulduktan sonra güvenlik yamaları arka planda otomatik uygulanır; sunucuyu elle güncellemeyi unutma riski büyük ölçüde ortadan kalkar.
Yedekleme planı da bu tabloya dahil edilmeli. En sıkı önlemlerle bile bir güvenlik olayı yaşanabilir; düzenli, test edilmiş yedekler olmadan bir olay sonrası toparlanma süresi katlanarak uzar. Yedeklerin kendisinin de sunucudan ayrı bir yerde tutulması önemli, çünkü sunucu ele geçirilirse aynı diskteki yedek de risk altında kalır.
Fail2ban, güçlü parolalar, anahtar tabanlı kimlik doğrulama, güvenlik duvarı ve güncel yazılımla birlikte kullanıldığında, sunucunuzu günlük kaba kuvvet trafiğine karşı pratik ve düşük bakımlı bir kalkana dönüştürür. Kurulumu on dakika süren bu araç, aylar boyunca arka planda sessizce çalışıp binlerce otomatik deneme trafiğini tek başına eler.
Henüz yorum yok.
Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.