Fail2Ban ile SSH güvenliğini sağlama

📅 7 Ocak 2026Emre Karabulut
⏱️ Yaklaşık 7 dakikalık okuma süresi

SSH Güvenliğiniz İçin Fail2Ban: Otomatik Saldırı Savunması

Bir sistem yöneticisi olarak, sunucularımızın güvenliğini sağlamak en öncelikli görevlerimizden biridir. İnternet’e açık her sunucu, özellikle SSH gibi kritik servisler üzerinden sürekli olarak otomatik brute-force saldırılarına maruz kalır. Bu saldırılar, doğru yapılandırılmadığında sistemlerimize yetkisiz erişim sağlayabilir veya kaynaklarımızı gereksiz yere tüketebilir. İşte tam bu noktada Fail2Ban devreye giriyor.

Bu blog yazısında, Fail2Ban’ı kullanarak SSH servislerimizi nasıl daha güvenli hale getireceğimizi, kurulumdan yapılandırmaya ve izlemeye kadar adım adım inceleyeceğiz.

Fail2Ban Nedir?

Fail2Ban, Linux sistemler için geliştirilmiş, log dosyalarını izleyerek otomatik olarak kötü niyetli IP adreslerini yasaklayan bir saldırı önleme çerçevesidir. Belirli bir süre içinde belirli sayıda başarısız oturum açma denemesi (veya başka bir kural ihlali) tespit ettiğinde, o IP adresini güvenlik duvarı kuralları (iptables) aracılığıyla geçici veya kalıcı olarak engeller. Sadece SSH için değil, web sunucuları (Apache, Nginx), e-posta sunucuları (Postfix, Dovecot) gibi birçok farklı servis için de kullanılabilir.

Fail2Ban Nasıl Çalışır?

Fail2Ban, temelde aşağıdaki adımları izler:

  • Belirlenen servislerin log dosyalarını (örneğin, /var/log/auth.log veya /var/log/secure) sürekli olarak izler.
  • Önceden tanımlanmış düzenli ifadeler (regex) kullanarak başarısız giriş denemeleri veya diğer şüpheli etkinlikleri arar.
  • Belirli bir IP adresinden gelen başarısız deneme sayısı, ayarlanan maxretry değerine ve findtime süresi içinde ulaşırsa, o IP adresini yasaklar.
  • Yasaklama süresi (bantime) sona erdiğinde, IP adresinin yasağını otomatik olarak kaldırır.

Kurulum

Fail2Ban’ı kurmak oldukça basittir. Kullandığınız Linux dağıtımına göre ilgili komutları çalıştırın:


# Debian/Ubuntu tabanlı sistemler için:
sudo apt update
sudo apt install fail2ban

# CentOS/RHEL/Fedora tabanlı sistemler için:
sudo dnf install epel-release # Gerekliyse EPEL deposunu ekleyin
sudo dnf install fail2ban # veya sudo yum install fail2ban

# Servisi başlatın ve önyüklemede otomatik başlamasını sağlayın:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Temel Yapılandırma: jail.local

Fail2Ban’ın ana yapılandırma dosyası /etc/fail2ban/jail.conf‘tur. Ancak bu dosyayı doğrudan düzenlemek yerine, jail.local adlı bir kopya oluşturarak değişiklikleri bu dosyada yapmanız önerilir. Bu, gelecekteki güncellemelerde yapılandırmanızın üzerine yazılmasını önler.


sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

jail.local dosyasını açtıktan sonra, [DEFAULT] bölümünde genel ayarları bulacaksınız. Bu ayarları kendi ihtiyaçlarınıza göre düzenleyebilirsiniz:


[DEFAULT]
# Kendi IP'lerinizi veya güvenilir ağlarınızı buraya ekleyin. Bu IP'ler asla yasaklanmayacaktır.
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42/32

# Bir IP adresi ne kadar süreyle yasaklanacak (ör: 1 saat = 3600 saniye).
# -1 kalıcı yasaklama anlamına gelir (önerilmez).
bantime  = 1h

# Belirtilen 'maxretry' sayısına ulaşmak için ne kadar süreye bakılacak (ör: 10 dakika = 600 saniye).
findtime = 10m

# Yasaklanmadan önce kaç başarısız giriş denemesi yapılacak.
maxretry = 5

# E-posta bildirimleri için (isteğe bağlı)
# destemail = your_email@example.com
# sendername = Fail2Ban
# mta = sendmail # veya mail, postfix vb.
# action = %(action_mwl)s # Yasakla, e-posta gönder, log'la

Yukarıdaki örnekte bantime, findtime ve maxretry değerleri için yaygın olarak kullanılan ayarları görebilirsiniz. ignoreip listesine kendi statik IP adreslerinizi veya güvendiğiniz ağları eklemeyi unutmayın, böylece kendinizi yanlışlıkla yasaklamazsınız.

