Fail2Ban ile SSH ve Web Uygulaması Brute-Force Saldırılarına Karşı Etkin Koruma

 · 

Fail2Ban ile SSH ve Web Uygulaması Brute-Force Saldırılarına Karşı Etkin Koruma

Fail2Ban ile SSH ve Web Uygulaması Brute-Force Saldırılarına Karşı Etkin Koruma

Sunucu altyapıları, sürekli tekrarlayan ve kaynak tüketen brute-force saldırılarına maruz kalır. Bu saldırılar, özellikle SSH portu ve web uygulamalarının login sayfaları üzerinden kimlik doğrulama denemelerini otomatize ederek gerçekleştirilir. Fail2Ban, bu tür kötü niyetli aktiviteyi tespit edip otomatik olarak engelleyen, log dosyalarını izleyerek çalışan, Python tabanlı bir güvenlik aracıdır. Bu makale, Fail2Ban'ın derinlemesine teknik mimarisi, yapılandırması ve üretim ortamlarındaki gerçek dünya uygulama senaryolarını ele almaktadır.

Fail2Ban'ın Çalışma Prensibi ve Temel Bileşenleri

Fail2Ban, syslog, Apache erişim/hata logları veya SSH kimlik doğrulama logları gibi çeşitli servislerin log dosyalarını gerçek zamanlı olarak tarar. Bu tarama işlemi, regex (düzenli ifadeler) tabanlı filtreler aracılığıyla potansiyel saldırı paternlerini tanımlar. Belirlenen bir zaman dilimi (findtime) içinde belirli sayıda (maxretry) başarısız deneme tespit edildiğinde, Fail2Ban bu IP adresini belirli bir süre (bantime) boyunca engellemek için sunucu güvenlik duvarına (iptables veya firewalld) kurallar ekler. Bu proaktif savunma mekanizması, sunucu kaynaklarının aşırı yüklenmesini ve kimlik doğrulama sistemlerinin kırılmasını önler.

Kurulum ve İlk Adımlar

Çoğu Linux dağıtımında Fail2Ban, paket yöneticisi üzerinden kolayca kurulabilir. Aşağıdaki komutlar, yaygın dağıtımlar için kurulumu göstermektedir:

# Debian/Ubuntu tabanlı sistemler içinsudo apt updatesudo apt install fail2ban# CentOS/RHEL tabanlı sistemler içinsudo yum install epel-releasesudo yum install fail2ban# Servisi başlatma ve önyüklemede etkinleştirmesudo systemctl start fail2bansudo systemctl enable fail2ban

Kurulumun ardından, Fail2Ban'ın ana yapılandırma dosyası olan /etc/fail2ban/jail.conf incelenmelidir. Ancak, bu dosyayı doğrudan düzenlemek yerine, değişikliklerin sistem güncellemelerinde kaybolmaması için /etc/fail2ban/jail.local dosyasını oluşturup düzenlemek en iyi pratiktir. Bu dosya, jail.conf dosyasındaki varsayılan ayarları geçersiz kılar.

Temel Yapılandırma: jail.local

jail.local dosyası, Fail2Ban'ın davranışını belirleyen temel ayarları içerir. Aşağıda yaygın olarak kullanılan bazı parametreler ve bunların açıklamaları bulunmaktadır:

# /etc/fail2ban/jail.local örneği[DEFAULT]# Engelleme süresi (saniye). -1 süresiz engelleme anlamına gelir.bantime = 1h# Saldırı denemelerinin izleneceği zaman aralığı (saniye).findtime = 10m# Engelleme için izin verilen maksimum deneme sayısı.maxretry = 5# Engellenmeyecek IP adresleri veya CIDR aralıkları.ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24# Engellenen IP'lerin hangi eylemle işleneceği.ban_action = iptables-multiport# E-posta bildirimleri için.destemail = admin@example.comsendername = Fail2Banmta = sendmail # veya ssmtp, postfix vb.# Tüm aktif "jail"ler için varsayılan olarak etkinleştirme.enabled = true[sshd]# SSH jail'ini etkinleştirme.enabled = true# SSH log dosyası.logpath = %(sshd_log)s# SSH portu.port = ssh

Yukarıdaki örnekte, [DEFAULT] bölümü tüm jail'ler için genel ayarları tanımlarken, [sshd] bölümü yalnızca SSH servisine özgü ayarları geçersiz kılar veya ekler. bantime = 1h, kötü niyetli IP'lerin 1 saat boyunca engelleneceği anlamına gelirken, maxretry = 5 ve findtime = 10m, 10 dakika içinde 5 başarısız deneme yapan bir IP'nin engelleneceğini belirtir.

Üretim Ortamı Senaryoları ve Gelişmiş Konfigürasyonlar

SSH Brute-Force Koruması

Bir sunucudaki en kritik servislerden biri SSH'dir. Açık internete maruz kalan her SSH portu, sürekli olarak tarama ve brute-force saldırılarına hedef olur. Fail2Ban, bu tehdidi doğrudan adresler.

