Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Bu rehberde Fail2ban kurulumu yapacak, jail.local ile temel ayarları belirleyecek, SSH ve web servisi için koruma etkinleştirecek ve engellenen IP adreslerini yöneteceksiniz. Fail2ban günlük dosyalarını izleyip tekrarlayan başarısız girişleri yapan adresleri geçici olarak güvenlik duvarında engeller.
Tahmini süre: 20 dakika.
Gereksinimler
- Debian/Ubuntu veya AlmaLinux/Rocky sunucu ve sudo yetkisi
- Çalışan bir güvenlik duvarı (UFW, firewalld veya nftables/iptables)
- Kendi IP adresinizi bilmek; yanlışlıkla kendinizi engellememek için ignoreip listesine ekleyeceksiniz
- Açık bir ikinci SSH oturumu ya da konsol erişimi
Adım adım Fail2ban kurulumu ve ayarları
1. Fail2ban’ı kurun
# Debian/Ubuntu
sudo apt update
sudo apt install fail2ban
# AlmaLinux/Rocky
sudo dnf install epel-release
sudo dnf install fail2ban
sudo systemctl enable --now fail2banRHEL tabanlı sistemlerde firewalld ile uyum için fail2ban-firewalld paketi de sunulabilir; sürümünüzdeki paket adlarını dnf search fail2ban ile kontrol edin.
2. jail.local dosyasını oluşturun
Varsayılan jail.conf dosyasını değiştirmeyin; güncellemelerde ezilir. Ayarları jail.local dosyasına yazın. Aşağıda kendi IP adresinizi ignoreip satırına ekleyin.
sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
EOF- bantime: Engelin süresi
- findtime: Hataların sayıldığı zaman aralığı
- maxretry: Engellenmeden önce izin verilen hata sayısı
- ignoreip: Asla engellenmeyecek adresler (boşlukla ayırın, kendi IP adresinizi ekleyin)
3. Günlük kaynağını doğru seçin
Yeni Debian ve Ubuntu sürümlerinde SSH günlükleri /var/log/auth.log yerine yalnızca systemd günlüğünde olabilir. Bu durumda sshd jail için arka ucu systemd yapın: ikinci bir [sshd] bölümü açmak yerine, 2. adımda oluşturduğunuz [sshd] bölümüne backend satırını ekleyin. Bu arka uç python3-systemd paketini gerektirir. RHEL tabanlı sistemlerde de systemd arka ucu genellikle sorunsuz çalışır.
[sshd]
enabled = true
backend = systemd4. Servisi yeniden başlatın ve durumu görün
sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd5. Web uygulaması jail’i ekleyin
Fail2ban birçok hazır süzgeç içerir. Örneğin Nginx HTTP temel kimlik doğrulaması hatalarını izleyen jail aşağıdaki gibi etkinleştirilir. Günlük yolunu kendi kurulumunuza göre doğrulayın.
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.logHazır süzgeçleri /etc/fail2ban/filter.d/ dizininde, hazır jail örneklerini jail.conf içinde bulabilirsiniz. Kendi uygulamanız için süzgeç yazdığınızda önce regex’i deneyin.
sudo fail2ban-regex /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-http-auth.conf6. Tekrarlayan saldırganlar için uzun engel kullanın
recidive jail’i, Fail2ban’ın kendi günlüğüne bakarak tekrar tekrar engellenen adresleri daha uzun süre engeller. Alternatif olarak, sürümünüzde mevcutsa [DEFAULT] altındaki bantime.increment = true seçeneği tekrar eden adreslerin engel süresini kademeli artırır. recidive, Fail2ban’ın kendi günlük dosyasını (/var/log/fail2ban.log) okur; [DEFAULT] altında backend = systemd tanımlarsanız bu jail’e backend = auto yazarak dosya tabanlı izlemeyi koruyun.
[recidive]
enabled = true
bantime = 1w
findtime = 1d
maxretry = 37. Engelleri yönetin
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 203.0.113.10
sudo fail2ban-client set sshd banip 203.0.113.20
sudo tail -n 30 /var/log/fail2ban.logDoğrulama
- fail2ban-client status çıktısında etkin jail’ler listelenmeli
- Başka bir makineden bilerek yanlış parola veya anahtar ile birkaç kez SSH denemesi yaptığınızda, o adres engellenmiş adresler listesine girmeli (kendi yönetim IP adresinizle denemeyin)
- /var/log/fail2ban.log içinde Ban satırı görülmeli
sudo fail2ban-client status sshd
sudo grep -i ban /var/log/fail2ban.log | tailSık karşılaşılan sorunlar
- Jail başlamıyor, günlük dosyası bulunamadı: logpath yanlıştır veya günlük yalnızca systemd’dedir; backend = systemd kullanın.
- Engel var ama saldırgan bağlanmaya devam ediyor: Banaction güvenlik duvarınızla uyumsuzdur; UFW veya firewalld’ye uygun banaction seçin.
- Kendi IP adresim engellendi: unbanip komutuyla kaldırın ve ignoreip listesine ekleyin.
- Yapılandırma hatası: sudo fail2ban-client -t ile testi çalıştırın, journalctl -u fail2ban ile hatayı okuyun.
- Docker konteynerlerine gelen saldırılar engellenmiyor: Docker’a yönlendirilen trafik INPUT yerine FORWARD zincirinden geçer; ilgili jail’de engelin DOCKER-USER zincirine yazılması (örneğin iptables tabanlı eylemlerde chain = DOCKER-USER) gerekir.
Güvenlik ve bakım notları
- Fail2ban tek başına koruma değildir; anahtar girişi ve güncel yama ile birlikte kullanın
- ignoreip listesine geniş ağ aralıkları eklemeyin
- Yeni servis kurduğunuzda ilgili jail’i etkinleştirmeyi unutmayın
- Günlük döndürme sonrası Fail2ban’ın izlemeye devam ettiğini kontrol edin
- Yanlış pozitifleri önlemek için maxretry ve findtime değerlerini ortamınıza göre ayarlayın
- Büyük saldırılarda hızlı güvenlik duvarı kurallarını ve hız sınırlamayı da değerlendirin
Sık sorulan sorular
Fail2ban hangi servisleri koruyabilir?
SSH, Nginx, Apache, Postfix, Dovecot ve benzeri günlük üreten pek çok servis için hazır süzgeçler vardır. Günlüğü olan her servis için kendi süzgecinizi de yazabilirsiniz.
Engel süresi ne kadar olmalı?
Başlangıç için bir saat makuldür. Tekrar eden saldırılar için recidive jail’i veya artan engel süresi kullanarak daha uzun süreler uygulayabilirsiniz.
IPv6 desteği var mı?
Güncel Fail2ban sürümleri IPv6 adreslerini de destekler. Güvenlik duvarı eyleminizin IPv6 kurallarını da yönettiğinden emin olmak için belgeye bakın.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- Linux’ta disk doluluk sorunu giderme (df, du, inode, silinmiş-açık dosyalar)Linux’ta disk doluluk sorununu adım adım giderin: df ve du ile büyük dizinleri bulun, inode tükenmesini ve silinmiş ama açık dosyaları tespit edip güvenle alan açın.
- auditd ile denetim kaydı: kritik dosya ve komutları izlemeauditd ile Linux sunucuda denetim kaydı tutun: kritik dosya değişikliklerini ve komutları izleyen kurallar yazın, ausearch ve aureport ile kayıtları sorgulayın.
- systemd servis birimi yazma ve sertleştirme seçenekleriKendi uygulamanız için systemd servis birimi yazın: Unit, Service ve Install bölümleri, otomatik yeniden başlatma, ortam dosyası ve sertleştirme seçenekleri.
- LVM ile disk yönetimi: birim oluşturma, büyütme ve anlık görüntüLVM ile disk yönetimini öğrenin: fiziksel birim, birim grubu ve mantıksal birim oluşturma, çalışırken büyütme, yeni disk ekleme ve anlık görüntü (snapshot) alma.