Sunucu güvenliği, sadece güçlü parolalarla değil, aynı zamanda aktif tehdit tespiti ve otomatik önleme mekanizmalarıyla sağlanabilir. Fail2Ban, tam da bu noktada devreye giren, açık kaynak kodlu ve son derece etkili bir log izleme ve IP yasaklama aracıdır. Sunucu üzerinde çalışan SSH, FTP, Apache, Exim gibi servislerin log dosyalarını düzenli olarak tarayarak şüpheli giriş denemelerini analiz eder. Belirli bir IP adresi çok sayıda parola hatası ya da brute force saldırısı gerçekleştirdiğinde, Fail2Ban otomatik olarak iptables
ya da benzeri bir güvenlik duvarı aracılığıyla bu IP’yi geçici veya kalıcı olarak engeller.
Fail2ban ve fail2ban-regex Nasıl Çalışıyor?
Yapılandırma dosyalarında, kaç başarısız deneme sonrası engelleme yapılacağı, bu engellemenin süresi ve izlenecek log dosyaları gibi detaylar kullanıcıya göre ayarlanabilir. Bunun yanında, saldırı bildirimlerinin SMTP protokolüyle e-posta yoluyla alınması da sağlanabilir. Bu özellik sayesinde sistem yöneticisi logları elle izlemek zorunda kalmaz, saldırılar zamanında belirlenip otomatik olarak engellenmiş olur. Fail2Ban, Rocky Linux 10 gibi modern dağıtımlar üzerinde, LiteSpeed sunucusuyla birlikte kullanıldığında güçlü bir koruma sağlar.
Ancak Fail2Ban her ne kadar etkili bir araç olsa da, zayıf kimlik doğrulama yapılarından kaynaklanan ana tehditleri tamamen ortadan kaldırmaz. Bu nedenle ek olarak güçlü parola standartları ve çok faktörlü doğrulama gibi yöntemlerle desteklenmelidir.
fail2ban-regex Komutu Nasıl Kullanılır?
Aşağıdaki gibi çalıştıralım;
fail2ban-regex /var/log/log_dosyası.log "regex ifadesi"
Test için ise aşağıdaki komutu yazalım;
fail2ban-regex "log satırı" "regex ifadesi"
Regex Tabanlı Yasaklama Örnekleri
Web sunucularında sıkça karşılaşılan tehditlerden biri, botların bilinmeyen yolları tarayarak açık araması yapmasıdır. Genellikle bu taramalar, çok sayıda “404 Not Found” hatası üretir. Apache loglarında bu girişimler kolayca tespit edilebilir.
192.168.0.10 - - [04/Jul/2025:12:45:13 +0300] "GET /admin HTTP/1.1" 404 1234
*Bu log satırı, bir istemcinin sunucuda bulunmayan /admin
yolunu sorguladığını ve 404 hatası aldığını göstermektedir.
<HOST> - - \[.*\] "GET .*" 404
<HOST>
etiketi ile IP adresini yakalar,GET .*
ile istenen URI’yi tanımlar,404
ile sadece başarısız istekleri filtreler.
fail2ban-regex '192.168.0.10 - - [04/Jul/2025:12:45:13 +0300] "GET /admin HTTP/1.1" 404 1234' ' - - [.] "GET ." 404'
*Eğer komut sonucunda 1 matches
çıktısı alıyorsanız, bu ifade Apache erişim loglarını izlemek için uygundur. Fail2Ban filtre dosyanıza bu ifadeyi ekleyerek bot taramalarına karşı otomatik engelleme sağlayabilirsiniz.
Exim Mail Sunucusu Giriş Hataları
Exim gibi SMTP sunucuları, başarısız oturum açma denemelerini loglara kaydeder. Bu kayıtları Fail2Ban ile analiz ederek, saldırgan IP’leri otomatik olarak engellemek mümkündür.
2025-07-04 13:12:45 authentication failed for [email protected] from [203.0.113.55]: 535 Incorrect authentication data
Rebex;
Bu regex ifadesi, []
içinde yer alan IP adresini <HOST>
etiketiyle yakalayacak şekilde yapılandırılmıştır.
authentication failed for .* from []: 535
Test için aşağıdaki komutu uygulayalım;
fail2ban-regex '2025-07-04 13:12:45 authentication failed for [email protected] from [203.0.113.55]: 535 Incorrect authentication data' 'authentication failed for .* from \[<HOST>\]: 535'
vsftpd FTP Giriş Hataları
FTP brute-force saldırılarını engellemek için başarısız oturum açma girişimlerini hedef alan özel filtreler oluşturulabilir. vsftpd.log
dosyasında genellikle aşağıdaki gibi hatalar görülür:
Fri Jul 4 13:20:14 2025 [pid 1234] [ftpuser] FAIL LOGIN: Client "198.51.100.77"
Bu log satırında, “FAIL LOGIN” ifadesiyle başarısız bir giriş olduğu ve "Client"
etiketinden sonra IP adresinin geldiği net olarak görülmektedir.
FAIL LOGIN: Client "<HOST>"
*Bu ifade, "<HOST>"
kalıbı sayesinde IP adresini otomatik olarak algılar.
Regex Yazılırken Dikkat Edilmesi Gerekenler
Fail2ban-regex kullanırken oluşturduğunuz regex ifadelerini mutlaka önceden test etmeyi ihmal etmeyin.
Genel kalıplarla başlayıp, daha sonra özel ifadelerle filtrelemeyi daraltmak daha güvenli sonuçlar verir.
IP adresleri yerine her zaman <HOST>
etiketini kullanmanız önerilir.
Sadece eşleşen örnekler değil, eşleşmeyen örneklerle de test yaparak yanlış IP’lerin engellenmesinin önüne geçebilirsiniz.
Özel Bir Fail2ban Filtresi Oluşturmak
Regex’inizi test ettikten sonra aşağıdaki şekilde özel bir filtre dosyası oluşturun:
[Definition]
failregex = BURAYA TEST ETTİĞİNİZ REGEX
ignoreregex =
Ardından jail.local içine şu şekilde ekleyin:
[benimservis]
enabled = true
port = ilgili-port
filter = benimfiltre
logpath = /var/log/ilgili_log_dosyası.log
maxretry = 3
bantime = 600
Fail2ban’ı yeniden başlatmayı unutmayın:
sudo systemctl restart fail2ban
Sıkça Sorulan Sorular (SSS)
fail2ban-regex
neden IP algılamıyor?
fail2ban-regex
, IP adresini algılaması için doğru bir şekilde yazılmış bir failregex
ifadesi içinde <HOST>
etiketine ihtiyaç duyar. Eğer log satırınız IP adresini farklı bir formatta gösteriyorsa (örneğin, köşeli parantez içinde veya port numarasıyla birlikte), <HOST>
etiketinin bu biçimi doğru tanıması için regex ifadesi uygun şekilde uyarlanmalıdır.
Her log için <HOST>
kullanılabilir mi?
<HOST>
etiketi, IPv4 veya IPv6 adreslerini tespit eden özel bir tanımlayıcıdır ve genellikle IP adresi doğrudan log içinde yer alıyorsa sorunsuz çalışır. Ancak bazı servisler loglarda IP yerine hostname, kullanıcı adı veya karmaşık bağlantı bilgileri gösterebilir. Bu tür durumlarda <HOST>
etiketi çalışmayabilir ve yerine açık regex grupları ((?P<host>...)
) kullanılarak manuel eşleme yapılması gerekebilir.
Log biçimi sık sık değişirse ne yapılmalı?
Log biçiminin değişken olması, sabit regex ifadelerinin bozulmasına neden olabilir. Bu gibi durumlarda yapılması gerekenler:
datepattern
gibi esnek tarih eşleştirme tanımları kullanmak- Birden fazla
failregex
satırı tanımlayarak farklı log biçimlerine uyum sağlamak - Regex ifadelerinde daha genel karakter eşleştirmelerine yer vermek (örneğin
.*?
,\S+
,\d{1,4}
gibi) - Servis güncellemelerinden sonra log formatlarını yeniden gözden geçirmek
Fail2ban çalışıyor ama IP’yi banlamıyor, neden?
Fail2ban kurallarının çalışmaması durumunda öncelikle jail.local
dosyasındaki ilgili jail’in aktif olup olmadığı (enabled = true) kontrol edilmelidir. Ardından logpath
değerinin doğru log dosyasına işaret edip etmediği ve bu dosyaya erişim izni olup olmadığı incelenmelidir. Yazılan failregex
ifadesinin log satırlarıyla eşleşip eşleşmediği fail2ban-regex
aracıyla test edilmelidir. Ayrıca findtime
, maxretry
ve bantime
gibi parametrelerin çok yüksek değerlerde ayarlanıp ayarlanmadığına dikkat edilmelidir.