Rocky Linux 9’da SSH Güvenliğini Fail2Ban ile Sağlama
SSH (Secure Shell), sunucularınıza güvenli bir şekilde uzaktan erişim sağlamanın temel yoludur. Ancak, internete açık bir SSH servisi, kötü niyetli saldırganların hedefi haline gelebilir. Kaba kuvvet saldırıları (brute-force attacks), parolayı tahmin etme girişimleri ve diğer yetkisiz erişim denemeleri, sunucunuzun güvenliğini ciddi şekilde tehlikeye atabilir. Bu tür saldırılara karşı proaktif bir savunma mekanizması oluşturmak hayati önem taşır. Rocky Linux 9 üzerinde SSH güvenliğini artırmak için etkili bir araç olan Fail2Ban’ı nasıl kurup yapılandıracağınızı bu makalede detaylı bir şekilde ele alacağız.
Fail2Ban, log dosyalarını izleyerek belirli bir eşiği aşan başarısız giriş denemelerini tespit eden ve bu IP adreslerini geçici veya kalıcı olarak engelleyen bir uygulamadır. Otomatikleştirilmiş bu süreç, manuel müdahaleye gerek kalmadan sunucunuzu sürekli olarak koruma altına alır.
Rocky Linux 9’da Fail2Ban Kurulumu
Fail2Ban’ı Rocky Linux 9 sisteminize kurmak oldukça basittir. Sisteminizin güncel olduğundan emin olmakla başlayalım.
Sistem Güncellemesi
Kuruluma başlamadan önce, paket listelerini güncelleyerek ve mevcut paketleri yükselterek sisteminizin en son sürüme sahip olduğundan emin olun. Bu, olası güvenlik açıklarının kapatılmasına ve uyumluluk sorunlarının önlenmesine yardımcı olur.
sudo dnf update -y
Bu komut, sisteminizdeki tüm paketleri en son sürümlerine güncelleyecektir.
Fail2Ban Paketinin Kurulumu
Rocky Linux 9’da Fail2Ban, varsayılan olarak AppStream deposunda bulunur. Aşağıdaki komutu kullanarak Fail2Ban’ı kurabilirsiniz:
sudo dnf install fail2ban -y
Kurulum tamamlandıktan sonra, Fail2Ban servisinin otomatik olarak başlaması ve sistem başlangıcında aktif olması için gerekli yapılandırmayı yapmamız gerekir.
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Servisin çalıştığını doğrulamak için aşağıdaki komutu kullanabilirsiniz:
sudo systemctl status fail2ban
Çıktıda “active (running)” ifadesini görmelisiniz.
Fail2Ban Yapılandırması
Fail2Ban’ın temel yapılandırma dosyası /etc/fail2ban/jail.conf‘tur. Ancak, bu dosyayı doğrudan düzenlemek yerine, değişiklikleri jail.local adlı bir dosyada yapmanız önerilir. Bu, paket güncellemeleri sırasında jail.conf dosyasının üzerine yazıldığında ayarlarınızın kaybolmasını önler.
jail.local Dosyasının Oluşturulması
Öncelikle, jail.conf dosyasının bir kopyasını jail.local dosyasına oluşturalım:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Şimdi, /etc/fail2ban/jail.local dosyasını tercih ettiğiniz metin düzenleyici ile açın ve SSH servisinin güvenliğini sağlamak için gerekli ayarlamaları yapın.
sudo nano /etc/fail2ban/jail.local
Veya vim kullanıyorsanız:
sudo vim /etc/fail2ban/jail.local
Dosyanın içinde dikkat etmeniz gereken bazı önemli bölümler şunlardır:
Genel Ayarlar ([DEFAULT] Bölümü)
[DEFAULT] bölümü, Fail2Ban’ın genel davranışını belirler. Bu bölümdeki ayarlar, özel olarak yapılandırılmamış diğer servisler için varsayılan değerler olarak kullanılır.
* ignoreip: Bu parametre, engellenmemesi gereken IP adreslerini veya IP aralıklarını belirtir. Kendi ağınızdaki veya güvenilir gördüğünüz IP adreslerini buraya ekleyebilirsiniz. Birden fazla IP adresi veya aralığı boşlukla ayırarak ekleyebilirsiniz.
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
* bantime: Bir IP adresinin ne kadar süreyle engelleneceğini belirler. Süre, saniye cinsinden belirtilir. Örneğin, 10m 10 dakika, 1h 1 saat, 1d 1 gün anlamına gelir. Varsayılan olarak genellikle 10m olarak ayarlanmıştır. Daha uzun bir süre belirlemek, saldırganların tekrar deneme şansını azaltır.
bantime = 1h
* findtime: Bir IP adresinin engellenmesi için belirli bir süre içinde kaç başarısız deneme yapması gerektiğini belirler. Bu süre de saniye cinsinden veya zaman birimleri ile ifade edilir.
findtime = 10m
* maxretry: Bir IP adresinin findtime süresi içinde kaç kez başarısız deneme yapması durumunda engelleneceğini belirler.
maxretry = 5
* backend: Fail2Ban’ın log dosyalarını nasıl izleyeceğini belirler. Genellikle auto olarak bırakılır, bu da Fail2Ban’ın sisteminiz için en uygun backend’i otomatik olarak seçmesini sağlar.
backend = auto
* destemail: Engellenen IP adresleri hakkında bildirim almak istediğiniz e-posta adresini belirtir. Bu özelliğin çalışması için sunucunuzda bir e-posta gönderme mekanizmasının (örneğin sendmail veya postfix) yapılandırılmış olması gerekir.
destemail = your_email@example.com
* sendername: E-posta bildirimlerinde kullanılacak gönderici adını belirtir.
sendername = Fail2Ban
* mta: E-posta göndermek için kullanılacak posta aktarım ajansını (Mail Transfer Agent – MTA) belirtir. Yaygın seçenekler sendmail veya postfix‘tir.
mta = sendmail
* action: Bir IP adresi engellendiğinde hangi eylemlerin gerçekleştirileceğini belirler. Varsayılan olarak genellikle şunları içerir:
action = %(action_mw)s
Bu, IP adresini engellemek (action_) ve ilgili logları e-posta ile göndermek (mw – mail with whois) anlamına gelir. Farklı eylem seçenekleri mevcuttur:
* %(action_)s: Sadece engelleme.
* %(action_mw)s: Engelleme ve whois bilgisiyle e-posta gönderme.
* %(action_mwl)s: Engelleme, whois bilgisi ve log satırlarıyla e-posta gönderme.
* %(action_xbl)s: Engelleme ve AbuseIPDB gibi harici servislere bildirim gönderme (ek yapılandırma gerektirebilir).
SSH Koruması ([sshd] Bölümü)
SSH servisinin korunmasını etkinleştirmek için [sshd] bölümünü bulmanız ve aşağıdaki ayarları yapmanız gerekir. Eğer bu bölüm yoksa, kendiniz ekleyebilirsiniz.
* enabled: Bu ayarı true olarak değiştirerek SSH korumasını etkinleştirin.
enabled = true
* port: SSH servisinizin çalıştığı portu belirtin. Varsayılan port 22’dir. Eğer SSH portunuzu değiştirdiyseniz, buraya doğru port numarasını girin.
port = ssh
Veya özel bir port kullanıyorsanız:
port = 2222
* filter: Bu, Fail2Ban’ın hangi filtreyi kullanacağını belirtir. sshd filtresi, SSH loglarında başarısız giriş denemelerini tespit etmek için tasarlanmıştır. Bu genellikle varsayılan olarak doğru şekilde ayarlanmıştır.
filter = sshd
* logpath: Fail2Ban’ın SSH loglarını izleyeceği yolu belirtir. Rocky Linux 9’da bu genellikle /var/log/secure‘dur.
logpath = %(sshd_log)s
%(sshd_log)s genellikle /var/log/secure‘a işaret eder.
* maxretry ve findtime: Bu parametreler, [DEFAULT] bölümündeki ayarları geçersiz kılabilir. SSH için daha sıkı veya daha gevşek kurallar belirlemek isterseniz, bu değerleri burada yeniden tanımlayabilirsiniz. Örneğin, SSH için 5 yerine 3 başarısız denemede engelleme yapmak isteyebilirsiniz.
maxretry = 3
findtime = 5m
* bantime: SSH için de özel bir engelleme süresi belirleyebilirsiniz.
bantime = 1d
Tüm ayarları yaptıktan sonra, jail.local dosyasını kaydedip kapatın.
Fail2Ban Servisini Yeniden Başlatma
Yapılandırma değişikliklerinin etkili olması için Fail2Ban servisini yeniden başlatmanız gerekir:
sudo systemctl restart fail2ban
### Fail2Ban Durumunu Kontrol Etme ve Yönetme
Fail2Ban’ın doğru çalışıp çalışmadığını kontrol etmek ve yönetmek için bazı komutlar kullanabilirsiniz.
#### Fail2Ban Durumunu Görüntüleme
Fail2Ban servisinin genel durumunu systemctl status fail2ban ile zaten kontrol ettik. Ancak, belirli bir koruma (jail) için durumu görmek isterseniz fail2ban-client aracını kullanabilirsiniz.
Örneğin, SSH korumasının durumunu görmek için:
sudo fail2ban-client status sshd
Bu komut, aktif olan SSH koruması hakkında bilgi verecektir. Eğer koruma aktifse, engellenen IP adreslerinin bir listesini de görebilirsiniz.
#### Engellenen IP Adreslerini Listeleme
Tüm aktif korumalar için engellenen IP adreslerini listelemek için:
sudo fail2ban-client status
Bu komut, Fail2Ban tarafından yönetilen tüm servisleri ve her bir servis için engellenen IP adreslerinin sayısını gösterir.
#### Bir IP Adresini Manuel Olarak Engelleme
Belirli bir IP adresini manuel olarak engellemek isterseniz:
sudo fail2ban-client set sshd banip <IP_ADRESI>
Örneğin, 192.168.1.100 IP adresini SSH için engellemek için:
sudo fail2ban-client set sshd banip 192.168.1.100
#### Bir IP Adresini Manuel Olarak Engellemeyi Kaldırma
Yanlışlıkla engellenen bir IP adresinin engellemesini kaldırmak için:
sudo fail2ban-client set sshd unbanip <IP_ADRESI>
Örneğin, 192.168.1.100 IP adresinin engellemesini kaldırmak için:
sudo fail2ban-client set sshd unbanip 192.168.1.100
#### Fail2Ban’ı Durdurma, Başlatma ve Yeniden Yükleme
* Durdurma:
sudo systemctl stop fail2ban
* Başlatma:
sudo systemctl start fail2ban
* Yeniden Başlatma:
sudo systemctl restart fail2ban
* Yapılandırmayı Yeniden Yükleme: Yapılandırma dosyalarında yaptığınız değişikliklerin ardından servisi yeniden başlatmak yerine, sadece yapılandırmayı yeniden yüklemek de mümkündür. Bu, servisin kesintiye uğramasını önler.
sudo fail2ban-client reload
### Ek Güvenlik İpuçları ve İleri Yapılandırmalar
Fail2Ban, SSH güvenliğini artırmak için harika bir araçtır, ancak tek başına yeterli değildir. Daha güçlü bir güvenlik duruşu için aşağıdaki ek ipuçlarını da göz önünde bulundurmalısınız:
* SSH Portunu Değiştirme: Varsayılan SSH portu olan 22’yi kullanmak, otomatik taramaların ilk hedefi olmanıza neden olur. Farklı bir port numarasına geçmek, saldırganların işini zorlaştırır. jail.local dosyasında port parametresini güncellemeyi unutmayın.
* Parola Kimlik Doğrulamayı Devre Dışı Bırakma ve SSH Anahtarlarını Kullanma: Parola kimlik doğrulaması, kaba kuvvet saldırılarına karşı daha savunmasızdır. SSH anahtar çiftleri kullanarak parola gereksinimini kaldırın. Bu, kimlik doğrulama işlemini çok daha güvenli hale getirir. sshd_config dosyasında PasswordAuthentication no ayarını yaparak bunu etkinleştirebilirsiniz.
sudo nano /etc/ssh/sshd_config
# ...
PasswordAuthentication no
# ...
sudo systemctl restart sshd
* Root Girişini Engelleme: Doğrudan root kullanıcısı olarak SSH ile giriş yapmayı engellemek, saldırganların en yetkili hesaba doğrudan erişimini zorlaştırır. sshd_config dosyasında PermitRootLogin no ayarını yapın.
sudo nano /etc/ssh/sshd_config
# ...
PermitRootLogin no
# ...
sudo systemctl restart sshd
Bu değişikliği yapmadan önce, normal bir kullanıcı hesabınızdan sudo komutunu kullanabildiğinizden emin olun.
* Fail2Ban Filtrelerini Özelleştirme: /etc/fail2ban/filter.d/ dizininde bulunan filtre dosyalarını (örneğin sshd.conf) inceleyerek veya kendi filtrelerinizi oluşturarak Fail2Ban’ın logları nasıl analiz ettiğini daha spesifik hale getirebilirsiniz. Bu, daha karmaşık saldırı desenlerini tespit etmenize yardımcı olabilir.
* Fail2Ban Loglarını İzleme: Fail2Ban’ın kendisi de loglar üretir. Bu logları düzenli olarak incelemek, potansiyel sorunları veya beklenmedik engellemeleri tespit etmenize yardımcı olabilir. Fail2Ban logları genellikle /var/log/fail2ban.log dosyasında bulunur.
sudo tail -f /var/log/fail2ban.log
* Diğer Servisleri Koruma: Fail2Ban sadece SSH ile sınırlı değildir. Web sunucuları (Apache, Nginx), FTP sunucuları, e-posta sunucuları ve diğer ağ servisleri için de Fail2Ban koruması etkinleştirebilirsiniz. Her servis için ayrı bir jail.local bölümü oluşturulur (örneğin [apache-auth], [nginx-http-auth]).
### Sonuç
Rocky Linux 9 sisteminizde Fail2Ban’ı kurup yapılandırmak, SSH servisinizin güvenliğini önemli ölçüde artıracaktır. Otomatikleştirilmiş engelleme mekanizması sayesinde, sunucunuzu sürekli olarak kaba kuvvet saldırılarına ve diğer yetkisiz erişim denemelerine karşı koruyabilirsiniz. Yukarıda belirtilen ek güvenlik ipuçlarını da uygulayarak, sunucunuzun genel güvenlik duruşunu daha da güçlendirebilirsiniz. Unutmayın ki güvenlik sürekli bir süreçtir ve düzenli olarak sisteminizi gözden geçirmek, güncel tutmak ve güvenlik önlemlerini iyileştirmek önemlidir.