Linux

Ubuntu 22.04’te Fail2Ban ile SSH Nasıl Korunur

Adım 1 — Fail2ban Kurulumu

Fail2ban, Ubuntu’nun yazılım havuzlarında mevcuttur. Paket listelerinizi güncellemek ve Fail2ban’ı kurmak için root olmayan bir kullanıcı olarak aşağıdaki komutları çalıştırarak başlayın:

sudo apt update
sudo apt install fail2ban

Fail2ban, kurulduktan sonra otomatik olarak bir arka plan hizmeti kuracaktır. Ancak, varsayılan ayarlarından bazıları istenmeyen etkilere neden olabileceğinden, varsayılan olarak devre dışıdır. systemctl Bunu şu komutu kullanarak doğrulayabilirsiniz :

systemctl status fail2ban.service
Output○ fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: enabled
     Active: inactive (dead)
       Docs: man:fail2ban(1)

Fail2ban’ı hemen etkinleştirebilirsiniz, ancak önce bazı özelliklerini gözden geçireceksiniz.

Adım 2 – Fail2ban’ı Yapılandırma

fail2ban hizmeti, yapılandırma dosyalarını /etc/fail2ban dizinde tutar. adlı varsayılanları olan bir dosya var jail.conf. Bu dizine gidin ve aşağıdakileri kullanarak bu dosyanın ilk 20 satırını yazdırın head -20:

cd /etc/fail2ban
head -20 jail.conf
Output#
# WARNING: heavily refactored in 0.9.0 release.  Please review and
#          customize settings for your setup.
#
# Changes:  in most of the cases you should not modify this
#           file, but provide customizations in jail.local file,
#           or separate .conf files under jail.d/ directory, e.g.:
#
# HOW TO ACTIVATE JAILS:
#
# YOU SHOULD NOT MODIFY THIS FILE.
#
# It will probably be overwritten or improved in a distribution update.
#
# Provide customizations in a jail.local file or a jail.d/customisation.local.
# For example to change the default bantime for all jails and to enable the
# ssh-iptables jail the following (uncommented) would appear in the .local file.
# See man 5 jail.conf for details.
#
# [DEFAULT]

Göreceğiniz gibi, bu dosyanın ilk birkaç satırı yorumlanmıştır# – ayarlar olarak değil belge olarak okunacaklarını belirten karakterlerle başlarlar . Ayrıca göreceğiniz gibi, bu yorumlar sizi bu dosyayı doğrudan değiştirmemeye yönlendiriyor. Bunun yerine iki seçeneğiniz vardır: ya dizindeki birden çok dosyada Fail2ban için bireysel profiller oluşturun ya jail.d/ da tüm yerel ayarlarınızı bir jail.local dosyada oluşturun ve toplayın. Dosya jail.conf, Fail2ban’ın kendisi güncellendiğinden periyodik olarak güncellenecektir ve herhangi bir geçersiz kılma oluşturmadığınız varsayılan ayarların kaynağı olarak kullanılacaktır.

Bu eğitimde, oluşturacaksınız jail.local. Bunu kopyalayarak yapabilirsiniz jail.conf:

sudo cp jail.conf jail.local

Artık yapılandırma değişiklikleri yapmaya başlayabilirsiniz. Dosyayı nanoveya favori metin düzenleyicinizde açın:

sudo nano jail.local

Dosyada gezinirken, bu öğretici güncellemek isteyebileceğiniz bazı seçenekleri gözden geçirecektir. [DEFAULT] Dosyanın üst kısmına yakın bölümün altında bulunan ayarlar , Fail2ban tarafından desteklenen tüm servislere uygulanacaktır. [sshd] Dosyanın başka bir yerinde, varsayılanların üzerine uygulanacak hizmete özel ayarları içeren diğer hizmetler için ve diğer hizmetler için başlıklar vardır ./etc/fail2ban/jail.local

[DEFAULT]
. . .
bantime = 10m
. . .

Parametre bantime, bir istemcinin doğru bir şekilde kimlik doğrulaması yapamadığında ne kadar süreyle yasaklanacağını belirler. Bu saniye cinsinden ölçülür. Varsayılan olarak, bu 10 dakikaya ayarlanmıştır. /etc/fail2ban/jail.local

[DEFAULT]
. . .
findtime = 10m
maxretry = 5
. . .

Sonraki iki parametre findtimeve maxretry. Bunlar, bir müşterinin yasaklanması gereken gayri meşru bir kullanıcı olduğu tespit edilen koşulları belirlemek için birlikte çalışır.

Değişken , bir istemcinin yasaklanmadan önce maxretry tarafından tanımlanan bir zaman penceresi içinde kimlik doğrulaması yapması gereken deneme sayısını ayarlar . findtime Varsayılan ayarlarla fail2ban hizmeti, 10 dakikalık bir pencere içinde 5 kez başarısız bir şekilde oturum açmaya çalışan bir istemciyi yasaklayacaktır. /etc/fail2ban/jail.local

