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

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:
failregexile başarısız denemeyi,ignoreregexile 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.
| Durum | Fail2ban etkisi | Ek önlem |
|---|---|---|
| Tek IP'den yoğun SSH parola denemesi | Güç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ş deneme | Zayıf | Uygulama katmanı koruması, WAF |
| Zayıf ya da sızmış parola | Yok | Parola politikası, parola yöneticisi |
| Uygulama açığı kullanan istek | Yok | Gü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ı?
- Kendi IP adresinizi not edin; bunun için IP sorgulama aracını kullanabilirsiniz.
- Sağlayıcının konsol ya da kurtarma erişiminin çalıştığını deneyin.
- Yedeğinizin geri yüklenebildiğini doğrulayın; ayrıntı için yedekleme stratejisi yazımıza bakın.
- 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.
jail.confjail.d/*.conf(alfabetik sırayla)jail.localjail.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.
| Profil | bantime | findtime | maxretry | Kime uygun |
|---|---|---|---|---|
| Varsayılana yakın | 10m | 10m | 5 | İlk deneme, düşük risk |
| Dengeli başlangıç | 1h | 10m | 5 | Genel amaçlı VPS |
| Sıkı | 1d | 10m | 3 | Yalnı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.
- Anahtarla girişin çalıştığını ikinci bir oturumda deneyin.
- Yapılandırmayı
sudo sshd -tile sınayın. - Servisi yeniden yükleyin; servis adı
sshya dasshdolabilir. - 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.
| Komut | Ne yapar |
|---|---|
sudo fail2ban-client status | Çalışan jail'leri listeler |
sudo fail2ban-client status sshd | Jail durumunu ve engelli IP'leri gösterir |
sudo fail2ban-client banned | Engelli IP'leri jail bazında verir |
sudo fail2ban-client set sshd unbanip 203.0.113.50 | Bir IP'nin engelini kaldırır |
sudo fail2ban-client set sshd banip 198.51.100.7 | Bir IP'yi elle engeller |
sudo fail2ban-client reload | Ayarları 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
ignoreiplistesine 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
bantimekullanın, sonra artırın. - Bir yapılandırma hatasından şüpheleniyorsanız
sudo fail2ban-client -tile 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.
- Ayda bir
fail2ban-client statusile jail'lerin ayakta olduğunu kontrol edin. - Engellenen adresleri gözden geçirip yanlış engelleme olup olmadığına bakın.
- Güncellemeden sonra
fail2ban-regextestini yeniden çalıştırın. jail.localdosyasının bir kopyasını güvenli bir yerde saklayın.ignoreiplistesinde 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.
sudo systemctl status fail2banile servisi kontrol edin.sudo journalctl -u fail2banve/var/log/fail2ban.logdosyasında hata arayın.sudo fail2ban-client statusçıktısında jail'inizin olup olmadığına bakın.- Jail yoksa
enabled = truesatırını ve yazım hatasını kontrol edin. fail2ban-regexile filtrenin gerçekten eşleştiğini doğrulayın.logpathvebackenddeğerlerini dağıtımınıza göre gözden geçirin.- 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.
- Konsol erişiminizi ve yedeğinizi doğrulayın.
- Anahtarla SSH girişini kurun, parola girişini kapatmayı değerlendirin.
- Fail2ban'ı kurun ve
jail.localdosyasına yalnızca gerekli ayarları yazın. - Önce
sshdjail'ini açın, çalıştığınıstatusile doğrulayın. - Gerekirse web girişi için özel filtre yazın ve
fail2ban-regexile sınayın. - Artan ban süresini ve
ignoreiplistesini gözden geçirin. - Düzenli olarak
/var/log/fail2ban.logdosyası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.



