Takip et

SSH’i Fail2Ban ile Debian 11’de Koruma Rehberi

SSH’i Fail2Ban ile Debian 11’de Koruma Rehberi Giriş Sunucularımız için en kritik güvenlik önlemlerinden biri, uzaktan erişim protokollerini d

SSH’i Fail2Ban ile Debian 11’de Koruma Rehberi

Giriş

Sunucularımız için en kritik güvenlik önlemlerinden biri, uzaktan erişim protokollerini doğru bir şekilde korumaktır. Secure Shell (SSH), sunuculara güvenli bir şekilde uzaktan bağlanmak, dosya transferi yapmak ve komut çalıştırmak için yaygın olarak kullanılan bir protokoldür. Ancak, internete açık her SSH servisi, kötü niyetli aktörlerin sürekli hedefindedir. Brute-force (kaba kuvvet) ve sözlük saldırıları, yaygın olarak karşılaşılan tehditlerdir. Bu tür saldırılar, genellikle otomatik botlar tarafından gerçekleştirilir ve milyonlarca farklı kullanıcı adı ve şifre kombinasyonunu deneyerek sunucunuza yetkisiz erişim sağlamayı amaçlar. Bu durum sadece güvenlik açığı yaratmakla kalmaz, aynı zamanda sunucu kaynaklarını tüketerek performansı düşürebilir ve servis kesintilerine yol açabilir.

Bu makalede, Debian 11 işletim sistemine sahip bir sunucuda SSH servisini bu tür saldırılardan korumak için güçlü ve etkili bir araç olan Fail2Ban’ı nasıl kuracağınızı, yapılandıracağınızı ve yöneteceğinizi ayrıntılı bir şekilde inceleyeceğiz. Fail2Ban, sunucu log dosyalarını izleyerek belirli bir zaman diliminde başarısız oturum açma girişimleri gibi kötü niyetli davranışları tespit eder ve bu davranışları sergileyen IP adreslerini otomatik olarak yasaklar (banlar). Bu sayede, sunucunuzu sürekli deneme saldırılarına karşı korurken, sistem yöneticilerinin manuel müdahalesine gerek kalmadan proaktif bir güvenlik katmanı sağlar. Debian 11, kararlı yapısı ve geniş paket desteği ile Fail2Ban gibi güvenlik araçlarını kolayca entegre edebileceğiniz ideal bir platformdur.

Önkoşullar

Bu rehberi uygulamak için aşağıdaki önkoşullara sahip olmanız gerekmektedir:

  • SSH erişimi olan ve sudo ayrıcalıklarına sahip bir Debian 11 sunucusu.
  • Temel Linux komut satırı bilgisi.
  • Sunucunun internet bağlantısı olması.
  • Güvenliğiniz için, SSH erişiminizde anahtar tabanlı kimlik doğrulama kullanmanız şiddetle tavsiye edilir.

Başlamadan Önce: SSH En İyi Uygulamaları

Fail2Ban, SSH güvenliğinizi artıran harika bir araç olsa da, tek başına yeterli değildir. SSH servisinizi korumak için bir dizi en iyi uygulamayı Fail2Ban ile birlikte uygulamak, çok katmanlı bir savunma stratejisi oluşturmanıza yardımcı olacaktır. Bu uygulamalar, potansiyel saldırganların işini zorlaştırır ve sunucunuzun genel güvenlik duruşunu güçlendirir.

Varsayılan SSH Portunu Değiştirin

SSH’in varsayılan portu olan 22, botlar tarafından sürekli taranan ve saldırılan bir hedeftir. Portu 1024-65535 aralığında, henüz başka bir servis tarafından kullanılmayan rastgele bir porta (örneğin, 2222, 22022) değiştirmek, otomatik taramaların ve saldırıların büyük bir kısmını engeller.
Bunu yapmak için /etc/ssh/sshd_config dosyasını düzenleyin:

sudo nano /etc/ssh/sshd_config

#Port 22 satırını bulun, yorum işaretini kaldırın ve istediğiniz port numarasını yazın (örneğin, Port 2222). Değişiklikleri kaydedip SSH servisini yeniden başlatın:

