Web

Fail2ban Nedir, Nasıl Kurulur? Sunucu Güvenliği Rehberi

Talha Aslan 16 dakikalık okuma 3 görüntülenme

Fail2ban nedir ve sunucuyu nasıl korur?

Fail2ban, sunucu günlük dosyalarını izleyen ve kısa sürede çok sayıda başarısız giriş denemesi yapan IP adreslerini güvenlik duvarı kuralıyla geçici olarak engelleyen açık kaynaklı bir yazılımdır. Parola deneyen botları yavaşlatır. Ancak zayıf bir parolayı ya da gereksiz açık bir servisi tek başına düzeltmez.

Biz dijital pazarlama ve web ekibiyiz, hosting firması değiliz. Bu yazı resmi Fail2ban dokümanına ve proje dosyalarına dayanır. Web sitesi ya da e-ticaret sahibiyseniz kararın mantığını öğrenirsiniz. Kendi VPS'inizi yönetiyorsanız adım adım komutları da bulursunuz.

Çalışma mantığı basittir. Servis, günlüğü satır satır okur, başarısız giriş izlerini sayar ve eşik aşılınca kaynağı bir süre dışarıda bırakır. Süre dolunca engel kalkar. Bu sayede meşru bir kullanıcı yanlışlıkla engellense bile kalıcı olarak dışarıda kalmaz.

Bu iş pazarlama tarafını da ilgilendirir. Reklam ya da SEO yatırımı yapan bir site, yoğun giriş denemeleri yüzünden yavaşlarsa ziyaretçi kaybedebilir. Ayrıca sunucu kaynağı tükenirse açılış sayfaları geç açılır. Bu yüzden altyapı güvenliği, performans ve dönüşüm arasında doğrudan bir bağ vardır.

Neden önemli? Giriş denemeleri sunucu kaynağı tüketir. Üstelik bir deneme tutarsa siteniz tehlikeye girer. Kaynak tüketimi sayfa hızını da etkiler; bu konuyu site hızı SEO'yu nasıl etkiler yazımızda ayrıca anlattık.

Fail2ban jail, filter ve action nasıl birlikte çalışır?

Fail2ban üç kavramla çalışır. Jail, hangi servisin hangi günlük dosyasından izleneceğini ve hangi eşiklerin geçerli olacağını tanımlar. Filter, günlük satırlarında başarısız denemeyi yakalayan düzenli ifadelerdir. Action ise eşik aşılınca çalışan engelleme komutudur.

  • Jail: servis, günlük yolu ve eşik değerleri.
  • Filter: failregex ile başarısız denemeyi, ignoreregex ile atlamak istediğiniz satırı tanımlarsınız.
  • Action: çoğu kurulumda güvenlik duvarına bir engelleme kuralı ekler.

Dosya düzeni de bu üçlüyü yansıtır. Filtreler /etc/fail2ban/filter.d/ klasöründe, eylemler action.d klasöründe durur. Jail tanımlarını ise jail.conf, jail.d ve jail.local dosyalarına yazarsınız. Hazır filtreler çoğu yaygın servisi kapsar; dolayısıyla genellikle sıfırdan filtre yazmanız gerekmez.

Filter, satırdan saldırganın adresini de çıkarır; bunun için <HOST> gibi etiketler kullanır. Böylece bir jail, filter ve action üçlüsünü tek bir isim altında toplar. Örneğin sshd jail'i SSH günlüğünü okur, sshd filtresiyle satırları eşler ve engelleme eylemini çalıştırır.

Fail2ban hangi saldırılara karşı işe yarar, hangilerine yaramaz?

Fail2ban, günlüğe yazılan ve aynı kaynaktan tekrar eden denemelere karşı işe yarar. SSH parola denemeleri, yönetim paneli giriş denemeleri ve HTTP temel kimlik doğrulama hataları tipik örneklerdir. Günlüğe düşmeyen ya da çok kaynaktan dağıtık gelen saldırılarda etkisi sınırlıdır.

DurumFail2ban etkisiEk önlem
Tek IP'den yoğun SSH parola denemesiGüçlüAnahtarla giriş, parola girişini kapatma
Giriş sayfasına tek IP'den tekrarlı POSTİyi, özel filtre gerekirİki adımlı doğrulama
Binlerce farklı IP'den yavaş denemeZayıfUygulama katmanı koruması, WAF
Zayıf ya da sızmış parolaYokParola politikası, parola yöneticisi
Uygulama açığı kullanan istekYokGüncelleme, WAF, kod düzeltmesi

