Doküman

Debian Linux’ta Fail2ban nasıl kurulur ve yapılandırılır

Fail2ban, kaba kuvvet ve DoS/DDoS saldırılarını azaltmak için kullanabileceğimiz ücretsiz ve açık kaynaklı bir yazılımdır: günlük dosyalarını birden fazla başarısız kimlik doğrulama girişimi için tarar ve geçici güvenlik duvarı kuralları oluşturarak ilgili IP adreslerini yasaklar.

KategoriGereksinimler, Kurallar veya Kullanılan Yazılım Sürümü
SistemDağıtımdan bağımsız
Yazılımfail2ban
DiğerRoot ayrıcalıkları
İfade# – verilen linux komutlarının doğrudan kök kullanıcı olarak veya sudo komutu kullanılarak kök ayrıcalıklarıyla yürütülmesini gerektirir
$ – verilen linux komutlarının ayrıcalıklı olmayan normal bir kullanıcı olarak yürütülmesini gerektirir

Kurulum

Fail2ban, en çok kullanılan Linux dağıtımlarının resmi depolarında mevcuttur. Debian ve Debian tabanlı dağıtıma kurulum yapmak için aşağıdaki komutu kullanabiliriz:

$ sudo apt install fail2ban

To ensure the fail2ban service is active and started at boot, we launch the following command:

$ sudo systemctl enable –now fail2ban

Fail2ban yapılandırması

Fail2ban paketi kurulduktan sonra, tüm yapılandırma dosyaları /etc/fail2ban dizini altında bulunabilir. Kurulumun bir parçası olarak gelen dosyaları (“.conf” uzantılı olanlar) değiştirmekten kaçınmalı ve bunun yerine “.local” uzantılı ilgili dosyalara özel konfigürasyonlar yerleştirmeliyiz. Ana fail2ban yapılandırma dosyası /etc/fail2ban/fail2ban.conf’tur. Bu dosya fail2ban günlük düzeyi gibi genel ayarları içerir. Geçersiz kılma değerlerini, mevcut değilse oluşturulması gereken /etc/fail2ban/fail2ban.local dosyasına yerleştiririz. Günlük seviyesini “INFO”den (varsayılan) “DEBUG”a değiştirmek için örneğin şunu yazacağız:

[DEFAULT] loglevel = DEBUG

Fail2ban ile çalışırken uğraşmamız gereken üç ana “varlık” vardır: filtreler, eylemler ve jails. Şimdi onlara bir göz atalım.

Filters

Fail2ban, günlük dosyalarını tarar ve başarısız kimlik doğrulama girişimlerini arar. Filtrelerle temel olarak belirli hizmetlerin günlük dosyalarındaki kimlik doğrulama girişimlerinin nasıl tanınacağını anlatıyoruz. Kullanıma hazır filtreler /etc/fail2ban/filter.d dizininde bulunabilir:

$ ls /etc/fail2ban/filter.d

3proxy.conf domino-smtp.conf mysqld-auth.conf selinux-ssh.conf apache-auth.conf dovecot.conf nagios.conf sendmail-auth.conf apache-badbots.conf dropbear.conf named-refused.conf sendmail-reject.conf apache-botsearch.conf drupal-auth.conf nginx-botsearch.conf sieve.conf apache-common.conf ejabberd-auth.conf nginx-http-auth.conf slapd.conf apache-fakegooglebot.conf exim-common.conf nginx-limit-req.conf softethervpn.conf apache-modsecurity.conf exim.conf nsd.conf sogo-auth.conf apache-nohome.conf exim-spam.conf openhab.conf solid-pop3d.conf apache-noscript.conf freeswitch.conf openwebmail.conf squid.conf apache-overflows.conf froxlor-auth.conf oracleims.conf squirrelmail.conf apache-pass.conf gitlab.conf pam-generic.conf sshd.conf apache-shellshock.conf grafana.conf perdition.conf stunnel.conf assp.conf groupoffice.conf phpmyadmin-syslog.conf suhosin.conf asterisk.conf gssftpd.conf php-url-fopen.conf tine20.conf bitwarden.conf guacamole.conf portsentry.conf traefik-auth.conf botsearch-common.conf haproxy-http-auth.conf postfix.conf uwimap-auth.conf centreon.conf horde.conf proftpd.conf vsftpd.conf common.conf ignorecommands pure-ftpd.conf webmin-auth.conf counter-strike.conf kerio.conf qmail.conf wuftpd.conf courier-auth.conf lighttpd-auth.conf recidive.conf xinetd-fail.conf courier-smtp.conf mongodb-auth.conf roundcube-auth.conf znc-adminlog.conf cyrus-imap.conf monit.conf screensharingd.conf zoneminder.conf directadmin.conf murmur.conf selinux-common.conf

