Brute Force Saldırısı Nedir ve Nasıl Önlenir? Sunucu Sertleştirme Rehberi
Kısa cevap
Brute force (kaba kuvvet) saldırısı, bir hesabın parolasını binlerce denemeyle tahmin etme girişimidir; SSH, wp-login ve RDP en sık hedeflerdir. Önlemenin en etkili yolu parola tabanlı girişi tamamen kaldırıp SSH anahtarına geçmek, kalan tüm giriş noktalarını fail2ban ve giriş deneme sınırıyla korumak ve 2FA eklemektir. Tek bir önlem değil, katmanlı savunma esastır.
Brute force, yani kaba kuvvet saldırısı, en ilkel ama hâlâ en yaygın saldırı türlerinden biridir: bir hesabın parolasını, olası tüm kombinasyonları ya da milyonlarca sızmış parolayı tek tek deneyerek tahmin etmeye çalışmak. İnternete açık her sunucu, hiçbir tanıtım yapılmasa bile açıldığı ilk dakikalardan itibaren otomatik botlar tarafından denenmeye başlar. Bu saldırıların çekiciliği zekâsında değil, ısrarında ve düşük maliyetindedir — bir bot, yıllarca durmadan deneyebilir ve tek bir zayıf parola tüm sistemi teslim etmesine yeter.
Bu yazıda brute force saldırısının mantığını, en sık hedeflenen kapıları ve bu kapıları katman katman nasıl kapatacağınızı anlatıyoruz. Buradaki adımlar sunucu sertleştirmenin çekirdeğidir; daha geniş bir çerçeve için web sitesi güvenliğinin nasıl sağlanacağı rehberimize de bakabilirsiniz.
Brute Force Saldırısının Mantığını Anlayın
Savunmayı kurmadan önce saldırganın nasıl düşündüğünü kavramanız gerekir: brute force, bir kullanıcı adı bilinen ya da tahmin edilebilen bir hesaba karşı, parolayı sistematik olarak deneyen otomatik bir işlemdir. Saldırgan zekâ değil, hız ve tekrar kullanır.
Üç temel varyantı vardır. Saf brute force tüm karakter kombinasyonlarını dener — yavaştır ama uzun parolalara karşı bile teorik olarak çalışır. Sözlük saldırısı yaygın parolaları ve kelime listelerini dener; çok daha hızlıdır. Credential stuffing ise başka sitelerden sızmış e-posta/parola çiftlerini dener ve parola tekrarı yapan kullanıcılarda ürkütücü ölçüde başarılıdır. En sık hedeflenen üç kapı ise nettir: Linux sunucularda SSH (22), WordPress sitelerinde wp-login.php / xmlrpc.php, ve Windows sunucularda RDP (3389). Müdahale ettiğimiz vakaların büyük bölümünde giriş noktası, bu üçünden birinde bırakılmış zayıf ya da tekrar kullanılmış bir paroladır.
Parola Tabanlı Girişi SSH Anahtarıyla Değiştirin
En kalıcı çözümün, tahmin edilebilecek bir sırrı ortadan tümüyle kaldırmak olduğunu bilin: SSH'ta parola girişini kapatıp yalnızca kriptografik anahtarla kimlik doğrulamaya geçmek, brute force'u pratikte imkânsız hâle getirir. Botların deneyeceği bir parola alanı kalmaz.
Önce yerel makinenizde bir anahtar çifti üretip sunucuya kopyalayın:
ssh-keygen -t ed25519 -C "yonetim-anahtari"
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu
Anahtarla girişi test ettikten sonra /etc/ssh/sshd_config içinde parola girişini kapatın:
PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
Ardından sudo systemctl restart ssh ile servisi yeniden başlatın. Kritik uyarı: parola girişini kapatmadan önce anahtarınızla giriş yapabildiğinizden mutlaka emin olun — aksi halde kendinizi sunucudan kilitlersiniz. Anahtara geçemediğiniz durumlarda en azından uzun, benzersiz ve bir parola yöneticisinde saklanan parolalar kullanın; her hesaba ayrı parola şarttır.
Giriş Deneme Sayısını Sınırlayın
Kapatamadığınız her giriş noktasında (wp-login gibi), saldırgana sınırsız deneme hakkı vermemeniz gerektiğini unutmayın: birkaç başarısız denemeden sonra hesabı ya da IP'yi geçici kilitlemek, brute force'un temel yakıtı olan "sonsuz deneme" imkânını yok eder.
WordPress tarafında Limit Login Attempts benzeri bir eklenti, belirli sayıda hatalı girişten sonra IP'yi kilitler. xmlrpc.php çoğu sitede kullanılmadığından ve amplifikasyon saldırılarına açık olduğundan tümden kapatılması önerilir; system.multicall metodu tek bir HTTP isteğinde yüzlerce parola denemesine izin verdiği için, deneme sınırınızı görünürde "birkaç istek" gibi göstererek fiilen aşar. Nginx ile xmlrpc'yi kapatmak için:
location = /xmlrpc.php {
deny all;
}
Uygulama katmanının ötesinde, giriş uçlarına bir de rate limit koymak iyi olur; web sunucusu seviyesinde saniyedeki istek sayısını sınırlamak, saldırının hızını daha uygulamaya ulaşmadan keser. Amaç deneme sayısını "sınırsız"dan "birkaç"a indirmektir — bu tek başına sözlük saldırılarını işlevsiz bırakır. Kilitleme mekanizmasını kurarken kendi meşru trafiğinizi de düşünün: ofis gibi paylaşımlı bir IP'nin arkasındaki birden çok kullanıcıyı yanlışlıkla kilitlememek için eşikleri makul tutun ve yönetim IP'nizi beyaz listeye almayı unutmayın.
fail2ban ile Saldırgan IP'leri Otomatik Yasaklayın
Giriş loglarını sürekli izleyip başarısız denemeleri eşiği aşan IP'leri firewall seviyesinde otomatik yasaklamanın, brute force savunmasının belkemiği olduğunu vurgulayalım. fail2ban tam da bunu yapar: logları okur, deseni tanır, sayar ve engeller.
Kurulum ve temel SSH koruması:
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
/etc/fail2ban/jail.local içinde SSH jail'ini sıkılaştırın:
[sshd]
enabled = true
maxretry = 3
findtime = 10m
bantime = 1h
Bu ayar, 10 dakika içinde 3 başarısız denemede bulunan IP'yi 1 saat yasaklar; tekrarlayan saldırganlar için bantime'ı kademeli artıran bantime.increment = true ekleyebilirsiniz. fail2ban yalnızca SSH ile sınırlı değildir — Nginx/Apache logları için de jail tanımlayıp wp-login denemelerini aynı mantıkla yasaklayabilirsiniz. Ayrıntılı yapılandırma ve sık hatalar için fail2ban kurulumu ve yapılandırması rehberimize bakın. Yasak durumunu kontrol etmek için:
sudo fail2ban-client status sshd
Portu Değiştirin ve İki Faktörlü Doğrulama Ekleyin
Saldırı yüzeyini küçültmenin iki pratik yolu olduğunu bilerek, standart portları değiştirip kalan girişlere ikinci bir kimlik katmanı eklemeniz saldırganın işini ciddi şekilde zorlaştırır. Bunlar tek başına yeterli değildir ama gürültüyü ve başarı ihtimalini belirgin biçimde düşürür.
SSH'ı 22'den başka bir porta almak, gizlilik değil ama gürültü azaltmadır — otomatik botların büyük kısmı yalnızca 22'yi tarar, port değişince loglarınız görünür ölçüde temizlenir. Asıl güçlü katman ise iki faktörlü doğrulamadır (2FA/MFA): parola veya anahtar ele geçse bile, ikinci faktör (TOTP uygulaması) olmadan giriş tamamlanamaz. SSH için Google Authenticator PAM modülü, WordPress için bir 2FA eklentisi, RDP için Windows'un MFA çözümleri devreye alınmalıdır. Özellikle yönetici hesaplarında 2FA'yı isteğe bağlı değil zorunlu tutun.
Kullanılmayan Servisleri ve RDP'yi Kapatın
Var olmayan bir kapının zorlanamayacağını akılda tutarak, internete açık her portu ve servisi gözden geçirip gerçekten gerekli olmayanları tamamen kapatmanız gerekir. Açık her port, saldırganın deneyebileceği bir hedef daha demektir.
Sunucuda dinlenen portları listeleyin ve tanımadıklarınızı sorgulayın:
ss -tulpn
Windows sunucularda RDP (3389) doğrudan internete açıksa, bu en riskli konfigürasyonlardan biridir; RDP'yi mutlaka bir VPN ya da RD Gateway arkasına alın, asla çıplak biçimde internete bırakmayın. Linux tarafında güvenlik duvarını "varsayılan reddet" mantığıyla kurun: yalnızca gerçekten gereken portları (443, gerekli SSH portu) açık bırakın, gerisini kapatın. Kapsamlı bir sertleştirme kontrol listesi ve güvenlik duvarı yapılandırması için Linux sunucu sıkılaştırma hizmetimize bakabilirsiniz.
Giriş Denemelerini Sürekli İzleyin
Savunma kurmakla iş bitmediğini, kurduğunuz savunmanın çalıştığını ve saldırıların nasıl bir seyir izlediğini sürekli görmeniz gerektiğini unutmayın. İzlemediğiniz bir sistemin ne zaman zorlandığını da bilemezsiniz.
Başarısız ve başarılı giriş denemelerini periyodik gözden geçirin:
grep "Failed password" /var/log/auth.log | wc -l
grep "Accepted" /var/log/auth.log | tail -10
İlk komut toplam başarısız deneme sayısını verir — bu sayının seyri size saldırı yoğunluğunu gösterir. İkincisi ise başarılı girişleri listeler; tanımadığınız bir IP'den ya da beklenmedik bir saatte gelen bir "Accepted" satırı, savunmanızın aşıldığının en net işaretidir ve derhal müdahale gerektirir. Bu kontrolleri elle yapmak yerine bir izleme sistemine bağlamak, siz farkına varmadan önce alarm üretilmesini sağlar.
En sık başarısız denemede bulunan IP'leri özetlemek, savunmanızın nereden zorlandığını görmenizi sağlar:
grep "Failed password" /var/log/auth.log \
| grep -oE "from [0-9.]+" | awk '{print $2}' \
| sort | uniq -c | sort -rn | head
Bu çıktı, belirli bir IP ya da alt ağdan gelen yoğun bir saldırıyı ortaya çıkarır ve fail2ban'ın bunları gerçekten yasakladığını doğrulamanızı sağlar. Unutmayın: brute force savunması "kur ve unut" değil, düzenli gözden geçirmeyle canlı tutulan bir süreçtir. Saldırı desenleri değişir, yeni servisler açılır ve her yeni açık port yeni bir izleme kalemidir.
Sık Sorulan Sorular
Güçlü bir parola kullanıyorum, yine de brute force riski var mı?
Güçlü parola sözlük saldırılarını ciddi biçimde zorlaştırır ama tek başına yeterli değildir. Aynı parolayı başka bir yerde kullandıysanız ve orası sızdıysa, credential stuffing ile hesabınız güçlü parolaya rağmen risk altındadır. Ayrıca sınırsız deneme hakkı bırakan bir sistemde bot yıllarca deneyebilir. Bu yüzden güçlü parolayı fail2ban, deneme sınırı ve 2FA ile birlikte katmanlı kullanmak şarttır.
fail2ban brute force'u tamamen durdurur mu?
fail2ban saldırgan IP'leri hızla yasaklayarak brute force'un başarı ihtimalini dramatik biçimde düşürür, ancak tek başına mutlak koruma değildir. Dağıtık saldırılarda her istek farklı bir IP'den gelebilir ve tek bir IP eşiği hiç aşmayabilir. En sağlam yaklaşım fail2ban'ı, parola girişini kapatmak (SSH anahtarı) ve 2FA ile birleştirmektir — böylece IP yasaklanmasa bile giriş imkânsız kalır.
SSH portunu değiştirmek gerçekten işe yarar mı?
Port değiştirmek bir güvenlik önlemi değil, gürültü azaltma önlemidir. Otomatik botların çoğu yalnızca standart 22 portunu tarar, bu yüzden portu değiştirmek loglarınızı belirgin biçimde temizler ve rastgele tarama trafiğini keser. Ancak hedefli bir saldırgan tüm portları tarayabilir; bu yüzden port değişikliğini asıl korumaların (anahtar, fail2ban, 2FA) yerine değil, yanına bir ek olarak düşünün.
WordPress'te en çok hangi kapı zorlanıyor?
WordPress'te brute force saldırıları ezici çoğunlukla wp-login.php ve xmlrpc.php üzerinden gelir. wp-login için giriş deneme sınırı eklentisi ve 2FA şarttır; xmlrpc.php ise çoğu sitede kullanılmadığından ve tek istekte yüzlerce parola denemesine izin verdiğinden tamamen kapatılması önerilir. Bu iki uca fail2ban jail'i eklemek koruma katmanını tamamlar.
Sunucunuz brute force denemeleriyle boğuşuyor ya da bir hesabın ele geçirilmiş olabileceğinden şüpheleniyorsanız, katmanlı savunmayı doğru sırayla kurmak fark yaratır. Linux sunucu sertleştirme ekibimiz tüm giriş noktalarınızı kapatır; mevcut durumunuzu görmek içinse bağlayıcı olmayan bir ücretsiz güvenlik kontrolü sunuyoruz. 7/24 WhatsApp üzerinden yazın, sunucunuzu birlikte kilitleyelim.