Tablodaki son iki satır önemlidir. Çünkü birçok site sahibi Fail2ban kurunca güvende olduğunu sanır. Oysa saldırgan doğru parolayı bilirse ya da uygulamanın bir açığını kullanırsa günlüğe "başarısız giriş" düşmez. Bu durumda Fail2ban devreye girecek bir şey bulamaz.

Yani Fail2ban bir güvenlik katmanıdır, tek çözüm değildir. Web uygulama açıklarını OWASP Top 10 rehberimizde ayrıca ele aldık.

Brute force, parola püskürtme ve kimlik bilgisi doldurma arasındaki fark nedir?

İnsanlar bu üç terimi sık karıştırır, ancak araca karşı davranışları farklıdır. OWASP bu saldırı türlerini kimlik doğrulama başlığı altında anlatır. Fark, saldırganın hangi bilgiyle ve hangi hızda denediğinde yatar.

  • Brute force: Saldırgan tek hesaba çok sayıda parola dener. Tek kaynaktan geliyorsa Fail2ban onu kolay yakalar.
  • Parola püskürtme: Saldırgan çok sayıda hesapta az sayıda yaygın parola dener. Hata sayısı hesap başına düşük kalır.
  • Kimlik bilgisi doldurma: Saldırgan başka bir sızıntıdan aldığı kullanıcı ve parola çiftlerini dener.

Birinci tür için Fail2ban çok uygundur. Diğer ikisinde saldırgan hızını düşürür ya da kaynak adresini sık değiştirir. Dolayısıyla eşikleri aşmadan ilerler. Bu nedenle iki adımlı doğrulama ve benzersiz parola, günlük tabanlı engellemeden daha güçlü bir savunmadır.

Fail2ban kurmadan önce neleri kontrol etmelisiniz?

Kurulumdan önce beş şeyi netleştirin. Sunucuya root ya da sudo yetkisiyle erişiyor musunuz? Sağlayıcınızın panelinden konsola girebiliyor musunuz? Hangi güvenlik duvarı arka ucu çalışıyor? Günlükleri dosyada mı yoksa systemd journal'da mı tutarsınız? Trafik doğrudan mı geliyor, yoksa bir CDN ya da ters proxy arkasından mı?

  1. Kendi IP adresinizi not edin; bunun için IP sorgulama aracını kullanabilirsiniz.
  2. Sağlayıcının konsol ya da kurtarma erişiminin çalıştığını deneyin.
  3. Yedeğinizin geri yüklenebildiğini doğrulayın; ayrıntı için yedekleme stratejisi yazımıza bakın.
  4. Yeni kuralı önce bir test sunucusunda ya da bakım penceresinde deneyin.

Özellikle konsol erişimi, bu listenin en değerli maddesidir. Çünkü SSH üzerinden kendinizi engellerseniz sunucuya geri dönmenin tek yolu sağlayıcının paneli olabilir. Öte yandan günlüklerin nerede tutulduğunu bilmeden jail yazarsanız Fail2ban hiçbir şey görmez ve çalışıyormuş izlenimi verir.

Bu liste sıkıcı görünebilir. Ancak kendini kilitleyen kullanıcıların çoğu bu adımlardan birini atlar.

Fail2ban kurulumunu ve ilk başlatmayı nasıl yaparsınız?

Paket adı çoğu dağıtımda fail2ban olarak geçer. Debian ve Ubuntu ailesinde aşağıdaki komutlar yeterlidir. Red Hat tabanlı dağıtımlarda paket genellikle ek bir depodan gelir; kendi dağıtımınızın belgesini kontrol edin.

sudo apt update
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status

Son komut çalışan jail'lerin listesini verir. Kurulum sonrasında hangi jail'lerin açık geldiği dağıtıma göre değişir. Resmi jail.conf dosyasında jail'ler varsayılan olarak kapalıdır ve resmi dosya yalnızca işinize yarayanları açmanızı söyler. Dolayısıyla listeyi mutlaka kendi gözünüzle görün.

Servis ayağa kalkınca /var/log/fail2ban.log dosyasına bakın. İlk satırlarda hangi jail'lerin başladığı yazar. Hata varsa genellikle burada ilk ipucunu bulursunuz. Ayrıca kurulumdan hemen sonra ayar değiştirmeyin; önce mevcut durumu gözlemleyin, sonra küçük adımlarla ilerleyin.

Fail2ban ayarlarını neden jail.conf yerine jail.local ile yaparsınız?

