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! 😊