[DEFAULT]
. . .
destemail = root@localhost
sender = root@<fq-hostname>
mta = sendmail
. . .

Fail2ban harekete geçtiğinde e-posta uyarıları almanız gerekiyorsa destemailsendername, ve mtaayarlarını değerlendirmelisiniz. Parametre destemail, yasak mesajlarını alması gereken e-posta adresini ayarlar. E sendername-postadaki “Kimden” alanının değerini ayarlar. Parametre mta, posta göndermek için hangi posta hizmetinin kullanılacağını yapılandırır. Varsayılan olarak bu , ancak Postfix veya başka bir posta çözümünü sendmail kullanmak isteyebilirsiniz. /etc/fail2ban/jail.local

[DEFAULT]
. . .
action = $(action_)s
. . .

Bu parametre, bir ban oluşturmak istediğinde Fail2ban’ın yapacağı eylemi yapılandırır. Değer action_, bu parametreden kısa bir süre önce dosyada tanımlanır. Varsayılan eylem, güvenlik duvarı yapılandırmanızı, sorunlu ana bilgisayardan gelen trafiği yasaklama süresi geçene kadar reddedecek şekilde güncellemektir.

Varsayılan olarak sağlanan ve yukarıdakiyle değiştirebileceğiniz başka action_komut dosyaları da vardır: $(action_)/etc/fail2ban/jail.local

…
# ban & send an e-mail with whois report to the destemail.
action_mw = %(action_)s
            %(mta)s-whois[sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]

# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
action_mwl = %(action_)s
             %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]

# See the IMPORTANT note in action.d/xarf-login-attack for when to use this action
#
# ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines
# to the destemail.
action_xarf = %(action_)s
             xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"]

# ban IP on CloudFlare & send an e-mail with whois report and relevant log lines
# to the destemail.
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
                %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
…

Örneğin, action_mw eylemde bulunur ve bir e-posta action_mwl gönderir, eylemde bulunur, bir e-posta gönderir ve günlüğe kaydetmeyi içerir ve suçluyu orada yasaklamak için hesabınızla ilişkili Cloudflare action_cf_mwl API’sine bir güncelleme göndermenin yanı sıra yukarıdakilerin hepsini yapar .

Bireysel Hapishane Ayarları

Sonraki, yapılandırma dosyasının bireysel hizmetlerle ilgilenen kısmıdır. Bunlar, gibi bölüm başlıklarıyla belirtilir [sshd].

enabled = true Bu bölümlerin her biri , diğer ayarlarıyla birlikte başlığın altına bir satır eklenerek ayrı ayrı etkinleştirilmelidir. /etc/fail2ban/jail.local

[jail_to_enable]
. . .
enabled = true
. . .

Varsayılan olarak, SSH hizmeti etkindir ve diğerleri devre dışıdır. . Burada ayarlanan diğer bazı ayarlar, filter bir günlükteki bir satırın başarısız bir kimlik doğrulamasını gösterip göstermediğine karar vermek için kullanılacak olan ve logpath fail2ban’a söz konusu hizmet için günlüklerin nerede bulunduğunu söyleyen ayarlardır.

Değer filter aslında /etc/fail2ban/filter.ddizinde bulunan ve .conf uzantısı kaldırılmış bir dosyaya yapılan bir referanstır. Bu dosyalar , günlükteki bir satırın başarısız bir kimlik doğrulama girişimi olup olmadığını belirleyen normal ifadeler (metin ayrıştırma için ortak bir kısayol) içerir. Bu dosyaları bu kılavuzda derinlemesine ele almayacağız çünkü bunlar oldukça karmaşıktır ve önceden tanımlanmış ayarlar uygun satırlarla uyumludur.

Ancak, o dizine bakarak ne tür filtrelerin mevcut olduğunu görebilirsiniz:

ls /etc/fail2ban/filter.d

Kullanmakta olduğunuz bir hizmetle ilgili görünen bir dosya görürseniz, onu bir metin düzenleyici ile açmalısınız. Dosyaların çoğu oldukça iyi yorumlanmıştır ve en azından betiğin ne tür koşullara karşı korunmak için tasarlandığını söyleyebilmelisiniz. Bu filtrelerin çoğu, istenirse dosyada jail.conf etkinleştirebileceğimiz uygun (devre dışı) bölümlere sahiptir. jail.local

Örneğin, Nginx kullanarak bir web sitesine hizmet ettiğinizi düşünün ve sitenizin parola korumalı bir bölümünün oturum açma girişimleriyle çarpıldığını fark edin. fail2ban’a nginx-http-auth.conf dosya içinde bu durumu kontrol etmek için dosyayı kullanmasını söyleyebilirsiniz /var/log/nginx/error.log.

[nginx-http-auth]Bu aslında dosyanızda adı verilen bir bölümde zaten kurulmuştur /etc/fail2ban/jail.confenabledSadece parametreyi eklemeniz gerekir: etc/fail2ban/jail.local

