İnternete açık bir sunucunun SSH portunu birkaç saat dinlerseniz, bilmediğiniz IP adreslerinden saniye başına gelen parola denemelerini görmeniz an meselesidir. Bu otomatik denemeler, zayıf bir parola bulana kadar yorulmadan devam eder. Fail2ban, tam olarak bu tabloya karşı çalışan, log dosyalarını izleyip belirli eşik aşıldığında saldırgan IP'yi güvenlik duvarı kuralıyla dışarıda tutan hafif bir koruma katmanıdır.
Fail2ban Tam Olarak Ne Yapar?
Çalışma mantığı sade ama etkili: servis loglarını sürekli takip eder, içine tanımladığınız desenlere (regex) uyan başarısız oturum denemelerini sayar ve eşik aşıldığında ilgili IP'yi geçici olarak engeller. Engelleme işlemini doğrudan kendisi yapmaz; arka planda nftables ya da iptables üzerinden bir kural ekler. Süre dolunca kuralı kaldırır. Yani parolayı güçlendirmenin yerine geçmez, ancak saldırı yüzeyini ciddi biçimde daraltır.
- jail: Hangi servisin korunacağını, hangi log dosyasının izleneceğini ve eşikleri tanımlayan yapı.
- filter: Log satırlarındaki başarısız denemeyi yakalayan regex tanımları.
- action: Eşik aşıldığında çalıştırılan işlem; çoğunlukla güvenlik duvarına ban kuralı eklemek.
Kurulum
Paket, hemen her dağıtımın deposunda yer alır. Debian veya Ubuntu tarafında kurulum tek komutla halledilir:
apt update
apt install fail2ban
systemctl enable --now fail2banRHEL, AlmaLinux veya Rocky Linux kullanıyorsanız önce EPEL deposunu etkinleştirmeniz gerekir:
dnf install epel-release
dnf install fail2ban fail2ban-firewalld
systemctl enable --now fail2banServisin ayakta olup olmadığını systemctl status fail2ban ile kontrol edebilirsiniz.
Doğru Yapılandırma: jail.local
En sık yapılan hata, ayarları doğrudan /etc/fail2ban/jail.conf dosyasında değiştirmektir. Bu dosya paket güncellemelerinde üzerine yazılır. Bunun yerine değişiklikleri /etc/fail2ban/jail.local içinde tutun; Fail2ban önce .conf dosyasını, ardından .local dosyasını okur ve sonrakini geçerli sayar.
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 203.0.113.10
backend = systemd
[sshd]
enabled = true
port = ssh
maxretry = 3Buradaki üç parametre işin kalbidir. findtime penceresi içinde maxretry kadar başarısız deneme olursa IP, bantime süresince banlanır. ignoreip satırına kendi sabit IP'nizi eklemeyi unutmayın; aksi halde bir gün kendinizi kapı dışında bulabilirsiniz.
Tekrarlayan Saldırganlara Karşı Artan Ceza
Sabit bir ban süresi, ısrarcı botlara karşı bir noktadan sonra yetersiz kalır. Fail2ban'in bantime.increment özelliği, aynı IP tekrar yakalandığında ceza süresini katlayarak uzatır:
[DEFAULT]
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 1wBöylece ilk yakalanışta 1 saat ban yiyen bir IP, ısrar ettikçe günler süren bir engelle karşılaşır; üst sınır da bir hafta ile sabitlenir.
Yalnızca SSH Değil
Fail2ban kutudan çıkan haliyle pek çok servis için hazır filtre sunar. Genellikle web ve mail sunucularında da ciddi fayda sağlar:
- nginx-http-auth / apache-auth: Web panellerine yönelik parola denemeleri.
- postfix & dovecot: SMTP ve IMAP üzerinden gelen kaba kuvvet girişimleri.
- wordpress / wp-login: WordPress yönetim girişine yönelik bot trafiği.
Yoğun trafik alan veya birden çok servisi tek makinede barındıran kurulumlarda bu jail'lerin etkinleştirilmesi, log kirliliğini de gözle görülür biçimde azaltır. Kaynaklarınızı esnek biçimde ölçeklemek istiyorsanız bir sanal sunucu çözümü üzerinde Fail2ban'i test ortamı olarak ayağa kaldırıp eşikleri kendi trafiğinize göre kalibre edebilirsiniz.
İzleme ve Yönetim Komutları
Sistemi devreye aldıktan sonra durumu fail2ban-client ile yönetirsiniz. Anlık banlanan IP'leri ve sayaçları görmek için:
fail2ban-client status sshd
fail2ban-client status
fail2ban-client set sshd unbanip 198.51.100.42Yanlışlıkla banlanan bir kullanıcıyı son komutla anında serbest bırakabilirsiniz. Filtrelerinizin gerçekten doğru satırları yakalayıp yakalamadığını test etmek içinse fail2ban-regex aracı paha biçilmezdir:
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.confParametre Seçiminde Denge
Eşikleri çok agresif tutarsanız meşru kullanıcıları rahatsız edersiniz; çok gevşek tutarsanız koruma anlamını yitirir. Aşağıdaki tablo, tipik senaryolar için makul başlangıç değerleri sunar.
| Senaryo | maxretry | findtime | bantime |
|---|---|---|---|
| Yönetim SSH (az kullanıcı) | 3 | 10m | 1h |
| Web auth / panel girişi | 5 | 10m | 2h |
| Mail (SMTP/IMAP) | 5 | 15m | 4h |
| Ağır bot baskısı altında | 2 | 5m | 1w (artan) |
Bu değerleri taş yazı olarak görmeyin; kendi log geçmişinizi inceleyip yaklaşık birkaç günlük gözlemle ince ayar yapmak en sağlıklı yöntemdir.
Bogahost Önerisi: Fail2ban'i kritik üretim sunucularında devreye almadan önce, mutlaka kendi statik IP bloğunuzu
ignoreiplistesine ekleyin ve değişiklikleri uzaktan bağlantınız açıkken yeni bir oturumda test edin. Yönetim panelini ayrı bir IP'den eriştiğiniz bir kuruluma kaydırmak isterseniz, izole kaynaklara sahip bir fiziksel sunucu üzerinde güvenlik katmanlarını daha rahat konumlandırabilirsiniz.Kalıcılık ve Yeniden Başlatma
Sunucu yeniden başladığında ya da Fail2ban servisi durup kalktığında aktif banların korunup korunmadığı sık sorulan bir konudur. Modern sürümlerde durum bilgisi bir SQLite veritabanında tutulur ve varsayılan olarak
/var/lib/fail2ban/fail2ban.sqlite3altında saklanır. Bu sayede servis tekrar ayağa kalktığında,dbpurgeagesüresi dolmamış banlar yeniden uygulanır. Bu davranışı doğrudan ayar dosyasından yönetebilirsiniz:[DEFAULT] dbfile = /var/lib/fail2ban/fail2ban.sqlite3 dbpurgeage = 1dGüvenlik duvarı tarafında
nftablesya dafirewalldkullanmak, hamiptableskurallarına göre genellikle daha temiz bir tablo verir; çünkü Fail2ban ban kümelerini ayrı bir set içinde tutar ve diğer kurallarınızla çakışma olasılığı azalır.Bildirim ve Loglama
Bir IP banlandığında haberdar olmak isterseniz, action satırını e-posta gönderecek şekilde değiştirebilirsiniz.
action_mwlseçeneği, ban bilgisinin yanı sıra ilgili WHOIS kaydını ve tetikleyen log satırlarını da iletir:[DEFAULT] destemail = [email protected] sender = [email protected] action = %(action_mwl)sÇok sayıda jail'in aynı anda çalıştığı yoğun sistemlerde her ban için e-posta almak gürültülü olabilir; böyle durumlarda bildirimi yalnızca SSH gibi kritik jail'lerle sınırlamak daha pratiktir.
Sık Karşılaşılan Tuzaklar
Pratikte en çok şu noktalarda takılınır:
- Yanlış backend: systemd journal kullanan modern dağıtımlarda
backend = systemdayarlanmazsa Fail2ban hiçbir satır göremeyebilir ve sessizce hiçbir ban uygulamaz.- Reverse proxy arkası: Web jail'lerinde gerçek istemci IP'si yerine proxy IP'si banlanabilir; log formatında
X-Forwarded-Forya da gerçek IP'nin yer aldığından emin olun.- IPv6 ihmali: Yalnızca IPv4 düşünüp IPv6 üzerinden gelen denemeleri gözden kaçırmak yaygın bir açıktır.
- Log rotasyonu çakışması: Log dosyası döndürülürken takip kesilebilir; systemd backend bu sorunu büyük ölçüde ortadan kaldırır.
Bu kalemlerin her biri, koruma açık gibi görünürken aslında çalışmadığı bir sessiz başarısızlığa yol açabilir. Devreye aldıktan sonra
fail2ban-client status sshdçıktısında sayaçların gerçekten arttığını teyit etmek, en hızlı doğrulama yöntemidir.Özetle
Fail2ban, birkaç dakikalık yapılandırmayla sunucunuzun günlük gürültüsünü ve gerçek tehdit yüzeyini birlikte küçülten, düşük maliyetli ama yüksek getirili bir araçtır. Güçlü parola politikası, anahtar tabanlı SSH girişi ve güncel bir güvenlik duvarıyla birlikte kullanıldığında, kaba kuvvet saldırılarını çoğu durumda daha ilk denemelerde etkisiz bırakır.
Reklam Alanı
İçerik Altı (728x90)
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yap