Fail2Ban ile SSH Güvenliğini Sağlama: Otomatik Savunmanın Gücü
Sunucularınızın kalbine açılan kapı olan SSH (Secure Shell), yönetimin en kritik araçlarından biridir. Ancak, bu erişim noktası kötü niyetli saldırganların da birincil hedefidir. Sürekli tekrarlayan kaba kuvvet (brute-force) saldırıları, zayıf parolaları tahmin etmeye çalışarak sunucunuzun güvenliğini tehdit eder. İşte bu noktada, otomatik bir savunma mekanizması olan Fail2Ban devreye girer.
Bu blog yazısında, uzman bir sistem yöneticisi perspektifinden Fail2Ban’ı kullanarak SSH sunucunuzu bu tür saldırılardan nasıl koruyacağınızı, kurulumdan yapılandırmaya ve yönetime kadar adım adım inceleyeceğiz.
Fail2Ban Nedir?
Fail2Ban, sunucu günlük dosyalarını (log files) izleyen ve belirli kalıpları (örneğin, başarısız oturum açma denemeleri) tespit ettiğinde kötü niyetli IP adreslerini otomatik olarak engelleyen bir intrusion prevention framework’tür. Bu engelleme işlemi genellikle güvenlik duvarı kuralları (iptables, nftables veya firewalld) aracılığıyla yapılır ve saldırganın belirli bir süre boyunca sunucuya erişmesini engeller. Temel amacı, sürekli deneme yanılma yoluyla parola tahmin etmeye çalışan kaba kuvvet saldırılarını otomatize edilmiş bir şekilde durdurmaktır.
Kurulum
Fail2Ban’ı kurmak, çoğu Linux dağıtımında oldukça basittir.
Debian/Ubuntu tabanlı sistemlerde:
sudo apt update
sudo apt install fail2ban
RHEL/CentOS tabanlı sistemlerde (EPEL deposu kurulu olmalıdır):
sudo yum install epel-release
sudo yum install fail2ban
Kurulumdan sonra, hizmeti başlatmayı ve önyüklemede etkinleştirmeyi unutmayın:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Temel Yapılandırma
Fail2Ban’ın yapılandırması genellikle /etc/fail2ban/ dizininde bulunur. Ana yapılandırma dosyası jail.conf‘tur, ancak doğrudan bu dosyayı düzenlemek yerine jail.local adlı bir kopya oluşturup onu düzenlemek en iyi uygulamadır. Böylece yazılım güncellemeleri sırasında yapılandırmanızın üzerine yazılması engellenir.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
jail.local dosyasındaki önemli ayarlar:
ignoreip: Engellenmeyecek IP adresleri veya IP aralıkları. Güvenilir IP’lerinizi buraya ekleyin (örneğin, ofis IP’niz, yerel ağınız).bantime: Bir IP’nin engellenmiş kalacağı süre (saniye cinsinden). Varsayılan 10 dakika (600 saniye) genellikle iyi bir başlangıçtır, ancak daha uzun süreler düşünebilirsiniz.findtime: Belirli birmaxretrysayısına ulaşılması için geri sayımın başladığı zaman dilimi (saniye cinsinden). Bu süre içindemaxretrysayısına ulaşılırsa IP engellenir.maxretry: Bir IP’nin engellenmeden önce kaç başarısız deneme yapabileceği sayısı.
Örnek /etc/fail2ban/jail.local yapılandırması:
Dosyayı bir metin düzenleyici ile açın:
sudo nano /etc/fail2ban/jail.local
Aşağıdaki gibi bir yapılandırma bölümü bulun veya ekleyin:
[DEFAULT]
bantime = 3600 ; 1 saat ban süresi (3600 saniye)
findtime = 600 ; 10 dakika içinde (600 saniye)
maxretry = 5 ; 5 başarısız deneme
; Güvenilir IP adreslerini virgülle ayırarak veya boşluk bırakarak ekleyin
; Örneğin: ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.10
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3 ; SSH için daha agresif bir ayar, genellikle 3 yeterlidir
bantime = 86400 ; SSH saldırıları için daha uzun ban süresi (24 saat)
Yukarıdaki örnekte:
[DEFAULT]altında global ayarlar tanımlandı, ancak[sshd]bölümünde bu ayarlar geçersiz kılınabilir.bantimeglobal olarak 1 saate, SSH için ise 24 saate çıkarıldı.findtime10 dakikaya ayarlandı.- Genel
maxretry5 olarak belirlendi. ignoreipkısmına yerel IP’ler eklendi. Kendi güvenilir IP adreslerinizi buraya eklemeyi unutmayın![sshd]bölümüenabled = trueyapılarak SSH koruması etkinleştirildi. SSH için özel olarakmaxretry3’e düşürüldü, bu da daha erken banlanma anlamına gelir.
Yapılandırma değişikliklerini yaptıktan sonra Fail2Ban hizmetini yeniden başlatmayı unutmayın:
sudo systemctl restart fail2ban
İzleme ve Yönetim
Fail2Ban’ın durumunu ve engellenen IP adreslerini komut satırından kontrol edebilirsiniz:
Tüm aktif jail’leri listeleme:
sudo fail2ban-client status
Belirli bir jail’in (örneğin sshd) durumunu ve engellediği IP’leri görme:
sudo fail2ban-client status sshd
Bir IP adresinin engelini kaldırma (manuel olarak):
sudo fail2ban-client set sshd unbanip 203.0.113.5
Unutmayın ki bantime süresi sona erdiğinde IP’ler otomatik olarak engelden kalkacaktır. Eğer bir IP’yi kalıcı olarak engellemek isterseniz, güvenlik duvarı kurallarınıza manuel olarak eklemeniz daha uygun olacaktır.
Ek Güvenlik Önlemleri ve İyi Uygulamalar
Fail2Ban çok güçlü bir araç olsa da, kapsamlı bir güvenlik stratejisinin yalnızca bir parçasıdır. SSH güvenliğini artırmak için aşağıdaki ek önlemleri de uygulamanız şiddetle tavsiye edilir:
- Varsayılan SSH Portunu Değiştirin: Genellikle 22 olan varsayılan portu bilinmeyen yüksek bir porta (örneğin, 2222 veya 54321) taşımak, otomatik botların ve basit taramaların hedefi olmaktan kurtulmanıza yardımcı olur.
- Root Erişimi Devre Dışı Bırakın: Doğrudan root kullanıcısı ile SSH oturumu açmayı engelleyin. Bunun yerine, normal bir kullanıcı ile giriş yapın ve gerektiğinde
sudokullanın. (PermitRootLogin noayarı/etc/ssh/sshd_configdosyasında) - Parola Kimlik Doğrulama Yerine SSH Anahtarları Kullanın: SSH anahtarları, kriptografik anahtar çiftleri ile kimlik doğrulaması yaparak parola tabanlı kimlik doğrulamasından çok daha güvenlidir. (
PasswordAuthentication noayarı/etc/ssh/sshd_configdosyasında) - Güçlü ve Karmaşık Parolalar Kullanın: Eğer parola kimlik doğrulamasını kullanmaya devam ediyorsanız, her zaman uzun, karmaşık ve benzersiz parolalar kullanın.
- Güvenlik Duvarı Yapılandırın: UFW (Ubuntu) veya firewalld (CentOS/RHEL) gibi bir güvenlik duvarı kullanarak sadece gerekli portlara (örneğin, yeni SSH portunuz ve web sunucusu portlarınız) erişime izin verin.
Sonuç
Fail2Ban, sunucularınızı sürekli kaba kuvvet saldırılarına karşı korumak için vazgeçilmez bir araçtır. Kurulumu ve temel yapılandırması oldukça basit olup, kısa sürede SSH güvenliğinizi önemli ölçüde artırabilir. Ancak unutmayın, güvenlik bir katmanlar bütünüdür. Fail2Ban’ı diğer iyi uygulamalarla birleştirerek sunucularınız için sağlam bir savunma hattı oluşturabilirsiniz. Düzenli olarak günlükleri kontrol etmek ve güvenlik stratejinizi gözden geçirmek, her zaman akılda tutulması gereken önemli adımlardır.