Resmi belgeler .conf dosyalarını değiştirmemenizi söyler. Paket güncellemesi bu dosyaların üzerine yazabilir. Özelleştirmeleri .local dosyalarına koyarsınız. Fail2ban yükleme sırasını da açıkça tanımlar.

  1. jail.conf
  2. jail.d/*.conf (alfabetik sırayla)
  3. jail.local
  4. jail.d/*.local (alfabetik sırayla)

Sonraki dosya öncekini ezer. Bu yüzden jail.local içine yalnızca değiştirmek istediğiniz satırları yazmanız yeterlidir. Tüm dosyayı kopyalamayın; kopya zamanla eskir ve güncelleme sonrası beklenmedik davranışlara yol açar.

Örneğin yalnızca bantime değerini değiştirecekseniz dosyaya tek satır yazarsınız. Başlıkları ve yorumları kopyalamanıza gerek yoktur. Değişiklikten sonra sudo fail2ban-client reload komutu ayarları yeniden yükler. Hata varsa komut sizi uyarır. Ayrıca yapılandırmayı canlıya almadan önce sudo fail2ban-client -t komutuyla sınamak iyi bir alışkanlıktır.

Bantime, findtime ve maxretry ne anlama gelir?

Bu üç ayar Fail2ban'ın kalbidir. Süreleri saniye olarak ya da 10m, 1h, 1d gibi kısaltmalarla yazabilirsiniz. Güncel jail.conf dosyasında varsayılanlar şöyledir: bantime = 10m, findtime = 10m, maxretry = 5.

  • bantime: Engelin ne kadar süreceğini belirler.
  • findtime: Hataların sayıldığı geçmiş zaman penceresidir.
  • maxretry: Bu pencerede kaç hata olursa engelleneceğini söyler.

Mantığı şöyle okuyun: Son findtime içinde maxretry kadar hata birikirse Fail2ban adresi bantime boyunca engeller. Üç değer birlikte çalıştığı için birini değiştirince diğerlerini de yeniden düşünün.

Küçük bir örnek verelim. maxretry = 3 yazarsanız ve findtime çok kısaysa araç yavaş saldırganı hiç yakalayamaz. Tersine findtime çok uzunsa, günler önce yanlış parola giren meşru kullanıcı da eşiğe takılabilir. Bu yüzden değerleri kendi giriş alışkanlıklarınıza göre seçin. Ayrıca ekibinizde birden fazla kişi aynı hesabı kullanıyorsa eşiği biraz gevşek tutmak mantıklıdır. Böylece birinin yanlış yazdığı parola herkesi dışarıda bırakmaz.

Hangi fail2ban ayar değerleri makul bir başlangıçtır?

Doğru değer trafiğinize ve ekibinizin çalışma biçimine bağlıdır. Aşağıdaki tablo başlangıç aralığıdır, garanti değildir. Kendi günlüklerinizi izleyip ayarlayın.

ProfilbantimefindtimemaxretryKime uygun
Varsayılana yakın10m10m5İlk deneme, düşük risk
Dengeli başlangıç1h10m5Genel amaçlı VPS
Sıkı1d10m3Yalnız anahtarla girilen sunucu

Örnek hesap: maxretry = 5 ve bantime = 1h olsun. Bir bot engel biter bitmez geri dönerse günde en fazla 24 engel dönemi yaşar. Her dönemde 5 deneme yapabileceği için üst sınır yaklaşık 120 denemedir. Artan ban süresi bu rakamı daha da düşürür; sonraki bölümlerde göreceksiniz.

Rakamları bir deneme tahtası gibi düşünün. İlk hafta varsayılana yakın bir profille başlayın, günlükleri izleyin ve yanlış engelleme olmadığını görün. Ardından süreyi kademeli olarak artırın. Bu yöntem yavaş görünür, ancak kendi ekibinizi dışarıda bırakma riskini ciddi biçimde azaltır.

Bu tablodaki "sıkı" profil yalnızca anahtarla girilen sunucular içindir. Çünkü o sunucuda meşru kullanıcı parola yazmaz ve yanlışlıkla eşiği aşma ihtimali düşüktür. Parola girişi açıksa çok kısa eşikler kendi ekibinizi de engelleyebilir.

SSH girişini fail2ban ile nasıl korursunuz?

SSH, saldırganların en çok denediği kapıdır. Resmi jail.conf içinde sshd bölümü hazır gelir; siz yalnızca açar ve eşikleri ayarlarsınız. Dosyayı /etc/fail2ban/jail.local adıyla oluşturun.

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.10

[sshd]
enabled  = true
port     = ssh
maxretry = 4
findtime = 10m
bantime  = 1h

SSH'ı standart dışı bir porta taşıdıysanız port satırını da aynı değerle güncelleyin. Aksi halde araç engeli yanlış porta uygular. Günlükler dosya yerine journal'daysa backend = systemd gerekebilir; çoğu paket bunu sizin için ayarlar. Yine de sudo fail2ban-client status sshd ile jail'in gerçekten çalıştığını doğrulayın.

Fail2ban tek başına SSH için yeterli mi?

Hayır, ilk savunma parola girişini kapatmaktır. OpenSSH'ın sshd_config dosyasındaki PasswordAuthentication ve PermitRootLogin seçenekleri resmi man sayfasında yer alır. Anahtarla girişi kurduktan sonra parola girişini kapatabilirsiniz.

  1. Anahtarla girişin çalıştığını ikinci bir oturumda deneyin.
  2. Yapılandırmayı sudo sshd -t ile sınayın.
  3. Servisi yeniden yükleyin; servis adı ssh ya da sshd olabilir.
  4. Mevcut oturumu kapatmadan yeni bir bağlantı açıp test edin.

Bu sıralamayı bozarsanız kendinizi dışarıda bırakabilirsiniz. Fail2ban bu durumda bile ikinci katman olarak kalır ve anahtar dışındaki denemeleri susturur. Özellikle bir sunucuda yalnızca anahtarla giriş açıksa parola deneyen botlar zaten kapıdan dönecektir. Yine de günlükler temiz kalır ve gereksiz kaynak tüketimi azalır. Seçenek ayrıntıları için sshd_config man sayfasına bakın.

Web giriş sayfalarını fail2ban ile nasıl korursunuz?

Resmi jail.conf içinde nginx-http-auth ve apache-auth gibi hazır jail'ler yer alır. Bunlar HTTP temel kimlik doğrulama hatalarını hata günlüklerinden okur. WordPress gibi uygulamaların kendi giriş formu için ise özel bir filtre yazarsınız.

Önce /etc/fail2ban/filter.d/wp-login.conf dosyasını oluşturun. Örnek, birleşik erişim günlüğü biçimini varsayar; günlük biçiminiz farklıysa ifadeyi uyarlayın.

[Definition]
failregex = ^<HOST> .* "POST /wp-login\.php HTTP/[0-9.]+" 200
ignoreregex =

Ardından jail.local dosyasına jail'i ekleyin. Günlük yolu web sunucunuza ve dağıtıma göre değişir.

[wp-login]
enabled  = true
port     = http,https
filter   = wp-login
logpath  = /var/log/nginx/access.log
maxretry = 5
findtime = 10m
bantime  = 1h

Bu filtre yalnızca 200 yanıtlı POST isteklerini sayar. Çünkü WordPress başarısız girişte formu yeniden gösterir, başarılı girişte genellikle yönlendirir. Ayrıca bu yaklaşımın bir sınırı var: Saldırgan başka bir adrese saldırırsa filtre onu görmez. Örneğin XML-RPC gibi farklı uç noktalar için ayrı filtre gerekir. Yine de kendi sitenizde doğrulayın; bir sonraki bölümdeki test aracı bunun içindir.

Özel filtreyi fail2ban-regex ile nasıl test edersiniz?

Yazdığınız filtreyi canlıya almadan önce fail2ban-regex aracıyla sınayın. Araç bir günlük dosyasını ve bir filtre dosyasını alır, kaç satırın eşleştiğini raporlar. Eşleşmeyen satırları da gösterdiği için ifadeyi düzeltmek kolaylaşır.

sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/wp-login.conf

Çıktıda eşleşen satır sayısı sıfırsa üç ihtimal vardır. Günlük biçimi beklediğinizden farklıdır, ifade yanlıştır ya da günlükte hiç başarısız giriş yoktur. Öte yandan çok fazla satır eşleşiyorsa ifade gereğinden geniştir ve meşru kullanıcıları da engelleyebilir.

Test için gerçek bir saldırı beklemeniz gerekmez. Günlükte mevcut satırlar yeterlidir; araç onları filtreden geçirir ve sonucu gösterir. Ayrıca ifadeyi değiştirdikçe testi tekrar çalıştırıp sonucu karşılaştırabilirsiniz.

Bu yüzden canlıya almadan önce kendi IP adresinizin eşleşen listede görünüp görünmediğine bakın. Görünüyorsa ignoreip listesine eklemeyi unutmayın.

Fail2ban ban listesini ve jail durumunu nasıl kontrol edersiniz?

Günlük işlerin çoğunu fail2ban-client komutuyla yaparsınız. Komut sözdizimini resmi man sayfasından aldık. Aşağıdaki örneklerde yalnızca belgeleme amaçlı IP blokları kullanıyoruz.

KomutNe yapar
sudo fail2ban-client statusÇalışan jail'leri listeler
sudo fail2ban-client status sshdJail durumunu ve engelli IP'leri gösterir
sudo fail2ban-client bannedEngelli IP'leri jail bazında verir
sudo fail2ban-client set sshd unbanip 203.0.113.50Bir IP'nin engelini kaldırır
sudo fail2ban-client set sshd banip 198.51.100.7Bir IP'yi elle engeller
sudo fail2ban-client reloadAyarları servisi durdurmadan yeniden yükler

Çıktıyı okurken engelli IP sayısına değil, adreslerin dağılımına bakın. Tek bir adres tekrar tekrar görünüyorsa artan ban süresi mantıklı olur. Bunun yerine çok sayıda farklı adres görüyorsanız saldırı dağıtık demektir; bu durumda yalnızca engelleme yeterli olmaz.

Fail2ban kendi kayıtlarını varsayılan olarak /var/log/fail2ban.log dosyasına yazar. Güvenlik duvarı tarafını da görmek isterseniz arka uca göre sudo iptables -L -n ya da sudo nft list ruleset komutu kuralları listeler. Böylece Fail2ban'ın engeli gerçekten uyguladığını görürsünüz. Engellenen bir adresin kime ait olduğunu merak ediyorsanız WHOIS sorgulama aracını kullanabilirsiniz.

Tekrar eden saldırganlar için artan ban süresi ve recidive jail nasıl kullanırsınız?

Aynı adres engel bitince geri geliyorsa süreyi her seferinde uzatabilirsiniz. Resmi jail.conf bunun için bantime.increment ayarını anlatır. Servis eski engelleri veritabanında arar ve süreyi 1, 2, 4, 8 gibi katlayarak büyütür. Üst sınırı bantime.maxtime belirler.

[DEFAULT]
bantime.increment = true
bantime.maxtime   = 604800

Buradaki 604800 saniye bir haftaya eşittir. Ayrıca bantime.factor ile büyüme katsayısını, bantime.overalljails ile tüm jail'lerdeki geçmişin aranıp aranmayacağını seçersiniz.

Alternatif olarak recidive jail'i, Fail2ban'ın kendi günlüğünü izleyip tekrar tekrar engellenen adresleri uzun süreli engeller. Resmi dosyadaki bölümde bantime = 1w ve findtime = 1d değerleri yer alır. Açmadan önce bu değerlerin sizin için fazla sert olup olmadığını düşünün.

Fail2ban ile kendinizi sunucudan kilitleme riskini nasıl azaltırsınız?

En sık hata kendi IP adresinizin engellenmesidir. Parolayı üst üste yanlış girmek, yanlış anahtarla otomatik dağıtım betiği çalıştırmak ya da aynı ofis çıkış adresini paylaşan meslektaşların hata yapması buna yol açar.

  • Sabit IP'niz varsa onu ignoreip listesine ekleyin.
  • Yapılandırmayı değiştirirken ikinci bir SSH oturumunu açık tutun.
  • Sağlayıcının konsol ya da kurtarma erişimini önceden deneyin.
  • Test sırasında kısa bir bantime kullanın, sonra artırın.
  • Bir yapılandırma hatasından şüpheleniyorsanız sudo fail2ban-client -t ile ayarı sınayın.

Kilitlendiğinizde konsoldan fail2ban-client set sshd unbanip komutuyla kendi adresinizin engelini kaldırabilirsiniz. Konsola erişiminiz yoksa sağlayıcı desteği tek çıkış yolu olabilir. Bu durumda destek ekibine adresinizi ve ne zaman kilitlendiğinizi net biçimde yazın. Böylece çözüm daha hızlı gelir. Ayrıca bir daha aynı sorunu yaşamamak için kilitlenmenin nedenini not edin.

Fail2ban whitelist (ignoreip) listesini nasıl doğru yazarsınız?

Resmi belgeye göre ignoreip, engellenmeyecek adreslerin listesidir. Listeye tek IP, CIDR bloğu ya da alan adı yazabilirsiniz. Girdileri boşlukla ayırırsınız.

ignoreip = 127.0.0.1/8 ::1 203.0.113.10 198.51.100.0/24

Listeyi kısa tutun. Bütün bir ofis ağını eklerseniz o ağdaki herkes sınırsız deneme yapabilir. Ayrıca alan adı kullanırsanız çözümlemenin başarısına bağımlı olursunuz. Dinamik IP kullanıyorsanız adres değişince kural geçersiz kalır.

Bir adresi çalışan sistemde geçici olarak eklemek isterseniz fail2ban-client set sshd addignoreip komutu vardır. Ancak bu değişiklik kalıcı değildir; kalıcılık için jail.local dosyasına yazın. Ayrıca her ekip üyesinin kendi adresini ayrı ayrı eklemesi yerine, güvenli bir VPN çıkış adresini listeye almak daha yönetilebilirdir.

CDN veya ters proxy arkasındaki sitede fail2ban nasıl çalışır?

Sitenin önünde bir CDN ya da ters proxy varsa web sunucusu günlüğüne ziyaretçinin değil proxy'nin adresini yazabilir. Bu durumda Fail2ban yanlış adresi engeller. Üstelik binlerce meşru ziyaretçi aynı proxy adresinin arkasında durur.

  • Önce günlükte gerçek ziyaretçi adresinin göründüğünü doğrulayın.
  • Görünmüyorsa web sunucusunun gerçek IP modülünü proxy sağlayıcınızın belgesine göre ayarlayın.
  • Ya da engellemeyi CDN'in kendi güvenlik kurallarında yapın.

Bir de ince nokta var: Trafik CDN üzerinden geliyorsa kaynak sunucudaki güvenlik duvarı engeli ziyaretçiyi durdurmaz. Çünkü bağlantıyı kuran adres CDN'dir. Bu yüzden bu mimaride önce günlük ve IP görünürlüğünü çözün, ardından kural yazın.

Bunu kontrol etmenin kolay yolu, kendi telefonunuzdan mobil veriyle siteye giriş denemesi yapmak ve günlükte hangi adresin göründüğüne bakmaktır. Telefonunuzun adresi görünüyorsa gerçek IP doğru geliyor demektir.

Fail2ban yeterli mi, CSF ve ModSecurity ile nasıl desteklersiniz?

Bu araç tepkisel çalışır; günlüğe düşen bir davranışı sonradan görüp engeller. İstek içeriğini incelemez. Bu işi bir web uygulama güvenlik duvarı yani WAF yapar. CSF ise güvenlik duvarı kurallarını yönetmeyi kolaylaştıran bir araçtır.

Katmanlı savunmayı bir apartmana benzetebilirsiniz. Güvenlik duvarı bina kapısıdır, WAF görevli kamerasıdır, Fail2ban ise aynı kapıyı tekrar tekrar zorlayan kişiyi uzaklaştıran görevlidir. Hiçbiri tek başına bütün riski kapatmaz. Dolayısıyla her katmanın görevini bilmek, doğru yatırımı yapmanızı sağlar.

Kardeş yazılarımızda CSF Firewall ve ModSecurity konularını ayrıca ele alıyoruz, burada tekrar anlatmayacağız. Kısaca şunu bilmeniz yeterli: Fail2ban davranışa bakar, WAF isteğin içeriğine bakar, güvenlik duvarı hangi kapıların açık olacağına karar verir.

Bunlara ek olarak güncel yazılım, güçlü parola ve düzenli yedek gerekir. HTTPS tarafı için SSL sertifikası rehberimize göz atın.

Fail2ban Googlebot gibi meşru botları engelleyebilir mi?

Evet, filtreniz fazla genişse engelleyebilir. Örneğin çok sayıda 404 yanıtını "saldırı" sayan bir filtre, bir arama motoru botunu da yakalayabilir. Bu durumda tarama sorunları başlar ve arama görünürlüğünüz zarar görür.

  • Filtreyi yalnızca giriş formu gibi hassas adreslerle sınırlayın.
  • Genel 404 sayacı gibi geniş kurallardan kaçının.
  • Engellenen adres bir arama motoru botuna benziyorsa kimliğini doğrulayın.

Google, Googlebot'u doğrulama yöntemlerini resmi belgesinde anlatır; ayrıntı için Googlebot doğrulama belgesine bakın. Ayrıca şüpheli bir adresin sahibini IP sorgulama aracımızla inceleyebilirsiniz. Bu sayede meşru bir botu yanlışlıkla engellemekten kaçınırsınız.

Fail2ban kurulumunu düzenli olarak nasıl gözden geçirirsiniz?

Kurulum, bir kez yapıp unutacağınız bir iş değildir. Dağıtım güncellemesi, web sunucusu değişikliği ya da günlük biçimi değişikliği filtreleri sessizce bozabilir. Bu nedenle küçük bir bakım rutini kurun.

  1. Ayda bir fail2ban-client status ile jail'lerin ayakta olduğunu kontrol edin.
  2. Engellenen adresleri gözden geçirip yanlış engelleme olup olmadığına bakın.
  3. Güncellemeden sonra fail2ban-regex testini yeniden çalıştırın.
  4. jail.local dosyasının bir kopyasını güvenli bir yerde saklayın.
  5. ignoreip listesinde artık geçerli olmayan adresleri temizleyin.

Böylece sorunu saldırı sırasında değil, sakin bir anda fark edersiniz.

Fail2ban çalışmıyorsa hangi adımlarla sorun giderirsiniz?

Sorunu katman katman daraltın. Bunu yaparken değişiklikleri tek tek uygulayın; aksi halde hangi adımın işe yaradığını anlayamazsınız. Önce servisin ayakta olduğunu, sonra jail'in yüklendiğini, ardından filtrenin satırları eşlediğini ve son olarak engelin güvenlik duvarına ulaştığını doğrulayın.

  1. sudo systemctl status fail2ban ile servisi kontrol edin.
  2. sudo journalctl -u fail2ban ve /var/log/fail2ban.log dosyasında hata arayın.
  3. sudo fail2ban-client status çıktısında jail'inizin olup olmadığına bakın.
  4. Jail yoksa enabled = true satırını ve yazım hatasını kontrol edin.
  5. fail2ban-regex ile filtrenin gerçekten eşleştiğini doğrulayın.
  6. logpath ve backend değerlerini dağıtımınıza göre gözden geçirin.
  7. Güvenlik duvarında engel kuralının oluştuğunu kontrol edin; komut, arka uca göre değişir.

Engel kuralı oluşmuyorsa banaction değerini inceleyin. Resmi varsayılan iptables-multiport olarak geçer; sisteminiz farklı bir güvenlik duvarı kullanıyorsa action.d klasöründeki uygun eylemi seçin.

Fail2ban işini ne zaman hosting sağlayıcınıza bırakmalısınız?

Her sahibin kendi sunucusunda bu ayarı yapması gerekmez. Dürüst ölçüt şudur: Hata yaptığınızda geri dönebiliyor musunuz? Dönemiyorsanız işi sağlayıcıya bırakın.

  • Paylaşımlı hostingde root erişiminiz yoksa Fail2ban kuramazsınız; güvenliği sağlayıcı yönetir.
  • Yönetilen VPS ya da sunucu hizmeti aldıysanız önce sağlayıcıya sorun; çakışan kurallar sorun yaratır.
  • Konsol ya da kurtarma erişiminiz yoksa kilitlenme riskini göze almayın.
  • Kritik bir e-ticaret sitesini bakım penceresi olmadan değiştirmeyin.
  • CDN arkasında gerçek IP görünürlüğünü çözemiyorsanız ilerlemeyin.

Doğru hosting seçimi bu yükün büyük kısmını sizden alır; kriterler için hosting seçimi rehberimize bakın. Sitenin yazılımıyla ilgili işlerde de özel yazılım geliştirme ve web tasarım hizmetlerimizle yanınızdayız. Sunucu yönetimini ise ilgili uzmana bırakmanızı öneririz. Bu yaklaşım, hem güvenliğinizi hem de iş sürekliliğinizi korur. Üstelik yanlış yapılandırmanın bedeli genellikle bakım maliyetinden yüksektir.

Sonuç olarak fail2ban için hangi sırayla ilerlemelisiniz?

Kısa yol haritası şöyledir. Her adımı bir öncekinden sonra, tek tek ve test ederek uygulayın.

  1. Konsol erişiminizi ve yedeğinizi doğrulayın.
  2. Anahtarla SSH girişini kurun, parola girişini kapatmayı değerlendirin.
  3. Fail2ban'ı kurun ve jail.local dosyasına yalnızca gerekli ayarları yazın.
  4. Önce sshd jail'ini açın, çalıştığını status ile doğrulayın.
  5. Gerekirse web girişi için özel filtre yazın ve fail2ban-regex ile sınayın.
  6. Artan ban süresini ve ignoreip listesini gözden geçirin.
  7. Düzenli olarak /var/log/fail2ban.log dosyasına bakın.

Şunu da unutmayın: Güvenlik bir kez kurulup biten bir proje değildir. Yazılımlar güncellenir, saldırı biçimleri değişir ve ekipler büyür. Bu yüzden yazıdaki adımları bir kontrol listesi gibi saklayın ve düzenli aralıklarla yeniden gözden geçirin. Emin olmadığınız bir adım olursa durun, resmi dokümana dönün ya da sağlayıcınıza danışın.

Resmi kaynaklar için Fail2ban proje deposuna, jail.conf dosyasına ve jail.conf man sayfasına göz atın. Ayrıca alan adı ve DNS kayıtlarınızı incelemek için DNS sorgulama aracı işinize yarar.

Sıkça Sorulan Sorular

Fail2ban ücretsiz mi?
Evet, Fail2ban açık kaynaklı ve ücretsiz bir yazılımdır. Çoğu Linux dağıtımının paket deposunda bulunur, ek lisans gerekmez. Bununla birlikte kurulum ve bakım için sunucuya root ya da sudo yetkisiyle erişmeniz gerekir; ayrıca kurulumdan sonra kendi ayarlarınızı yazmanız şarttır. Paylaşımlı hostingde bu yetki genellikle verilmez, dolayısıyla güvenliği sağlayıcınız yönetir.
Fail2ban sunucuyu yavaşlatır mı?
Fail2ban günlük dosyalarını izlediği için küçük bir kaynak kullanır. Ancak çok büyük günlükler ve çok sayıda jail varsa bu kullanım artabilir. Bu yüzden kaynak tüketimini izlemeniz yerinde olur. Gereksiz jail'leri kapatmak ve yalnızca işinize yarayanları açmak en doğru yaklaşımdır. Saldırı trafiğini azaltarak çoğu zaman sunucuyu rahatlatır.
Fail2ban ile iptables ve nftables arasında fark var mı?
Fail2ban engellemeyi kendisi yapmaz; güvenlik duvarına kural ekleyen bir eylem çalıştırır. Resmi varsayılan eylem iptables tabanlıdır. Sisteminiz başka bir arka uç kullanıyorsa action.d klasöründeki uygun eylemi banaction ile seçersiniz. Önemli olan, kuralın gerçekten güvenlik duvarına ulaştığını doğrulamaktır. Bunun için kural listesini komutla kontrol edebilirsiniz.
Engellenen IP'nin engelini nasıl kaldırırım?
fail2ban-client set komutuyla unbanip alt komutunu kullanırsınız. Önce jail adını bulun, örneğin sshd, sonra adresi yazın: sudo fail2ban-client set sshd unbanip 203.0.113.50. Tüm engelleri kaldırmak için unban --all komutu da vardır. Ancak bu komutu yalnızca gerçekten gerektiğinde çalıştırın; çünkü gerçek saldırganları da serbest bırakır.
Fail2ban kendi IP adresimi engellerse ne yaparım?
Önce sağlayıcınızın konsol ya da kurtarma erişiminden sunucuya girin. Ardından unbanip komutuyla kendi adresinizin engelini kaldırın ve adresi ignoreip listesine ekleyin. Konsol erişiminiz yoksa sağlayıcı desteğine başvurmanız gerekir. Bu yüzden değişiklik öncesinde konsol erişimini denemek büyük önem taşır. Ayrıca kilitlenme nedenini mutlaka not edin.
Fail2ban WordPress sitelerini korur mu?
Kısmen korur. Giriş sayfasına tekrar eden hatalı denemeleri, özel bir filtreyle yakalayıp engelleyebilir. Ancak eklenti açıklarını, zayıf parolayı ya da dağıtık saldırıları tek başına çözmez. Bu nedenle güncel yazılım, güçlü parola, iki adımlı doğrulama ve yedekle birlikte katman olarak kullanın. Böylece tek bir önlemin eksikliği tüm savunmayı çökertmez.
  • fail2ban
  • sunucu güvenliği
  • SSH güvenliği
  • jail.local
  • brute force
  • VPS güvenliği
  • Linux güvenlik duvarı
Paylaş:
Talha Aslan

Google Partner dijital pazarlama uzmanı. 2012’den beri SEO, Google Ads, web tasarım ve e-ticaret projelerinde sahada; bu blogda gördüğünüz her yazı o deneyimden çıkar.

Sıradaki proje

Projenizi konuşalım.

Talebiniz doğrudan Talha Aslan ve ekibine ulaşır: stratejiyi Talha kurar, uygulamayı deneyimli ekip yürütür. İlk istişare ücretsizdir; hedefinizi dinler, net bir yol haritasıyla döneriz.