Sunucunu yöneten her sistem yöneticisinin er ya da geç yüzleştiği bir gerçek var: Tüm trafiği eşit görmek hem güvensiz hem de verimsiz. Bazı IP adreslerinin hiçbir zaman engellenmemesi gerekir, bazılarının ise sunucuya yaklaşmasına bile izin verilmemelidir. CSF (ConfigServer Security & Firewall) tam da bu noktada son derece güçlü ve esnek bir yapı sunuyor. Whitelist ve blacklist yönetimini doğru kurgularsan, hem yanlış pozitif engellemelerden kurtulursun hem de gerçek tehditleri otomatik olarak uzak tutarsın.
CSF’de Whitelist ve Blacklist Mantığı
CSF, temel olarak birkaç farklı liste dosyası üzerinden çalışır. Bu dosyalar /etc/csf/ dizini altında bulunur ve her birinin kendine özgü bir işlevi vardır.
Whitelist (İzin Ver) dosyaları:
/etc/csf/csf.allow: IP veya IP aralıklarını kalıcı olarak izin listesine ekler/etc/csf/csf.ignore: LFD (Login Failure Daemon) tarafından izlenmesini istemediğin IP’leri buraya eklersin
Blacklist (Engelle) dosyaları:
/etc/csf/csf.deny: IP veya IP aralıklarını kalıcı olarak engeller/etc/csf/csf.tempban: Geçici yasakları içerir, genellikle LFD tarafından otomatik yönetilir
Aralarındaki farkı şöyle özetleyebilirim: csf.allow dosyasındaki bir IP, hem LFD’nin takibinden hem de firewall kurallarından muaf tutulur. Yani o IP ne yaparsa yapsın, CSF onu engellemeye çalışmaz. Bu yüzden whitelist’e kimi eklediğine çok dikkat etmek gerekiyor.
csf.allow ile Kalıcı Whitelist Yönetimi
Tekil IP Ekleme
En basit kullanım senaryosu, ofis IP adresini veya güvendiğin bir sunucunun IP’sini kalıcı olarak izin listesine eklemektir.
# Komut satırından whitelist'e IP ekleme
csf -a 192.168.1.100
# Yorum satırıyla birlikte ekleme (kim ekledi, neden sorusuna cevap)
csf -a 192.168.1.100 "Ofis statik IP - 2024"
Bu komut çalıştırıldığında CSF hem csf.allow dosyasını günceller hem de iptables kuralını anında uygular. Sunucuyu yeniden başlatman ya da csf -r çalıştırman gerekmez.
IP Aralığı Ekleme
Büyük şirketlerde veya veri merkezlerinde çalışıyorsan, tek tek IP eklemek yerine bir CIDR bloğu eklemeniz çok daha pratik olur.
# Tüm /24 bloğunu whitelist'e al
csf -a 10.0.0.0/24 "Internal network - datacenter LAN"
# Belirli bir /16 bloğu
csf -a 172.16.0.0/16 "VPN subnet"
Dosyayı Doğrudan Düzenleme
Toplu ekleme yapacaksan komut satırı yerine dosyayı doğrudan düzenlemek çok daha hızlı olur:
nano /etc/csf/csf.allow
Dosya formatı oldukça basit. Her satıra bir IP veya CIDR bloğu yazarsın, # ile başlayan satırlar yorum satırı olarak değerlendirilir:
# Yonetim IP'leri
203.0.113.10 # Admin - Istanbul ofis
203.0.113.11 # Admin - Ankara ofis
# Monitoring sistemleri
198.51.100.0/28 # Zabbix sunuculari
198.51.100.100 # Grafana agent
# CDN ve load balancer
192.0.2.0/24 # CloudFlare IP blogu
Dosyayı düzenledikten sonra CSF’yi yeniden yüklemen gerekiyor:
csf -r
csf.deny ile Kalıcı Blacklist Yönetimi
Tekil IP Engelleme
Sunucuna sürekli brute force deneyen veya tarama yapan bir IP’yi kalıcı olarak engellemek için:
# IP'yi blacklist'e ekle
csf -d 192.0.2.50
# Yorum ile birlikte engelle
csf -d 192.0.2.50 "Brute force - 500+ SSH denemesi - 15/01/2024"
IP Silme İşlemleri
Hatalı bir IP eklediysen veya bir IP’nin engelini kaldırman gerekiyorsa:
# Whitelist'ten IP kaldır
csf -ar 192.168.1.100
# Blacklist'ten IP kaldır
csf -dr 192.0.2.50
Geçici Yasakları Kalıcı Hale Getirme
LFD bazen bir IP’yi geçici olarak yasaklar ama sen bunu kalıcı hale getirmek isteyebilirsin. csf.tempban dosyasına bak, oradan kalıcıya almak için:
# Önce geçici yasakları listele
csf -t
# Geçici yasağı kaldır ve kalıcı blacklist'e ekle
csf -tr 192.0.2.75
csf -d 192.0.2.75 "Kalici ban - brute force"
Gerçek Dünya Senaryosu 1: CloudFlare Arkasındaki Sunucu
Diyelim ki sunucun CloudFlare’in arkasında. Bu durumda gerçek ziyaretçi IP’lerini göremezsin, tüm trafik CloudFlare’in IP’lerinden gelir. LFD bu durumda CloudFlare IP’lerini sürekli ban listesine alabilir ve sitenin erişilemez hale gelmesine yol açabilir.
Çözüm, CloudFlare’in tüm IP aralıklarını whitelist’e almak. CloudFlare’in güncel IP listesini çekip otomatik olarak ekleyen bir script yazabilirsin:
#!/bin/bash
# cloudflare_whitelist.sh
# CloudFlare IP'lerini csf.allow dosyasina ekler
CF_IPV4_URL="https://www.cloudflare.com/ips-v4"
CF_IPV6_URL="https://www.cloudflare.com/ips-v6"
ALLOW_FILE="/etc/csf/csf.allow"
# Eski CloudFlare satirlarini temizle
sed -i '/# CloudFlare IP/d' "$ALLOW_FILE"
sed -i '/^[0-9].*# CF$/d' "$ALLOW_FILE"
echo "# CloudFlare IP Bloklari - $(date)" >> "$ALLOW_FILE"
# IPv4 ekle
while IFS= read -r ip; do
echo "$ip # CF" >> "$ALLOW_FILE"
done < <(curl -s "$CF_IPV4_URL")
# IPv6 ekle
while IFS= read -r ip; do
echo "$ip # CF" >> "$ALLOW_FILE"
done < <(curl -s "$CF_IPV6_URL")
# CSF'yi yeniden yukle
csf -r
echo "CloudFlare IP'leri guncellendi ve CSF yeniden yuklendi."
Bu scripti cron’a ekleyerek haftalık otomatik güncelleme yapabilirsin:
# crontab -e ile ekle
0 3 * * 1 /usr/local/bin/cloudflare_whitelist.sh >> /var/log/cf_whitelist.log 2>&1
Gerçek Dünya Senaryosu 2: Monitoring Sistemleri ve API Sunucuları
Büyük bir altyapıda onlarca sunucu arasında monitoring araçları, backup sistemleri ve API entegrasyonları çalışıyor olabilir. Bu sistemlerin sürekli bağlantı kurması LFD’yi tetikler.
csf.ignore dosyası tam da bu durumlar için tasarlanmış. LFD bu dosyadaki IP’leri izlemez, yani kaç kez başarısız bağlantı kursa da ban yemez. Ama dikkat: csf.allow‘dan farklı olarak csf.ignore firewall kuralı eklemez, sadece LFD izlemesini devre dışı bırakır.
# csf.ignore dosyasini duzenleme
nano /etc/csf/csf.ignore
# Monitoring sistemleri
192.168.10.50 # Zabbix server
192.168.10.51 # Nagios
192.168.10.60 # Prometheus node exporter
# Backup sistemleri
10.0.1.100 # Bacula director
10.0.1.101 # Amanda backup server
# Intranet sunuculari
10.0.0.0/8 # Tum internal network
Gerçek Dünya Senaryosu 3: Toplu Kötü Niyetli IP Bloklama
Threat intelligence servislerinden aldığın kötü niyetli IP listelerini otomatik olarak CSF blacklist’ine eklmek, proaktif savunmanın temel taşlarından biri. Örneğin, Spamhaus veya AbuseIPDB gibi servislerden düzenli olarak IP listesi çekip uygulayan bir script:
#!/bin/bash
# bulk_blacklist.sh
# Dosyadaki IP listesini csf.deny'a toplu ekler
INPUT_FILE="$1"
COMMENT="${2:-Bulk blacklist import}"
if [ -z "$INPUT_FILE" ] || [ ! -f "$INPUT_FILE" ]; then
echo "Kullanim: $0 <ip_listesi.txt> [yorum]"
exit 1
fi
COUNT=0
SKIP=0
while IFS= read -r line; do
# Bos satir ve yorum satırlarını atla
[[ -z "$line" || "$line" == #* ]] && continue
# IP formatini basit dogrula
if echo "$line" | grep -qE '^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}(/[0-9]{1,2})?$'; then
# Zaten whitelist'te mi kontrol et
if grep -q "^$line" /etc/csf/csf.allow; then
echo "ATLANDI (whitelist'te): $line"
((SKIP++))
continue
fi
# Zaten deny'da mi?
if grep -q "^$line" /etc/csf/csf.deny; then
((SKIP++))
continue
fi
echo "$line # $COMMENT - $(date +%Y-%m-%d)" >> /etc/csf/csf.deny
((COUNT++))
fi
done < "$INPUT_FILE"
echo "$COUNT IP eklendi, $SKIP atlandı."
csf -r
echo "CSF yeniden yuklendi."
Kullanımı:
chmod +x /usr/local/bin/bulk_blacklist.sh
bulk_blacklist.sh malicious_ips.txt "AbuseIPDB - Ocak 2024"
csf.deny Dosyasının Büyümesi ve Performans
Çok fazla IP blacklist’e eklendiğinde iptables kural sayısı ciddi oranda artar ve bu performansı olumsuz etkiler. CSF bunun için DENY_IP_LIMIT parametresini sunuyor. /etc/csf/csf.conf dosyasında bu değeri kontrol et:
grep "DENY_IP_LIMIT" /etc/csf/csf.conf
Genellikle varsayılan değer 200’dür. Büyük altyapılarda bu değeri artırmak gerekebilir ama dikkatli ol, 10.000’in üzerinde kural performansı belirgin şekilde etkiler.
Alternatif olarak ipset kullanarak büyük IP bloklarını çok daha verimli yönetebilirsin. CSF de bunu destekliyor:
grep "LF_IPSET" /etc/csf/csf.conf
# LF_IPSET = "1" olarak ayarla
Mevcut Listelerı Yönetme ve Kontrol Komutları
Günlük operasyonlarda sık kullanacağın kontrol komutları:
# Bir IP'nin whitelist veya blacklist'te olup olmadığını kontrol et
csf -g 192.0.2.50
# Tüm aktif CSF kurallarını listele
csf -l
# Geçici yasakları görüntüle
csf -t
# Belirli bir IP hakkında tüm log kayıtlarını ara
grep "192.0.2.50" /var/log/lfd.log | tail -50
# csf.allow içeriğini temiz göster (yorum satırları olmadan)
grep -v "^#" /etc/csf/csf.allow | grep -v "^$"
Bir IP’nin durumunu detaylı incelemek istediğinde csf -g komutu çok işe yarıyor. Hangi listede olduğunu, hangi iptables kuralının uygulandığını tek komutla görebiliyorsun.
LFD Ayarları ile Whitelist Entegrasyonu
LFD’nin çalışma şeklini anlamak, whitelist yönetimini daha etkin kılmak için önemli. /etc/csf/csf.conf içinde birkaç kritik parametre var:
LF_TRIGGER: Kaç başarısız denemeden sonra IP’nin banlacağını belirler. Varsayılan genellikle 5’tir.
LF_TRIGGER_PERM: Bu değer 1 olarak ayarlandığında geçici ban yerine kalıcı ban uygulanır.
CT_PERMANENT: Bağlantı takibinde de kalıcı ban uygular.
Monitoring sistemlerin için csf.ignore kullanmak yerine alternatif olarak csf.conf içindeki IGNORE_ALLOW parametresini de değerlendirebilirsin. Bu parametre 1 olduğunda csf.allow listesindeki IP’ler LFD tarafından da görmezden gelinir.
grep "IGNORE_ALLOW" /etc/csf/csf.conf
# IGNORE_ALLOW = "1" olarak ayarlanmis olmali
Ülke Bazlı Engelleme ile Birlikte Kullanım
CSF’nin CC_DENY özelliği ile belirli ülkeleri toplu olarak engelleyebilirsin. Ama bu noktada whitelist daha da kritik hale gelir. Örneğin Rusya’yı (RU) engelledin ama bir iş ortağın Moskova’da. O IP’yi csf.allow‘a eklersen ülke bazlı engelden muaf olur.
# csf.conf'ta CC_DENY ayarı örneği
# CC_DENY = "CN,RU,KP,NG"
# Bu ülkelerden gelen ama whitelist'te olan IP'ler yine de erişebilir
csf -a 95.213.XXX.XXX "Moskova is ortagi - CC_DENY'dan muaf"
Whitelist Yönetiminde Yapılan Yaygın Hatalar
Dinamik IP’leri whitelist’e eklemek: Ofis internetinin IP’si değişiyorsa statik IP almadan whitelist’e ekleme yapma. Eski IP başkasına atanır ve güvenlik açığı oluşturabilir.
Geniş CIDR bloklarını dikgatsizce eklemek: /8 veya /16 gibi büyük blokları whitelist’e almak çok riskli. Bir cloud sağlayıcısının tüm IP bloğunu eklemek, o sağlayıcıdaki herhangi bir kötü niyetli sunucuya da kapıyı açar.
Yorum satırı yazmamak: Altı ay sonra kim koydu bu IP’yi sorusunu sormamak için her satıra yorum ekle. Tarih, açıklama ve kişi bilgisi eklemek iyi bir alışkanlık.
csf.allow ile csf.ignore farkını karıştırmak: csf.allow hem LFD takibinden muaf tutar hem de iptables’ta izin kuralı oluşturur. csf.ignore sadece LFD takibinden çıkarır. Yanlış dosyayı kullanmak beklenmedik sonuçlar doğurabilir.
Whitelist dosyasını yedeklememek: Sunucu göçü veya CSF yeniden kurulumunda whitelist ve blacklist dosyalarını kaybetmemek için düzenli yedek al.
# Basit bir yedekleme komutu
cp /etc/csf/csf.allow /etc/csf/csf.allow.$(date +%Y%m%d)
cp /etc/csf/csf.deny /etc/csf/csf.deny.$(date +%Y%m%d)
# Tum csf yapilandirmasini yedekle
tar czf /root/csf_backup_$(date +%Y%m%d).tar.gz /etc/csf/
cPanel ve WHM Entegrasyonu
cPanel kullanıyorsan CSF WHM plugin’i üzerinden de whitelist ve blacklist yönetimi yapabilirsin. WHM > Plugins > ConfigServer Security & Firewall yolunu izle. Ama dikkat: WHM arayüzündeki “Quick Allow” ve “Quick Deny” butonları doğrudan csf.allow ve csf.deny dosyalarını günceller, yani komut satırıyla yaptığın işlemlerin aynısı. Birinden yaptığın değişiklik diğerine yansır.
Bazı hosting şirketlerinde müşteriler cPanel’den kendi IP’lerini engelleyebilir. Bu durumlarda WHM üzerinden müşterinin kendini kilitlediği IP’yi whitelist’e almak sık karşılaşılan bir senaryo.
Log Analizi ile Proaktif Yönetim
LFD logları, hem whitelist hem blacklist kararlarını verirken en önemli kaynağın. Düzenli log analizi yaparak hangi IP’lerin sürekli engellendiğini, hangi sistemlerin yanlışlıkla ban yediğini görebilirsin.
# En cok banlanan IP'leri listele
grep "Blocked in" /var/log/lfd.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head -20
# Son 24 saatte whitelist'e alinan IP'lerin aktivitesi
grep "$(date +%b %d)" /var/log/lfd.log | grep -f <(grep -v "^#" /etc/csf/csf.allow | grep -v "^$" | awk '{print $1}')
# Hangi servisler uzerinden ban yenildi
grep "Blocked in" /var/log/lfd.log | grep -oP "lf_w+" | sort | uniq -c | sort -rn
Sonuç
CSF’nin whitelist ve blacklist yönetimi, ilk bakışta basit görünse de üzerinde düşünülmesi gereken nüanslı bir konu. Doğru yapılandırılmış bir izin/engel sistemi; yanlış pozitifleri sıfıra indirirken gerçek tehditleri otomatik olarak uzak tutar.
En önemli alışkanlıklar şunlar: Her eklemeyi yorum satırıyla belgele, dosyaları düzenli yedekle, monitoring ve backup sistemlerini csf.ignore‘a al, CloudFlare gibi proxy servisleri kullanıyorsan IP listelerini güncel tut, ve düzenli log analizi yap. Blacklist’e körü körüne IP eklemek yerine log kaynaklı, bilinçli kararlar almak uzun vadede çok daha sürdürülebilir.
Otomasyonu da ihmal etme. Bulk blacklist script’leri ve CloudFlare IP güncelleyiciler gibi araçlar, operasyonel yükü önemli ölçüde azaltır. Zaman içinde kendi altyapına özel betikler geliştirdikçe CSF yönetimi gerçek anlamda hands-off bir hale gelir ve sen asıl önemli işlere odaklanabilirsin.