sudo systemctl restart ssh

Yeni port üzerinden bağlanmayı unutmayın: ssh kullanıcı@sunucu_ip -p 2222.

Root Kullanıcısı ile SSH Girişini Devre Dışı Bırakın

root kullanıcısı, Linux sistemlerinde en yüksek ayrıcalıklara sahip olduğu için saldırganlar tarafından en çok hedeflenen kullanıcı adıdır. root kullanıcısı ile doğrudan SSH girişini devre dışı bırakmak, saldırganların tahmin etmesi gereken kullanıcı adı sayısını azaltır. Bunun yerine, düşük ayrıcalıklı bir kullanıcı ile giriş yapın ve gerektiğinde sudo komutunu kullanarak ayrıcalıklarınızı yükseltin.
/etc/ssh/sshd_config dosyasında PermitRootLogin satırını bulun ve no olarak ayarlayın:

PermitRootLogin no

Ardından SSH servisini yeniden başlatın.

SSH Anahtar Tabanlı Kimlik Doğrulamasını Kullanın

Parolalar, ne kadar karmaşık olursa olsun, kaba kuvvet saldırılarına karşı savunmasızdır. SSH anahtar çiftleri (genel ve özel anahtar), parolalardan çok daha güvenli bir kimlik doğrulama yöntemi sunar. Genel anahtar sunucuda saklanır, özel anahtar ise yerel bilgisayarınızda kalır ve asla ağ üzerinden iletilmez.
Anahtar tabanlı kimlik doğrulamasını kullanmak için:

  1. Yerel makinenizde bir SSH anahtar çifti oluşturun: ssh-keygen.
  2. Genel anahtarınızı sunucuya kopyalayın: ssh-copy-id kullanıcı@sunucu_ip.
  3. /etc/ssh/sshd_config dosyasında PasswordAuthentication no satırını ayarlayarak parola ile kimlik doğrulamayı devre dışı bırakın (bu adımı, anahtar ile başarılı bir şekilde giriş yaptığınızdan emin olduktan sonra yapın).

Bu, parolaların tamamen devre dışı bırakılmasını sağlayarak brute-force saldırılarının etkisini önemli ölçüde azaltır.

Belirli Kullanıcılar veya Gruplarla SSH Erişimini Sınırlayın

Yalnızca belirli kullanıcıların veya belirli bir grubun üyelerinin SSH aracılığıyla sunucuya erişmesine izin vererek saldırı yüzeyini küçültebilirsiniz.
/etc/ssh/sshd_config dosyasında AllowUsers veya AllowGroups yönergelerini kullanın:

AllowUsers kullanıcı1 kullanıcı2
AllowGroups sshusers

Ardından SSH servisini yeniden başlatın.

Sisteminizi ve Paketlerinizi Güncel Tutun

Güvenlik yamaları ve yazılım güncellemeleri, bilinen güvenlik açıklarını kapatmak için kritik öneme sahiptir. Düzenli olarak sisteminizi güncel tutarak potansiyel zafiyetleri ortadan kaldırın:

sudo apt update && sudo apt upgrade -y

Fail2Ban’ı Debian 11’e Kurma

Fail2Ban’ı Debian 11 sunucunuza kurmak oldukça basittir. Debian’ın APT paket yöneticisi sayesinde birkaç komutla kurulumu tamamlayabilirsiniz.

Paket Listelerini Güncelleme

Kuruluma başlamadan önce, sisteminizin paket listelerini güncellediğinizden emin olun. Bu, en son Fail2Ban sürümünü ve bağımlılıklarını almanızı sağlar.

sudo apt update

Fail2Ban Paketini Kurma

Paket listeleri güncellendikten sonra, Fail2Ban paketini aşağıdaki komutla kurabilirsiniz:

sudo apt install fail2ban -y

Bu komut, Fail2Ban’ı ve gerekli tüm bağımlılıklarını sisteminize yükleyecektir. -y bayrağı, kurulum sırasında çıkan onay sorularına otomatik olarak “evet” yanıtı vermeyi sağlar.

Kurulumu ve Servis Durumunu Doğrulama