[sshd]enabled = trueport = sshfilter = sshd # /etc/fail2ban/filter.d/sshd.conf dosyasını kullanırlogpath = /var/log/auth.log # Debian/Ubuntu# logpath = /var/log/secure # CentOS/RHELmaxretry = 3bantime = 2h

Bu yapılandırma, auth.log dosyasını izleyerek 3 başarısız SSH denemesinin ardından saldırgan IP'yi 2 saat boyunca engeller. Daha katı bir politika için maxretry değerini düşürebilir, bantime değerini artırabilirsiniz.

Web Uygulaması Brute-Force ve DoS Koruması

Web sunucuları (Apache, Nginx) ve web uygulamaları (WordPress, Joomla, özel uygulamalar) da giriş sayfaları veya API endpoint'leri üzerinden saldırılara maruz kalır. Fail2Ban, web sunucusu loglarını (access.log, error.log) veya uygulama loglarını izleyerek bu saldırıları önleyebilir.

WordPress Login Sayfası Koruması

WordPress siteleri, wp-login.php üzerinden sıkça brute-force saldırılarına uğrar. Fail2Ban'ın dahili bir WordPress filtresi mevcuttur.

[wordpress]enabled = trueport = http,httpsfilter = wordpresslogpath = /var/log/nginx/access.log # Nginx için# logpath = /var/log/apache2/access.log # Apache içinmaxretry = 5bantime = 1h

filter = wordpress komutu, Fail2Ban'ın /etc/fail2ban/filter.d/wordpress.conf dosyasındaki düzenli ifadeleri kullanarak WordPress giriş denemelerini tespit etmesini sağlar. Logpath'i kullandığınız web sunucusuna göre ayarlamalısınız.

Genel Web Sunucusu Saldırıları (HTTP GET DoS)

Sürekli belirli bir URL'ye yapılan istekler veya hızlı ardışık başarısız erişim denemeleri için genel HTTP filtreleri kullanılabilir.

[http-get-dos]enabled = trueport = http,httpsfilter = http-get-dos # /etc/fail2ban/filter.d/http-get-dos.conflogpath = /var/log/apache2/access.log # veya Nginx access logmaxretry = 20findtime = 60bantime = 10m

Bu jail, 60 saniye içinde aynı IP'den gelen 20'den fazla isteği (genellikle DoS veya tarama amaçlı) tespit edip IP'yi 10 dakika boyunca engeller. Bu tür filtrelerin maxretry ve findtime değerleri, meşru kullanıcı trafiğini engellemeyecek şekilde dikkatlice ayarlanmalıdır.

Özel Filtre Oluşturma

Fail2Ban, mevcut filtrelerin ötesinde, özel uygulamalarınıza veya belirli log desenlerinize göre filtreler oluşturmanıza olanak tanır. Örneğin, bir Node.js uygulamasının logunda Failed login attempt for user: .* from IP: şeklinde bir hata deseni varsa, bunun için bir filtre yazılabilir:

# /etc/fail2ban/filter.d/my-nodejs-app.conf[Definition]failregex = Failed login attempt for user: .* from IP: ignoreregex =

Ardından jail.local'a bu filtreyi kullanan bir jail eklenir:

[my-nodejs-app]enabled = trueport = http,httpsfilter = my-nodejs-applogpath = /var/log/my-nodejs-app/app.logmaxretry = 3bantime = 1h

Fail2Ban Yönetimi ve İzleme

Fail2Ban servisini yönetmek ve durumunu izlemek için fail2ban-client komutu kullanılır.

# Tüm aktif jail'lerin durumunu gösterirsudo fail2ban-client status# Belirli bir jail'in durumunu gösterir (örn: sshd)sudo fail2ban-client status sshd# Engellenen bir IP adresini manuel olarak kaldırmasudo fail2ban-client set sshd unbanip 1.2.3.4# Belirli bir IP adresini manuel olarak engellemesudo fail2ban-client set sshd banip 1.2.3.4

Bu komutlar, Fail2Ban'ın operasyonel durumunu anlamak, sorun gidermek ve gerektiğinde manuel müdahalede bulunmak için kritik öneme sahiptir.

Sonuç

Fail2Ban, sunucu ve uygulama güvenliğini artırmak için basit ama son derece etkili bir araçtır. Log dosyalarını analiz ederek otomatik engelleme mekanizmaları kurması, brute-force ve çeşitli DoS saldırılarına karşı ilk savunma hattını oluşturur. Doğru yapılandırıldığında, sunucu kaynaklarını korur, güvenlik duruşunu güçlendirir ve operasyonel yükü azaltır. Ancak, her güvenlik aracı gibi, Fail2Ban da diğer güvenlik katmanlarıyla (güçlü şifreler, SSH anahtar tabanlı kimlik doğrulama, WAF, düzenli güncellemeler) birlikte kullanılmalı ve kurallar, uygulamanın ve trafiğin özelliklerine göre optimize edilmelidir.

← Blog Listesine Dön