SSH Brute Force Saldırılarını Fail2Ban ile Nasıl Engellersiniz?

SSH Brute Force Saldırılarını Fail2Ban ile Nasıl Engellersiniz?
Yazı Özetini Göster

SSH Brute Force Saldırılarını Fail2Ban ile Nasıl Engellersiniz?

Fail2Ban, log tabanlı saldırı tespiti ve otomatik engelleme sağlayan hafif fakat güçlü bir araçtır. Özellikle SSH için gelen kaba kuvvet (brute-force) denemelerini algılayıp IP’leri firewall üzerinden engelleyerek sunucunuzun güvenliğini önemli ölçüde artırır. Bu rehberte Fail2Ban kurulumu, temel konfigürasyon, test ve sık karşılaşılan senaryolar için pratik örnekler verilmektedir.

1) Neden Fail2Ban?

  • Kolay kurulup yapılandırılır (Debian/Ubuntu, RHEL/CentOS gibi dağıtımlarda).
  • Logları izleyerek şüpheli davranışları otomatik bloklar.
  • İstemciyi kalıcı ban’lamak yerine zamanlı (bantime) engelleme yaparak yanlış pozitifleri azaltır.
  • iptables, nftables, firewalld, ufw gibi çeşitli firewall backend’leriyle çalışır.

2) Kurulum (Debian/Ubuntu örneği)

sudo apt update
sudo apt install fail2ban
sudo systemctl enable --now fail2ban

RHEL/CentOS için: yum install epel-release && yum install fail2ban veya dnf kullanın.

3) Yapılandırma Dosyalarının Mantığı

  • /etc/fail2ban/jail.conf — Paket ile gelen varsayılanlar (değiştirmeyin).
  • /etc/fail2ban/jail.d/*.conf veya /etc/fail2ban/jail.local — sizin özelleştirmeleriniz (burayı kullanın).
  • /etc/fail2ban/filter.d/ — regex tabanlı filtreler (sshd için hazır filtre bulunur).
  • /var/log/fail2ban.log — Fail2Ban logları; saldırı/ban geçmişi buradan izlenir.

4) Temel SSH Jail Örneği (jail.local)

# /etc/fail2ban/jail.local
[sshd]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log           ; Debian/Ubuntu
# logpath = /var/log/secure            ; RHEL/CentOS
maxretry = 5                            ; 5 başarısız deneme sonrası
findtime = 600                          ; 10 dakika içinde
bantime  = 86400                        ; 24 saat (saniye)
# action = iptables-multiport[name=sshd, port="ssh", protocol="tcp"]
action = %(action_mwl)s                 ; mail + whois + ban bilgisi (varsayılan)
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/16  ; iç ağ ve yönetici IP'leri

Not: action_mwl yerine basit iptables-multiport veya cloud ortamına uygun backend (firewallcmd, nftables, ufw) kullanın.

5) Recidive (Tekrarlayan Saldırıları Uzun Süreli Engelleme)

# /etc/fail2ban/jail.local (ek)
[recidive]
enabled  = true
logpath  = /var/log/fail2ban.log
action   = iptables-multiport[name=recidive, port="all", protocol="all"]
bantime  = 604800    ; 7 gün
findtime = 86400     ; 1 gün içinde
maxretry = 5

Recidive, kısa sürede tekrar banlanan IP’leri daha uzun süreli engeller — özellikle botnetler için etkilidir.

6) Filter (sshd) Testi

Hazır sshd filtresini test etmek için:

sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Bu komut, filtre regex’lerinin logunuzdaki denemeleri yakalayıp yakalamadığını gösterir.

7) Fail2Ban Komutları (Hızlı Kullanım)

  • sudo fail2ban-client status — genel durum ve aktif jail listesi.
  • sudo fail2ban-client status sshd — sshd jail detayları (banlanan IP listesi).
  • sudo fail2ban-client set sshd banip 1.2.3.4 — manuel ban.
  • sudo fail2ban-client set sshd unbanip 1.2.3.4 — manuel ban kaldırma.
  • sudo systemctl restart fail2ban — konfig değişikliklerinden sonra yeniden başlatma.

8) E-posta ile Bildirim ve Log İçeriği

action_mwl e-posta, whois ve log içeriğini gönderir. Mail yapılandırması için sunucuda MTA (postfix/ssmtp/msmtp) veya dış SMTP ayarı olmalı. Alternatif olarak webhook, Slack/Teams entegrasyonu için özel action yazabilirsiniz.

9) Cloud / Load-Balanced Ortamda Öneriler

  • Bulut sağlayıcısında (AWS/GCP/Azure) network security group veya security group ile edge-level engelleme yapın — böylece kötü trafik sunucunuza ulaşmadan bloklanır.
  • Load balancer arkasındaysanız, gerçek istemci IP’sini almak için X-Forwarded-For veya proxy protocol konfigürasyonunu sağlayın ve Fail2Ban’ın doğru log kaynağını izlemesini sağlayın.

10) Yanlış Pozitif / Yönetici Kilitleme (Whitelist)

Yönetici IP’lerini ignoreip ile mutlaka beyaz listeye ekleyin. Dinamik yönetici IP’ler için VPN veya bastion host (jump server) önerilir; yönetimi merkezi IP’den yapın.

11) Test Senaryoları

  1. Farklı bir host’tan birkaç başarısız SSH girişimi deneyin, logları kontrol edin.
  2. sudo tail -f /var/log/auth.log ile fail2ban tetiklenmesini izleyin.
  3. sudo fail2ban-client status sshd ile banlanan IP’leri doğrulayın.
  4. Yanlış pozitif olursa unbanip komutuyla kaldırın ve regex/limitleri düzeltin.

12) Performans & Ölçeklendirme

  • Fail2Ban hafif bir daemon’dur; ancak yüksek hacimli loglarda logpath ve filtre optimizasyonu (eşleşmeleri azaltma) gereklidir.
  • Çok sayıda ban durumunda iptables zinciri büyür — ipset kullanan action’lar (ör. iptables-multiport-ipset) performansı korur.

13) İleri Düzey İpuçları

  • iptables yerine nftables kullanıyorsanız uygun action seçin (Fail2Ban destekler).
  • firewalld ortamlarında firewallcmd backend’ini tercih edin.
  • Log rotate sonrasında fail2ban’ın yeni dosyaları takip ettiğinden emin olun (logrotate postrotate ile restart gerekebilir).
  • SELinux etkinse, filtre veya action’larla ilgili erişim sorunlarını audit log’lardan kontrol edin.

14) Sonuç

Fail2Ban, SSH brute-force saldırılarını hızlı ve etkili şekilde önlemek için ideal bir çözümdür. Doğru maxretry, findtime, bantime ve ignoreip değerleriyle yanlış pozitifleri minimize ederek, recidive gibi ek jail’lerle kalıcı saldırganları uzun süre engelleyebilirsiniz. Bulut/edge koruması ve ipset/nftables entegrasyonları ile büyük ölçekli ortamlarda da güvenle kullanılabilir.

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Benzer Yazılar