İLE %100 UYUMLU: Güvenli E-Posta Hosting Hizmetimizi 1 AY ÜCRETSİZ Deneyin! HEMEN OLUŞTURUN
Dijital dünyada yeni bir Linux sunucu (VPS veya Dedicated Server) kiralayıp internete açtığınızda, genellikle her şeyin sessiz ve sakin olduğunu düşünürsünüz. Oysa gerçeklik çok daha farklıdır. Sunucunuzun IP adresi aktif olduğu saniyeden itibaren, dünyanın dört bir yanına dağılmış otomatik bot ağları (botnetler) ve siber korsanlara ait betikler (scriptler), sunucunuzun kapılarını zorlamaya başlar. Özellikle SSH (Port 22), FTP veya veritabanı portlarınız üzerinden saniyede onlarca kez kullanıcı adı ve şifre denemesi yapılır.
Siber güvenlik literatüründe Kaba Kuvvet (Brute Force) olarak adlandırılan bu saldırılar, sadece şifrenizi kırma riski taşımakla kalmaz; aynı zamanda sunucunuzun işlemci (CPU) ve RAM kaynaklarını sömürerek sitelerinizin yavaşlamasına neden olur. İşte tam bu noktada, sunucunuzun kapısında duran yorulmak bilmez, otomatik ve zeki bir dijital gece bekçisine ihtiyaç duyarsınız: Fail2ban.
Bu derinlemesine rehberde, Linux işletim sistemlerinin vazgeçilmez güvenlik duvarı entegrasyonu olan Fail2ban’ın ne olduğunu, çalışma mantığını, sunucu kaynaklarınızı nasıl koruduğunu ve adım adım profesyonel yapılandırma ayarlarını tüm teknik detaylarıyla inceliyoruz.
İçindekiler
Fail2ban, sunuculara yönelik Kaba Kuvvet (Brute Force) saldırılarını tespit etmek ve engellemek amacıyla Python programlama dili ile yazılmış açık kaynaklı bir güvenlik yazılımıdır. Kendisi doğrudan bir “Güvenlik Duvarı” (Firewall) değildir; sunucunuzda zaten var olan iptables, UFW, Firewalld veya nftables gibi güvenlik duvarı yöneticileriyle entegre çalışan bir “müdahale” çerçevesidir.
Fail2ban’ın temel çalışma prensibi “okuma, eşleştirme ve yasaklama” döngüsüne dayanır:
/var/log/auth.log
Bir sistem yöneticisi olan Tolga, yönettiği e-ticaret sunucusunun geceleri neden aşırı CPU tükettiğini araştırdığında, log dosyalarında saniyede 500 adet başarısız SSH giriş denemesi yapıldığını fark eder. Şifresi çok güçlü (örneğin 32 karakterli karmaşık bir anahtar) olsa bile, sunucunun her bir başarısız denemeye yanıt vermek için harcadığı efor, sistemi felç etmektedir.
Fail2ban kullandığınızda:
Fail2ban, neredeyse tüm popüler Linux dağıtımlarının resmi paket depolarında bulunur. Kurulumu oldukça basittir.
Ubuntu / Debian Tabanlı Sistemler İçin: Öncelikle paket depolarını güncelleyin ve yazılımı kurun:
Bash
sudo apt update sudo apt install fail2ban -y
AlmaLinux / CentOS / RHEL Tabanlı Sistemler İçin: Bu sistemlerde Fail2ban, EPEL (Extra Packages for Enterprise Linux) deposunda bulunur. Bu nedenle önce EPEL’i aktif etmelisiniz:
sudo dnf install epel-release -y sudo dnf install fail2ban -y
Kurulum tamamlandıktan sonra, sunucu yeniden başlatıldığında Fail2ban’ın otomatik olarak çalışması için servisi etkinleştirin ve başlatın:
sudo systemctl enable fail2ban sudo systemctl start fail2ban
Fail2ban’ın kalbi /etc/fail2ban/ dizinidir. Bu dizine girdiğinizde jail.conf adında devasa bir yapılandırma dosyası görürsünüz.
/etc/fail2ban/
jail.conf
Altın Kural: Hiçbir profesyonel sistem yöneticisi jail.conf dosyasını doğrudan düzenlemez. Çünkü yazılım güncellendiğinde bu dosya üzerine yazılır ve tüm ayarlarınız silinir. Bunun yerine bu dosyanın bir kopyası olan jail.local dosyasını oluşturmalıyız. Fail2ban her zaman .local uzantılı dosyaları öncelikli olarak okur.
jail.local
.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Şimdi bu jail.local dosyasını favori metin düzenleyicinizle (nano veya vim) açın:
sudo nano /etc/fail2ban/jail.local
Dosyanın en üst kısmında yer alan [DEFAULT] bölümü, aksini belirtmediğiniz sürece sunucudaki tüm koruma kuralları (jails) için geçerli olacak evrensel ayarlardır.
[DEFAULT]
ignoreip
ignoreip = 127.0.0.1/8 ::1 198.51.100.45
bantime
bantime = 24h
-1
findtime
maxretry
findtime = 10m
maxretry = 5
Aynı jail.local dosyasının aşağılarına doğru indiğinizde [sshd], [nginx-http-auth], [postfix] gibi başlıklar göreceksiniz. Bunlara “Jail” (Hapishane) denir. Bir servisi korumaya almak için o başlığın altına enabled = true yazmanız yeterlidir.
[sshd]
[nginx-http-auth]
[postfix]
enabled = true
Örnek bir SSH (sshd) Koruması Yapılandırması:
Ini, TOML
[sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s maxretry = 3 bantime = 48h
Yukarıdaki ayar ile SSH servisi için özel bir kural tanımladık: Varsayılan (default) ayarları ezerek, SSH için sadece 3 hata hakkı tanıdık ve ban süresini 48 saate çıkardık. Değişiklikleri kaydettikten sonra servisi yeniden başlatmalısınız: sudo systemctl restart fail2ban
sudo systemctl restart fail2ban
Fail2ban denildiğinde akla ilk SSH portu gelse de, aslında log üreten her türlü yazılım için özel filtreler yazabilirsiniz. Yazılım geliştirici Ercan, yönettiği yoğun trafikli Nginx web sunucusunda güvenlik açığı tarayan botlardan muzdaripti.
Siber korsanlar, Ercan’ın sunucusunda olmayan sayfaları (örneğin phpmyadmin arayüzlerini, gizli wp-admin klasörlerini) bulmak için sürekli istek gönderiyor ve Ercan’ın loglarında saniyede yüzlerce “404 Not Found” veya “403 Forbidden” hatası oluşuyordu.
Ercan, Fail2ban içerisindeki [nginx-botsearch] ve [nginx-limit-req] jaillerini enabled = true yaparak aktif etti. Artık Fail2ban, Nginx loglarını tarıyor ve sürekli var olmayan sayfalara girerek açık arayan zararlı botların IP adreslerini doğrudan Güvenlik Duvarı üzerinden engelleyerek web sunucusunun nefes almasını sağlıyordu.
[nginx-botsearch]
[nginx-limit-req]
Aynı şekilde WordPress siteleriniz için XML-RPC saldırılarını (wp-login.php) engelleyen özel filtreler (regex kuralları) yazarak, sunucunuzdaki tüm web sitelerini tek bir merkezden koruma altına alabilirsiniz.
Fail2ban arka planda sessizce çalışırken, neler olup bittiğini görmek veya müdahale etmek için fail2ban-client komut aracını kullanırız. Hayat kurtaran temel komutlar şunlardır:
fail2ban-client
1. Fail2ban’ın Genel Durumunu Görmek:
sudo fail2ban-client status
Bu komut, sistemde aktif olan (çalışan) tüm Jail’lerin (sshd, nginx vb.) listesini verir.
2. Belirli Bir Servisteki Engellemeleri İncelemek:
sudo fail2ban-client status sshd
Bu komutu yazdığınızda, SSH servisinde o an itibarıyla kaç IP’nin engellendiğini ve bu yasaklı IP adreslerinin tam listesini açıkça görebilirsiniz.
3. Yanlışlıkla Engellenen Bir IP Adresinin Banını Kaldırmak (Unban): Diyelim ki ofisteki iş arkadaşınız Aylin, şifresini unuttuğu için sisteme giremedi ve Fail2ban onun IP adresini engelledi. Aylin’in işine devam edebilmesi için onun IP adresini şu komutla manuel olarak listeden çıkarabilirsiniz:
sudo fail2ban-client set sshd unbanip 198.51.100.45
(sshd kısmını hangi servisten banlandıysa onunla değiştirebilirsiniz).
4. Bir IP Adresini Manuel Olarak Yasaklamak (Ban): Şüpheli bulduğunuz bir IP’yi kurala takılmasını beklemeden doğrudan engellemek isterseniz:
sudo fail2ban-client set sshd banip 203.0.113.10
Siber güvenlik, tek bir tuşa basarak çözülebilecek sihirli bir kutu değil, katmanlı bir savunma sanatıdır. Fail2ban, bu savunma katmanlarının tartışmasız en güçlü, en hafif ve en az bakım gerektiren dinamik bariyerlerinden biridir.
Ancak unutulmamalıdır ki Fail2ban tek başına bir mucize değildir. Sunucu güvenliğinizi gerçekten sağlamlaştırmak istiyorsanız; Fail2ban kullanımının yanı sıra SSH varsayılan portunu (22) değiştirmeli, “root” kullanıcısının doğrudan şifreyle giriş yapmasını kapatmalı (PermitRootLogin no) ve mutlaka RSA/Ed25519 şifreleme anahtarları (SSH Keys) ile giriş yapmalısınız. Fail2ban ile bu katmanları birleştirdiğinizde, sunucunuz dijital okyanustaki en yıkıcı kaba kuvvet (Brute Force) fırtınalarına karşı bile sarsılmaz bir kaleye dönüşecektir.