Ana içeriğe geç

Fail2ban Nedir ve Nasıl Çalışır?

Fail2ban Linux sunucularda log dosyalarını izleyen bir güvenlik yazılımıdır. Bu log dosyalarında belirli patternları arar. Örneğin, bir kullanıcının yanlış parola girmesi gibi başarısız giriş denemeleri veya belirli bir porta yapılan aşırı istekler bu desenlere örnek olabilir.

Belirlenen eşik değerlerine (thresholds) ulaşıldığında, Fail2ban bu saldırgan IP adresini güvenlik duvarına (firewall) bildirir ve o IP adresinin belirli bir süre veya kalıcı olarak engellenmesini sağlar.


Fail2Ban Kurulumu

apt update
apt install fail2ban
systemctl start fail2ban
systemctl enable fail2ban

Fail2ban Yapılandırma Dosyaları

/etc/fail2ban/jail.conf

Bu dosya Fail2ban'ın ana yapılandırma dosyasıdır ve varsayılan ayarları içerir. Genelde bu dosyayı doğrudan değiştirmemek önerilir. Fail2ban güncellemeleri sırasında bu dosya üzerine yazılabilir ve yaptığınız değişiklikler kaybolabilir.

/etc/fail2ban/jail.local

Bu dosya jail.conf dosyasındaki ayarları geçersiz kılmak (override etmek) veya yeni ayarlar eklemek için kullanılır. Bu dosyayı elle oluştururuz ve tüm özel yapılandırmalarımızı buraya yazarız. Bu sayede güncellemelerden etkilenmeyiz.


Jail.local Dosyası Oluşturmak

Aşağıdaki komut ile dosya oluşturulur.

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

Nginx için Fail2ban Yapılandırması

Belirli bir ip adresinden 30 saniyede 100 istekten fazla geliyorsa 5 dakika boyunca 443 ve 80 numaralı portlara erişememesini sağlamak için aşağıdaki işlemler uygulanır.

vim /etc/fail2ban/filter.d/nginx-request-bot.conf

Dosyanın içeriği aşağıdaki gibi düzenlenir.

[INCLUDES]
before = common.conf
# failregex Nginx'in erişim loglarındaki her satırı yakalar. Log formatina gore regexpin degistirilmesi gerekmektedir.
# <HOST> Fail2ban'ın IP adresini yakalamak için kullandığı özel bir etikettir.
[Definition]
failregex = ^<HOST> - - \[.*\] "(GET|POST|HEAD|PUT|DELETE|OPTIONS).*"\s+\d+\s+\d+\s+"(?:[^"]*)"\s+"(?:[^"]*)"$

ignoreregex =

Özel filtreyi oluşturduktan sonra oluşturduğumuz jail.local dosyasını düzenleyerek bu filtreyi uygulayabiliriz.


jail.local dosyası açılır ve dosyanın en alt satırına aşağıdaki içerik eklenir

[nginx-request-bot]
enabled = true
# Kullandığımız özel filtre dosyasının adını belirtiyoruz.
filter = nginx-request-bot
# Nginx access log dosyasının pathi.
logpath = /var/log/nginx/access.log
# Yasaklama süresi: 5 dakika (300 saniye).
bantime = 300
# Fail2ban'in istekleri saymak için geriye dönük bakacağı süre: 30 saniye.
findtime = 30
# 30 saniye içinde 100'den fazla istek gelirse yasakla.
maxretry = 100
# Sadece 80 ve 443 portlarına gelen istekler için geçerli olmasını istiyorsanız:
port = http,https
# Veya port numaralari da belirtilebilir.
# port = 80,443

Bu ayarlar yapıldıktan sonra fail2ban restartlanır.

systemctl reload fail2ban

Oluşturulan Hapishanelerin Görüntülenmesi

Aşağıdaki komutla oluşturulan hapishaneler görüntülenebilir.

root@sunwell:/etc/fail2ban/filter.d# fail2ban-client status                  
Status
|- Number of jail:  2
`- Jail list:   nginx-request-bot, sshd

İstediğimiz jail hakkında bilgi almak için komutun sonuna jailin adını ekleyebiliriz.

root@sunwell:/etc/fail2ban/filter.d# fail2ban-client status nginx-request-bot
Status for the jail: nginx-request-bot
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 0
|  `- File list:    /var/log/nginx/access.log
`- Actions
   |- Currently banned: 0
   |- Total banned: 0
   `- Banned IP list: