Fail2ban ile Linux Sunucu Güvenliği: Log Analizi ve Otomatik Engelleme Stratejileri
Linux sunucularınızı brute-force saldırılarına karşı korumak için Fail2ban kurulumu, log analizi, jail yapılandırması ve özel filtre yazma rehberi.
Caner Serbest
Sistem ve Altyapı
4 dk okuma
Fail2ban ile Linux Sunucu Güvenliği: Log Analizi ve Otomatik Engelleme Stratejileri
İnternete açık bir Linux sunucu yönetiyorsanız, birkaç dakika içinde SSH portunuza yönelik otomatik tarama ve brute-force (kaba kuvvet) saldırılarının başladığını fark edersiniz. Botnet ağları, sürekli olarak zayıf parolaları veya açık servisleri tarar. Geleneksel güvenlik duvarları (UFW veya iptables gibi) paket filtreleme konusunda harika iş çıkarsa da, belirli bir IP adresinden gelen ardışık başarısız oturum açma denemelerini dinamik olarak engellemek için daha akıllı bir katmana ihtiyaç duyarlar.
İşte tam bu noktada Fail2ban devreye girer. Bu yazıda, Fail2ban’in çalışma mantığını, sistem loglarını nasıl analiz ettiğini, temel ve ileri düzey jail yapılandırmalarını ve kendi özel filtrelerimizi nasıl yazabileceğimizi adım adım ele alacağız.
Fail2ban Nasıl Çalışır?
Fail2ban, temel olarak log dosyalarını (örneğin /var/log/auth.log veya /var/log/fail2ban.log) düzenli olarak tarayan bir Python servisidir. Belirli bir zaman penceresi içinde (örneğin son 10 dakika), aynı IP adresinden gelen başarısız giriş denemeleri belirlenen eşik değerini (örneğin 5 kez) aşarsa, Fail2ban sistem güvenlik duvarında geçici bir kural oluşturur.
Bu kural sayesinde, saldıran IP adresinin sunucu üzerindeki ilgili servisle olan iletişimi belirli bir süreyle (ban süresi) kesilir. Süre dolduğunda kural otomatik olarak kaldırılır. Bu mekanizma, yöneticinin sürekli log kontrol etmesine gerek kalmadan otomatik bir savunma hattı oluşturur.
Kurulum ve Temel Yapılandırma
Dağıtıma bağlı olarak Fail2ban kurulumu oldukça basittir. Debian ve Ubuntu tabanlı sistemler için terminalde şu komutu çalıştırmanız yeterlidir:
sudo apt update
sudo apt install fail2ban
Kurulum tamamlandıktan sonra servis otomatik olarak başlayacaktır. Ancak doğrudan orijinal yapılandırma dosyaları üzerinde değişiklik yapmak yerine, .local uzantılı yerel kopyalar oluşturmak en iyi uygulamadır. Çünkü olası bir paket güncellemesinde orijinal dosyalar üzerine yazılabilir.
Öncelikle temel yapılandırma dosyasını kopyalayalım:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Şimdi favori metin düzenleyicimizle /etc/fail2ban/jail.local dosyasını açalım ve temel parametreleri gözden geçirelim:
[DEFAULT]
# Güvenilen IP adresleri asla engellenmez\際は ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# Bir IP'nin engellenme süresi (saniye cinsinden - örnek: 1 saat)
bantime = 3600
# Başarısız denemelerin sayılacağı zaman aralığı (saniye cinsinden - örnek: 10 dakika)
findtime = 600
# Maksimum başarısız deneme sınırı
maxretry = 5
Bu parametreler genel varsayılanları belirler. Ancak her servis için farklı hassasiyetler gerekebilir. Örneğin, SSH gibi kritik bir servis için maxretry değerini düşük tutmak mantıklıyken, web uygulamaları için bu değer artırılabilir.
SSH Güvenliği İçin Jail Yapılandırması
Fail2ban içinde birçok servis için haznesinde hazır kurallar (jail) barındırır. SSH servisini korumak için jail.local dosyasında [sshd] bölümünü bulup etkinleştirmemiz gerekir.
Dosyanın ilgili bölümünü şu şekilde düzenleyebilirsiniz:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 86400
Bu yapılandırmada:
enabled = trueile jail aktif hale getirildi.maxretry = 3ile 3 başarısız denemeden sonra tetiklenmesi sağlandı.bantime = 86400ile engelleme süresi 24 saate çıkarıldı.
Değişiklikleri kaydettikten sonra Fail2ban servisini yeniden başlatarak kuralların uygulanmasını sağlayın:
sudo systemctl restart fail2ban
Servisin düzgün çalışıp çalışmadığını ve aktif jail’leri kontrol etmek için şu komutu kullanabilirsiniz:
sudo fail2ban-client status
Belirli bir servisin (örneğin sshd) detaylı durumunu görmek için ise:
sudo fail2ban-client status sshd
Özel Filtre Yazma: Kendi Uygulamanızı Koruyun
Hazır filtreler her zaman özel yazılım projeleriniz veya standart dışı servisleriniz için yeterli olmayabilir. Bu gibi durumlarda kendi filtremizi ve jail tanımımızı oluşturabiliriz.
Diyelim ki sunucunuzda çalışan özel bir yönetim paneliniz var ve bu panel /var/log/custom-app/access.log dosyasına şu formatta hatalı giriş logları yazıyor:
[2023-10-25 14:02:10] WARNING: Failed login attempt from IP 203.0.113.45
Bu logu yakalamak için öncelikle /etc/fail2ban/filter.d/custom-app.local adında bir filtre dosyası oluşturmalıyız:
[Definition]
# Düzenli ifade (Regex) ile IP adresini yakalama
failregex = ^.*Failed login attempt from IP <HOST>$
ignoreregex =
Burada geçen <HOST> etiketi, Fail2ban tarafından otomatik olarak IPv4 veya IPv6 adreslerini yakalamak için kullanılan yerleşik bir makrodur.
Filtreyi oluşturduktan sonra, /etc/fail2ban/jail.local dosyasına bu filtreyi kullanan yeni bir jail ekleyelim:
[custom-app]
enabled = true
port = http,https
filter = custom-app
logpath = /var/log/custom-app/access.log
maxretry = 5
bantime = 7200
Yapılandırmayı test etmek için Fail2ban’in dahili test aracını (fail2ban-regex) kullanabilirsiniz:
sudo fail2ban-regex /var/log/custom-app/access.log /etc/fail2ban/filter.d/custom-app.local
Bu komut, log dosyanızdaki satırların yazdığınız düzenli ifade ile eşleşip eşleşmediğini raporlayacaktır. Test başarılıysa servisi yeniden başlatabilirsiniz.
Log Yönetimi ve Performans İpuçları
Fail2ban’in sağlıklı çalışabilmesi, doğru log analitiğine dayanır. Bu süreçte dikkat edilmesi gereken birkaç kritik nokta vardır:
- Log Rotasyonu (Logrotate): Log dosyalarınız
logrotatearacı ile arşivlenirken veya silinirken Fail2ban’in bu durumdan haberdar olması gerekir. Aksi takdirde dosya tanımlayıcıları kopabilir ve analiz durabilir. Fail2ban, varsayılan olarak bu durumubackend = autoveya systemd journal entegrasyonu ile yönetir. - Systemd Journal Entegrasyonu: Modern Linux dağıtımlarında loglar doğrudan
journaldtarafından tutulabilir. Dosya tabanlı loglar yerine journal kullanmak hem performans hem de güvenlik açısından avantaj sağlar.jail.localiçindebackend = systemdtanımı yaparak bu entegrasyonu sağlayabilirsiniz. - Aşırı Engelleme (False Positive): Yanlış yapılandırılmış kurallar, meşru kullanıcıların veya kendi IP adresinizin engellenmesine neden olabilir. Özellikle kurumsal ağlarda aynı NAT arkasından çıkan onlarca kullanıcı vardır. Bu tür durumlarda
ignoreipparametresini dikkatçe yapılandırmalı ve eşik değerlerini çok agresif tutmamalısınız.
Engellenen IP’leri Yönetmek ve Sorun Giderme
Sunucunuza erişemediğinizde veya yanlışlıkla kendi IP adresinizi engellediğinizde müdahale edebilmek hayat kurtarıcıdır.
Eğer SSH erişiminiz tamamen kesildiyse, bulut sağlayıcınızın konsol (VNC / Serial Console) ekranı üzerinden sunucuya bağlanıp engeli şu komutla kaldırabilirsiniz:
sudo fail2ban-client set sshd unbanip 192.168.1.50
Geçmişte hangi IP adreslerinin engellendiğini görmek için Fail2ban log dosyasını inceleyebilirsiniz:
sudo grep -i ban /var/log/fail2ban.log
Sonuç
Fail2ban, Linux sunucu güvenliğinde en maliyetsiz ve en etkili katmanlardan biridir. Yanlış yapılandırıldığında yönetim zorlukları çıkarabilse de, doğru log analizi ve mantıklı eşik değerleriyle birleştirildiğinde sunucunuza yönelik otomatik saldırıların çok büyük bir kısmını etkisiz hale getirir.
Sunucunuzu yayına aldıktan sonra ilk iş olarak SSH güvenliğini sağlamlaştırmalı, ardından kritik servislerinizi Fail2ban ile izlemeye alarak temel güvenlik sıkılaştırma döngüsünü tamamlamalısınız.
Bu yazı Gemini ile otomatik oluşturulmuştur.