Sunucunu yönetirken er ya da geç şu soruyla yüzleşmek zorunda kalırsın: “Bu IP’yi nasıl engellerim?” Brute force saldırısı yapan bir bot, spam gönderen bir sunucu ya da izinsiz erişim deneyen biri… Hepsinin ortak çözümü CSF (ConfigServer Security & Firewall) ile IP engelleme. Ama işin püf noktası şu: her durumda kalıcı engelleme yapmak zorunda değilsin. Bazen geçici, bazen kalıcı, bazen toplu engelleme gerekiyor. Bu yazıda CSF’nin IP engelleme mekanizmasını derinlemesine ele alacağız.
CSF’nin IP Engelleme Mantığı
CSF, arka planda iptables (ya da yeni sistemlerde nftables) kullandığı için aslında yaptığı iş oldukça basit: bir IP’yi DROP veya REJECT kuralıyla blokluyor. Ama CSF’nin güçlü yanı, bu işlemi yönetmek için sağladığı soyutlama katmanı. Elle iptables kuralı yazmak yerine, CSF’nin kendi komutlarını ve konfigürasyon dosyalarını kullanıyorsun.
CSF’de IP engelleme iki temel yöntemle çalışır:
- Kalıcı engelleme:
/etc/csf/csf.denydosyasına yazılan IP’ler. CSF yeniden başlasa da, sunucu reboot olsa da bu engellemeler devam eder. - Geçici engelleme: Belirli bir süre için eklenen ve süre dolunca otomatik olarak kalkan engellemeler. LFD (Login Failure Daemon) zaten bu yöntemi kullanıyor.
Bir de bunların tam tersi olan whitelist var: csf.allow dosyası. IP engelleme konusuna girerken bunu da aklının bir köşesinde tutman gerekiyor, çünkü yanlışlıkla kendi IP’ni engellemek klasik bir sysadmin felaketi.
Kalıcı IP Engelleme
Tek IP Engelleme
En basit senaryo: bir IP adresini kalıcı olarak engellemek istiyorsun.
csf -d 192.168.1.100
Bu komut iki şey yapıyor: /etc/csf/csf.deny dosyasına IP’yi ekliyor ve aynı anda iptables kuralını aktif hale getiriyor. Yani CSF’yi restart etmene gerek yok.
Bir yorum ekleyerek de engelleyebilirsin, bu özellikle ekip ortamında çok işe yarıyor:
csf -d 192.168.1.100 "Brute force - 2024-01-15 tarihinde tespit edildi"
csf.deny dosyasına baktığında şöyle bir satır göreceksin:
192.168.1.100 # Brute force - 2024-01-15 tarihinde tespit edildi
CIDR Blok Engelleme
Bazen tek bir IP değil, tüm bir subnet’i engellemen gerekir. Özellikle belirli ülkelerden gelen saldırılar veya bilinen kötü niyetli ASN’ler için bu yöntemi kullanıyorsun:
csf -d 45.33.32.0/24
Ya da daha geniş bir blok:
csf -d 185.220.0.0/16 "Tor exit node subnetwork"
Burada dikkatli olman gereken bir nokta var: /16 gibi geniş bir bloğu engellerken meşru trafiği de kesip kesmediğini kontrol et. Özellikle CDN’lerin ve büyük hosting sağlayıcıların IP aralıklarında ihtiyatlı olmak gerekiyor.
Engeli Kaldırma
Kalıcı olarak engellenmiş bir IP’yi çıkarmak için:
csf -dr 192.168.1.100
-dr parametresi “deny remove” anlamına geliyor. Bu komut hem csf.deny dosyasından siler hem de aktif iptables kuralını kaldırır.
csf.deny Dosyasını Doğrudan Düzenleme
Toplu işlemler için bazen doğrudan dosyayı düzenlemek daha pratik. Örneğin yüzlerce IP’yi aynı anda ekleyeceksen:
# Önce IP listesini dosyaya ekle
cat blocked_ips.txt >> /etc/csf/csf.deny
# Sonra CSF'yi yeniden yükle
csf -r
Ama şunu unutma: dosyayı manuel düzenledikten sonra mutlaka csf -r komutunu çalıştırman gerekiyor, aksi takdirde iptables kuralları güncellenmez.
Geçici IP Engelleme
Geçici engelleme, özellikle şüpheli ama kesin olmayan durumlarda altın değerinde. “Bu IP şüpheli görünüyor ama belki yanlış pozitif, birkaç saatliğine engelleyeyim” dediğinde kullanıyorsun.
Süre Belirterek Engelleme
CSF’de geçici engelleme için -td (temporary deny) parametresini kullanıyorsun:
# 3600 saniye (1 saat) için engelle
csf -td 203.0.113.50 3600
# 86400 saniye (24 saat) için engelle
csf -td 203.0.113.50 86400
# Yorum ekleyerek
csf -td 203.0.113.50 7200 "Şüpheli tarama aktivitesi - 2 saat geçici blok"
Süre parametresi saniye cinsinden. Hesaplamayı kolaylaştırmak için:
- 1 saat = 3600 saniye
- 6 saat = 21600 saniye
- 24 saat = 86400 saniye
- 7 gün = 604800 saniye
Geçici Engelleri Listeleme
Aktif geçici engellemeleri görmek için:
csf -tl
Çıktı şuna benzer:
DENY_TEMP
203.0.113.50|3600|1705320000|Şüpheli tarama aktivitesi - 2 saat geçici blok
Bu çıktıdaki alanlar sırasıyla: IP adresi, süre (saniye), başlangıç zamanı (Unix timestamp), yorum.
Geçici Engeli Kaldırma
csf -tdr 203.0.113.50
LFD ve Otomatik Geçici Engelleme
CSF ile birlikte gelen LFD daemon’u zaten otomatik geçici engelleme yapıyor. /etc/csf/csf.conf dosyasındaki temel parametreler:
# Geçici engellemelerin varsayılan süresi (saniye)
CT_LIMIT = "300"
# LFD tarafından yapılan geçici engelin süresi
LF_TRIGGER_PERM = "0" # 0 = kalıcı değil, geçici
LF_TRIGGER_PERM değeri 0 ise LFD geçici engelleme yapar. 1 yaparsan kalıcı engellemeye geçer. Genellikle 0’da bırakmak daha akıllıca, çünkü dinamik IP kullanan masum kullanıcıları kalıcı olarak bloklamak istemezsin.
Gerçek Dünya Senaryoları
Senaryo 1: SSH Brute Force Saldırısı
Sabah sunucunun loglarına bakıyorsun, /var/log/secure (ya da /var/log/auth.log) dolup taşmış. Yüzlerce başarısız SSH girişi, hepsi aynı IP’den:
# Önce saldıranı tespit et
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head -20
IP’yi buldun: 198.51.100.77. Hemen kalıcı engelle:
csf -d 198.51.100.77 "SSH brute force - $(date +%Y-%m-%d)"
Sonra bu tür saldırıların otomatik engellendiğinden emin olmak için LFD konfigürasyonunu kontrol et:
grep "LF_SSHD" /etc/csf/csf.conf
LF_SSHD = "5" gibi bir değer görmelisin. Bu, 5 başarısız SSH denemesinden sonra otomatik engelleme yapılacağı anlamına geliyor.
Senaryo 2: Web Scraping Botu
E-ticaret sitesinde çalışan bir sysadmin olarak, sunucunun web loglarında garip bir pattern fark ediyorsun. Tek bir IP saniyede onlarca istek yapıyor:
# Nginx access log'unda en aktif IP'leri bul
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
Bulunan scraper IP’yi geçici olarak engelle, duruma göre kalıcıya çevir:
# Önce 24 saatlik geçici engel
csf -td 172.16.0.99 86400 "Agresif web scraper - nginx log analizi"
# 24 saat sonra hala devam ediyorsa kalıcıya çevir
csf -tdr 172.16.0.99
csf -d 172.16.0.99 "Kalıcı blok - web scraper"
Senaryo 3: Toplu IP Engelleme (Kötü Niyetli ASN)
Bazen bir ASN’nin tamamından gelen trafiği engellemeniz gerekiyor. Bir tehdit istihbarat servisinden aldığın IP listesini toplu engelleme:
#!/bin/bash
# bulk_block.sh - Toplu IP engelleme scripti
BLOCK_LIST="/root/malicious_ips.txt"
LOG_FILE="/var/log/csf_bulk_block.log"
COMMENT="Threat intel feed - $(date +%Y-%m-%d)"
echo "Toplu engelleme basliyor: $(date)" >> $LOG_FILE
while IFS= read -r ip; do
# Boş satırları ve yorumları atla
[[ -z "$ip" || "$ip" == #* ]] && continue
# Zaten engelli mi kontrol et
if csf -g "$ip" | grep -q "DENY"; then
echo "Zaten engelli: $ip" >> $LOG_FILE
continue
fi
# Engelle
csf -d "$ip" "$COMMENT"
echo "Engellendi: $ip" >> $LOG_FILE
done < "$BLOCK_LIST"
echo "Islem tamamlandi: $(date)" >> $LOG_FILE
echo "Toplam engellenen: $(wc -l < $BLOCK_LIST) IP"
Bu scripti çalıştırmak için:
chmod +x bulk_block.sh
./bulk_block.sh
Senaryo 4: Ülke Bazlı Engelleme (CC_DENY)
CSF’nin ülke bazlı engelleme özelliğini kullanmak için csf.conf dosyasında:
# /etc/csf/csf.conf dosyasini duzenle
CC_DENY = "CN,RU,KP,IR"
Bu yöntem tek tek IP engellemeye göre çok daha verimli çünkü GeoIP veritabanını kullanıyor. Değişikliği aktif etmek için:
csf -r
Ama dikkat: ülke bazlı engelleme meşru kullanıcıları da etkileyebilir. Özellikle VPN kullananlar veya söz konusu ülkede çalışanların erişmesi gereken bir sistemse bu yöntemi kullanmadan önce iki kez düşün.
IP Sorgulama ve Durum Kontrol
Bir IP’nin mevcut durumunu kontrol etmek için:
csf -g 192.168.1.100
Bu komut o IP için mevcut tüm iptables kurallarını gösterir: ALLOW, DENY veya geçici kural var mı hepsini listeler.
Tüm engelli IP’leri görmek için:
cat /etc/csf/csf.deny
Ya da sadece satır sayısını öğrenmek için:
wc -l /etc/csf/csf.deny
White List ile Güvenli Alan Oluşturma
IP engelleme yaparken kendi IP’ni veya kritik hizmetlerin IP’lerini whitelist’e almayı unutma. Bu gerçekten önemli, yönetim IP’sini yanlışlıkla blocklayan sysadminlerin sayısı hiç az değil:
# Kendi IP'ni kalıcı olarak whitelist'e ekle
csf -a 203.0.113.10 "Yonetim IP - ofis"
# csf.allow dosyasina direkt yazma
echo "203.0.113.10 # Yonetim IP - ofis" >> /etc/csf/csf.allow
csf -r
csf.allow dosyasındaki IP’ler csf.deny kurallarını ezer. Yani bir IP hem allow hem deny listesindeyse, allow kazanır.
Toplu Temizlik ve Yönetim
Zamanla csf.deny dosyası şişebilir. Eski ve artık gerekli olmayan engellemeleri temizlemek için:
# Belirli bir tarihten eski yorumları olan IP'leri bul
grep "2023-" /etc/csf/csf.deny
# Tüm geçici engelleri temizle (kalıcıları dokunma)
csf -tf
csf -tf komutu tüm geçici (temporary) engellemeleri temizler, kalıcılara dokunmaz. Periyodik bakım için kullanışlı bir komut.
Bazen de tüm deny listesini sıfırdan başlatmak gerekebilir:
# Dikkatli ol, tüm kalıcı engeller silinir!
echo "" > /etc/csf/csf.deny
csf -r
Fail2ban ile Karşılaştırma ve Entegrasyon
Bazı sunucularda hem CSF/LFD hem de Fail2ban çalıştırma isteği oluyor. Pratikte buna gerek yok ve ikisi birden çalışırsa çakışma yaşanabilir. LFD zaten Fail2ban’ın yaptığı işi yapıyor. Eğer Fail2ban’dan CSF’ye geçiş yapıyorsan, Fail2ban’ı devre dışı bırak:
systemctl stop fail2ban
systemctl disable fail2ban
Sonra LFD konfigürasyonunu ihtiyacına göre ayarla.
Önemli CSF IP Engelleme Parametreleri
Sık kullanılan parametreleri özetleyeyim:
- csf -d [ip]: Kalıcı engelleme ekler
- csf -dr [ip]: Kalıcı engeli kaldırır
- csf -td [ip] [saniye]: Geçici engelleme ekler
- csf -tdr [ip]: Geçici engeli kaldırır
- csf -tl: Tüm geçici engelleri listeler
- csf -tf: Tüm geçici engelleri temizler
- csf -g [ip]: IP için mevcut kuralları sorgular
- csf -a [ip]: Whitelist’e ekler (kalıcı izin)
- csf -ar [ip]: Whitelist’ten çıkarır
- csf -r: CSF kurallarını yeniden yükler
- csf -l: Tüm aktif iptables kurallarını listeler
Sık Yapılan Hatalar
1. Kendi IP’sini engellemek: Sunucuda işlem yaparken kendi IP’ni test amaçlı engelleyip sonra erişememe durumu. Çözüm: Her zaman önce csf.allow dosyasını kontrol et, sonra engelleme yap.
2. Büyük CIDR bloklarını düşünmeden engellemek: /8 gibi dev bloklar bazen bulut sağlayıcıların veya CDN’lerin IP aralıklarını kesiyor. Engellemeden önce whois veya ipinfo.io ile IP bloğunu araştır.
3. csf.deny dosyasını düzenleyip CSF’yi restart etmemek: Dosyayı doğrudan düzenledikten sonra csf -r çalıştırmayı unutmak, değişikliklerin aktif olmamasına yol açar.
4. Geçici engeli kalıcı sanmak: csf -td ile eklenen engellemeler süre dolunca kalkar. Kalıcı olmasını istiyorsan -d kullanmalısın.
Sonuç
CSF ile IP engelleme, doğru kullanıldığında güçlü ve esnek bir güvenlik katmanı sağlıyor. Kalıcı engelleme için -d, geçici için -td, otomatik yönetim için LFD konfigürasyonu… Her senaryonun kendine özgü doğru yaklaşımı var.
Pratikte şu ilkeyi benimsemek iyi bir başlangıç: önce geçici engelle, durumu izle, sonra karar ver. Yanlış pozitiflerin kalıcı engellemesini geri almak zahmetli olabilir, özellikle büyük sistemlerde. LFD’yi düzgün konfigure edilmiş bir ortamda, brute force saldırılarının büyük çoğunluğu otomatik halledilir. Manuel müdahale gerektiren durumlar için de bu yazıdaki araçları kullanarak hızlıca aksiyon alabilirsin.
Son olarak şunu söyleyeyim: csf.deny dosyan ne kadar büyürse iptables kuralları o kadar şişer ve bu performansa yansır. Düzenli temizlik yapmak, artık gerekli olmayan eski blokları kaldırmak, iyi bir sysadmin rutininin parçası olmalı. Aylık bir csf.deny gözden geçirmesi alışkanlığı edinin, uzun vadede fark yaratıyor.