CSF Firewall ile Brute Force Saldırılarını Engelleme Ayarları

Sunucunuzu yöneten herkes en az bir kez şunu yaşamıştır: sabah uyandınız, SSH loglarına baktınız ve yüzlerce başarısız giriş denemesi görüyorsunuz. Belki bir WordPress sitesinde xmlrpc.php üzerinden brute force, belki mail sunucusunda IMAP/SMTP denemeleri. Bu saldırılar hem kaynak tüketiyor hem de psikolojik olarak yorucu. İşte bu noktada CSF (ConfigServer Security & Firewall) devreye giriyor ve doğru ayarlandığında bu saldırıları otomatik olarak engelliyor.

Bu yazıda CSF’nin brute force korumasını gerçek dünya senaryolarıyla birlikte nasıl yapılandıracağınızı adım adım anlatacağım. Temel CSF kurulumunu zaten bildiğinizi varsayarak doğrudan konuya giriyoruz.

CSF Brute Force Korumasının Temeli: LF_ Direktifleri

CSF’de brute force engelleme, lfd (Login Failure Daemon) servisi üzerinden çalışır. lfd, sistem loglarını sürekli izler ve belirlediğiniz eşik değerlerini aşan IP adreslerini otomatik olarak firewall’a ekler. Tüm bu ayarlar /etc/csf/csf.conf dosyasında yapılır.

Önce mevcut brute force ayarlarınıza bir göz atalım:

grep -E "^LF_" /etc/csf/csf.conf | head -40

Bu komut size mevcut LF_ direktiflerini listeler. Şimdi bunların ne anlama geldiğini ve nasıl yapılandıracağınızı açıklayalım.

Temel LF Direktifleri

CSF’nin brute force korumasındaki ana parametreler şunlardır:

  • LF_TRIGGER: Genel başarısız giriş denemesi eşiği. Bu değeri kaç başarısız denemeye ayarlarsanız, o kadar denemeden sonra IP engellenir. Varsayılan genellikle 10’dur.
  • LF_INTERVAL: Başarısız denemelerin sayıldığı zaman aralığı (saniye cinsinden). 3600 değeri, 1 saat içindeki denemeleri sayar.
  • LF_DURATION: IP’nin kaç saniye boyunca engelleneceği. 3600 = 1 saat, 86400 = 1 gün, 0 = kalıcı ban.
  • LF_EMAILALERT: Engelleme yapıldığında e-posta bildirimi gönderilip gönderilmeyeceği (0/1).
  • LF_SSH: SSH için başarısız giriş eşiği. LF_TRIGGER‘ı override eder.
  • LF_FTPD: FTP için başarısız giriş eşiği.
  • LF_SMTPAUTH: SMTP authentication başarısız giriş eşiği.
  • LF_POP3D: POP3 başarısız giriş eşiği.
  • LF_IMAPD: IMAP başarısız giriş eşiği.
  • LF_HTPASSWD: .htpasswd korumalı sayfalara başarısız giriş eşiği.
  • LF_MODSEC: ModSecurity rule trigger eşiği.
  • LF_CPANEL: cPanel başarısız giriş eşiği (cPanel sunucularında).

SSH Brute Force Engelleme

SSH, saldırganların en sevdiği hedef. Bir sunucuyu internete açtığınız anda otomatik botlar SSH’ı taramaya başlar. Gerçek dünyada günde binlerce deneme görmek çok normal.

SSH brute force korumasını sıkılaştırmak için csf.conf dosyasını düzenleyin:

nano /etc/csf/csf.conf

SSH için önerilen ayarlar:

# SSH icin basarisiz giris esigi
LF_SSH = 5

# Sayim araligi: 300 saniye (5 dakika)
LF_INTERVAL = 300

# Ban suresi: 86400 saniye (1 gun)
LF_DURATION = 86400

# E-posta bildirimi ac
LF_EMAILALERT = 1
LF_ALERT_TO = "[email protected]"

Bu ayarlarla, 5 dakika içinde 5 kez başarısız SSH denemesi yapan bir IP 24 saat boyunca engellenir. Pratikte bu ayar çoğu bot saldırısını durdurmak için yeterlidir.

Ayarları kaydettikten sonra CSF ve lfd’yi yeniden başlatın:

csf -r && service lfd restart

SSH için Whitelist Oluşturma