SSH Jail’i Etkinleştirme

Şimdi jail.local dosyasında SSH için özel yapılandırmayı bulalım ve etkinleştirelim. Dosyada [sshd] veya [sshd] benzeri bir bölüm arayın. Genellikle bu bölüm varsayılan olarak kapalıdır (enabled = false).


[sshd]
enabled = true
port    = ssh        # SSH'nin çalıştığı port. Varsayılanı 22'dir. Eğer değiştirdiyseniz buraya yazın (ör: 2222).
filter  = sshd
logpath = /var/log/auth.log  # Debian/Ubuntu tabanlı sistemler için
            #/var/log/secure # CentOS/RHEL/Fedora tabanlı sistemler için
maxretry = 5         # Bu jail için özel 'maxretry' ayarı (DEFAULT'ı geçersiz kılar)
bantime = 1h         # Bu jail için özel 'bantime' ayarı (DEFAULT'ı geçersiz kılar)

logpath değerini sisteminize uygun olanla değiştirmeyi unutmayın. Çoğu Debian/Ubuntu tabanlı sistemde /var/log/auth.log kullanılırken, CentOS/RHEL/Fedora gibi sistemlerde /var/log/secure kullanılır.

Değişiklikleri Uygulama

Yapılandırma dosyasında yaptığınız değişikliklerin geçerli olması için Fail2Ban servisini yeniden başlatmanız gerekir:


sudo systemctl restart fail2ban

Servisin durumunu kontrol ederek sorunsuz çalıştığından emin olun:


sudo systemctl status fail2ban

Çıktıda “active (running)” mesajını görmelisiniz.

Durumu Kontrol Etme

Fail2Ban’ın genel durumunu ve hangi jail’lerin etkin olduğunu görmek için fail2ban-client komutunu kullanabilirsiniz:


sudo fail2ban-client status

Belirli bir jail’in (örneğin sshd jail’inin) durumunu, yasaklanan IP’leri ve diğer ayrıntıları görmek için:


sudo fail2ban-client status sshd

Bu komut, sshd jail’i tarafından şu anda yasaklanmış olan IP adreslerinin bir listesini gösterecektir.

Bir IP Adresini Yasaklama Testi

Fail2Ban’ın çalıştığını test etmek için başka bir makineden SSH ile sunucunuza kasten yanlış şifrelerle bağlanmayı deneyin. maxretry değerine ulaştığınızda, Fail2Ban’ın o IP adresini yasakladığını göreceksiniz. Yasaklama sonrası o IP adresinden SSH erişimi reddedilecektir.

Bir IP Adresinin Yasağını Kaldırma

Yanlışlıkla yasakladığınız bir IP adresinin yasağını kaldırmak için şu komutu kullanabilirsiniz:


sudo fail2ban-client set sshd unbanip 192.0.2.1

192.0.2.1 yerine yasaklamayı kaldırmak istediğiniz IP adresini yazın.

Ek Güvenlik İpuçları

Fail2Ban harika bir araç olsa da, SSH güvenliği için tek başına yeterli değildir. Ek güvenlik önlemleri alarak sunucunuzu daha da güçlendirebilirsiniz:

  • Varsayılan SSH Portunu Değiştirin: SSH’nin varsayılan 22 numaralı portunu değiştirmek, otomatik tarama botlarının işini zorlaştırır. (Unutmayın, Fail2Ban’ın port ayarını da güncellemelisiniz.)
  • Parola Yerine SSH Anahtarları Kullanın: Parola tabanlı kimlik doğrulamasını devre dışı bırakıp SSH anahtarlarıyla oturum açmayı tercih edin. Bu, brute-force saldırılarını çok daha etkisiz hale getirir.
  • Root Girişini Devre Dışı Bırakın: Doğrudan root kullanıcısıyla SSH üzerinden oturum açmayı engelleyin. Normal bir kullanıcıyla giriş yapın ve gerektiğinde sudo kullanın.
  • Güvenilir IP’leri Beyaz Listeye Alın: jail.local dosyasındaki ignoreip parametresini kullanarak kendi IP adreslerinizi veya güvendiğiniz ağları her zaman beyaz listeye alın.

Sonuç

Fail2Ban, sunucularınızı SSH brute-force saldırılarına karşı korumak için vazgeçilmez bir araçtır. Kurulumu ve yapılandırması kolaydır, ancak sunduğu güvenlik katmanı oldukça önemlidir. Diğer SSH güvenlik en iyi uygulamalarıyla birlikte kullanıldığında, sunucularınızın genel güvenlik duruşunu önemli ölçüde artıracaktır. Unutmayın, güvenlik sürekli bir süreçtir ve düzenli izleme ve güncelleme gerektirir.

Emre Karabulut
📊 Bu yazı 4 kez okundu.