Kurulum tamamlandıktan sonra, Fail2Ban servisinin çalıştığını doğrulamak iyi bir uygulamadır.

sudo systemctl status fail2ban

Çıktıda active (running) ibaresini görmelisiniz. Bu, Fail2Ban servisinin başarıyla başlatıldığını ve çalıştığını gösterir.
Eğer servis çalışmıyorsa, aşağıdaki komutla başlatabilirsiniz:

sudo systemctl start fail2ban

Ve sistem başlangıcında otomatik olarak başlamasını sağlamak için:

sudo systemctl enable fail2ban

Fail2Ban Yapılandırmasını Anlama

Fail2Ban, oldukça esnek bir yapılandırmaya sahiptir. Yapılandırma dosyaları genellikle /etc/fail2ban/ dizini altında bulunur. Bu dizin içerisinde çeşitli yapılandırma dosyaları ve alt dizinler mevcuttur.

jail.conf ve jail.local

Fail2Ban’ın ana yapılandırma dosyası jail.conf‘tur. Bu dosya, Fail2Ban’ın tüm varsayılan ayarlarını ve çeşitli servisler (SSH, Apache, Nginx vb.) için önceden tanımlanmış “hapishaneleri” (jails) içerir. Ancak, bu dosyayı doğrudan düzenlemek yerine, jail.local adında yeni bir dosya oluşturup üzerinde çalışmak en iyi uygulamadır.
Bunun nedeni şudur: jail.conf dosyası, Fail2Ban paketi güncellendiğinde üzerine yazılabilir. Kendi değişikliklerinizi jail.local dosyasına kaydettiğinizde, paket güncellemelerinden etkilenmezsiniz. Fail2Ban, önce jail.conf‘u okur, ardından jail.local‘i okur ve jail.local‘deki ayarlar jail.conf‘taki ayarları geçersiz kılar.
jail.conf dosyasını jail.local olarak kopyalayarak başlayabilirsiniz:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Artık tüm yapılandırma değişikliklerinizi jail.local üzerinde yapacaksınız.

fail2ban.conf

Bu dosya, Fail2Ban’ın kendi loglama seviyeleri, log dosyası yolu ve pid dosyası gibi global ayarlarını içerir. Genellikle bu dosyada değişiklik yapmaya gerek kalmaz.

filter.d Dizini

Bu dizin, Fail2Ban’ın farklı servisler için log dosyalarını nasıl analiz edeceğini tanımlayan filtre dosyalarını içerir. Her .conf dosyası, belirli bir servisin loglarındaki başarısız girişimleri tanımlayan düzenli ifade (regex) kurallarını barındırır. Örneğin, sshd.conf dosyası, SSH loglarındaki başarısız oturum açma girişimlerini tespit etmek için kullanılan regex kurallarını içerir.

action.d Dizini

Bu dizin, Fail2Ban bir IP adresini yasakladığında veya yasağını kaldırdığında hangi eylemlerin gerçekleştirileceğini tanımlayan komut dosyalarını içerir. Varsayılan eylemler arasında IP adresini güvenlik duvarı kurallarına eklemek (iptables), e-posta bildirimi göndermek veya whois sorgusu yapmak bulunur. Örneğin, iptables-allports.conf dosyası, iptables kullanarak bir IP adresini tüm portlardan yasaklama eylemini tanımlar.

SSH Koruması için Fail2Ban’ı Yapılandırma

Şimdi, jail.local dosyasını düzenleyerek SSH servisinizi korumak için Fail2Ban’ı yapılandırabiliriz.

jail.local Dosyasını Düzenleme

Yapılandırma dosyasını açın:

sudo nano /etc/fail2ban/jail.local

Temel Global Ayarlar