SSH brute force ayarlarını sıkılaştırmadan önce kendi IP adresinizi whitelist’e eklemeyi unutmayın. Aksi hâlde kendinizi kilitleyebilirsiniz:

# Kendi IP adresinizi whitelist'e ekleyin
csf -a 203.0.113.50 "Ofis IP adresi - kaldirma"

# Veya direkt csf.allow dosyasina ekleyin
echo "203.0.113.50 # Ofis IP - $(date)" >> /etc/csf/csf.allow
csf -r

Mail Servisleri için Brute Force Koruması

Mail sunucuları da SSH kadar saldırı alır, hatta bazen daha fazla. Çünkü SMTP, IMAP ve POP3 portları genellikle kapalı tutulmuyor. Bir müşterimin Dovecot/Postfix sunucusunda günde 50.000’i aşkın başarısız IMAP denemesi gördüm. Sunucu neredeyse yanıyordu.

Mail servisleri için ayarlar:

# SMTP authentication brute force
LF_SMTPAUTH = 5

# POP3 brute force
LF_POP3D = 10

# IMAP brute force
LF_IMAPD = 10

# Dovecot icin (genellikle LF_IMAPD ile yonetilir)
LF_DOVECOT = 10

Dovecot loglarının doğru konumda olduğundan emin olun. lfd hangi log dosyalarını izleyeceğini bilmeli:

# Dovecot log konumunu kontrol edin
grep -i "log_path" /etc/dovecot/conf.d/10-logging.conf

# CSF'nin izledigi log dosyalarini gorun
grep "LOGFILE" /etc/csf/csf.conf

Web Uygulamaları için Brute Force Koruması

WordPress, Joomla veya özel web uygulamalarına yönelik brute force saldırıları özellikle xmlrpc.php ve /wp-login.php üzerinden gelir. CSF bu saldırıları birkaç farklı şekilde yakalayabilir.

cPHulk ve cPanel Entegrasyonu

cPanel sunucularında CSF, cPHulk ile entegre çalışır:

# cPanel brute force esigi
LF_CPANEL = 5

# WHM icin
LF_WHM = 5

# Webmail icin
LF_MODSEC = 10

ModSecurity ile Entegrasyon

Web tabanlı brute force saldırıları için ModSecurity + CSF kombinasyonu çok etkilidir. ModSecurity kural ihlallerini logladığında lfd bunu algılayıp IP’yi banlar:

# ModSecurity entegrasyonu
LF_MODSEC = 10
LF_MODSEC_PERM = 0

# ModSecurity log dosyasini kontrol et
MODSEC_LOG = "/var/log/httpd/modsec_audit.log"

ModSecurity’nin audit log formatının CSF tarafından tanınabilmesi için:

# Apache modsecurity.conf icinde
SecAuditLogParts ABIJDEFHZ
SecAuditLogType Serial
SecAuditLog /var/log/httpd/modsec_audit.log

CT (Connection Tracking) ile DDoS ve Port Scan Koruması

Brute force ile birlikte gelen bir diğer tehdit, bağlantı seli saldırıları. CSF’nin CT (Connection Tracking) özelliği bunu önler. Tek bir IP’den gelen maksimum eş zamanlı bağlantı sayısını sınırlar:

# Connection Tracking'i ac
CT_LIMIT = 100

# Sayim araligi (saniye)
CT_INTERVAL = 30

# Engelleme suresi
CT_DURATION = 1800

# E-posta bildirimi
CT_EMAILALERT = 1

# Sadece belirli portlar icin (bos birakilirsa tum portlar)
CT_PORTS = "22,25,110,143,443,80"

Bu ayarla herhangi bir IP’den 30 saniye içinde 100’den fazla eş zamanlı bağlantı gelirse, o IP 30 dakika boyunca engellenir.

Aşağıdaki komutla mevcut bağlantıları izleyebilirsiniz:

# Aktif baglantilari IP'ye gore siralanmis listele
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

Port Flood (PF) Koruması

Belirli bir porta yönelik flood saldırılarını engellemek için:

# Port Flood korumasini ac
PORTFLOOD = "22;tcp;5;300,80;tcp;100;5,443;tcp;100;5"

Bu satırı parçalayalım:

  • 22;tcp;5;300: SSH portuna 300 saniye içinde 5’ten fazla bağlantı gelirse engelle
  • 80;tcp;100;5: HTTP portuna 5 saniye içinde 100’den fazla bağlantı gelirse engelle
  • 443;tcp;100;5: HTTPS portuna 5 saniye içinde 100’den fazla bağlantı gelirse engelle

