Fail2Ban, Linux sunucularda başarısız giriş denemelerini izleyen ve belirli bir eşiği aşan IP adreslerini otomatik olarak engelleyen açık kaynaklı bir güvenlik aracıdır. Özellikle SSH, FTP ve web panellerini hedef alan brute-force saldırılarına karşı etkili bir ilk savunma katmanı oluşturur.
Fail2Ban Nasıl Çalışır?
Fail2Ban’ın çalışma mantığı üç temel kavram üzerine kuruludur.
- Jail (Hapishane): Belirli bir servis için izleme kurallarının bütününü tanımlar. Hangi log dosyasının izleneceğini, kaç başarısız denemeden sonra ban uygulanacağını ve ban süresini belirtir.
- Filter (Filtre): Log dosyalarından başarısız giriş denemelerini yakalamak için kullanılan regex kalıplarıdır. SSH, FTP, Postfix gibi popüler servisler için hazır filtrelerle birlikte gelir.
- Action (Eylem): Bir IP ban eşiğini aştığında Fail2Ban devreye girer ve iptables, firewalld veya nftables aracılığıyla o IP’ye gelen bağlantıları engeller. Ban süresi dolduğunda engel otomatik olarak kalkar.
Fail2Ban Hangi Servisleri Koruyabilir?
Fail2Ban yalnızca SSH için değil, log dosyası üreten hemen her servis için kullanılabilir. Hazır filtrelerle desteklenen başlıca servisler: SSH/SFTP, Apache, Nginx, Postfix, Dovecot, ProFTPD, vsftpd, MySQL ve cPanel/Plesk gibi kontrol panelleri.
Fail2Ban Kurulumu
Debian / Ubuntu
bash
sudo apt update
sudo apt install fail2ban -y
RHEL / CentOS / AlmaLinux
bash
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
Kurulumun ardından servisi başlatın:
bash
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Temel Yapılandırma
Ana yapılandırma dosyası /etc/fail2ban/jail.conf‘tur. Ancak bu dosyayı doğrudan düzenlemek önerilmez; güncellemelerle üzerine yazılabilir. Bunun yerine jail.local dosyası oluşturun:
bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Temel ayarlar:
ini
[DEFAULT]
bantime = 1h # Ban süresi
findtime = 10m # Deneme sayacının sıfırlanma süresi
maxretry = 5 # Maksimum başarısız deneme sayısı
ignoreip = 127.0.0.1 # Asla banlanmayacak IP’ler
SSH için jail etkinleştirme:
ini
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Yönetim Komutları
Aktif jailleri listele:
bash
sudo fail2ban-client status
SSH jail durumunu görüntüle:
bash
sudo fail2ban-client status sshd
Bir IP’yi manuel olarak banla:
bash
sudo fail2ban-client set sshd banip 1.2.3.4
Banlı bir IP’yi serbest bırak:
bash
sudo fail2ban-client set sshd unbanip 1.2.3.4
Canlı log takibi:
bash
sudo tail -f /var/log/fail2ban.log