Dosyanın en başında, tüm hapishaneler için geçerli olacak genel ayarları bulacaksınız. Bunlar üzerinde değişiklik yapmak, varsayılan davranışları özelleştirmenizi sağlar.

  • ignoreip

    Bu parametre, Fail2Ban tarafından asla yasaklanmayacak IP adreslerini veya IP aralıklarını tanımlar. Kendi IP adresinizi veya ağınızın IP aralığını buraya eklemek, yanlışlıkla kendinizi sunucunuzdan kilitlemenizi önlemek için hayati öneme sahiptir. Birden fazla IP adresi veya aralığı boşlukla ayırarak ekleyebilirsiniz.

    ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42

    127.0.0.1/8 ve ::1 localhost’u ifade eder. Kendi statik dış IP adresinizi veya genellikle kullandığınız ağın IP aralığını eklemeyi unutmayın.

  • bantime

    Bu parametre, bir IP adresinin yasaklandıktan sonra ne kadar süreyle yasaklı kalacağını saniye cinsinden belirtir. Varsayılan değer genellikle 10 dakika (600 saniye) veya 1 saat (3600 saniye) civarındadır. Güvenlik seviyenize göre bu süreyi artırabilirsiniz. Örneğin, 1 gün için 86400 olarak ayarlayabilirsiniz.

    bantime = 3600
  • findtime

    Bu parametre, Fail2Ban’ın bir IP adresinden gelen başarısız girişimleri saymak için geriye dönük olarak ne kadar süreye bakacağını saniye cinsinden belirtir. Örneğin, findtime = 600 (10 dakika) olarak ayarlandığında, Fail2Ban son 10 dakika içindeki başarısız girişimleri değerlendirir.

    findtime = 600
  • maxretry

    Bu parametre, findtime süresi içinde bir IP adresinin kaç başarısız oturum açma girişiminden sonra yasaklanacağını belirtir. Varsayılan değer genellikle 5’tir. Bu değeri düşürerek (örneğin 3’e), saldırganların daha az deneme şansı olmasını sağlayabilirsiniz, ancak yanlışlıkla kendini kilitleme riskini artırır.

    maxretry = 5

SSH Jail’ini Etkinleştirme

jail.local dosyasında [sshd] başlığını arayın. Bu bölüm, SSH servisi için özel ayarları içerir.

  • enabled

    Bu satırı true olarak ayarlayarak SSH hapishanesini etkinleştirin. Varsayılan olarak genellikle devre dışıdır.

    enabled = true
  • port

    Bu parametre, Fail2Ban’ın hangi portu dinleyeceğini belirtir. Eğer SSH portunuzu varsayılan 22’den farklı bir porta değiştirdiyseniz (ki bu önerilir), bu değeri de değiştirmelisiniz. Birden fazla port için virgülle ayırarak listeyebilirsiniz.

    port = ssh,2222  ; Eğer SSH portunuz 2222 ise

    Veya sadece özel portunuzu belirtin:

    port = 2222
  • logpath

    Bu parametre, Fail2Ban’ın başarısız SSH girişimlerini izlemek için hangi log dosyasını okuyacağını belirtir. Debian 11’de SSH kimlik doğrulama logları genellikle /var/log/auth.log dosyasında bulunur. Bu genellikle doğru varsayılan değerdir, ancak kontrol etmekte fayda var.

    logpath = /var/log/auth.log
  • backend

    Bu parametre, Fail2Ban’ın log dosyalarını izlemek için hangi arka ucu kullanacağını belirtir. Modern Debian sistemlerinde systemd arka ucu önerilir, bu sayede systemd journal logları da etkili bir şekilde izlenebilir.

    backend = systemd

SSH Jail Ayarlarını Özelleştirme (Opsiyonel)

İsterseniz, SSH hapishanesi için global ayarlardan farklı bantime, findtime ve maxretry değerleri belirleyebilirsiniz. Bu, SSH gibi kritik servisler için daha agresif kurallar uygulamanıza olanak tanır.

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 5m

Burada maxretry 3’e, bantime 1 saate ve findtime 5 dakikaya ayarlanmıştır.

Yapılandırma dosyasını kaydettikten sonra (Ctrl+O, Enter, Ctrl+X), Fail2Ban servisini yeniden başlatmanız gerekir ki değişiklikler etkili olsun:

sudo systemctl restart fail2ban

Gelişmiş Fail2Ban Yapılandırması

Fail2Ban, temel korumanın ötesinde, daha gelişmiş senaryolar için de yapılandırılabilir.