Gerçek Dünya Senaryosu: WordPress Sitesine Yönelik Saldırı

Bir hosting müşterisinin WordPress sitesi sabah 3’te saldırı almaya başladı. xmlrpc.php üzerinden dakikada 500+ istek geliyordu. Sunucu yavaşlamıştı. İşte adım adım nasıl müdahale ettim:

1. Saldırıyı tespit etme:

# Anlık saldırıyı gör
tail -f /var/log/httpd/access_log | grep "xmlrpc.php"

# En çok istek atan IP'leri bul
awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c | sort -rn | head -20

2. Saldıran IP’yi manuel olarak engelle:

# IP'yi hemen engelle (kalıcı ban)
csf -d 185.220.101.45 "WordPress xmlrpc brute force - $(date)"

# Birden fazla IP'yi engelle
for ip in 185.220.101.45 185.220.101.46 185.220.101.47; do
    csf -d $ip "Toplu xmlrpc saldırisi"
done

3. IP aralığını engelle (subnet ban):

# Tum /24 subnetini engelle
csf -d 185.220.101.0/24 "Kotu niyetli subnet - xmlrpc saldirisi"

4. CSF’nin otomatik algılaması için lfd loglarını kontrol et:

# lfd'nin son eylemlerini gör
grep "lfd" /var/log/lfd.log | tail -50

# Aktif banlari listele
csf -l | grep "185.220"

5. xmlrpc.php’ye CSF üzerinden erişimi tamamen kapat:

Bu işlem için CSF’nin csf.pignore değil, Apache/Nginx tarafında yapılması daha uygun olsa da, CSF ile rate limiting yapabilirsiniz:

# /etc/csf/csf.conf icinde
CC_DENY = ""  # Ulke bazli engelleme gerekiyorsa buraya ekle

SSHD Log Dosyası Konumunu Doğrulama

lfd’nin SSH loglarını doğru yerden okuduğunu doğrulayın. Farklı dağıtımlarda log konumları değişir:

# CentOS/RHEL icin
grep "SSHD_LOG" /etc/csf/csf.conf
# Genellikle: /var/log/secure

# Ubuntu/Debian icin
# Genellikle: /var/log/auth.log

# journald kullanan sistemler icin
grep "SSH" /etc/csf/csf.conf

Ubuntu/Debian sistemlerde CSF konfigürasyonunu güncellemeniz gerekebilir:

# csf.conf icinde
SSHD_LOG = "/var/log/auth.log"

LFD Ignore Listesi: Yanlış Pozitifleri Önleme

Monitoring sistemleri, backup sunucuları veya load balancer’lar bazen yanlışlıkla banlanabilir. Bunları csf.ignore veya csf.pignore dosyasına ekleyin:

# IP bazli ignore
echo "10.0.0.50" >> /etc/csf/csf.ignore

# Process bazli ignore (lfd servisinin proc adini ignore etmesi icin)
# csf.pignore dosyasina ekle
echo "exe:/usr/bin/monitoring-agent" >> /etc/csf/csf.pignore

# Degisiklikleri uygula
csf -r

Aynı zamanda csf.allow dosyasına eklemek daha güçlü bir koruma sağlar çünkü csf.allow‘daki IP’ler hiçbir zaman banlanmaz:

# Kalici whitelist
echo "10.0.0.0/24 # Internal network" >> /etc/csf/csf.allow
csf -r

Ülke Bazlı Engelleme (GeoIP)

Eğer müşterileriniz sadece Türkiye’deyse ve Rusya, Çin, Kore kaynaklı saldırılar alıyorsanız ülke bazlı engelleme çok etkili bir yöntemdir:

# csf.conf icinde GeoIP engellemeyi aktif et
CC_DENY = "CN,RU,KP,UA"

# Sadece belirli ulkelere izin ver (diger her yeri engelle)
CC_ALLOW_FILTER = "TR,DE,US"

# GeoIP veritabanini guncelle
cd /etc/csf && perl /usr/local/csf/bin/csfget.pl

GeoIP filtrelemeyi etkinleştirirken dikkatli olun. CDN arkasındaki siteler için IP’ler gerçek kullanıcı konumunu yansıtmayabilir.

Brute Force Raporları ve İzleme

Günlük rapor almak için lfd’nin e-posta özelliğini aktif edin:

# csf.conf icinde
LF_EMAILALERT = 1
LT_EMAIL_ALERT = 1
STATS_INTERVAL = 3600

# Gunluk ozet raporu
LF_ALERT_DAILY = 1

Anlık durumu kontrol etmek için bu komutları kullanın:

# Son banlanan IP'leri goster
csf -l

# Belli bir IP'nin durumunu kontrol et
csf -g 185.220.101.45

# lfd'nin son log kayitlarini izle
tail -f /var/log/lfd.log

# Kac IP'nin banli oldugunu say
csf -l | wc -l

Otomatik Ban Temizleme Scripti

Zamanla ban listesi şişer ve performansı etkiler. Eski banları temizlemek için küçük bir script yazabilirsiniz:

#!/bin/bash
# /usr/local/bin/csf-cleanup.sh
# Amac: 30 gunden eski manuel banlari temizle

LOG="/var/log/csf-cleanup.log"
echo "$(date): Temizlik basliyor..." >> $LOG

# Gecici banlari listele ve say
TEMP_BANS=$(csf -l | wc -l)
echo "$(date): Toplam ban sayisi: $TEMP_BANS" >> $LOG

# Gecici banlari temizle (csf.deny'yi etkilemez)
csf -tf
echo "$(date): Gecici banlar temizlendi" >> $LOG

# CSF'yi yeniden baslat
csf -r
echo "$(date): CSF yeniden baslatildi" >> $LOG

Bu scripti cron’a ekleyin:

chmod +x /usr/local/bin/csf-cleanup.sh

# Her Pazar sabah 4'te calistir
echo "0 4 * * 0 root /usr/local/bin/csf-cleanup.sh" >> /etc/cron.d/csf-cleanup

Önerilen Genel Konfigürasyon Özeti

Bir production sunucusu için başlangıç noktası olarak kullanabileceğiniz konfigürasyon:

# /etc/csf/csf.conf - Brute Force bolumu

# Genel ayarlar
LF_TRIGGER = 10
LF_INTERVAL = 300
LF_DURATION = 86400
LF_EMAILALERT = 1

# Servis bazli esikler
LF_SSH = 5
LF_SMTPAUTH = 10
LF_POP3D = 15
LF_IMAPD = 15
LF_FTPD = 10
LF_HTPASSWD = 10
LF_MODSEC = 15

# Connection Tracking
CT_LIMIT = 200
CT_INTERVAL = 30
CT_DURATION = 3600
CT_EMAILALERT = 1

# Port Flood
PORTFLOOD = "22;tcp;5;300,80;tcp;200;10,443;tcp;200;10,25;tcp;20;60"

Ayarları uyguladıktan sonra:

# Konfigurasyon syntax kontrolu
csf --check

# Uygula
csf -r && service lfd restart

# lfd durumunu kontrol et
service lfd status

Sonuç

CSF’nin brute force koruması doğru yapılandırıldığında sunucunuzu otomatik olarak koruyan güçlü bir sistem hâline gelir. Ancak birkaç önemli noktayı her zaman aklınızda tutun:

Önce kendi IP adresinizi ve güvendiğiniz adresleri whitelist’e ekleyin, sonra sıkılaştırma yapın. Yoksa kendinizi kilitlemek çok kolay. Monitoring ve backup sistemlerini de csf.allow‘a ekleyin, yoksa yanlış pozitiflerle uğraşırsınız.

LF_DURATION değerini çok kısa tutmayın. 1 saatlik ban birçok bot için anlamsız, çünkü IP havuzları geniş. 24 saat veya kalıcı ban (LF_DURATION = 0) daha etkilidir. Fakat kalıcı banlarda meşru kullanıcıları engelleyebilirsiniz, bu riski göz önünde bulundurun.

Ban listesi zamanla büyür ve kernel’deki iptables kuralları performansı etkiler. Düzenli temizlik ve ipset kullanımı bu sorunu çözer. CSF zaten ipset’i destekliyor, LF_IPSET = 1 ile aktif edebilirsiniz.

Son olarak, CSF sadece bir katman. SSH key-based authentication, fail2ban ile katmanlı koruma, ve uygulama seviyesinde rate limiting ile birlikte kullanıldığında gerçek anlamda güvenli bir sunucu ortamı oluşturabilirsiniz. Güvenlik, tek bir araç meselesi değil, birden fazla savunma katmanının bir araya gelmesidir.

Yorum yapın