Ulu Önder Mustafa Kemal Atatürk'ü aramızdan ayrılışının 88. yılında saygı, minnet ve özlemle anıyoruz.

Fail2ban ile SSH ve web saldırılarını otomatik engellemek

kaan.yildiz Mid 1 saat önce · 0 görüntülenme

İnternete açık her sunucu, birkaç dakika içinde SSH ve giriş sayfalarına yönelik otomatik şifre denemeleri almaya başlar. Fail2ban, günlükleri izleyip belirli bir sürede çok fazla başarısız deneme yapan IP adreslerini güvenlik duvarında geçici olarak engeller.

Kurulum

# Debian / Ubuntu
sudo apt install fail2ban
# RHEL / Rocky / Alma (EPEL deposu gerekir)
sudo dnf install epel-release && sudo dnf install fail2ban

Ayar dosyası: jail.local

Ana ayar dosyası jail.conf'u düzenleme; paket güncellemesinde üzerine yazılabilir. Bunun yerine /etc/fail2ban/jail.local oluştur:

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 203.0.113.25
backend  = systemd

[sshd]
enabled = true
  • findtime + maxretry: 10 dakika içinde 5 başarısız deneme yapan IP engellenir.
  • bantime: Engelin süresi. -1 kalıcı engel demektir ama yanlışlıkla kendini engellersen sorun olur.
  • ignoreip: Kendi sabit IP adresini mutlaka ekle. Yoksa birkaç yanlış şifre denemesinde kendi sunucundan kilitlenirsin.
  • backend = systemd: Günlükleri journald'dan okur. SSH günlükleri dosyaya yazılmayan sistemlerde gereklidir. Dağıtımına göre varsayılan farklı olabilir.

Başlat:

sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd

Tekrar eden saldırganlara daha uzun ceza

Engeli bitip tekrar deneyen IP'ler için engel süresini katlanarak artırabilirsin:

[DEFAULT]
bantime.increment = true
bantime.maxtime   = 1w

Web uygulamaları için

Fail2ban, hazır filtrelerle birçok servisi korur. Filtreler /etc/fail2ban/filter.d/ içindedir. Nginx için birkaç örnek:

[nginx-http-auth]
enabled = true

[nginx-botsearch]
enabled  = true
logpath  = /var/log/nginx/access.log

Kendi uygulamanın giriş sayfası için özel filtre de yazabilirsin. Örneğin uygulaman başarısız girişleri Login failed for 198.51.100.7 biçiminde bir dosyaya yazıyorsa /etc/fail2ban/filter.d/uygulamam.conf:

[Definition]
failregex = Login failed for <HOST>

Ve jail.local içine:

[uygulamam]
enabled  = true
filter   = uygulamam
logpath  = /var/log/uygulamam/auth.log
maxretry = 10

Filtrenin doğru eşleştiğini test et:

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

Uygulaman Cloudflare gibi bir vekilin arkasındaysa günlüklerde ziyaretçinin değil vekilin IP'si görünür. Bu durumda fail2ban vekilin IP'sini engeller ve siten herkese kapanabilir. Önce web sunucusunun gerçek ziyaretçi IP'sini günlüğe yazdığından emin ol.

Engeli kaldırmak

sudo fail2ban-client set sshd unbanip 198.51.100.7
sudo fail2ban-client banned           # engellenen bütün IP'ler (yeni sürümlerde)

Fail2ban yeterli mi?

Hayır, bir ek katmandır. Asıl koruma:

  • SSH'de şifreyle girişi kapatıp sadece anahtarla giriş (PasswordAuthentication no),
  • root ile doğrudan girişi kapatmak,
  • mümkünse SSH'yi sadece belirli IP'lere açmak.

Şifreyle giriş kapalıysa kaba kuvvet denemeleri zaten başarılı olamaz; fail2ban bu durumda günlükleri temiz tutar ve gereksiz yükü azaltır. Web giriş sayfalarında ise uygulama içi deneme sınırlarıyla birlikte kullanıldığında gerçekten fark yaratır.

0

0 cevap

Henüz cevap yok. İlk cevabı sen yaz.

Cevap yaz

Cevap yazmak için giriş yapmalısın.

Konu bilgisi
  • Açılış10.11.2026
  • Son etkinlik1 saat önce
  • Cevap0
  • Görüntülenme0
  • Beğeni0
Yeni konu aç