Ban Eylemlerini Özelleştirme

Fail2Ban, bir IP adresini yasakladığında çeşitli eylemler gerçekleştirebilir. Bu eylemler, action parametresi ile tanımlanır.

  • action Parametresi

    action parametresi, bir IP yasaklandığında veya yasağı kaldırıldığında hangi komut dosyalarının çalıştırılacağını belirtir. En yaygın kullanılan eylemlerden bazıları şunlardır:

    • action = %(action_mw)s: IP adresini yasaklar ve sistem yöneticisine e-posta gönderir. (m mail, w whois)
    • action = %(action_mwl)s: IP adresini yasaklar, e-posta gönderir ve whois bilgilerini loga yazar. (l log)
    • action = %(action_x)s: Gelişmiş, daha kapsamlı bir eylem şablonudur.

    Varsayılan olarak, Fail2Ban genellikle iptables-multiport eylemini kullanır. Bu eylem, yasaklanan IP adresini belirli portlardan engellemek için iptables güvenlik duvarı kurallarını kullanır.
    SSH hapishanenizin altına aşağıdaki gibi bir satır ekleyerek e-posta bildirimlerini etkinleştirebilirsiniz:

    action = %(action_mwl)s
  • E-posta Bildirimleri (destemail, sendername, mta)

    E-posta bildirimlerini kullanmak istiyorsanız, jail.local dosyasının global bölümünde veya belirli bir hapishanenin altında aşağıdaki parametreleri yapılandırmanız gerekir:

    # Global ayarlar bölümünde
            destemail = admin@example.com
            sendername = Fail2Ban
            mta = sendmail ; veya postfix, mail vb.

    destemail: Yasaklama bildirimlerinin gönderileceği e-posta adresi.
    sendername: E-postaların gönderileceği isim.
    mta: E-posta göndermek için kullanılacak posta aktarım aracısı (Mail Transfer Agent). Sunucunuzda sendmail veya postfix gibi bir MTA’nın kurulu ve yapılandırılmış olması gerekir. Eğer yoksa, bu özelliği kullanabilmek için bir MTA kurmanız gerekebilir (örneğin, sudo apt install postfix).

Özel Hapishaneler Oluşturma

SSH dışında başka servisleri de korumak isteyebilirsiniz (örneğin, Nginx, Apache, Postfix, Dovecot vb.). Fail2Ban, bu servisler için de özel hapishaneler oluşturmanıza olanak tanır.
Örnek olarak, Nginx web sunucusunun HTTP kimlik doğrulama başarısızlıklarını izlemek için bir hapishane oluşturalım:

