Giriş
Sunucu güvenliği, günümüzün dijital dünyasında her zamankinden daha kritik bir öneme sahiptir. Özellikle internete açık sunucular, sürekli olarak kötü niyetli saldırganların hedefi haline gelmektedir. Bu saldırıların başında, genellikle SSH (Secure Shell) hizmeti üzerinden gerçekleştirilen kaba kuvvet (brute-force) denemeleri gelir. SSH, sunucularınıza uzaktan güvenli bir şekilde erişim sağlamanın standart yoludur, ancak varsayılan yapılandırmasıyla bile saldırılara karşı tamamen bağışık değildir.
Kaba kuvvet saldırıları, bir saldırganın farklı kullanıcı adı ve parola kombinasyonlarını deneme yoluyla sisteme yetkisiz erişim sağlamaya çalışmasıdır. Bu tür saldırılar, sunucunuzun kaynaklarını tüketebilir, güvenlik loglarınızı doldurabilir ve en önemlisi, başarılı olduklarında sunucunuzun tamamen ele geçirilmesine yol açabilir.
İşte tam da bu noktada Fail2Ban devreye girer. Fail2Ban, sunucu log dosyalarını izleyerek belirli sayıda başarısız oturum açma denemesi yapan IP adreslerini otomatik olarak engelleyen, log tabanlı bir güvenlik aracıdır. CentOS 7 işletim sistemi üzerinde Fail2Ban kullanarak SSH hizmetinizi bu tür saldırılardan nasıl koruyacağınızı bu rehberde adım adım öğreneceksiniz.
Fail2Ban Nedir ve Neden Kullanmalısınız?
Fail2Ban, Python ile yazılmış, açık kaynaklı bir intrusion prevention (saldırı önleme) yazılımıdır. Temel çalışma prensibi, sunucu üzerindeki çeşitli hizmetlerin (SSH, web sunucuları, FTP vb.) log dosyalarını gerçek zamanlı olarak izlemek ve önceden tanımlanmış kural setlerine (filtreler) uyan girişleri tespit etmektir. Bir IP adresi belirli bir süre içinde belirlenen sayıda başarısız deneme yaparsa, Fail2Ban bu IP adresini sunucunuzun güvenlik duvarı (firewall) aracılığıyla otomatik olarak yasaklar.
Neden Fail2Ban Kullanmalısınız?
- Otomatik Koruma: Kaba kuvvet saldırılarını manuel olarak takip etmek ve IP’leri engellemek yerine, Fail2Ban bu süreci tamamen otomatikleştirir.
- Kaynak Tasarrufu: Saldırgan IP’lerin erken aşamada engellenmesi, sunucunuzun işlemci ve ağ kaynaklarının boşa harcanmasını önler. Bu, özellikle yoğun saldırı altında olan sunucular için önemlidir.
- Gelişmiş Güvenlik Postürü: Fail2Ban, sunucunuzun genel güvenlik duruşunu önemli ölçüde iyileştirir. Saldırganlar, denemeleri başarısız olduğunda hızla engellendiği için hedeflerini değiştirmeye zorlanır.
- Esneklik: SSH’in yanı sıra Apache, Nginx, Postfix, Dovecot gibi birçok farklı hizmeti korumak için yapılandırılabilir.
- Kurulum Kolaylığı: CentOS 7 gibi popüler dağıtımlarda kurulumu ve temel yapılandırması oldukça basittir.
Fail2Ban, log dosyalarını düzenli ifade (regex) desenleri kullanarak tarar. Bu desenler, başarısız giriş denemelerini veya diğer şüpheli etkinlikleri tanımlar. Bir eşleşme bulunduğunda, Fail2Ban, iptables (veya firewalld) kurallarını kullanarak ilgili IP adresini belirli bir süre boyunca engeller. Bu süre sona erdiğinde, IP adresi otomatik olarak yasaklı listesinden çıkarılır.
Fail2Ban Kurulumu ve Temel Yapılandırması
CentOS 7’de Fail2Ban Kurulumu
CentOS 7’de Fail2Ban’ı kurmadan önce, genellikle EPEL (Extra Packages for Enterprise Linux) deposunu etkinleştirmeniz gerekir, çünkü Fail2Ban varsayılan CentOS depolarında bulunmaz.
- EPEL Deposunu Etkinleştirme:
sudo yum install epel-release -y - Fail2Ban Kurulumu:
EPEL deposu etkinleştirildikten sonra, Fail2Ban ve systemd desteğini kurabilirsiniz.
sudo yum install fail2ban fail2ban-systemd -y - Fail2Ban Servisini Başlatma ve Etkinleştirme:
Kurulum tamamlandıktan sonra, Fail2Ban servisini başlatın ve sistem başlangıcında otomatik olarak başlaması için etkinleştirin.
sudo systemctl start fail2ban
sudo systemctl enable fail2ban - Servis Durumunu Kontrol Etme:
Servisin düzgün çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanın:
sudo systemctl status fail2ban
Çıktıda “Active: active (running)” ifadesini görmelisiniz.
Yapılandırma Dosyaları ve Mantığı
Fail2Ban’ın yapılandırma dosyaları /etc/fail2ban/ dizininde bulunur. En önemli yapılandırma dosyaları şunlardır:
jail.conf: Fail2Ban’ın ana yapılandırma dosyasıdır ve varsayılan ayarları içerir. Bu dosyayı doğrudan düzenlemeniz önerilmez. Gelecekteki güncellemelerde ayarlarınızın üzerine yazılmasını önlemek için bunun yerinejail.localdosyasını kullanmalısınız.jail.local:jail.confdosyasındaki varsayılan ayarları geçersiz kılmak ve özel yapılandırmalarınızı yapmak için kullandığınız dosyadır. En iyi uygulama,jail.confdosyasını bu konuma kopyalamak ve değişikliklerinizi burada yapmaktır.filter.d/: Bu dizin, farklı hizmetler için log dosyalarını taramakta kullanılan düzenli ifade (regex) filtrelerini içerir. Örneğin,sshd.confSSH için filtreleri tanımlar.action.d/: Bu dizin, bir IP adresi yasaklandığında hangi eylemlerin gerçekleştirileceğini tanımlayan komut dosyalarını içerir (örneğin, iptables kurallarını eklemek veya e-posta göndermek).
Temel jail.local Yapılandırması
Öncelikle, jail.conf dosyasını jail.local olarak kopyalayalım:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Şimdi /etc/fail2ban/jail.local dosyasını favori metin düzenleyicinizle açın:
sudo vi /etc/fail2ban/jail.local
Dosyanın başında, [DEFAULT] bölümü altında bazı genel ayarları yapılandırabilirsiniz:
bantime: Bir IP adresinin ne kadar süreyle yasaklanacağını saniye cinsinden belirtir. Varsayılan genellikle 10 dakikadır (600 saniye). Daha uzun bir süre (örneğin, 1 saat) için3600veya1hkullanabilirsiniz.findtime: Fail2Ban’ın başarısız denemeleri saymak için geriye doğru ne kadar süreye bakacağını saniye cinsinden belirtir. Varsayılan 10 dakikadır (600 saniye).maxretry:findtimesüresi içinde bir IP adresinin kaç başarısız deneme yapmasına izin verildiğini belirtir. Bu sayıya ulaşıldığında IP yasaklanır. Varsayılan 5’tir.ignoreip: Yasaklanmayacak IP adreslerini veya IP aralıklarını tanımlar. Kendi IP adresinizi buraya eklemeniz önemlidir, aksi takdirde yanlışlıkla kendinizi yasaklayabilirsiniz. Birden fazla IP adresi boşlukla ayrılır.
Örnek [DEFAULT] yapılandırması:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.50
bantime = 1h
findtime = 10m
maxretry = 5
banaction = firewallcmd-ipset
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
Yukarıdaki örnekte:
ignoreip: Yerel döngü (loopback) ve192.168.1.0/24yerel ağ ile203.0.113.50statik bir dış IP adresi beyaz listeye alınmıştır. Kendi dış IP adresinizi buraya eklemeyi unutmayın.bantime: Yasaklama süresi 1 saat olarak ayarlanmıştır.findtime: 10 dakikalık bir pencere içinde denemeler sayılır.maxretry: 5 başarısız deneme sonrası yasaklama gerçekleşir.banaction: CentOS 7’de varsayılan güvenlik duvarı olanfirewalldile entegrasyon içinfirewallcmd-ipsetkullanılması önerilir.
Gelişmiş Yapılandırma ve SSH Koruması
SSH Jail’i Özelleştirme
jail.local dosyasında aşağıya doğru kaydırarak [sshd] bölümünü bulun. Bu bölüm, SSH hizmeti için özel Fail2Ban kurallarını tanımlar. Varsayılan olarak bu bölüm pasif (yorum satırı) olabilir veya enabled = false olarak ayarlanmış olabilir. SSH korumasını etkinleştirmek için enabled = true olarak ayarlamanız gerekir.
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Bu temel ayarlar genellikle yeterlidir, ancak gerekirse bantime, findtime ve maxretry parametrelerini bu bölüme ekleyerek sadece SSH hizmeti için özel değerler tanımlayabilirsiniz. Eğer bu parametreler [sshd] bölümünde tanımlanmazsa, [DEFAULT] bölümündeki değerler kullanılır.
Örneğin, SSH için daha agresif bir yasaklama politikası uygulamak isterseniz:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3 ; 3 başarısız deneme
bantime = 1d ; 1 gün yasaklama
Önemli Not: Eğer SSH servisini varsayılan 22 portundan farklı bir portta çalıştırıyorsanız, port parametresini bu yeni port numarasını yansıtacak şekilde güncellemeniz gerekir. Örneğin, SSH 2222 portunda çalışıyorsa:
[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Yapılandırma dosyasında değişiklik yaptıktan sonra, Fail2Ban hizmetini yeniden başlatmanız gerekir:
sudo systemctl restart fail2ban
Fail2Ban Durumunu Kontrol Etme
Fail2Ban’ın genel durumunu ve hangi “jail”lerin (hapishanelerin) etkin olduğunu görmek için:
sudo fail2ban-client status
Bu komut, etkin “jail”lerin bir listesini gösterecektir. Çıktıda sshd‘yi görmelisiniz.
Belirli bir “jail”in durumunu (örneğin, sshd) ve hangi IP adreslerinin yasaklandığını görmek için:
sudo fail2ban-client status sshd
Bu komut, o an için yasaklanmış IP adreslerinin bir listesini gösterecektir.
Yanlışlıkla yasakladığınız bir IP adresini manuel olarak serbest bırakmak için:
sudo fail2ban-client unban
Örneğin: sudo fail2ban-client unban 192.0.2.10
Fail2Ban Logları
Fail2Ban’ın tüm aktivitelerini /var/log/fail2ban.log dosyasında bulabilirsiniz. Bu log dosyası, hangi IP’lerin ne zaman yasaklandığını, hangi kurala takıldığını ve ne zaman serbest bırakıldığını gösterir. Düzenli olarak bu logları kontrol etmek, sisteminize yönelik saldırı girişimleri hakkında bilgi edinmenizi sağlar.
sudo tail -f /var/log/fail2ban.log
Bu komut, log dosyasının sonunu gerçek zamanlı olarak izlemenizi sağlar.
Pratik İpuçları ve En İyi Uygulamalar
SSH Portunu Değiştirmek
Varsayılan SSH portu (22), saldırganlar tarafından en çok hedeflenen porttur. Portu değiştirmek, kaba kuvvet saldırılarının hacmini önemli ölçüde azaltabilir, çünkü çoğu otomatik bot sadece varsayılan portu tarar. Bu bir güvenlik mekanizması değil, bir “gizleme” (security through obscurity) yöntemidir, ancak yine de faydalıdır.
sshd_configdosyasını düzenleyin:
sudo vi /etc/ssh/sshd_config
Port 22satırını bulun ve örneğinPort 2222olarak değiştirin.- SELinux ayarlarını güncelleyin:
Eğer SELinux etkinse, yeni port için izin vermeniz gerekir:
sudo semanage port -a -t ssh_port_t -p tcp 2222 - Firewall’ı güncelleyin:
Yeni port için firewall’da izin vermeniz ve eski portu kapatmanız gerekir:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload - SSH servisini yeniden başlatın:
sudo systemctl restart sshd - Fail2Ban yapılandırmasını güncelleyin:
jail.localdosyasındaki[sshd]bölümündekiportparametresini yeni port numaranızla güncelleyin (yukarıda gösterildiği gibi).
sudo systemctl restart fail2ban
SSH Anahtar Doğrulaması Kullanmak
Parola tabanlı kimlik doğrulama yerine SSH anahtar çiftleri kullanmak, SSH güvenliğini önemli ölçüde artırır. Bu yöntem, kaba kuvvet saldırılarını neredeyse işe yaramaz hale getirir, çünkü anahtarların tahmin edilmesi pratik olarak imkansızdır. Fail2Ban, parola tabanlı saldırılara karşı koruma sağlarken, anahtar tabanlı kimlik doğrulama, kimlik doğrulama sürecini temelden güçlendirir.
Güçlü Parola Politikası
Eğer parola tabanlı kimlik doğrulamayı kullanmaya devam ediyorsanız, tüm kullanıcılarınız için güçlü ve karmaşık parolalar kullanmalarını zorunlu kılın. Fail2Ban sadece başarısız denemeleri engeller, ancak zayıf bir parola, ilk birkaç denemede tahmin edilebilir ve Fail2Ban’ın devreye girmesine fırsat kalmadan erişim sağlanabilir.
Fail2Ban Loglarını Düzenli Kontrol Etmek
/var/log/fail2ban.log dosyasını düzenli olarak gözden geçirin. Bu, sunucunuza yönelik saldırıların türleri, kaynak IP adresleri ve sıklığı hakkında değerli bilgiler sağlar. Bu bilgiler, güvenlik stratejinizi daha da optimize etmenize yardımcı olabilir.
Beyaz Liste (Whitelist) Kullanımı
jail.local dosyasındaki ignoreip parametresini kullanarak kendi IP adreslerinizi veya sıkça eriştiğiniz güvenilir ağları beyaz listeye eklemeyi kesinlikle unutmayın. Bu, yanlışlıkla kendinizi engellemenizi önler ve kesintisiz erişim sağlar.
Sistem Güncellemeleri
Fail2Ban ve işletim sisteminizin diğer tüm bileşenlerini düzenli olarak güncel tutun. Yazılım güncellemeleri genellikle güvenlik açıklarını kapatır ve performansı iyileştirir.
Sonuç
Fail2Ban, CentOS 7 sunucularınızda SSH hizmetinizi kaba kuvvet saldırılarına karşı korumak için vazgeçilmez bir araçtır. Kurulumu ve yapılandırması nispeten kolay olmasına rağmen, sunduğu güvenlik katmanı oldukça etkilidir. Bu rehberde anlatılan adımları ve en iyi uygulamaları takip ederek, sunucunuzun güvenliğini önemli ölçüde artırabilirsiniz. Unutmayın ki Fail2Ban tek başına bir çözüm değildir; güçlü parolalar, anahtar tabanlı kimlik doğrulama, SSH portunu değiştirme ve düzenli sistem güncellemeleri gibi diğer güvenlik önlemleriyle birlikte kullanıldığında en yüksek verimi sağlayacaktır.
Sıkça Sorulan Sorular (SSS)
Fail2Ban beni de banlarsa ne yapmalıyım?
Öncelikle, erişiminizin engellenmemesi için kendi IP adresinizi jail.local dosyasındaki ignoreip listesine eklemelisiniz. Eğer yanlışlıkla yasaklandıysanız, farklı bir IP adresi (örneğin mobil veri veya başka bir ağ) üzerinden sunucuya erişip sudo fail2ban-client unban komutunu kullanarak kendinizi serbest bırakabilirsiniz. Alternatif olarak, sunucunuzun konsoluna doğrudan erişiminiz varsa (fiziksel veya sanal konsol), bu komutu oradan çalıştırabilirsiniz.
Fail2Ban sadece SSH için mi kullanılır?
Hayır, Fail2Ban çok yönlü bir araçtır. SSH’in yanı sıra Apache (web sunucusu), Nginx, Postfix (e-posta sunucusu), Dovecot (IMAP/POP3), FTP sunucuları ve diğer birçok hizmet için de kaba kuvvet saldırılarını veya şüpheli etkinlikleri izleyebilir ve engelleyebilir. Her hizmet için ayrı “jail”ler yapılandırılır.
Fail2Ban performansı etkiler mi?
Fail2Ban’ın performansa etkisi genellikle ihmal edilebilir düzeydedir. Log dosyalarını okur ve düzenli ifadeleri eşleştirir, bu da modern sunucular için hafif bir yüktür. Yüksek trafikli veya çok sayıda hizmeti olan sunucularda bile, etkisi genellikle fark edilmez. Aslında, kaba kuvvet saldırılarını engelleyerek sunucunun kaynaklarını kötüye kullanımından koruduğu için dolaylı olarak performansı iyileştirebilir.
Fail2Ban yerine başka ne kullanabilirim?
Fail2Ban’a benzer işlevsellik sunan başka araçlar da vardır, ancak Fail2Ban en popüler ve yaygın kullanılan çözümlerden biridir. Alternatifler arasında CSF/LFD (ConfigServer Security & Firewall / Login Failure Daemon) gibi daha kapsamlı güvenlik duvarı çözümleri veya özel intrusion detection/prevention sistemleri (IDS/IPS) bulunabilir. Ancak Fail2Ban, özellikle log tabanlı kaba kuvvet koruması için mükemmel bir başlangıç noktasıdır.
jail.conf yerine neden jail.local kullanmalıyım?
jail.conf, Fail2Ban’ın varsayılan yapılandırma dosyasıdır ve yazılım güncellemeleri sırasında üzerine yazılabilir. jail.local ise yerel yapılandırmalarınız için ayrılmış bir dosyadır ve güncellemelerden etkilenmez. Bu, özel ayarlarınızın kaybolmamasını sağlar ve yapılandırma yönetimini daha güvenli hale getirir. Fail2Ban, jail.local dosyasındaki ayarların jail.conf dosyasındaki aynı parametreleri geçersiz kılacağını otomatik olarak bilir.