. . .
[nginx-http-auth]

enabled = true . . .

Düzenlemeyi bitirdiğinizde dosyayı kaydedin ve kapatın. Bu noktada Fail2ban hizmetinizi bundan sonra otomatik olarak çalışacak şekilde etkinleştirebilirsiniz. İlk önce şunu çalıştırın systemctl enable:

sudo systemctl enable fail2ban

Ardından, ilk kez şununla manuel olarak başlatın systemctl start:

sudo systemctl start fail2ban

Şununla çalıştığını doğrulayabilirsiniz systemctl status:

sudo systemctl status fail2ban
Output● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enab>
     Active: active (running) since Mon 2022-06-27 19:25:15 UTC; 3s ago
       Docs: man:fail2ban(1)
   Main PID: 39396 (fail2ban-server)
      Tasks: 5 (limit: 1119)
     Memory: 12.9M
        CPU: 278ms
     CGroup: /system.slice/fail2ban.service
             └─39396 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Jun 27 19:25:15 fail2ban22 systemd[1]: Started Fail2Ban Service.
Jun 27 19:25:15 fail2ban22 fail2ban-server[39396]: Server ready

Bir sonraki adımda Fail2ban’ı çalışırken göstereceksiniz.

Adım 3 — Yasaklama Politikalarını Test Etme (İsteğe Bağlı)

Gelecekte Fail2ban sunucunuzda oturum açmanıza gerek kalmayacak olan başka bir sunucudan, ikinci sunucuyu yasaklayarak kuralları test edebilirsiniz. İkinci sunucunuza giriş yaptıktan sonra Fail2ban sunucusuna SSH yapmayı deneyin. Var olmayan bir ad kullanarak bağlanmayı deneyebilirsiniz:

ssh blah@your_server

Parola istemine rastgele karakterler girin. Bunu birkaç kez tekrarlayın. Bir noktada, aldığınız hatanın olarak değişmesi Permission denied gerekir Connection refused. Bu, ikinci sunucunuzun Fail2ban sunucusundan yasaklandığını gösterir.

Fail2ban sunucunuzda çıktınızı kontrol ederek yeni kuralı görebilirsiniz iptablesiptables sunucunuzdaki düşük seviyeli bağlantı noktası ve güvenlik duvarı kurallarıyla etkileşim kurmak için bir komuttur. DigitalOcean’ın ilk sunucu kurulumu kılavuzunu izlediyseniz, ufw güvenlik duvarı kurallarını daha yüksek düzeyde yönetmek için kullanacaksınız. Çalıştırmak , önceden oluşturulmuş iptables -S tüm güvenlik duvarı kurallarını size gösterecektir : ufw

sudo iptables -S
Output-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N f2b-sshd
-N ufw-after-forward
-N ufw-after-input
-N ufw-after-logging-forward
-N ufw-after-logging-input
-N ufw-after-logging-output
-N ufw-after-output
-N ufw-before-forward
-N ufw-before-input
-N ufw-before-logging-forward
-N ufw-before-logging-input
-N ufw-before-logging-output
…

iptables -Sto öğesinin çıktısını grepdize için bu kurallar içinde aramak için yönlendirirseniz f2b, fail2ban tarafından eklenen kuralları görebilirsiniz:

sudo iptables -S | grep f2b
Output-N f2b-sshd
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A f2b-sshd -s 134.209.165.184/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -j RETURN

İçerdiği satır REJECT --reject-with icmp-port-unreachableFail2ban tarafından eklenmiş olacak ve ikinci sunucunuzun IP adresini yansıtmalıdır.

Muhammed Kerim Koç

1996 yılında Giresun Şebinkarahisarda dünyaya geldim. İlk ve orta öğretimi Şebinkarahisarda tamamladım. Liseyi Şebinkarahisar Anadolu Teknik ve Endüstri Meslek Lisesinde bitirdim. Üniversite için de Şebinkarahisar Teknik Bilimler Meslek Yüksek Okulunda Bilgisayar programcılığını okudum. Üniversite stajı için gelmiş olduğum özel bir firmada işe başladım. 5,5 yıl bu firmadan çalıştıktan sonra farklı bir sektör olan inşaat sektöründe Bilgi teknolojileri Uzmanı olarak 8 ay çalıştım. Daha sonra özel bir şirkette Sistem Network Sorumlusu olarak 4 ay çalıştıktan sonra proje sonlandırılmasından dolayı işten ayrıldım. Tekrar dan 5.5 yıl çalışmış olduğum firmaya Sistem ve Network Yöneticisi olarak geri döndüm ve çalışmaya başladım. Kendimi geliştirmek için Bilge Adam Akademi den Sistem Uzmanlığı eğitimi aldım. Sanallaştırma ve Ağ tarafında kendimi sürekli olarak geliştiriyorum.

İlgili Makaleler

Başa dön tuşu