Actions

Fail2ban eylemleri /etc/fail2ban/action.d dizininde tanımlanır. Eylemler, yasağı uygulamak için kullanılan yazılımdan sonra adlandırılır. Bir örnek görelim. UFW (Karmaşık Olmayan Güvenlik Duvarı), kullanımı kolay olacak şekilde tasarlanmış bir güvenlik duvarı yöneticisidir; /etc/fail2ban/action.d/ufw.conf dosyasının içeriği budur:

# Fail2Ban action configuration file for ufw 
# 
# You are required to run "ufw enable" before this will have any effect. 
# 
# The insert position should be appropriate to block the required traffic. 
# A number after an allow rule to the application won't be of much use. 
[Definition] 
actionstart = 
actionstop = 
actioncheck = 
actionban = [ -n "<application>" ] && app="app <application>" ufw insert from to $app actionunban = [ -n "<application>" ] && app="app <application>" ufw delete from to $app 
[Init] 
# Option: insertpos 
# Notes.: The position number in the firewall list to insert the block rule 
insertpos = 1 
# Option: blocktype # Notes.: reject or deny 
blocktype = reject 
# Option: destination 
# Notes.: The destination address to block in the ufw rule 
destination = any 
# Option: application 
# Notes.: application from sudo ufw app list 
application =

Bir eylem iki ana bölümden oluşur: “Definiton ” ve “Init”. İlkinde belirtilen komutlar farklı durumlarda yürütülür: bir ön adım olarak (actioncheck), bir jail başladığında (actionstart), durduğunda (actionstop), bir IP adresini yasaklamak (actionban) ve yasağını kaldırmak (actionunban) gerektiğinde.

“Init” bölümü eyleme özel konfigürasyonları içerir. Örneğin yukarıda rapor ettiğimiz ufw eyleminde, kurallar listesindeki güvenlik duvarı kuralının konumu (insertpos = 1) ve kullanılacak blok türü (reddet vs inkar) ile ilgili talimatlar içerdiğini görebilirsiniz.

Jails

Son olarak jails var. Jail temel olarak bir filtreyi ve bir veya daha fazla eylemi ilişkilendirir. Jails için Fail2ban ana yapılandırma dosyası /etc/fail2ban/jail.conf’tur; açılan yapılandırma dosyaları /etc/fail2ban/jail.d dizinine yerleştirilebilir.

Jails, kullandıkları filtreye göre adlandırılır: örneğin bir jail “sshd” olarak adlandırılmışsa, “filtre” aracılığıyla açıkça belirtilmediği sürece /etc/fail2ban/filter.d/sshd.conf filtresiyle ilişkilendirilir. seçenek. Jail adı köşeli parantez içinde belirtilir. Debian, varsayılan olarak sshd jail için bir geçersiz kılma sağlar. /etc/fail2ban/jail.d/defaults-debian.conf dosyasında tanımlanmıştır:

[sshd] enabled = true

“Sshd” jail için varsayılan parametreler ana hapishane yapılandırma dosyasındadır. Debian, jail aktif olduğundan emin olmak için bu geçersiz kılmayı “enabled” parametresinin “true” olarak ayarlanmasıyla sağlar. Bir hapishaneyi tanımlarken veya “varsayılan” bölümünde kullanılabilecek bazı parametreler şunlardır (mevcut tüm jails için geçerlidir):

