Fail2ban, VDS’nize girmeye çalışan IP’leri yasaklayarak VDS’nizi korur. Fail2Ban, hangi IP’lerin kaba kuvvet saldırıları gerçekleştirdiğini belirlemek için günlük dosyalarını tarar ve bunları yasaklar. (örneğin, /var/log/apache/error_log). Çok fazla yanlış parola denemesini tarar, açıkları arar, vb.

Ek olarak, kendinize ve saldıran IP’nin sahibine otomatik olarak bir rapor göndermek de mümkündür. Fail2ban çeşitli hizmetler (Apache, Courier, SSH, vb.) için filtrelerle birlikte gelir.

Bu makaledeki komutları root kullanıcısı veya sudo haklarına sahip bir kullanıcı olarak çalıştırmalısınız.

Fail2ban’ı Yükleme

Alma Linux8

Adım 1
İlk olarak, VDS’nizi güncelleyin:

sudo dnf -y update

Adım 2
Fail2ban resmi CentOS paket deposunda yer almamaktadır. Kurumsal Linux için Ekstra Paketler (EPEL) içinde yer alır. Bu nedenle, önce en son EPEL sürümünü yükleyin.

sudo dnf -y install epel-release

Adım 3
Fail2ban’ı şu komutla yükleyin:

sudo dnf -y install fail2ban

Adım 4
Ardından, Fail2ban’ın VDS’nizle otomatik olarak başladığından emin olun ve aşağıdaki komutlarla Fail2ban’ı etkinleştirin:

systemctl enable fail2ban
systemctl start fail2ban

Fail2ban yapılandırması ile devam edin.

CentOS

Adım 1
İlk olarak, VDS’nizi güncelleyin:

yum -y update

Adım 2
Fail2ban resmi CentOS paket deposunda yer almamaktadır. Kurumsal Linux için Ekstra Paketler (EPEL) içinde yer alır. Bu nedenle, önce en son EPEL sürümünü yükleyin.

yum -y install epel-release

Adım 3
Fail2ban’ı şu komutla yükleyin:

yum -y install fail2ban

Adım 4
Fail2ban’ın VDS’nizle otomatik olarak başladığından emin olun ve aşağıdaki komutlarla Fail2ban’ı etkinleştirin:

systemctl enable fail2ban

systemctl start fail2ban

Fail2ban yapılandırması ile devam edin.

Ubuntu

Adım 1
Önce VDS’nizi güncelleyin:

apt-get update

Adım 2
CentOS’un aksine, Fail2ban resmi Ubuntu paket deposuna varsayılan olarak dahil edilmiştir. Fail2ban’ı şu komutla kurarsınız:

apt-get install fail2ban

İzin iki kez istenecektir. Devam etmek için her iki seferde de ‘y’> ‘Enter’a tıklayın.

Adım 3
Depo önbelleğinizi şu komutla boşaltın:

apt-get clean

Adım 4
Ardından Fail2ban’ın VDS’nizle otomatik olarak başladığından emin olun ve aşağıdaki komutlarla Fail2ban’ı etkinleştirin:

systemctl enable fail2ban
systemctl start fail2ban

Continue with the configuration of Fail2ban.Debian

Debian

Adım 1
Önce VDS’nizi güncelleyin:

apt-get update

Adım 2
CentOS’un aksine, Fail2ban resmi Debian paket deposuna varsayılan olarak dahil edilmiştir. Fail2ban’ı şu komutla kurarsınız:

apt-get install fail2ban

İzin bir kez istenecektir. Devam etmek için ‘y’> ‘Enter’a tıklayın.

Adım 3
Depo önbelleğinizi şu komutla boşaltın:

apt-get clean

Adım 4
Ardından Fail2ban’ın VDS’nizle otomatik olarak başladığından emin olun ve aşağıdaki komutlarla Fail2ban’ı etkinleştirin:

systemctl enable fail2ban
systemctl start fail2ban

Fail2ban yapılandırması ile devam edin.

Fail2ban’ı Yapılandırma

Fail2ban yapılandırmasında bazı ayarlamalar yapmanızı öneririz. Biz /etc/fail2ban/jail.local dosyasını kullanıyoruz. Fail2ban varsayılan olarak /etc/fail2ban/jail.conf dosyasını kullanır ancak Fail2ban güncellemeleri ile bu dosyanın üzerine yazılabilir. Tıpkı jail.local’de olduğu gibi. Ayrıca, jail.local yapılandırması jail.conf yapılandırmasına göre önceliklidir.

