Fail2Ban Yapılandırma: SSH Brute-Force Koruması Rehberi
Fail2Ban ile SSH brute-force saldırılarına karşı sunucunuzu koruyun. Kurulum, jail.local yapılandırması, Nginx/Apache jail'leri, IP beyaz listesi ve e-posta bildirimleri.
İçindekiler
Fail2Ban Yapılandırma: SSH Brute-Force Koruması Rehberi
SSH brute-force saldırıları, internet üzerindeki her sunucunun karşılaştığı en yaygın tehditlerden biridir. Fail2Ban, başarısız giriş denemelerini izleyerek saldırganların IP adreslerini otomatik olarak engelleyen güçlü bir araçtır. Bu rehberde Fail2Ban'ı kurarak SSH, Nginx ve Apache için kapsamlı koruma yapılandıracaksınız.
Fail2Ban Nedir?
Fail2Ban, log dosyalarını izleyen ve belirli bir süre içinde çok fazla başarısız giriş denemesi yapan IP adreslerini iptables/nftables kuralları ile engelleyen bir güvenlik aracıdır. Python ile yazılmış olup çok sayıda servis için hazır filtreler içerir.
Kurulum
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
# CentOS/AlmaLinux/Rocky Linux
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
# Fail2Ban servisini başlat
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# Durumu kontrol et
sudo systemctl status fail2ban
jail.local Yapılandırması
Fail2Ban'ın ana yapılandırma dosyası jail.conf'tur. Ancak bu dosyayı doğrudan düzenlemeyin — güncellemeler sırasında üzerine yazılabilir. Bunun yerine jail.local dosyası oluşturun:
# jail.conf'u kopyala
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Yapılandırmayı düzenle
sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
# Engelleme süresi (saniye) — 1 saat
bantime = 3600
# Deneme penceresi (saniye) — 10 dakika
findtime = 600
# Maksimum başarısız deneme sayısı
maxretry = 5
# Backend (auto, pyinotify, gamin, polling, systemd)
backend = auto
# DNS çözümleme (warn, no, yes)
usedns = warn
# Log seviyesi (CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG)
loglevel = INFO
# Log hedefi
logtarget = /var/log/fail2ban.log
# E-posta bildirimi
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
# Eylem — engelle ve e-posta gönder
action = %(action_mwl)s
# Yalnızca engelle (e-posta yok):
# action = %(action_)s
# Beyaz liste — bu IP'ler asla engellenmez
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
SSH Jail Yapılandırması
# /etc/fail2ban/jail.local içinde
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
# Ubuntu 20.04+ için:
# logpath = %(sshd_log)s
maxretry = 3
bantime = 86400 # 24 saat
findtime = 600
# Systemd journal kullanıyorsanız:
# backend = systemd
SSH için maxretry = 3 ve bantime = 86400 (24 saat) değerleri önerilir. Bu, saldırganların günde yalnızca 3 deneme yapmasına izin verir.
Nginx Jail Yapılandırması
# Nginx HTTP kimlik doğrulama hatası
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
# Nginx rate limiting ihlali
[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 600
# Nginx kötü bot engelleme
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
bantime = 86400
# Nginx 404 flood koruması
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 60
bantime = 3600
Özel Nginx 404 Filtresi Oluşturma
sudo nano /etc/fail2ban/filter.d/nginx-404.conf
[Definition]
failregex = ^<HOST> .* "(GET|POST|HEAD) .* HTTP/.*" 404
ignoreregex =
Apache Jail Yapılandırması
# Apache kimlik doğrulama hatası
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600
# Apache kötü bot
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/access.log
maxretry = 2
bantime = 86400
# Apache nuke/scan
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache2/error.log
maxretry = 6
bantime = 3600
# Apache overflow
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache2/error.log
maxretry = 2
bantime = 3600
IP Beyaz Listesi (Whitelist)
# jail.local içinde DEFAULT bölümüne ekle
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# Birden fazla IP veya subnet ekleyebilirsiniz
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16 203.0.113.1
# Yapılandırmayı yeniden yükle
sudo fail2ban-client reload
# Beyaz listeyi doğrula
sudo fail2ban-client get sshd ignoreip
Engellenen IP'leri İzleme
# Tüm jail'lerin durumunu görüntüle
sudo fail2ban-client status
# Belirli bir jail'in durumunu görüntüle
sudo fail2ban-client status sshd
# Engellenen IP'leri listele
sudo fail2ban-client status sshd | grep "Banned IP"
# Tüm engellenen IP'leri göster
sudo iptables -L f2b-sshd -n --line-numbers
# Log dosyasını izle
sudo tail -f /var/log/fail2ban.log
# Son engelleme olaylarını filtrele
sudo grep "Ban" /var/log/fail2ban.log | tail -20
IP Engelleme ve Engel Kaldırma
# IP'yi manuel olarak engelle
sudo fail2ban-client set sshd banip 1.2.3.4
# IP'nin engelini kaldır
sudo fail2ban-client set sshd unbanip 1.2.3.4
# Tüm engelleri kaldır (dikkatli kullanın!)
sudo fail2ban-client unban --all
# Belirli bir jail'i yeniden başlat
sudo fail2ban-client restart sshd
E-posta Bildirimleri
# Postfix veya sendmail kur
sudo apt install postfix -y
# jail.local içinde e-posta ayarları
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@yourdomain.com
mta = sendmail
# Eylem seçenekleri:
# action_ = yalnızca engelle
# action_mw = engelle + e-posta
# action_mwl = engelle + e-posta + whois + log satırları
action = %(action_mwl)s
Fail2Ban Durumunu Kontrol Etme
# Servis durumu
sudo systemctl status fail2ban
# Yapılandırmayı test et
sudo fail2ban-client -t
# Tüm jail'leri listele
sudo fail2ban-client status
# Fail2Ban'ı yeniden başlat
sudo systemctl restart fail2ban
# Yapılandırmayı yeniden yükle (servis yeniden başlatmadan)
sudo fail2ban-client reload
Gelişmiş: Kalıcı Engelleme
Varsayılan olarak Fail2Ban, sunucu yeniden başlatıldığında engelleri sıfırlar. Kalıcı engelleme için:
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# Kalıcı engelleme (-1 = sonsuza kadar)
bantime = -1
# Veya çok uzun süre:
bantime = 604800 # 7 gün
Çok agresif ayarlar (düşük maxretry, uzun bantime) meşru kullanıcıları da engelleyebilir. SSH için maxretry=3-5 ve bantime=3600-86400 dengeli bir yaklaşımdır.
Sonuç
Fail2Ban, sunucu güvenliğinin vazgeçilmez bir parçasıdır. SSH, Nginx ve Apache için doğru yapılandırıldığında brute-force saldırılarını büyük ölçüde azaltır. Düzenli olarak log dosyalarını izleyin ve yanlış pozitif engellemeleri beyaz listeye ekleyin.
İlgili Makaleler
Malware ve Rootkit Tarama: rkhunter ve ClamAV Rehberi
Linux sunucunuzu malware ve rootkit'lere karşı koruyun. rkhunter ve ClamAV kurulumu, tarama yapılandırması, sonuç yorumlama ve zamanlanmış tarama rehberi.
WireGuard VPN Sunucusu Kurulumu: Adım Adım Rehber
WireGuard VPN sunucusu kurun: anahtar üretimi, sunucu ve istemci yapılandırması, IP yönlendirme, firewall kuralları ve Windows/Linux/Android istemci kurulumu.
Zero Trust Ağ Güvenliği: Temel Yapılandırma Rehberi
Zero Trust ağ güvenliği ilkeleri ve pratik uygulama: asla güvenme her zaman doğrula, mikro-segmentasyon, kimlik tabanlı erişim ve mevcut araçlarla uygulama rehberi.