SSH Güvenliğinin Temel Taşı: Fail2Ban ile Brute-Force Saldırılarına Son
Her sistem yöneticisinin kâbusu: Sunucularınıza yönelik sürekli ve durmak bilmeyen brute-force saldırıları. Özellikle SSH gibi kritik bir hizmet, sürekli olarak zayıf parolaları denemek veya kullanıcı adlarını tahmin etmeye çalışmak isteyen botlar tarafından hedef alınır. Bu tür saldırılar sadece güvenlik riski oluşturmakla kalmaz, aynı zamanda sunucu kaynaklarını tüketebilir ve log dosyalarını şişirebilir. İşte tam da bu noktada, Fail2Ban gibi güçlü bir araç devreye girerek sunucularınız için sağlam bir kalkan görevi görür.
Bu teknik blog yazısında, Fail2Ban’ı kullanarak SSH hizmetinizi nasıl güçlendireceğinizi, temel kurulumdan gelişmiş yapılandırma seçeneklerine kadar adım adım ele alacağız. Amacımız, sunucularınızın güvenliğini artırırken yönetim yükünüzü azaltmaktır.
Fail2Ban Nedir ve Nasıl Çalışır?
Fail2Ban, sunucu log dosyalarını tarayan ve belirli desenlerde (örneğin, başarısız oturum açma denemeleri) kötü niyetli etkinlikleri tespit eden, açık kaynaklı bir güvenlik yazılımıdır. Tespit edilen bir IP adresi, önceden tanımlanmış bir süre boyunca güvenlik duvarı kuralları (iptables, firewalld vb. aracılığıyla) kullanılarak engellenir (banlanır). Bu sayede, potansiyel saldırganların belirli bir zaman diliminde çok sayıda deneme yapması engellenir.
Özetle, Fail2Ban:
- Log dosyalarını gerçek zamanlı olarak izler.
- Tanımlanmış bir eşiği aşan kötü niyetli IP’leri tespit eder.
- Tespit edilen IP’leri geçici olarak engeller.
- Belirlenen süre sonunda engellemeyi kaldırır.
Fail2Ban Kurulumu
Fail2Ban’ı kurmak oldukça basittir ve çoğu Linux dağıtımının paket yöneticilerinde bulunur.
Debian/Ubuntu Tabanlı Sistemler İçin:
sudo apt update
sudo apt install fail2ban
CentOS/RHEL Tabanlı Sistemler İçin (EPEL deposu gereklidir):
sudo yum install epel-release # veya dnf install epel-release
sudo yum install fail2ban # veya dnf install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Fail2Ban Yapılandırması
Fail2Ban’ın yapılandırma dosyaları genellikle /etc/fail2ban/ dizininde bulunur. Ana yapılandırma dosyası jail.conf‘tur. Ancak, bu dosyayı doğrudan düzenlemek yerine, güncellemeler sırasında üzerine yazılmasını önlemek için jail.local adında bir kopya oluşturmanız şiddetle tavsiye edilir. Bu sayede, özel ayarlarınız sistem güncellemelerinden etkilenmez.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
SSH (sshd) Jail’i Yapılandırma
jail.local dosyasını düzenleyerek SSH hizmeti için özel kurallarımızı ayarlayalım. Bir metin editörü ile dosyayı açın:
sudo nano /etc/fail2ban/jail.local
Dosyanın içinde, [DEFAULT] veya [sshd] bölümünü bulup aşağıdaki gibi düzenlemeler yapabilirsiniz:
[DEFAULT]
bantime = 10m ; IP'nin yasaklanma süresi (10 dakika)
findtime = 10m ; Belirlenen deneme sayısının aranacağı zaman aralığı (10 dakika)
maxretry = 5 ; Yasaklanmadan önce izin verilen başarısız deneme sayısı
destemail = sizin_email_adresiniz@example.com ; Banlama bildirimi gönderilecek e-posta adresi
sendername = Fail2Ban ; E-posta gönderenin adı
mta = sendmail ; E-posta göndermek için kullanılacak MTA (örn: sendmail, postfix)
action = %(action_mw)s ; Banlama ve e-posta bildirimi (action_mwl for with whois info)
[sshd]
enabled = true ; SSH jail'ini etkinleştir
port = ssh ; SSH portu (varsayılan 22 veya değiştirdiyseniz yeni port numaranız)
filter = sshd ; SSH için kullanılan filtre
logpath = %(sshd_log)s ; SSH log dosyasının yolu
maxretry = 3 ; SSH için özel deneme sayısı (varsayılanı geçersiz kılar)
bantime = 30m ; SSH için özel yasaklanma süresi (varsayılanı geçersiz kılar)
Yukarıdaki örnekte:
bantime: Bir IP adresinin ne kadar süreyle yasaklanacağını saniye, dakika (m) veya saat (h) cinsinden belirtir.findtime: Fail2Ban’ın başarısız denemeleri ne kadar süreyle izleyeceğini belirtir. Bu süre içindemaxretrysayısına ulaşılırsa IP yasaklanır.maxretry: Bir IP adresinin yasaklanmadan önce yapabileceği başarısız deneme sayısıdır.
IP Adreslerini Beyaz Listeye Ekleme (Whitelisting)
Kendi IP adresinizin veya güvendiğiniz diğer IP adreslerinin yanlışlıkla yasaklanmasını önlemek için bunları beyaz listeye ekleyebilirsiniz. jail.local dosyasının [DEFAULT] bölümüne ignoreip satırını ekleyin:
[DEFAULT]
...
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42
...
Birden fazla IP adresi veya IP bloğu aralarında boşluk bırakılarak eklenebilir. Yerel ağınızın veya statik IP’nizin burada olduğundan emin olun.
E-posta Bildirimleri
Fail2Ban, bir IP adresi yasaklandığında size e-posta ile bildirim gönderebilir. Bunun için sunucunuzda bir e-posta gönderme yeteneği (örneğin, postfix veya sendmail yüklü ve yapılandırılmış olmalıdır) bulunmalıdır. jail.local dosyasındaki [DEFAULT] bölümünü aşağıdaki gibi güncelleyin:
[DEFAULT]
...
action = %(action_mw)s
destemail = your_email@example.com
sendername = Fail2Ban Alert
mta = sendmail # veya postfix
...
action = %(action_mw)s satırı, IP’yi banlamanın yanı sıra bir e-posta bildirimi de gönderilmesini sağlar. action_mwl kullanırsanız, e-postada whois bilgisi de yer alır.
Fail2Ban Yönetimi
Yapılandırma dosyalarınızda değişiklik yaptıktan sonra, Fail2Ban hizmetini yeniden başlatmanız gerekir:
sudo systemctl restart fail2ban
Durumu Kontrol Etme
Fail2Ban’ın genel durumunu veya belirli bir jail’in durumunu kontrol etmek için aşağıdaki komutları kullanabilirsiniz:
sudo systemctl status fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
fail2ban-client status sshd komutu, SSH jail’inde yasaklanmış IP adreslerini listeleyecektir.
Bir IP Adresinin Engellemesini Kaldırma (Unban)
Yanlışlıkla yasaklanmış bir IP adresini manuel olarak kaldırmak için aşağıdaki komutu kullanabilirsiniz:
sudo fail2ban-client set sshd unbanip 203.0.113.42
sshd yerine ilgili jail adını ve 203.0.113.42 yerine kaldırmak istediğiniz IP adresini yazmalısınız.
Ek Güvenlik İpuçları ve En İyi Uygulamalar
Fail2Ban, SSH güvenliğiniz için harika bir ilk adımdır, ancak tek başına yeterli değildir. Güvenliği daha da artırmak için aşağıdaki ek önlemleri düşünün:
- Varsayılan SSH Portunu Değiştirin: SSH’ın varsayılan portu olan 22’yi değiştirmek, otomatik bot taramalarının çoğundan kurtulmanızı sağlar.
- Parola Yerine Anahtar Tabanlı Kimlik Doğrulama Kullanın: SSH anahtarları, parolalara göre çok daha güvenlidir. Parola ile oturum açmayı tamamen devre dışı bırakmayı düşünün.
- Root Kullanıcısı ile Oturum Açmayı Devre Dışı Bırakın: Saldırganların hedef alacağı birincil kullanıcı adı olan
rootile doğrudan oturum açmayı yasaklayın ve bunun yerine sudo yetkilerine sahip normal bir kullanıcı kullanın. - Diğer Hizmetler İçin Fail2Ban Jail’leri: Web sunucuları (Apache, Nginx), FTP sunucuları veya posta sunucuları gibi diğer hizmetleriniz için de Fail2Ban jail’leri kurarak genel sunucu güvenliğinizi artırın.
- Güncel Tutun: Fail2Ban ve sunucunuzdaki tüm yazılımları düzenli olarak güncelleyin.
Sonuç
Fail2Ban, sunucularınızı brute-force saldırılarına karşı korumak için vazgeçilmez bir araçtır. Bu kılavuzdaki adımları takip ederek SSH hizmetinizi daha güvenli hale getirebilir ve potansiyel tehditleri otomatik olarak bertaraf edebilirsiniz. Unutmayın, güvenlik sürekli bir süreçtir ve Fail2Ban’ı diğer iyi güvenlik uygulamalarıyla birleştirmek, sunucularınız için en sağlam savunmayı sağlayacaktır. Güvenliğiniz daim olsun!
