CSF ile IP Engelleme: Kalıcı ve Geçici Yöntemler

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.deny dosyası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.

Yorum yapın