Fail2Ban, sunucularınızı brute-force saldırıları ve diğer kötü niyetli girişimlerden korumak için kullanılan güçlü bir araçtır. Bu yazıda, Fail2Ban kullanarak Nginx web sunucusunu nasıl güvenli hale getirebileceğinizi adım adım anlatacağım. Ayrıca bu süreçte sıkça sorulan sorulara ve detaylı açıklamalara da yer verdim.


1. Fail2Ban Nedir ve Neden Kullanılır?

Fail2Ban, log dosyalarını analiz ederek şüpheli aktiviteleri tespit eder ve belirli bir süre için bu aktiviteleri gerçekleştiren IP adreslerini engeller. Özellikle Nginx ile birlikte kullanıldığında, brute-force saldırılar, bot trafiği ve diğer istenmeyen aktiviteleri azaltmak için güçlü bir çözüm sunar.


2. Fail2Ban Kurulumu

Eğer Fail2Ban kurulu değilse, aşağıdaki komutla hızlıca yükleyebilirsiniz:

sudo apt update && sudo apt install fail2ban -y

Kurulum tamamlandıktan sonra, Fail2Ban hizmetini etkinleştirip başlatabilirsiniz:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

3. Fail2Ban ile Nginx’i Koruma

Fail2Ban’i Nginx için kullanabilmek adına gerekli yapılandırmaları yapacağız. Nginx’de HTTP tabanlı saldırılara karşı iki temel jail tanımlayabiliriz:

  • nginx-http-auth: Yetkisiz giriş denemelerini izler.
  • nginx-botsearch: Bot saldırılarını ve kötü niyetli tarama denemelerini tespit eder.

Adım 1: Jail’leri Aktif Hale Getirme

Nginx ile ilgili jail’ler genellikle Fail2Ban’in yapılandırma dosyalarında tanımlıdır. Ancak, bu jail’leri aktif hale getirmek için jail.local dosyasını düzenlememiz gerekiyor.

sudo nano /etc/fail2ban/jail.local

Aşağıdaki yapılandırmayı ekleyin veya düzenleyin:

[nginx-http-auth]
enabled = true
port    = http,https
logpath = /var/log/nginx/error.log
bantime = 10m
findtime = 10m
maxretry = 3

[nginx-botsearch]
enabled = true
port     = http,https
logpath  = /var/log/nginx/error.log
bantime  = 10m
findtime = 10m
maxretry = 2

Yapılandırma Açıklaması:

  • enabled: Jail'in aktif olup olmadığını belirler. true olarak ayarlandığında aktif olur.
  • port: İzlenecek portları belirtir. HTTP (80) ve HTTPS (443) trafiğini izler.
  • logpath: Fail2Ban’in izleyeceği Nginx log dosyasının yolu. Genellikle /var/log/nginx/error.log olarak ayarlanır.
  • bantime: IP’nin yasaklı kalacağı süre. Burada 10 dakika olarak ayarlandı.
  • findtime: Hataların tespit edileceği zaman aralığı. Örneğin, 10 dakika içinde 3 hata olursa IP yasaklanır.
  • maxretry: Bu süre içinde kaç başarısız denemenin yasaklanmayı tetikleyeceği.

Adım 2: Yapılandırmayı Test Etme

Fail2Ban yapılandırmanızı test etmek için aşağıdaki komutu çalıştırın:

sudo fail2ban-client status

Beklenen çıktı:

Status
|- Number of jail:      3
`- Jail list:   nginx-botsearch, nginx-http-auth, sshd

Her bir jail'in durumunu görmek için:

sudo fail2ban-client status nginx-http-auth
sudo fail2ban-client status nginx-botsearch

4. Nginx Loglama Ayarlarını Kontrol Etme

Fail2Ban, log dosyalarını okuyarak çalışır. Bu nedenle, Nginx’in loglama ayarlarının doğru yapılandırıldığından emin olun.

Nginx Loglama Ayarlarını Kontrol Etme:

Nginx yapılandırma dosyanızı açın:

sudo nano /etc/nginx/sites-available/mehmetyerli.com

Loglama ayarlarının aşağıdaki gibi olduğundan emin olun:

error_log /home/www-data/mehmetyerli.com/logs/nginx.error.log warn;
access_log /home/www-data/mehmetyerli.com/logs/nginx.access.log;

Eğer error_log seviyesini daha ayrıntılı hale getirmek isterseniz warn yerine info veya debug seviyesini kullanabilirsiniz.

Değişiklikten sonra Nginx yapılandırmasını doğrulayıp yeniden başlatın:

sudo nginx -t
sudo systemctl reload nginx

5. Yasaklanan IP’leri Görüntüleme ve Yönetme

Fail2Ban tarafından yasaklanan IP’leri görmek için aşağıdaki komutu kullanabilirsiniz:

sudo fail2ban-client status nginx-http-auth

Belirli bir IP’yi yasaklamak için:

sudo fail2ban-client set nginx-http-auth banip <IP-ADDRESS>

Belirli bir IP’nin yasağını kaldırmak için:

sudo fail2ban-client set nginx-http-auth unbanip <IP-ADDRESS>

6. Django ve Nginx Loglama İhtiyaçları

Eğer Django tarafında 403 ve 404 gibi durum kodlarını logluyorsanız ve ihtiyaçlarınızı karşılıyorsa, Nginx tarafında bu durumları loglamaya gerek olmayabilir. Ancak, Nginx üzerinden geçen statik dosyalar veya Django’ya ulaşmadan engellenen bot saldırıları için Nginx loglaması faydalı olabilir. Örneğin:

  • /wp-login.php gibi bot saldırılarını tespit etmek.
  • /static/ veya /media/ dosyalarına erişim hatalarını izlemek.

Sonuç

Bu yazıda, Fail2Ban ile Nginx’i güvenli hale getirmek için gerekli olan adımları ele aldık. Fail2Ban yapılandırmasını test ederek, Nginx loglama ayarlarını kontrol ederek ve Django ile Nginx loglaması arasındaki farkları değerlendirerek daha kapsamlı bir güvenlik planı oluşturduk.

Eğer sorularınız veya eklemek istediğiniz bir şey varsa, benimle iletişime geçebilirsiniz! 😊

Design a flowing, organic pattern of interconnected leaves and vines. The motif should be dense, with overlapping details and smooth transitions, ensuring a sense of movement and fullness. Use bold black lines against a clean white background for a rich and vibrant effect.