Aşağıdaki yapılandırmanın yalnızca VDS’niz için geçerli olan kısımlarını kullanın! Eğer Exim kullanmıyorsanız, o kısmı eklemeyin. Aynı şey Postfix kısmı için de geçerlidir. SASL bölümünü yalnızca posta hizmetimizi kullanıyorsanız kullanın.

Adım 1
Önce jail.local dosyasını oluşturun:

nano /etc/fail2ban/jail.local

Adım 2
Aşağıdaki kodu ekleyin ve değerleri ihtiyaçlarınıza göre ayarlayın. Seçeneklerin bir açıklaması kodun altında bulunabilir (ipucu: Putty kullanın ve aşağıdaki içeriği kopyalayıp yapıştırın). İşletim sistemine göre farklılık gösterebilen banaction’a daha fazla dikkat edin.

Aşağıdaki verileri (sender, destemail ve ignoreip) kendi verilerinize göre ayarlayın ve yalnızca VDS’nizde kullandığınız yazılımın hapishanelerini kullanın (örneğin, Exim veya Postfix, ancak her ikisi de değil.) VDS’nizde hangisini kullandığınızı systemctl status exim / postfix komutuyla kontrol edebilirsiniz).

VDS posta servisimizi mi kullanıyorsunuz? O zaman ‘[sasl]’ altındaki kısmı ekleyin ve aşağıdaki 5. adıma bir göz atın.

[DEFAULT]
# Ban for X amount of time
bantime = 604800
findtime = 3600
sender = fail2ban@example.com
destemail = admin@example.com
action = %(action_mwl)s
banaction = iptables-multiport
maxretry = 5
ignoreip = youripaddress

[sshd]
enabled = true
port = ssh
# replace ssh by your SSH port number.

[exim]
enabled = true
filter = exim
logpath = /var/log/exim/mainlog
# Using cPanel? replace the line above with: logpath = /var/log/exim_mainlog

[postfix]
enabled = true
port = smtp, ssmtp
filter = postfix
failregex = \[<HOST>]: 535 Incorrect authentication data
logpath = /var/log/maillog

[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot
logpath = /var/log/maillog

[sasl]
enabled = true
port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter = sasl
logpath = /var/log/maillog

Fail2Ban jail.local Yapılandırmasının Açıklaması

Fail2ban ‘Jails’ olarak adlandırılan bir sistem kullanır. Bir jail, VDS’nizdeki belirli bir yazılım parçası için yapılandırma olarak görülebilir; burada hangi hizmetin ve bağlantı noktasının kullanılacağı ve hangi günlük dosyasının Fail2ban tarafından taranacağı gibi şeyleri tanımlarsınız. Yukarıda, örneğin, [Exim] altındaki kısım bir Jail’dir.

[Default]

  • bantime: 60’lık bir bant zamanı 1 dakika, 3600 1 saat, 86400 1 gün ve 604800 1 hafta vb.
  • findtime: Bu, Fail2ban’ın günlük dosyalarınızı ne kadar geçmişte kontrol ettiğini tanımlar. Bu varsayılan olarak 600’dür (10 dakika). Bir IP her 10 dakikada bir saldırı gerçekleştirirse, Fail2ban bunu bir saldırı olarak değerlendirmez çünkü 10 dakika içinde yalnızca beş saldırı olması durumunda (bkz. maxretry) harekete geçilir.
  • sender (isteğe bağlı): Fail2ban eylemlerinin bildirimlerini saldırgana gönderen e-posta adresi. VDS’nizde bunun için kullanabileceğiniz bir giden posta sunucusu ve posta adresi yapılandırmak bu kılavuzun kapsamı dışındadır.
  • destemail (isteğe bağlı): Fail2ban bildirimlerinin gönderileceği kendi e-posta adresiniz. VDS’nizde bunun için kullanabileceğiniz bir giden posta sunucusu ve posta adresi yapılandırmak bu kılavuzun kapsamı dışındadır.
  • action (isteğe bağlı): Varsayılan seçenek %(action_)s saldırganın IP’sini yasaklar. Ek olarak, %(action_mwl)s WHOIS verilerini ve günlük dosyası verilerini içeren bir e-posta bildirimi gönderir.
  • banaction: banaction hangi güvenlik duvarını kullandığınızı gösterir. Örneğin Ubuntu’da bu UFW’dir. Aşağıdaki gibi jail.local firewalld veya iptables içinde belirtebilirsiniz:
    • firewalld: banaction = firewallcmd-ipset
    • iptables: banaction = iptables-multiport
    • ufw: banaction = ufw
  • maxretry: Burada, ‘eylem’ altında belirtilen eylem gerçekleştirilmeden önce mümkün olan maksimum deneme sayısını (örn. hatalı giriş denemeleri) belirtebilirsiniz. Saatte en fazla 3 başarısız girişe (yani 3600 bulma süresi ile) veya 1,5-2 saatte en fazla 5 girişe izin vermenizi öneririz, çünkü birçok bot bu sıklıkta saldıracaktır.
  • sshd enabled: Bu, ssh bağlantı denemelerini izler ve maxretry altında tanımlanandan daha fazla deneme yaparlarsa IP’leri yasaklar.
  • ignoreip: Buraya kendi IP’nizi girin. Şifrenizi unutursanız, IP’niz ‘maxretry’ altındaki deneme sayısından hemen sonra yasaklanmayacaktır.

[SSHD] (SSH server)

  • enabled: SSH(D) bağlantınızın güvenliğini etkinleştirir.
  • port: Burada hangi portun korunacağını belirtirsiniz. ‘ssh’ değeri ile Fail2ban’a ayarlanan SSH portunu kullanmasını söylersiniz.

[exim] (outgoing mail)

  • enabled: exim bağlantınızın güvenliğini etkinleştirir.
  • filtre: Hangi filtrenin kullanıldığını belirtir. Fail2ban, /etc/fail2ban/filter.d/ içinde bulunan bir dizi filtre ile birlikte gelir
  • failregex: Bunlar, ‘logpath’ altında tanımlanan günlüğün arandığı hata mesajlarıdır.
  • logpath: Fail2ban’ın aradığı günlük dosyası.

[postfix] (outgoing mail)

  • enabled: exim bağlantınızın güvenliğini etkinleştirir.
  • port: Burada hangi portun korunacağını belirtirsiniz. ‘smtp,ssmtp’ değeri ile Fail2ban’a ayarlanan SMTP portunu kullanmasını söylersiniz.
  • filtre: Hangi filtrenin kullanıldığını belirtir. Fail2ban, /etc/fail2ban/filter.d/ içinde bulunan bir dizi filtre ile birlikte gelir
  • failregex: Bunlar, ‘logpath’ altında tanımlanan günlüğün arandığı hata mesajlarıdır.
  • logpath: Fail2ban’ın aradığı günlük dosyası.

[dovecot] (incoming mail)

  • enabled: exim bağlantınızın güvenliğini etkinleştirir.
  • port: Burada hangi portun korunacağını belirtirsiniz. ‘pop3, pop3s, imap, imaps’ değeri ile Fail2ban’a ayarlanan SSH portunu kullanmasını söylersiniz.
  • filtre: Hangi filtrenin kullanılacağını belirtir. Fail2ban /etc/fail2ban/filter.d/ içinde bulunan bir dizi filtre ile birlikte gelir.
  • logpath: Fail2ban’ın aradığı günlük dosyası.

[SASL] (VDS-mailservice gibi bir aktarıcı kullanmak için)

  • enabled: Posta sunucunuzun bağlantısı için güvenliği etkinleştirir.
  • port: Hangi bağlantı noktasının güvenli olduğunu belirtir. ‘pop3, pop3s, imap, imaps’ değerini kullanarak Fail2ban yapılandırılmış smtp, pop3- ve imap-portlarını kullanacaktır.
  • filter: Hangi filtrenin kullanılacağını belirtir. Fail2Ban /etc/fail2ban/filter.d/ içinde bulunabilecek bir dizi filtre ile birlikte gelir.
  • logpath: Fail2ban tarafından kontrol edilen günlük dosyası.

Adım 3
Exim kullanıyorsanız (örneğin DirectAdmin ve cPanel görüntülerimizle), exim.conf adlı mevcut yapılandırma dosyasını genişletin. Eğer exim kullanmıyorsanız, 5. adıma devam edin.

nano /etc/fail2ban/filter.d/exim.conf

Adım 4
Aşağıdaki içeriği dosyaya mevcut failregex listesinin altına ekleyin ve ctrl + x > y > enter tuşlarına art arda basarak değişiklikleri kaydedin:

\[<HOST>\]: 535 Incorrect authentication data

Tanım bölümü bu durumda aşağıdaki gibi görünmelidir:

[Definition]

failregex = ^%(pid)s %(host_info)ssender verify fail for <\S+>: (?:Unknown user|Unrouteable address|all relevant MX records point to non-existent hosts)\s*$
            ^%(pid)s \w+ authenticator failed for (?:[^\[\( ]* )?(?:\(\S*\) )?\[<HOST>\](?::\d+)?(?: I=\[\S+\](:\d+)?)?: 535 Incorrect authentication data( \(set_id=.*\)|: \d+ Time\(s\))?\s*$
            ^%(pid)s %(host_info)srejected RCPT [^@]+@\S+: (?:relay not permitted|Sender verify failed|Unknown user|Unrouteable address)\s*$
            ^%(pid)s SMTP protocol synchronization error \([^)]*\): rejected (?:connection from|"\S+") %(host_info)s(?:next )?input=".*"\s*$
            ^%(pid)s SMTP call from \S+ %(host_info)sdropped: too many nonmail commands \(last was "\S+"\)\s*$
            ^%(pid)s SMTP protocol error in "AUTH \S*(?: \S*)?" %(host_info)sAUTH command used when not advertised\s*$
            ^%(pid)s no MAIL in SMTP connection from (?:[^\[\( ]* )?(?:\(\S*\) )?%(host_info)sD=\d\S+s(?: C=\S*)?\s*$
            ^%(pid)s (?:[\w\-]+ )?SMTP connection from (?:[^\[\( ]* )?(?:\(\S*\) )?%(host_info)sclosed by DROP in ACL\s*$
            \[<HOST>\]: 535 Incorrect authentication data

ignoreregex =

Adım 5
VDS mailservice kullanıyorsanız, SASL jail için başka bir yapılandırma dosyası oluşturun. Değilse, 7. adıma devam edin.

nano /etc/fail2ban/filter.d/sasl.conf

Adım 6
Aşağıdaki içeriği dosyaya ekleyin ve ctrl + x > y > enter tuşlarına art arda basarak değişiklikleri kaydedin:

# Fail2Ban configuration file
#
# $Revision$

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P[\w\-.^_]+)
# Values: TEXT
#
failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [A-Za-z0-9+/ ]*)?$

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Adım 7
Değişiklikleri işlemek için Fail2ban’ı yeniden başlatın:

systemctl restart fail2ban

Gelişmiş / isteğe bağlı: Fail2ban yasaklama süresini artırma

Fail2ban’ın çok fanatik davranmasını ve şifresini hatırlamayan meşru bir kullanıcıyı kalıcı olarak engellemesini önlemek için, alternatif olarak önce bir saat, sonra bir gün, bir hafta vb. yasaklamak için ayarlamak mümkündür.

Adım 1
Önce /etc/fail2ban/filter.d/f2b-repeat.conf dosyasını oluşturun:

nano /etc/fail2ban/filter.d/f2b-repeat.conf

Adım 2
Aşağıdaki içeriği ekleyin:

[INCLUDES]
before = common.conf
[Definition]
failregex = \]\s+ban\s+<HOST>
ignoreregex = \[f2b-repeat.*\]\s+ban\s+<HOST>

Adım 3
jail.local dosyanızda, ‘[Default]’ altındaki ve ‘[SSHD]’ önündeki kısmı aşağıdakiyle değiştirin:

[DEFAULT]
# Ban for X amount of time
bantime = 3600
findtime = 86400
sender = fail2ban@example.com
destemail = admin@example.com
action = %(action_mwl)s
banaction = firewallcmd-ipset
maxretry = 5
ignoreip = youripaddress

[f2b-repeat2]
enabled = true
filter = f2b-repeat
bantime = 86400
findtime = 604800
logpath = /var/log/fail2ban.log
maxretry = 3

[f2b-repeat3] 
enabled = true 
filter = f2b-repeat 
bantime = 604800
findtime = 2592000 
logpath = /var/log/fail2ban.log 
maxretry = 3 

[f2b-repeat4] 
enabled = true 
filter = f2b-repeat 
bantime = 2592000 
findtime = 15552000 
logpath = /var/log/fail2ban.log 
maxretry = 5

Bulma süresini artırırsınız, böylece Fail2ban yeni denemelere daha fazla bakar. Bu şekilde Fail2ban’ın tekrar eden ziyaretçileri tanımasını ve aynı zamanda onları daha fazla kontrol etmesini sağlarsınız.

Adım 4
Yukarıda görüldüğü gibi Fail2ban günlük dosyasının dizinini belirtirseniz, Fail2ban başlamayacaktır. Bu durum ilk olarak Fail2ban.log dosyası oluşturularak çözülebilir:

sudo touch /var/log/fail2ban.log

Adım 5
Değişiklikleri işlemek için Fail2ban’ı yeniden başlatın:

systemctl restart fail2ban

Gelişmiş / isteğe bağlı: ekstra filtreler / Jail

Fail2ban, /etc/fail2ban/filter.d/ içinde bulabileceğiniz bir dizi filtre / Jail ile birlikte gelir:

Adım 1
ile standart filtreleri / jailleri görüntüleyin:

ls /etc/fail2ban/filter.d/

Aşağıdaki gibi bir genel bakış göreceksiniz:

Kullanmak istediğiniz filtrenin adını seçin, örneğin apache-auth.conf

Adım 2
Jaili aç:

nano /etc/fail2ban/jail.local

Adım 3
Şimdi aşağıdaki sözdizimini kullanarak filtre jailii ekleyin:

[jailname]
enabled = true
filter = jailname
logpath = /var/log/yourlogfile
  • [jailname]: Fail2ban’ın durumunu kontrol ettiğinizde kolayca tanıyabilmeniz için bu adı istediğiniz bir adla değiştirin.
  • enabled: Her zaman true olmalıdır, aksi takdirde hapishaneniz devre dışı bırakılır.
  • filter: Seçtiğiniz hapishanenin adını buraya girin. Örneğin, 1. adımda apache-auth.conf seçtiyseniz, buraya apache-auth girin.
  • logpath: Burada Fail2ban’ın VDS’nizdeki saldırıları aramak için hangi dosyayı tarayacağını belirtirsiniz.

Ek İpuçları ve Komutlar

Fail2ban’ın durumunu aşağıdaki komutla kontrol edebilirsiniz:

fail2ban-client status

Fail2ban’ın loglarını aşağıdaki komut ile kontrol edebilirsiniz:

nano /var/log/fail2ban.log

Fail2ban’ın hala çalışıp çalışmadığını doğrulamak istiyorsanız, şunu kullanın:

systemctl status fail2ban

Bir değişiklikten sonra Fail2ban’ı aşağıdaki komutla yeniden başlatırsınız:

systemctl restart fail2ban

Manuel yasaklama / yasağı kaldırma

Manuel yasaklama
Birisi çok sabırlı olur ve saatte bir kez giriş yapmaya çalışırsa, bir IP’yi manuel olarak yasaklama seçeneğiniz de vardır. Bunu yapmak için, önce çıktısında görünen Jail’lerden birini seçin:

Ardından bir IP’yi yasaklamak için aşağıdaki komutu kullanın; burada ‘JAIL’ yerine seçilen hapishane adını ve xxx.xxx.xxx.xxx yerine saldırganın IP adresini yazın:

fail2ban-client -vvv set JAIL banip xxx.xxx.xxx.xxx

Manuel yasaklama kaldırma
Örneğin birkaç kez yanlış SSH parolası girdikten sonra birisinin yanlışlıkla yasaklanması söz konusu olabilir (kendinizi bu şekilde yasakladıysanız VDS konsolunu kullanın). Bu senaryoda, bir IP adresinin yasağını kaldırmak için aşağıdaki komutu kullanabilirsiniz:

sudo fail2ban-client set JAIL unbanip xxx.xxx.xxx.xxx

‘JAIL’ yerine IP adresinin yasaklandığı Jail adını ve xxx.xxx.xxx.xxx yerine saldıran IP adresini yazın.

IP adresinin hangi hapishanede listelendiğinden emin değil misiniz? Örneğin şu komutu kullanarak fail2ban günlüğünüze bakın:

sudo nano /var/log/fail2ban.log

Klavyenizde ctrl + w tuşlarına basarak açılan günlük dosyasında belirli bir IP adresini arayın (bu, nano’daki whereis işlevidir) ve ardından aradığınız IP adresini yazın.

Fail2ban’ın VDS’inize kurulumu ve yapılandırması tamamlandı. VDS’niz artık bruteforce saldırılarına karşı korunuyor!

Bu makaleyle ilgili herhangi bir sorunuz kalırsa, destek departmanımızla iletişime geçmekten çekinmeyin. Onlara bu sayfanın altındaki ‘Bize Ulaşın‘ düğmesi aracılığıyla ulaşabilirsiniz.