Brute Force Saldırısı Nedir ve Neden Ciddiye Alınmalıdır?
Brute Force saldırısı, sunucuya sızmanın en eski ve aynı zamanda en etkili yöntemlerinden biridir. Bu tür bir saldırıda, saldırgan otomatik araçlar kullanarak geçerli bir kullanıcı hesabına erişmek için farklı kullanıcı adı ve parola kombinasyonlarını dener. Sunucunuz SSH, kontrol paneli veya herhangi bir kimlik doğrulama hizmeti kullanıyorsa, kesinlikle bu saldırılara maruz kalıyorsunuz demektir.
İstatistikler, internete bağlı bir sunucunun ortalama olarak günde yüzlerce hatta binlerce başarısız giriş deneyimi yaşadığını göstermektedir. Bu denemelerin çoğu botnet'lerden ve dağınık IP adreslerinden yapılır. Önemli olan nokta, Brute Force saldırısının yalnızca zayıf parolalarla sınırlı olmamasıdır; güçlü parolalar bile uzun süreli saldırılara maruz kalırsa kırılabilir. Bu nedenle, bu tehditle mücadele etmek, bu makalede pratik olarak inceleyeceğimiz çok katmanlı bir strateji gerektirir.
Brute Force Saldırısıyla Mücadele İçin Üç Katmanlı Strateji
Brute Force saldırısına karşı etkili koruma sağlamak için aynı anda üç savunma katmanı uygulamanız gerekir: hız sınırlama, geçici hesap kilitleme ve logların sürekli izlenmesi. Bu katmanların her biri tek başına yeterli değildir, ancak birleşimleri güçlü bir savunma oluşturur.
Birinci Katman: fail2ban ile Hız Sınırlama
fail2ban, sistem loglarını otomatik olarak izleyen ve şüpheli desenler tespit ettiğinde saldırganın IP adresini geçici olarak engelleyen açık kaynaklı ve güçlü bir araçtır. Bu araç, Brute Force saldırısına karşı ilk savunma hattınızdır.
fail2ban'ı Debian/Ubuntu tabanlı dağıtımlara kurmak oldukça basittir:
sudo apt update
sudo apt install fail2ban -y
Kurulumdan sonra, varsayılan ayarları geçersiz kılmak için yerel bir yapılandırma dosyası oluşturmalısınız:
sudo nano /etc/fail2ban/jail.local
Bu dosyaya aşağıdaki yapılandırmayı ekleyin:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
Bu ayarlar fail2ban'a, 10 dakikalık bir süre içinde (findtime) SSH için 5 başarısız giriş denemesi (maxretry) görülürse, ilgili IP adresini 1 saat (bantime) boyunca engellemesini söyler. Dosyayı kaydettikten sonra servisi yeniden başlatın:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
Engelleme durumunu görüntülemek için aşağıdaki komutu kullanın:
sudo fail2ban-client status sshd
Bu komut, engellenen IP adreslerinin listesini ve başarısız deneme sayısını gösterir.
İkinci Katman: Sistem Düzeyinde Geçici Hesap Kilitleme
IP düzeyinde hız sınırlama faydalıdır, ancak saldırganlar birden fazla farklı IP adresi kullanabilir. Bu nedenle, geçici hesap kilitlemeyi de etkinleştirmelisiniz. Bu, birkaç başarısız denemeden sonra IP adresi değişse bile kullanıcı hesabının belirli bir süre kilitlenmesini sağlar.
SSH'de geçici kilitlemeyi etkinleştirmek için /etc/ssh/sshd_config dosyasını düzenlemeniz gerekir:
sudo nano /etc/ssh/sshd_config
Aşağıdaki satırları ekleyin veya düzenleyin:
MaxAuthTries 3
LoginGraceTime 30
MaxAuthTries 3 ayarı SSH'ye 3 başarısız denemeden sonra bağlantıyı kesmesini söyler. LoginGraceTime 30 ise giriş süresini 30 saniye ile sınırlar. Değişiklikleri uyguladıktan sonra SSH servisini yeniden başlatın:
sudo systemctl restart sshd
Kimlik doğrulama kullanan Apache veya Nginx gibi web servisleri için hız sınırlama modüllerini kullanabilirsiniz. Örneğin, Nginx'te hız sınırlamayı şu şekilde ayarlayabilirsiniz:
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
server {
location /login {
limit_req zone=login burst=10 nodelay;
proxy_pass http://backend;
}
}
Bu ayarlar Nginx'e, her IP adresinden /login yoluna dakikada yalnızca 5 istek yapılmasına izin vermesini söyler.
Üçüncü Katman: Giriş Loglarının Sürekli İzlenmesi
Hız sınırlama ve geçici kilitleme olsa bile, giriş loglarını düzenli olarak izlemelisiniz. Bu, anormal desenleri daha erken tespit etmenize ve gerektiğinde ek önlemler almanıza yardımcı olur.
systemd tabanlı sistemlerde giriş loglarını görüntülemek için aşağıdaki komutu kullanın:
sudo journalctl -u ssh --since "24 hours ago" | grep "Failed password"
Bu komut, son 24 saatteki tüm başarısız giriş denemelerini gösterir. Genel istatistikleri görmek için aşağıdaki komutu kullanabilirsiniz:
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20
Bu komut, en çok başarısız denemeye sahip 20 IP adresini ve deneme sayılarını gösterir. Belirli bir IP adresi bu listede sürekli görünüyorsa, onu manuel olarak engelleyebilirsiniz:
sudo ufw deny from 203.0.113.5
Otomatik izleme için, günlük olarak başarısız denemelerin özetini e-postanıza gönderen bir cron job ayarlayabilirsiniz:
0 8 * * * grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20 | mail -s "SSH Brute Force Report" your@email.com
Brute Force Saldırısıyla Mücadelede Sık Yapılan Hatalar
Yıllar boyunca, sunucu güvenlik yapılandırmasında savunmanın çökmesine neden olan benzer hatalar gördüm. İşte en önemlileri:
- fail2ban'ın tüm servisler için etkinleştirilmemesi: Birçok kişi yalnızca SSH'yi korur, ancak FTP, e-posta ve kontrol paneli gibi servisleri korumasız bırakır. fail2ban'ı tüm kimlik doğrulama servisleri için etkinleştirin.
- bantime'ın çok kısa ayarlanması: bantime'ı 60 saniye ayarlarsanız, saldırgan her engellemeden sonra tekrar deneyebilir. bantime'ı en az 3600 saniye (1 saat) olarak ayarlayın.
- Dağıtık saldırıların göz ardı edilmesi: Profesyonel saldırganlar binlerce farklı IP adresi kullanır. Bu durumda, IP düzeyinde hız sınırlama yeterli değildir ve kullanıcı hesabı düzeyinde hız sınırlama gibi daha gelişmiş çözümlere geçmelisiniz.
- Logların düzenli izlenmemesi: fail2ban etkin olsa bile, logları düzenli olarak kontrol etmelisiniz. fail2ban'ın tespit edemediği yeni saldırı desenleri ortaya çıkabilir.
Daha Fazla Güvenlik İçin Ek İpuçları
Üç ana katmana ek olarak, birkaç ek önlem güvenliğinizi önemli ölçüde artırabilir:
İki Faktörlü Kimlik Doğrulama (2FA)
SSH ve kontrol paneli için 2FA'yı etkinleştirmek, parola sızdırılsa bile sızmayı önler. SSH için Google Authenticator veya benzeri araçları kullanabilirsiniz.
Varsayılan SSH Portunu Değiştirme
SSH portunu 22'den standart olmayan bir porta değiştirmek, otomatik saldırıların sayısını önemli ölçüde azaltır. Bu mutlak güvenlik sağlamaz, ancak birçok otomatik tarayıcıyı atlar.
Parola Yerine SSH Anahtarı Kullanma
SSH anahtarları parolalardan çok daha güvenlidir ve Brute Force saldırısına karşı dayanıklıdır. Anahtarı ayarladıktan sonra parola ile girişi tamamen devre dışı bırakabilirsiniz:
PasswordAuthentication no
Bu ayarı /etc/ssh/sshd_config dosyasında uygulayın ve ardından SSH servisini yeniden başlatın.
Özet ve Pratik Adımlar
Brute Force saldırısı kalıcı bir tehdittir, ancak savunma katmanlarını doğru şekilde uygulayarak riski en aza indirebilirsiniz. Yapmanız gerekenlerin özeti:
- fail2ban'ı tüm kimlik doğrulama servisleri için kurun ve yapılandırın
- MaxAuthTries ve LoginGraceTime ayarlarıyla geçici hesap kilitlemeyi etkinleştirin
- Web sunucusunda giriş yolları için hız sınırlama ayarlayın
- Logları düzenli olarak izleyin ve şüpheli IP adreslerini manuel olarak engelleyin
- 2FA'yı etkinleştirin ve parola yerine SSH anahtarı kullanın
Bu adımları doğru şekilde uygularsanız, sunucunuz çoğu Brute Force saldırısına karşı dayanıklı olacaktır. Unutmayın ki güvenlik sürekli bir süreçtir, tek seferlik bir eylem değildir. Logları düzenli olarak kontrol edin ve yeni tehditler ortaya çıktıkça güvenlik ayarlarınızı güncelleyin. Bu süreçte, uygun güvenlik altyapısına sahip barındırma hizmetleri kullanmak da odak noktanızı uygulamalarınızın ve servislerinizin güvenliğine vermenize yardımcı olabilir.
Yorumlar 0
Henüz yorum yok — ilk siz olun!