SeçenekRolVarsayılan değer
filterJailin kullandığı filtreThe filter corresponding to the jail name under /etc/fail2ban/filter.d
logpathİzlenecek günlük dosyalarının yolunu/yollarını belirtirservice-dependent
actionJail tarafından kullanılacak eylem(ler). Eylemler, uzantıları olmadan, tanımlandıkları dosyanın adını alır.%(action)s – see below
ignoreipYoksayılacak IP adreslerinin listesiNone
bantimeSaniye cinsinden veya açıkça zaman ekleriyle ifade edilen yasaklama süresi10m
findtimeBir IP’nin yasaklanması için belirtilen sayıda başarısız kimlik doğrulama girişiminin gerçekleşmesi gereken zaman aralığı10m
maxretryBir yasağı tetiklemek için belirtilen bulma zamanında meydana gelmesi gereken hataların sayısı5

Varsayılan eylem nasıl tanımlanır?

“Varsayılan” bölümdeki ana jail yapılandırma dosyasına (/etc/fail2ban/jail.conf) bakarsanız, eylemin şu şekilde tanımlandığını görebilirsiniz (satır 268):

action = %(action_)s

Yukarıdaki tanımda _action değişkeni “expanded” olup değeri “action” parametresine atanmıştır. _action değişkeninin kendisi birkaç satır yukarıda tanımlanmıştır (Debian’da 212. satır):

action_ = __ %(banaction)s[port=”%(port)s”, protocol=”%(protocol)s”, chain=”%(chain)s”]

Bu ifadede başka değişkenler de kullanılır:

  • banaction:bu, varsayılan olarak iptables-multiport olarak ayarlanan “temel” yasaklama eylemidir
  • port: yasaklanacak bağlantı noktaları – belirli jaillerde geçersiz kılınmak üzere varsayılan olarak 0:65535 olarak ayarlanmıştır
  • protocol: yasağı uygulamak için güvenlik duvarı kuralında kullanılan protokol – varsayılan olarak tcp
  • chain: bu parametreyi bekleyen yasaklama eylemlerine atlamaların eklenmesi gereken zincir

Bağlantı noktası, protokol ve zincir değişkenleri köşeli parantezler arasında virgülle ayrılmış şekilde kullanılır. Bu söz dizimi ile bunlar “argümanlar” olarak iletilir ve eylem tanımında yer alan ilgili yer tutucuların yerine geçer. Burada “action_”, yalnızca yasağı uygulayan mevcut makrolardan biridir. Diğerleri onun altında tanımlanmıştır. Bazı örnekler:

  • action_mw – Yasağı uygular ve belirtilen postaya whois raporu içeren bir e-posta gönderir
  • action_mwl – Yukarıdakiyle aynı ancak ilgili günlük satırlarını içerir

Yasaklayalım!

Fail2ban’ın düzgün çalıştığını doğrulayalım ve yasağı tetiklemesine izin verelim. Daha önce de gördüğümüz gibi, varsayılan bulma süresi 10 dakikadır ve varsayılan maksimum yeniden deneme değeri 5’tir: bu, 10 dakika içinde 5 kimlik doğrulama girişiminde başarısız olursak IP’mizin (bu örnek adına 192.168.122.1) yasaklanacağı anlamına gelir.

SSH aracılığıyla, IP 192.168.122.93’e sahip ana bilgisayara bilerek yanlış bir şifre girerek bağlanmaya çalışıyorum. Bu, uzak ana bilgisayarın yasağını tetikler. Fail2ban günlüğüne bakarak bunu doğrulayabiliriz:

$ sudo tail /var/log/fail2ban.log

The relevant lines is:

2023-09-27 15:54:47,028 fail2ban.actions 
[2829]: NOTICE [sshd] Ban 192.168.122.1

Görüldüğü üzere 192.168.122.1 IP’si banlanmıştır. Tüm aktif yasakları kontrol etmenin daha uygun bir yolu fail2ban-client yardımcı programını kullanmaktır. Yasaklanan IP’lerin bir listesini elde etmek için bunu “yasaklı” alt komutuyla kullanırız:

$ fail2ban-client banned [{‘sshd’: [‘192.168.122.1’]}]

Bir IP yasağını kaldırmak için (tüm hapishanelerden), bunun yerine, onu yasağı kaldır alt komutuna argüman olarak iletiriz:

$ sudo fail2ban-client unban 192.168.122.1

fail2ban-client yardımcı programı aynı zamanda sunucuyu kontrol etmek (başlatmak, durdurmak, yeniden yüklemek) ve bazı çalışma zamanı yapılandırmalarını gerçekleştirmek için de kullanılabilir.

Yazının orijinalini buradan okuyabilirsiniz.