
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.
Ne İşe Yarar?
- Brute-force saldırılarını engeller (SSH, FTP, HTTP, SMTP vs.).
- Logları takip edip şüpheli hareketleri yakalar.
- Saldıran IP’yi otomatik olarak firewall üzerinden kara listeye ekler.
- Belirli süre sonunda yasağı kaldırır (ör: 1 saat sonra).
- Sunucunun güvenliğini arttırır, servislerin çökmesini veya hacklenmesini zorlaştırır.
Kısacası kanka: Fail2Ban = Sunucunu brute-force saldırılara karşı otomatik koruyan bir güvenlik kalkanı. 🔐⚡
FAIL2BAN KURULUMU
# EPEL reposu ekle (Enterprise Linux için ek paketler)
sudo dnf install epel-release
# Fail2Ban ve firewalld entegrasyon paketlerini kur
sudo dnf install fail2ban fail2ban-firewalld
# Varsayılan yapılandırma dosyasını kopyala (orjinal dosyayı bozmamak için)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 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
# Servisi yeniden başlat (yeni ayarları yükle)
sudo systemctl restart 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
LOGLARI İZLEME (Gerçek zamanlı izleme)
sudo tail -f /var/log/fail2ban.log
# 10. FIREWALL TABANLI KORUMA (RHEL 8 için)
# Firewalld ile entegre ban aksiyonu
sudo tee /etc/fail2ban/action.d/firewallcmd-ipset.conf > /dev/null <<'EOF'
[Definition]
actionstart =
actionstop =
actioncheck =
# Ban aksiyonu: firewalld rich rule ekle
actionban = firewall-cmd --add-rich-rule='rule family="ipv4" source address="<ip>" drop'
# Unban aksiyonu: firewalld rich rule kaldır
actionunban = firewall-cmd --remove-rich-rule='rule family="ipv4" source addres
YAPILANDIRMAYI YENİDEN YÜKLE
sudo fail2ban-client reload
GÜNLÜK RAPOR SCRIPTİ (Cron job olarak)
sudo tee /etc/cron.daily/fail2ban-report > /dev/null <<'EOF'
#!/bin/bash
echo "Fail2Ban Günlük Rapor - $(date)"
echo "==============================="
echo "SSH Jail Durumu:"
sudo fail2ban-client status sshd
echo ""
echo "Son 24 saatteki banlar:"
sudo grep "Ban\|Unban" /var/log/fail2ban.log | grep "$(date +%Y-%m-%d)"
EOF
# Scripti çalıştırılabilir yap
sudo chmod +x /etc/cron.daily/fail2ban-report
🛡️ FAIL2BAN PARAMETRE AÇIKLAMALARI
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