Fail2Ban Kurulumu ve Yapılandırması: SSH ve Web Koruması
Fail2Ban, başarısız giriş denemelerini izleyerek kötü niyetli IP'leri otomatik engelleyen güçlü bir güvenlik aracıdır. Kurulum ve yapılandırma rehberi.
Fail2Ban Nedir?
Fail2Ban, log dosyalarını izleyerek başarısız kimlik doğrulama denemelerini tespit eden ve belirli bir eşiği aşan IP adreslerini otomatik olarak engelleyen açık kaynaklı bir güvenlik aracıdır. Özellikle SSH kaba kuvvet (brute force) saldırılarına karşı son derece etkilidir.
Fail2Ban'ın çalışma mantığı şöyledir:
- Log dosyalarını gerçek zamanlı izler (auth.log, nginx/access.log vb.)
- Belirli zaman aralığında (findtime) başarısız denemeleri (maxretry) sayar
- Limiti aşan IP'yi firewall kuralıyla (iptables/nftables) engeller (bantime)
- Ban süresi dolunca veya manuel olarak ban kaldırılır
Kurulum
Ubuntu / Debian
sudo apt update
sudo apt install fail2ban -y
# Servisi başlat ve otomatik başlatmayı aktifleştir
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Durumu kontrol et
sudo systemctl status fail2ban
AlmaLinux / Rocky Linux / CentOS
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Yapılandırma Dosyaları
Fail2Ban'ın iki ana yapılandırma dosyası vardır:
/etc/fail2ban/jail.conf: Varsayılan yapılandırma. Güncellemelerle üzerine yazılabilir; doğrudan düzenlenmemelidir./etc/fail2ban/jail.local: Yerel özelleştirmeler için. Her güncelleme sonrası korunur.
# jail.conf'dan jail.local kopyasını oluşturun
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Temel jail.local Yapılandırması
[DEFAULT]
# Beyaz liste: Asla engellenmesin
ignoreip = 127.0.0.1/8 ::1 KENDI_IP_ADRESINIZ
# Ban süresi (saniye veya m/h/d/w formatı)
bantime = 1h
# Bu süre içinde...
findtime = 10m
# ...bu kadar başarısız deneme olursa ban uygula
maxretry = 5
# Backend: systemd veya auto
backend = systemd
# Ban işlemi için kullanılan action
banaction = iptables-multiport
# E-posta bildirimi (isteğe bağlı)
# destemail = admin@example.com
# sender = fail2ban@example.com
# action = %(action_mwl)s
SSH Koruması
[sshd]
enabled = true
port = 2222 # SSH portunuzu belirtin (varsayılan 22)
filter = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 24h
findtime = 10m
Nginx Koruması
# Nginx HTTP auth brute force
[nginx-http-auth]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
maxretry = 5
# Nginx kötü bot ve tarayıcı engelleme
[nginx-botsearch]
enabled = true
port = http,https
logpath = %(nginx_access_log)s
maxretry = 2
findtime = 1m
# Nginx 404 flood engelleme
[nginx-limit-req]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
Apache Koruması
[apache-auth]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 5
[apache-badbots]
enabled = true
port = http,https
logpath = %(apache_access_log)s
maxretry = 2
[apache-overflows]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 2
WordPress Özel Filtresi
WordPress wp-login.php için özel filter oluşturun:
sudo nano /etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^<HOST> .* "POST .*/wp-login\.php
^<HOST> .* "POST .*/xmlrpc\.php
ignoreregex =
# jail.local'a ekle
[wordpress]
enabled = true
filter = wordpress
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 5m
bantime = 24h
Postfix Mail Sunucusu Koruması
[postfix]
enabled = true
port = smtp,465,submission
logpath = %(postfix_log)s
maxretry = 5
[postfix-sasl]
enabled = true
port = smtp,465,submission
logpath = %(postfix_log)s
Fail2Ban Servisi Yeniden Başlatma
sudo systemctl restart fail2ban
sudo fail2ban-client status
Ban ve Unban İşlemleri
# Tüm aktif jail'leri listele
sudo fail2ban-client status
# Belirli bir jail'in durumunu görüntüle
sudo fail2ban-client status sshd
# Belirli bir IP'yi manuel ban et
sudo fail2ban-client set sshd banip 192.168.1.100
# Belirli bir IP'nin banını kaldır
sudo fail2ban-client set sshd unbanip 192.168.1.100
# Engellenen IP'leri listele
sudo iptables -n -L | grep "fail2ban"
# veya
sudo fail2ban-client status sshd | grep "Banned IP"
Log Dosyalarını İzleme
# Fail2Ban log dosyası
sudo tail -f /var/log/fail2ban.log
# Belirli bir IP'nin ban geçmişi
sudo grep "192.168.1.100" /var/log/fail2ban.log
# Son banlanan IP'leri göster
sudo zcat /var/log/fail2ban.log* | grep "Ban " | tail -20
Ban Süresini Kademeli Artırma
Aynı IP tekrar tekrar ban yiyorsa süresi otomatik artırılabilir:
[DEFAULT]
# İlk ban: 1 saat, ikincisi: 4 saat, üçüncüsü: 24 saat vb.
bantime.increment = true
bantime.factor = 4
bantime.formula = ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor
IP Geolocation ile Yalnızca Belirli Ülkelere İzin Verme
# GeoIP ile belirli ülkeleri engelleme örneği (iptables-geoport action ile)
# fail2ban + geoip-ipset kombinasyonu
sudo apt install ipset xtables-addons-common
# Detaylı kurulum için fail2ban wiki'ye bakın
Fail2Ban Performans Ayarları
[DEFAULT]
# Log okuma arka ucu (yüksek trafikte pyinotify daha verimli)
backend = systemd
# DB purge aralığı (saniye)
dbpurgeage = 86400 # 1 gün
# Birden fazla iş parçacığı
# threadlevel = 2
Özet
Fail2Ban, sunucu güvenliğinin vazgeçilmez bir parçasıdır. Kurulum ve temel yapılandırma yaklaşık 15 dakika alır ve anında SSH brute force saldırılarına karşı koruma sağlar. SSH dışında Nginx, Apache ve WordPress için de jail tanımlamak, sunucunuzun tüm giriş noktalarını korumanızı sağlar. Ban süresini kademeli artırma özelliği, ısrarcı saldırılar için özellikle etkilidir.
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!