Fail2ban veya CrowdSec ile kaba kuvvet saldırılarını engelleyin
Linux sunucunuzdaki tekrarlanan giriş denemelerini durdurun: Fail2ban'ı veya güvenlik duvarı bouncer'lı CrowdSec'i kurun, engelleri test edip kaldırın.
- Orta
- 20 dk okuma
- Güncellendi
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13
Bu sayfada
İnternetteki her sunucu sürekli bir giriş denemesi akışı görür. Fail2ban ve CrowdSec kayıtlarınızı okur, tekrarlanan başarısızlıkları tanır ve sorunlu adresleri güvenlik duvarında bir süreliğine engeller. Bu rehber araçlardan birini Ubuntu 24.04/26.04 veya Debian 12/13 üzerinde kurar ve engellerin nasıl test edilip geri alınacağını gösterir.
Başlamadan önce
- SSH ve güvenlik duvarınız zaten kurulu: bkz. yeni bir Linux sunucuyu güvenli hale getirin.
- Engellerden hariç tutabilmek için kendi genel IP adresinizi bilin.
- SSH için iki araçtan birini seçin. Farklı kayıt kaynakları için birleştirebilirsiniz, aynı kaynakta değil.
A seçeneği: Fail2ban
Kurulum
sudo apt update
sudo apt install fail2ban python3-systemdYapılandırma
jail.conf dosyasını asla düzenlemeyin; ayarlarınızı onu geçersiz kılan jail.local dosyasına yazın:
sudo nano /etc/fail2ban/jail.local[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 198.51.100.7
[sshd]
enabled = true
backend = systemdbackend = systemd, SSH olaylarını günlükten (journal) okur. Debian 12 ve sonrası artık varsayılan olarak/var/log/auth.logyazmadığından orada bu ayar gerekir; Ubuntu'da da çalışır.ignoreip:198.51.100.7yerine kendi IP adresinizi yazın.- SSH'yi başka bir porta taşıdıysanız
[sshd]bölümüneport = 2222ekleyin.
Yeniden başlatın ve etkinleştirin:
sudo systemctl enable fail2ban
sudo systemctl restart fail2banDoğrulama
sudo fail2ban-client status
sudo fail2ban-client status sshdİkinci komut jail'in filtre sonuçlarını listeler: Currently failed, Total failed ve Banned IP list. Başka bir ağdan (yok sayılan adresiniz dışından) birkaç hatalı giriş deneyin; Total failed sayacı artar ve maxretry başarısızlıktan sonra adres engellenenler listesinde görünür.
Bir adresin engelini kaldırın
sudo fail2ban-client set sshd unbanip 203.0.113.50B seçeneği: CrowdSec
CrowdSec iki parçadan oluşur: güvenlik motoru kayıtları okuyup kararlar verir, bir bouncer ise bunları burada güvenlik duvarında uygular.
Kurulum
CrowdSec belgeleri, Debian ve Ubuntu için resmî paket deposunun nasıl ekleneceğini anlatır; onu izleyin, ardından motoru kurun:
sudo apt update
sudo apt install crowdsecKurulum programı SSH ve web sunucuları gibi yaygın servisleri algılar ve uygun koleksiyonları kurar. Güvenlik duvarı altyapınıza uyan bouncer'ı ekleyin:
nftables
sudo apt install crowdsec-firewall-bouncer-nftablesiptables
sudo apt install crowdsec-firewall-bouncer-iptablesDoğrulama
sudo cscli collections list
sudo cscli bouncers list
sudo cscli metricscollections list çıktısında crowdsecurity/sshd (ve crowdsecurity/linux) bulunmalı, bouncers list güvenlik duvarı bouncer'ınızı geçerli olarak göstermeli, metrics ise hangi kayıt dosyalarının okunduğunu ve kaç satırın çözümlendiğini göstermelidir.
Kararları görün ve kaldırın
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.50Asla engellenmemek için adresinizi CrowdSec belgelerinde anlatıldığı gibi bir izin listesine ekleyin.
SSH'den fazlasını koruyun
- Fail2ban nginx kimlik doğrulaması, Postfix ve Dovecot gibi birçok servis için filtrelerle gelir. Bir jail'i
jail.localdosyasına bölümünüenabled = trueve doğru kayıt yolu veya arka uçla ekleyerek etkinleştirin. - CrowdSec, koleksiyonları
sudo cscli collections installve koleksiyon adıyla (örneğin nginx veya WordPress için) kurar vesudo systemctl reload crowdsecile yeniden yükler.
Sorun giderme
Fail2ban başlamıyor: "Have not found any log file for sshd jail". Debian 12 ve sonrasının oluşturmadığı /var/log/auth.log dosyasını arıyor. [sshd] bölümünde backend = systemd ayarlayın ve python3-systemd paketini kurun.
Sayaçlar sıfırda kalıyor. Jail yanlış kaynağı okuyor ya da SSH kayıt biçimi değişmiş. sudo fail2ban-client status sshd ile kontrol edin ve filtreyi günlüğe karşı test edin: sudo fail2ban-regex systemd-journal sshd.
CrowdSec kararları var ama hiçbir şey engellenmiyor. Bouncer eksik veya kayıtlı değil. sudo cscli bouncers list ve sudo systemctl status crowdsec-firewall-bouncer ile kontrol edin.
Kendinizi engellediniz. Konsolu ve yukarıdaki engel kaldırma komutlarını kullanın, ardından adresinizi ignoreip veya CrowdSec izin listesine ekleyin. Bkz. güvenlik duvarı değişikliğinden sonra erişimi kaybetmek.
Sonraki adımlar
- SSH'nin kendisini saldırıya daha dayanıklı yapın: SSH sıkılaştırma.
- Trafik selleri farklı bir sorundur: DDoS korumasının temelleri.
Sık sorulan sorular
SSH yalnızca anahtar kabul ediyorsa Fail2ban gerekli mi?
Yalnızca anahtarlı SSH'ye kaba kuvvet uygulanamaz; bu yüzden Fail2ban orada esas olarak kayıt gürültüsünü azaltır. En çok posta, FTP veya web giriş sayfaları gibi hâlâ şifre kabul eden servislerde işe yarar.
Fail2ban mı, CrowdSec mi seçmeliyim?
Fail2ban küçük, yerel ve anlaşılması kolaydır. CrowdSec kutudan çıktığı haliyle daha fazla kayıt türünü çözümler ve topluluk engelleme listelerini kullanabilir. Her kayıt kaynağı için birini seçin; ikisini aynı kayıtlarda çalıştırmak yalnızca işi tekrarlar.
Kendimi engelledim. Nasıl geri girerim?
Başka bir ağdan veya web konsolundan bağlanın, ardından engeli adresinizle fail2ban-client set sshd unbanip ya da cscli decisions delete --ip ile kaldırın. Kendi IP'nizi yok sayma veya izin listesine ekleyin.
Bu araçlar DDoS saldırılarına karşı korur mu?
Hayır. Tek tek adreslerden gelen kayıt satırlarına tepki verirler; bu şifre tahminine ve kötüye kullanan istemcilere karşı işe yarar, büyük trafik sellerine karşı değil. Bunlar için DDoS temelleri rehberimize bakın.
Docker container'larıyla çalışırlar mı?
Engeller ana makinenin güvenlik duvarına uygulanır, Docker ise portları kendi kurallarıyla yayınlar; bu yüzden container'lara giden trafik engelleri atlayabilir. Engelleme eylemini Docker için yapılandırın ya da trafiği ana makinedeki bir ters proxy'ye bırakın.