Sitemap
Press enter or click to view image in full size

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ı. 🔐⚡

Get İbrahim Yıldız’s stories in your inbox

Join Medium for free to get updates from this writer.

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

--

--