[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 6
bantime = 1h

Bu örnekte:

  • [nginx-http-auth]: Hapishane adıdır.
  • enabled = true: Hapishaneyi etkinleştirir.
  • port = http,https: Nginx’in dinlediği portları belirtir.
  • filter = nginx-http-auth: Kullanılacak filtre dosyasını belirtir. Bu filtre genellikle /etc/fail2ban/filter.d/nginx-http-auth.conf dizininde bulunur ve Nginx hata loglarındaki başarısız kimlik doğrulama girişimlerini tanımlayan regex kurallarını içerir.
  • logpath = /var/log/nginx/error.log: Nginx’in hata log dosyasının yolunu belirtir.
  • maxretry ve bantime: Bu hapishaneye özel yasaklama ayarlarıdır.

Her yeni hapishane için, ilgili servisin log dosyasının yolunu ve varsa özel bir filtre dosyasını doğru bir şekilde belirtmeniz önemlidir.

Filtreleri Anlama ve Test Etme

Filtreler, Fail2Ban’ın log dosyalarındaki kötü niyetli desenleri tanımasını sağlayan düzenli ifade (regex) kurallarıdır. Fail2Ban ile birlikte gelen varsayılan filtreler çoğu durum için yeterlidir, ancak bazen özel ihtiyaçlarınız için kendi filtrelerinizi yazmanız gerekebilir.

  • filter.d/sshd.conf Örneği

    sshd.conf dosyası, SSH loglarındaki başarısız giriş denemelerini tespit eden regex kurallarını içerir. Bu dosyayı inceleyerek Fail2Ban’ın nasıl çalıştığına dair fikir edinebilirsiniz.

    sudo less /etc/fail2ban/filter.d/sshd.conf

    İçerisinde failregex ve ignoreregex bölümlerini göreceksiniz. failregex, yasaklanması gereken desenleri tanımlar; ignoreregex ise göz ardı edilmesi gereken desenleri tanımlar.

  • Filtreleri Test Etme (fail2ban-regex)

    Kendi özel filtrenizi yazdıysanız veya mevcut bir filtrenin belirli bir log girdisiyle eşleşip eşleşmediğini kontrol etmek istiyorsanız, fail2ban-regex yardımcı programını kullanabilirsiniz.
    Örneğin, sshd filtresini /var/log/auth.log dosyasına karşı test etmek için:

    sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

    Bu komut, filtrenin log dosyasında kaç eşleşme bulduğunu ve hangi IP adreslerinin tespit edildiğini gösterir. Bu, filtrelerinizin doğru çalıştığından emin olmak için çok değerli bir araçtır.

Fail2Ban Servisini Yönetme

Fail2Ban bir systemd servisi olarak çalıştığı için, onu standart systemctl komutları ile yönetebilirsiniz.

  • Fail2Ban’ı Yeniden Başlatma

    Yapılandırma dosyalarında herhangi bir değişiklik yaptıktan sonra, değişikliklerin etkili olması için servisi yeniden başlatmanız gerekir:

    sudo systemctl restart fail2ban
  • Servis Durumunu Kontrol Etme

    Servisin çalışıp çalışmadığını ve herhangi bir hata olup olmadığını kontrol etmek için:

    sudo systemctl status fail2ban
  • Logları Görüntüleme

    Fail2Ban’ın kendi log dosyası /var/log/fail2ban.log adresinde bulunur. Bu log dosyası, hangi IP adreslerinin yasaklandığını, yasağının kaldırıldığını ve Fail2Ban’ın genel çalışma durumunu gösterir.

    sudo tail -f /var/log/fail2ban.log

    Bu komut, log dosyasını gerçek zamanlı olarak izlemenizi sağlar.

Fail2Ban’ı İzleme

Fail2Ban’ın düzgün çalıştığından ve istediğiniz gibi koruma sağladığından emin olmak için düzenli olarak izlemeniz önemlidir.

  • fail2ban-client status

    Bu komut, Fail2Ban’ın genel durumunu ve etkin olan hapishanelerin bir listesini gösterir:

    sudo fail2ban-client status

    Çıktı, hangi hapishanelerin etkin olduğunu ve toplamda kaç IP adresinin yasaklandığını gösterecektir.

  • fail2ban-client status

    Belirli bir hapishanenin (örneğin, sshd) durumunu kontrol etmek için:

    sudo fail2ban-client status sshd

    Bu komut, sshd hapishanesinin kaç kez tetiklendiğini, kaç IP’nin yasaklı olduğunu ve yasaklı IP adreslerinin bir listesini gösterecektir.

  • fail2ban-client get banned

    Belirli bir hapishanede yasaklı olan tüm IP adreslerini listelemek için:

    sudo fail2ban-client get sshd banned
  • fail2ban-client unban

    Yanlışlıkla yasakladığınız bir IP adresinin yasağını kaldırmak için:

    sudo fail2ban-client unban 203.0.113.1

    Bu komut, belirtilen IP adresinin tüm hapishanelerdeki yasağını kaldırır.

  • Log Dosyalarını Gözden Geçirme

    Fail2Ban’ın kendi log dosyasının yanı sıra (/var/log/fail2ban.log), SSH’in log dosyası olan /var/log/auth.log dosyasını da düzenli olarak kontrol etmek, Fail2Ban’ın doğru çalıştığından ve saldırı girişimlerini doğru bir şekilde tespit ettiğinden emin olmanızı sağlar.

Fail2Ban’ı Test Etme

Yapılandırmanızın doğru çalıştığından emin olmak için Fail2Ban’ı test etmek iyi bir fikirdir.

  1. Başka bir bilgisayardan veya farklı bir IP adresinden (kendi ignoreip listenizde olmayan bir IP’den), SSH ile sunucunuza bağlanmaya çalışın.
  2. Bilerek yanlış bir şifre girerek veya yanlış bir kullanıcı adı kullanarak birkaç kez (örneğin, maxretry değeriniz 5 ise 6 kez) başarısız oturum açma girişimi yapın.
  3. Birkaç saniye veya dakika bekleyin (bu süre findtime değerinize bağlıdır).
  4. Başarısız girişimleri yaptığınız IP adresinden tekrar SSH ile bağlanmaya çalışın. Bağlantının reddedildiğini görmelisiniz.
  5. Sunucunuzda sudo fail2ban-client status sshd komutunu çalıştırarak IP adresinin yasaklandığını doğrulayın. Yasaklı IP’ler listesinde ilgili IP adresini görmelisiniz.
  6. Test bittikten sonra, eğer test için kullandığınız IP adresini tekrar kullanmanız gerekiyorsa, yasağını kaldırabilirsiniz: sudo fail2ban-client unban .

Dikkate Alınması Gerekenler ve En İyi Uygulamalar

Fail2Ban, güçlü bir araç olsa da, bazı önemli noktaları ve ek güvenlik önlemlerini dikkate almak önemlidir.

  • Kendinizi Kitlemeyin

    ignoreip listesine kendi IP adresinizi veya kullandığınız güvenilir ağların IP aralıklarını eklemeyi asla unutmayın. Aksi takdirde, yanlışlıkla kendinizi sunucunuzdan kilitleyebilirsiniz. Dinamik bir IP adresiniz varsa, bir VPN veya başka bir güvenilir statik IP üzerinden erişim sağlamak iyi bir çözüm olabilir.

  • Düzenli Güncellemeler

    Debian sisteminizi ve Fail2Ban paketini düzenli olarak güncel tutun. Yazılım güncellemeleri, güvenlik açıklarını kapatır ve Fail2Ban’ın en son tehditlere karşı etkili kalmasını sağlar.

  • Logları Periyodik Olarak İnceleyin

    Fail2Ban ve SSH loglarını (/var/log/fail2ban.log, /var/log/auth.log) düzenli olarak gözden geçirmek, potansiyel güvenlik sorunlarını erken aşamada tespit etmenize yardımcı olur. Anormal aktiviteleri veya sürekli saldırıları fark etmenizi sağlar.

  • Diğer Güvenlik Önlemleriyle Birleştirin

    Fail2Ban, katmanlı bir güvenlik stratejisinin yalnızca bir parçasıdır. Onu bir güvenlik duvarı (UFW veya iptables), SSH anahtar tabanlı kimlik doğrulama, iki faktörlü kimlik doğrulama (MFA) ve düzenli güvenlik denetimleri gibi diğer önlemlerle birleştirerek sunucunuzun güvenliğini maksimuma çıkarın.

  • Performans Etkisi

    Fail2Ban, log dosyalarını sürekli izlediği için çok az da olsa sistem kaynaklarını kullanır. Ancak, SSH gibi tek bir servisi izlemek genellikle modern sunucular için ihmal edilebilir bir performans etkisine sahiptir. Çok sayıda hapishane ve karmaşık filtreler kullanıldığında bu etki artabilir, ancak çoğu kullanım senaryosunda endişe edilecek bir durum değildir.

Sık Karşılaşılan Sorun Giderme

Fail2Ban yapılandırması sırasında veya sonrasında bazı sorunlarla karşılaşabilirsiniz. İşte bazı yaygın sorunlar ve çözümleri:

  • Fail2Ban Başlamıyor veya Hata Veriyor

    • sudo systemctl status fail2ban komutuyla servisin durumunu kontrol edin.
    • sudo journalctl -u fail2ban komutuyla Fail2Ban’ın systemd loglarını inceleyin. Bu, başlangıç hatalarını ve yapılandırma sorunlarını gösterir.
    • /var/log/fail2ban.log dosyasını kontrol edin.
    • Genellikle yapılandırma dosyasındaki (özellikle jail.local) bir yazım hatası veya yanlış bir parametre bu duruma neden olur. sudo fail2ban-client -t komutu ile yapılandırma dosyanızın sözdizimini test edebilirsiniz.
  • Jail Etkin Değil

    • jail.local dosyasında ilgili hapishanenin altında enabled = true olarak ayarlandığından emin olun.
    • Fail2Ban servisini yeniden başlattığınızdan emin olun: sudo systemctl restart fail2ban.
    • sudo fail2ban-client status komutuyla hapishanenin listede görünüp görünmediğini kontrol edin.
  • IP’ler Yasaklanmıyor

    • logpath parametresinin doğru log dosyasını işaret ettiğinden emin olun. SSH için bu genellikle /var/log/auth.log‘tur.
    • filter parametresinin doğru filtre dosyasını (örneğin sshd) işaret ettiğinden emin olun.
    • sudo fail2ban-regex komutuyla filtrenin log dosyasındaki desenlerle eşleşip eşleşmediğini test edin.
    • maxretry ve findtime değerlerinin mantıklı olduğundan emin olun. Örneğin, findtime çok kısa veya maxretry çok yüksekse, yasaklama tetiklenmeyebilir.
    • Kendi IP adresinizin ignoreip listesinde olmadığından emin olun (test yaparken).
    • Güvenlik duvarınızın (iptables) Fail2Ban tarafından eklenen kuralları kabul ettiğinden emin olun. sudo iptables -L komutuyla mevcut iptables kurallarını kontrol edebilirsiniz. Fail2Ban’ın eklediği zincirleri görmelisiniz (örneğin f2b-sshd).
  • Yanlış Log Yolu veya Filtre

    Log dosyasının doğru yolda olduğundan ve Fail2Ban’ın bu dosyayı okuma izinlerine sahip olduğundan emin olun. Filtre dosyası içinde kullanılan regex desenlerinin, log dosyasındaki hata mesajlarıyla tam olarak eşleştiğinden emin olmak için fail2ban-regex aracını kullanın.

Sonuç

SSH, modern sunucu yönetiminin temel taşıdır ve bu nedenle güvenliğinin sağlanması büyük önem taşır. Bu makalede ele aldığımız gibi, Fail2Ban, Debian 11 sunucunuzdaki SSH servisini brute-force ve sözlük saldırılarına karşı korumak için vazgeçilmez bir araçtır. Kurulumu ve temel yapılandırması nispeten basit olsa da, jail.local dosyasını doğru bir şekilde ayarlamak, ignoreip, bantime, findtime ve maxretry gibi parametreleri ihtiyaçlarınıza göre optimize etmek, etkili bir savunma mekanizması oluşturmanın anahtarıdır.

Fail2Ban’ı kullanarak, sunucunuzun log dosyalarını proaktif bir şekilde izleyebilir ve kötü niyetli IP adreslerini otomatik olarak yasaklayarak saldırı yüzeyini önemli ölçüde azaltabilirsiniz. Ayrıca, e-posta bildirimleri gibi gelişmiş yapılandırmalar sayesinde güvenlik olaylarından anında haberdar olabilirsiniz. SSH portunu değiştirme, root girişini devre dışı bırakma ve anahtar tabanlı kimlik doğrulama kullanma gibi SSH en iyi uygulamalarını Fail2Ban ile birleştirmek, sunucunuz için çok katmanlı ve sağlam bir güvenlik duruşu sağlar.

Unutmayın ki güvenlik sürekli bir süreçtir. Sisteminizi ve Fail2Ban’ı düzenli olarak güncellemek, logları periyodik olarak incelemek ve güvenlik yapılandırmalarınızı gözden geçirmek, sunucunuzun uzun vadede güvende kalmasını sağlayacaktır. Fail2Ban, bu süreçte size büyük ölçüde yardımcı olacak, güvenilir ve etkili bir müttefiktir. Bu rehberdeki adımları takip ederek, Debian 11 sunucunuzdaki SSH servisini saldırılara karşı çok daha dirençli hale getirebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.