Her Linux sunucu 22/tcp portuna dakikalar içinde brute force deneme alır — botnet''ler sürekli SSH parola tahmini yapıyor. Fail2ban, log dosyalarını okuyarak başarısız giriş denemelerini tespit eder ve saldırgan IP''yi otomatik olarak firewall''dan banlar. Bu rehber Fail2ban''i sıfırdan kurup özelleştirmeyi anlatır.
Kurulum
İlgili rehberler: DNS nedir, ayarları değiştirme · Domain adı ve WHOIS sorgulama · Hosting türleri rehberi · Nginx yapılandırma · Plesk panel yönetimi
# Ubuntu / Debian
sudo apt update && sudo apt install -y fail2ban
# RHEL / AlmaLinux / Rocky
sudo dnf install -y epel-release && sudo dnf install -y fail2ban
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban
Temel Yapılandırma: jail.local
Asla jail.conf''u düzenlemeyin — paket güncellemesinde üzerine yazılır. Bunun yerine jail.local oluşturun. Fail2ban her iki dosyayı birleştirerek okur.
# /etc/fail2ban/jail.local
[DEFAULT]
# Global ayarlar
bantime = 1h
findtime = 10m
maxretry = 5
banaction = iptables-multiport
backend = systemd
# Kendi IP''nizi banlanmaktan korur
ignoreip = 127.0.0.1/8 ::1 SIZIN_EV_IP/32
# E-posta bildirimi
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
action = %(action_mwl)s
[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 24h
Jail''leri Yönetme
sudo systemctl reload fail2ban
# Tüm jail''leri listele
sudo fail2ban-client status
# SSH jail durumu
sudo fail2ban-client status sshd
# Banlanan IP''yi serbest bırak
sudo fail2ban-client set sshd unbanip 1.2.3.4
# Manuel IP ban
sudo fail2ban-client set sshd banip 1.2.3.4
Nginx Auth Brute Force Koruması
Sadece SSH değil; Nginx basic auth, WordPress wp-login, Postfix SASL gibi servisler de korunabilir. Kendi jail''lerinizi yazabilirsiniz.
# /etc/fail2ban/jail.local içine
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
[nginx-botsearch]
enabled = true
filter = nginx-botsearch
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2
bantime = 24h
[wordpress]
enabled = true
filter = wordpress
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 3
# /etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php HTTP.*" 200
^<HOST> .* "POST /xmlrpc.php HTTP.*"
ignoreregex =
Kalıcı Ban Listesi (recidive jail)
Aynı IP birden fazla kez banlanırsa recidive jail''i çok daha uzun süreli ban uygular. Chronik saldırganlar için ideal.
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 5
Log Takibi ve İstatistik
# Canlı log
sudo tail -f /var/log/fail2ban.log
# Son 24 saatte banlanan IP sayısı
sudo grep "Ban " /var/log/fail2ban.log | grep "$(date +%Y-%m-%d)" | wc -l
# En çok banlanan ülkeler (whois ile coğrafi analiz)
sudo grep "Ban " /var/log/fail2ban.log | awk '{print $NF}' | sort -u | head -20
Ekstra Sertleştirme
- SSH için
PasswordAuthentication no— sadece anahtar ile giriş - SSH port''unu 22''den başka bir porta taşıyın (22022 gibi)
AllowUsers admin@1.2.3.0/24ile IP bazlı kısıtlama- UFW veya iptables ile default deny policy
- Fail2ban log''larını Grafana/Loki''ye gönderip saldırı trendini izleyin
Modern Web Hosting ve Sunucu Altyapısı
Performanslı bir web hosting hizmeti üç temel altyapı kararına dayanır: NVMe SSD diskler (klasik SATA SSD'ye göre 4-6 kat IOPS), LiteSpeed Web Server veya Nginx + LSCache kombinasyonu (Apache'ye göre 9 kat istek kapasitesi) ve CloudLinux + Imunify360 izolasyonu. Hosting sağlayıcısının kontrol paneli (cPanel, Plesk, DirectAdmin), günlük yedek politikası, veri merkezi konumu ve destek ekibi yanıt süresi de büyük fark yaratır. Türkiye lokasyonu yerli ziyaretçilere düşük gecikme verirken; Hetzner Frankfurt veya OVH Roubaix gibi Avrupa lokasyonları global trafik için daha uygundur. Site büyüdükçe paylaşımlı hosting'ten VPS, ardından dedicated server'a geçiş; CPU/RAM/disk kaynaklarının web sitemizin ihtiyaçlarına göre ölçeklenmesini sağlar.
Sunucunuzu Fail2ban, UFW, SSH hardening ve anti-scanner koruması ile tam sertleştirmemiz için iletişime geçin