Merhaba arkadaşlar, bugün sizlere Fail2ban'ın gücünü bir adım öteye nasıl taşıyacağımızı anlatacağım. Hepimiz biliyoruz ki, standart jail'ler çoğu saldırıyı engelliyor. Ancak bazen özel servislerimiz, kendi yazdığımız uygulamalarımız veya belirli bir log deseni için ekstra koruma ve anında uyarı almamız gerekebiliyor. Bu rehberde, özel bir jail oluşturup, bir IP banlandığında bize e-posta göndermesini nasıl sağlayacağımızı adım adım işleyeceğiz. Bu sayede sunucunuzdaki şüpheli aktivitelerden anında haberdar olabilir, proaktif önlemlerinizi alabilirsiniz.
Özel Jail Dosyası Oluşturma
İlk olarak, yapılandırmamız için yeni bir jail dosyası oluşturacağız. Ben genelde her özel servis için ayrı dosya açmayı tercih ediyorum, böylece yönetimi kolay oluyor. Dosyamızı /etc/fail2ban/jail.d/ dizini altında oluşturacağız.
Bu komutla yeni konfigürasyon dosyamızı oluşturup düzenlemeye başlıyoruz. İçerisine aşağıdaki gibi jail tanımımızı yapıyoruz. Diyelim ki myapp.log dosyamıza yapılan "Invalid token" hatalarını yakalamak istiyoruz.
Burada dikkat etmemiz gereken noktalar:
- filter: Kullanacağımız filtrenin adı. Bunu bir sonraki adımda oluşturacağız.
- logpath: İzlemek istediğimiz log dosyasının tam yolu. Bu yolu doğru vermek çok önemli.
- action = %(action_mwl)s: Bu, banlama işlemini yapıp (action), maill (m), whois sorgusu (w) ve loglama (l) yapan standart bir aksiyon zinciridir. E-posta gönderme işlemi burada başlıyor.
Özel Filter Dosyası Tanımlama
Şimdi, log dosyamızda hangi kalıbı arayacağını Fail2ban'a öğretmemiz gerekiyor. Filter dosyamızı /etc/fail2ban/filter.d/ dizininde oluşturacağız.
Dosyanın içeriğinde, log satırındaki deseni (regex) ve failregex parametresini tanımlıyoruz.
Bu örnekte, log satırının başında gelen IP adresini (<HOST>) yakalıyoruz ve "Invalid token" içeren 403 hatalarını bir "fail" (başarısız girişim) olarak sayıyoruz. Regex'inizi kendi log formatınıza göre mutlaka test etmelisiniz. Test etmek için şu komutu kullanabilirsiniz:
E-posta Bildirimi Yapılandırması
Ban bildirimlerini alabilmek için, Fail2ban'ın e-posta gönderme ayarlarını yapmamız gerekiyor. Bunun için ana konfigürasyon dosyasında veya jail.local dosyasında değişiklik yapacağız.
Dosyanın en üst kısmına veya [DEFAULT] bölümüne aşağıdaki ayarları ekliyoruz. Benim sunucularda genelde kullandığım yöntem, bir mail relay (postfix veya ssmtp) üzerinden göndermektir.
- destemail: Uyarı e-postalarının gideceği adres.
- sender: Bildirimin gönderileceği adres (From).
- mta: Kullanılacak Mail Transfer Aracı. Sunucunuzda postfix veya sendmail kurulu olmalı.
- action: Burada tanımlanan varsayılan aksiyon, tüm jail'ler için geçerli olur. Özel jail'imizde zaten tanımladığımız için orada çakışma olmaz.
Test ve Servisi Yeniden Başlatma
Tüm ayarları yaptıktan sonra, yapılandırma dosyalarımızda bir sözdizimi hatası olmadığından emin olmalıyız.
Eğer her şey yolundaysa, Fail2ban servisini yeniden başlatarak değişiklikleri aktif hale getiriyoruz.
Oluşturduğumuz jail'in durumunu kontrol etmek için aşağıdaki komutu kullanabiliriz. Bu komut, hangi jail'lerin aktif olduğunu ve kaç IP'nin banlandığını gösterir.
Sonuç ve Tavsiyeler
Artık özel uygulamanız için bir jail'iniz ve bu jail bir IP'yi banladığında size e-posta atıyor. Bu yapılandırma, özellikle standart servisler dışında kalan, kritik öneme sahip uygulamalarınızın güvenliği için altın değerinde.
Şu ayara çok dikkat etmelisiniz: findtime ve maxretry değerlerini, uygulamanızın trafiğine göre ayarlayın. Çok agresif değerler, yanlışlıkla normal kullanıcılarınızı banlayabilir.
Peki ya siz? Fail2ban'ı özel ihtiyaçlarınız için nasıl özelleştiriyorsunuz? Belki SSH için farklı, web uygulamanız için farklı ban süreleri mi uyguluyorsunuz? Kendi tecrübelerinizi ve konfigürasyon ipuçlarınızı aşağıdaki yorumlarda paylaşmanızı çok isterim. Sorusu olan arkadaşlar da çekinmeden yazsın, elimden geldiğince yardımcı olmaya çalışırım.
İlk olarak, yapılandırmamız için yeni bir jail dosyası oluşturacağız. Ben genelde her özel servis için ayrı dosya açmayı tercih ediyorum, böylece yönetimi kolay oluyor. Dosyamızı /etc/fail2ban/jail.d/ dizini altında oluşturacağız.
Bash:
sudo nano /etc/fail2ban/jail.d/my-custom-app.conf
Bu komutla yeni konfigürasyon dosyamızı oluşturup düzenlemeye başlıyoruz. İçerisine aşağıdaki gibi jail tanımımızı yapıyoruz. Diyelim ki myapp.log dosyamıza yapılan "Invalid token" hatalarını yakalamak istiyoruz.
NGINX:
[my-custom-app]
enabled = true
port = http,https
filter = my-custom-app
logpath = /var/log/myapp/myapp.log
maxretry = 3
findtime = 600
bantime = 3600
action = %(action_mwl)s
Burada dikkat etmemiz gereken noktalar:
- filter: Kullanacağımız filtrenin adı. Bunu bir sonraki adımda oluşturacağız.
- logpath: İzlemek istediğimiz log dosyasının tam yolu. Bu yolu doğru vermek çok önemli.
- action = %(action_mwl)s: Bu, banlama işlemini yapıp (action), maill (m), whois sorgusu (w) ve loglama (l) yapan standart bir aksiyon zinciridir. E-posta gönderme işlemi burada başlıyor.
Şimdi, log dosyamızda hangi kalıbı arayacağını Fail2ban'a öğretmemiz gerekiyor. Filter dosyamızı /etc/fail2ban/filter.d/ dizininde oluşturacağız.
Bash:
sudo nano /etc/fail2ban/filter.d/my-custom-app.conf
Dosyanın içeriğinde, log satırındaki deseni (regex) ve failregex parametresini tanımlıyoruz.
NGINX:
[Definition]
failregex = ^<HOST> -."GET." 403."Invalid token"
ignoreregex =
Bu örnekte, log satırının başında gelen IP adresini (<HOST>) yakalıyoruz ve "Invalid token" içeren 403 hatalarını bir "fail" (başarısız girişim) olarak sayıyoruz. Regex'inizi kendi log formatınıza göre mutlaka test etmelisiniz. Test etmek için şu komutu kullanabilirsiniz:
Bash:
sudo fail2ban-regex /var/log/myapp/myapp.log /etc/fail2ban/filter.d/my-custom-app.conf
Ban bildirimlerini alabilmek için, Fail2ban'ın e-posta gönderme ayarlarını yapmamız gerekiyor. Bunun için ana konfigürasyon dosyasında veya jail.local dosyasında değişiklik yapacağız.
Bash:
sudo nano /etc/fail2ban/jail.local
Dosyanın en üst kısmına veya [DEFAULT] bölümüne aşağıdaki ayarları ekliyoruz. Benim sunucularda genelde kullandığım yöntem, bir mail relay (postfix veya ssmtp) üzerinden göndermektir.
NGINX:
[DEFAULT]
destemail = admin@alanadiniz.com
sender = fail2ban@alanadiniz.com
mta = sendmail
action = %(action_mwl)s
- destemail: Uyarı e-postalarının gideceği adres.
- sender: Bildirimin gönderileceği adres (From).
- mta: Kullanılacak Mail Transfer Aracı. Sunucunuzda postfix veya sendmail kurulu olmalı.
- action: Burada tanımlanan varsayılan aksiyon, tüm jail'ler için geçerli olur. Özel jail'imizde zaten tanımladığımız için orada çakışma olmaz.
Tüm ayarları yaptıktan sonra, yapılandırma dosyalarımızda bir sözdizimi hatası olmadığından emin olmalıyız.
Bash:
sudo fail2ban-client --test
Eğer her şey yolundaysa, Fail2ban servisini yeniden başlatarak değişiklikleri aktif hale getiriyoruz.
Bash:
sudo systemctl restart fail2ban
Oluşturduğumuz jail'in durumunu kontrol etmek için aşağıdaki komutu kullanabiliriz. Bu komut, hangi jail'lerin aktif olduğunu ve kaç IP'nin banlandığını gösterir.
Bash:
sudo fail2ban-client status my-custom-app
Artık özel uygulamanız için bir jail'iniz ve bu jail bir IP'yi banladığında size e-posta atıyor. Bu yapılandırma, özellikle standart servisler dışında kalan, kritik öneme sahip uygulamalarınızın güvenliği için altın değerinde.
Şu ayara çok dikkat etmelisiniz: findtime ve maxretry değerlerini, uygulamanızın trafiğine göre ayarlayın. Çok agresif değerler, yanlışlıkla normal kullanıcılarınızı banlayabilir.
Peki ya siz? Fail2ban'ı özel ihtiyaçlarınız için nasıl özelleştiriyorsunuz? Belki SSH için farklı, web uygulamanız için farklı ban süreleri mi uyguluyorsunuz? Kendi tecrübelerinizi ve konfigürasyon ipuçlarınızı aşağıdaki yorumlarda paylaşmanızı çok isterim. Sorusu olan arkadaşlar da çekinmeden yazsın, elimden geldiğince yardımcı olmaya çalışırım.