Fail2Ban, Linux’ta çalışan açık kaynak güvenlik yazılımıdır. Sunucunun loglarını izleyerek başarısız giriş denemelerini tespit eder ve saldırgan IP’leri geçici olarak banlar.
# SSH için özel jail (hapishane) oluştur # Jail: Belirli bir servis için ban kurallarının tanımlandığı bölüm sudo tee /etc/fail2ban/jail.d/sshd.local > /dev/null <<'EOF' [sshd] # SSH servisi için jail bölümü enabled = true # Bu jail aktif edilsin mi? port = ssh # Hangi port izlenecek? (ssh = 22) logpath = %(sshd_log)s # SSH log dosyasının yolu backend = %(sshd_backend)s # Log formatı (systemd veya auto) maxretry = 3 # Kaç başarısız denemeden sonra banlansın? bantime = 3600 # Ban süresi (saniye) - 1 saat findtime = 600 # Kaç saniyelik zaman diliminde maxretry sayısına bakılacak? (10 dakika) banaction
SERVİS YÖNETİMİ
# Fail2Ban servisini başlat ve bootta otomatik başlasın sudo systemctl enable --now fail2ban
# 4. DURUM KONTROLÜ # Tüm jails (hapishaneler) durumunu göster sudo fail2ban-client status
# Sadece sshd jail durumunu göster sudo fail2ban-client status sshd
# 5. TEST (DİKKAT: Kendini banlamamak için!) # Başka bir terminalden test et: ssh user@localhost # 3 kez yanlış şifre gir → banlanacaksın
# 6. BAN LİSTESİNİ KONTROL ET sudo fail2ban-client status sshd # Çıktıda "Banned IP list:" altında banlı IP'ler görünecek
# 7. MANUEL BAN KALDIRMA # Örnek: 192.168.1.100 IP'sinin banını kaldır sudo fail2ban-client set sshd unbanip 192.168.1.100
# 8. ÖZEL FİLTRE OLUŞTURMA (Opsiyonel) # Varsayılan SSH filtrelerine ek özelleştirme sudo tee /etc/fail2ban/filter.d/sshd-custom.conf > /dev/null <<'EOF' [Definition] # Başarısız giriş pattern'leri (regex) failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from <HOST>$ ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>$ # Göz ardı edilecek pattern'ler ignoreregex = EOF
enabled: Jail aktif/pasif (true/false) port: İzlenecek port (ssh, 22, 2222, vs.) logpath: Log dosyası yolu maxretry: Maksimum başarısız deneme bantime: Ban süresi (saniye) findtime: Deneme sayacının sıfırlanma süresi banaction: Banlama mekanizması Ban Seviyeleri:
bantime = 3600 → 1 saat ban (hafif saldırı) bantime = 86400 → 24 saat ban (orta şiddet) bantime = 604800 → 1 hafta ban (şiddetli saldırı) Önemli Dosyalar:
/etc/fail2ban/jail.conf → Varsayılan yapılandırma /etc/fail2ban/jail.local → Özel yapılandırma (düzenle bu dosyayı!) /etc/fail2ban/jail.d/ → Ek jail dosyaları /var/log/fail2ban.log → Fail2Ban logları
🔍 FAYDALI KOMUTLAR:
# Tüm banlı IP'leri listele sudo fail2ban-client status sshd
# Belirli IP'yi manuel banla sudo fail2ban-client set sshd banip 192.168.1.50
# Belirli IP'yi manuel unbanla sudo fail2ban-client set sshd unbanip 192.168.1.50
# Fail2Ban versiyonunu kontrol et sudo fail2ban-client --version
# Tüm mevcut jailsleri listele sudo fail2ban-client status
# Fail2Ban servis durumu sudo systemctl status fail2ban