CSF ile SYN Flood Saldırılarına Karşı Sunucu Koruma

SYN flood saldırıları, sunucuların en sık karşılaştığı ve en tehlikeli DDoS türlerinden biridir. Özellikle orta ölçekli bir web sunucusu işletiyorsanız, gecenin bir yarısı gelen bir SYN flood dalgası sizi gerçekten zor durumda bırakabilir. Bu yazıda CSF (ConfigServer Security & Firewall) kullanarak SYN flood saldırılarına karşı nasıl sağlam bir savunma kurulacağını, gerçek senaryolar üzerinden anlatacağım.

SYN Flood Nedir ve Neden Tehlikelidir?

TCP bağlantısı kurulurken üç adımlı bir el sıkışma (handshake) gerçekleşir: SYN, SYN-ACK ve ACK. Normal bir bağlantıda istemci SYN paketi gönderir, sunucu SYN-ACK ile yanıt verir ve istemci ACK göndererek bağlantıyı tamamlar.

SYN flood saldırısında saldırgan binlerce hatta yüz binlerce SYN paketi gönderir ama ACK adımını hiç tamamlamaz. Sunucu her SYN paketi için bellekte bir bağlantı durumu tutar ve SYN-ACK gönderdikten sonra ACK bekler. Bu yarım bağlantılar birikmeye başlayınca sunucunun bağlantı tablosu dolup taşar ve meşru kullanıcılar bağlanamaz hale gelir.

Pratikte bu şöyle görünür: Sunucu aniden yavaşlar, SSH bağlantıları kurulamaz, web siteniz 504 hatası döndürür. netstat -an | grep SYN_RECV komutunu çalıştırdığınızda ekranı kaplayan yüzlerce SYN_RECV satırı görürsünüz.

CSF’in SYN Flood Koruması Nasıl Çalışır?

CSF, arka planda iptables kuralları oluşturarak çalışır. SYN flood koruması için birkaç farklı mekanizma devreye girer:

  • SYN cookie’leri: Kernel seviyesinde, yarım bağlantılar için bellek ayırmak yerine kriptografik bir cookie kullanılır
  • Bağlantı hızı limitleme: Belirli bir IP’den saniyede gelebilecek SYN paketi sayısı kısıtlanır
  • Bağlantı sayısı limitleme: Tek bir IP’nin aynı anda açabileceği toplam bağlantı sayısı sınırlandırılır
  • Port bazlı koruma: Kritik portlar için özel kurallar tanımlanır

CSF bu mekanizmaları /etc/csf/csf.conf dosyası üzerinden yönetir. Şimdi bu yapılandırmaya ayrıntılı olarak bakalım.

Temel Yapılandırma Parametreleri

CSF kurulumu tamamlandıktan sonra ilk iş SYN flood ile ilgili parametreleri doğru ayarlamak. Ana yapılandırma dosyasını açalım:

nano /etc/csf/csf.conf

En kritik parametreler şunlar:

SYNFLOOD: SYN flood korumasını açıp kapatır. 1 yaparak aktif ederiz.

SYNFLOOD_RATE: Saniye başına izin verilen SYN paketi sayısı ve burst değeri. Örneğin 100/s değeri saniyede 100 SYN paketine izin verir.

SYNFLOOD_BURST: Kısa süreli trafik artışlarına tolerans gösterir. 150 yaparsanız ani bir burst’e izin verilir ama uzun süreli yüksek trafik engellenir.

CT_LIMIT: Tek bir IP’nin aynı anda sahip olabileceği maksimum bağlantı sayısı.

CT_INTERVAL: Bağlantı takibinin kaç saniyede bir yapılacağı.

CT_PORTS: Bağlantı sayısı limitinin hangi portlara uygulanacağı.

Şimdi bu ayarları gerçek bir yapılandırmayla görelim:

# SYN Flood korumasını aktif et
SYNFLOOD = "1"
SYNFLOOD_RATE = "100/s"
SYNFLOOD_BURST = "150"

# Bağlantı takibi
CT_LIMIT = "300"
CT_INTERVAL = "30"
CT_BLOCK_TIME = "1800"
CT_COUNT = "1"
CT_PERMANENT = "0"
CT_PORTS = "80,443,25,110,143"
CT_SKIP_HTTP_PORTS = "0"

Kernel Seviyesinde SYN Cookie Aktivasyonu

CSF ayarlarından önce kernel’in SYN cookie özelliğini aktif etmek gerekir. Bu, CSF’in iptables kurallarından bağımsız bir güvenlik katmanıdır:

# Anlık olarak aktif et
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Kalıcı hale getir
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf

# Ek TCP güvenlik parametreleri
echo "net.ipv4.tcp_max_syn_backlog = 2048" >> /etc/sysctl.conf
echo "net.ipv4.tcp_synack_retries = 2" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syn_retries = 5" >> /etc/sysctl.conf

# Değişiklikleri uygula
sysctl -p

Bu parametrelerin ne işe yaradığını açıklayayım:

  • tcp_syncookies: Kernel’in SYN flood durumunda cookie tabanlı bağlantı yönetimine geçmesini sağlar
  • tcp_max_syn_backlog: Yarım bağlantı kuyruğunun boyutunu artırır, meşru bağlantıların şansını artırır
  • tcp_synack_retries: SYN-ACK paketinin kaç kez yeniden gönderileceği, düşük tutmak yarım bağlantıları hızlı temizler
  • tcp_syn_retries: SYN paketinin yeniden deneme sayısı

Gerçek Dünya Senaryosu: Paylaşımlı Hosting Sunucusu

Diyelim ki 500 kullanıcılı bir cPanel paylaşımlı hosting sunucusu yönetiyorsunuz. Bu tür sunucular hem çok hedef alınır hem de hatalı bir yapılandırma gerçek kullanıcıları etkiler. Böyle bir ortam için dengeli bir CSF yapılandırması şöyle olabilir:

# /etc/csf/csf.conf içindeki ilgili bölümler

# SYN Flood temel koruma
SYNFLOOD = "1"
SYNFLOOD_RATE = "75/s"
SYNFLOOD_BURST = "100"

# Bağlantı izleme - paylaşımlı hosting için kritik
CT_LIMIT = "200"
CT_INTERVAL = "30"
CT_BLOCK_TIME = "3600"
CT_COUNT = "1"
CT_PERMANENT = "0"
CT_PORTS = "80,443,21,22,25,110,143,993,995,2082,2083,2086,2087"

# Port knocking ve tarama koruması
PS_INTERVAL = "300"
PS_LIMIT = "10"
PS_BLOCK_TIME = "3600"

# Login hatalarına karşı koruma
LF_TRIGGER = "1"
LF_TRIGGER_PERM = "1"

Değişiklikleri uygulamak için:

csf -r

İleri Seviye: Portlar İçin Özel Kurallar

Her port için aynı limiti uygulamak her zaman mantıklı olmayabilir. Mesela SSH portu için çok daha sıkı limitler koymak gerekir, web portu için biraz daha gevşek olabilirsiniz. CSF bunu /etc/csf/csf.pignore ve özel iptables kurallarıyla destekler.

SSH için özel SYN koruması ekleyelim:

# /etc/csf/csfpost.sh dosyasına özel kurallar ekle
cat >> /etc/csf/csfpost.sh << 'EOF'
#!/bin/bash

# SSH için sıkı SYN koruması
iptables -A INPUT -p tcp --dport 22 --syn -m recent --name ssh_syn --set
iptables -A INPUT -p tcp --dport 22 --syn -m recent --name ssh_syn --update --seconds 60 --hitcount 10 -j DROP

# HTTP/HTTPS için connection limit
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT --reject-with tcp-reset

echo "Ozel SYN koruma kurallari yuklendi" >> /var/log/csf_custom.log
EOF

chmod +x /etc/csf/csfpost.sh

Bu script CSF her yeniden başlatıldığında otomatik çalışır ve özel kurallarınız korunur.

Saldırı Altında Anlık Tespit ve Müdahale

Bir SYN flood saldırısı başladığında bunu nasıl anlarsınız ve ne yaparsınız? Önce durumu tespit edelim:

# SYN_RECV durumundaki bağlantıları say
netstat -an | grep SYN_RECV | wc -l

# Hangi IP'lerden geliyor?
netstat -an | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

# ss komutuyla daha hızlı tespit (büyük sunucularda netstat yavaş kalır)
ss -n state syn-recv | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

# Aktif bağlantıları portlara göre grupla
netstat -an | awk '{print $6}' | sort | uniq -c | sort -rn

Çıktıda tek bir IP’den veya az sayıda IP’den binlerce SYN_RECV görüyorsanız, hedefli bir saldırıyla karşı karşıyasınız demektir. Botnet tabanlı saldırılarda ise yüzlerce farklı IP görürsünüz.

Anlık müdahale için:

# Saldırgan IP'yi hemen engelle
csf -d 192.168.1.100 "SYN flood saldirisi"

# Birden fazla IP için toplu engelleme
for ip in $(netstat -an | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | awk '$1>50{print $2}'); do
    csf -d $ip "SYN flood toplu engelleme"
    echo "$ip engellendi"
done

CSF Log Analizi ve İzleme

Saldırıların kaydını tutmak ve analiz etmek için CSF’in loglama özelliklerini etkin kullanmak gerekir:

# CSF loglarını gerçek zamanlı izle
tail -f /var/log/lfd.log | grep -i "syn|flood|block"

# Son 1 saat içinde engellenen IP'leri listele
grep "$(date -d '1 hour ago' '+%b %d %H')" /var/log/lfd.log | grep "DENY" | awk '{print $NF}' | sort | uniq -c | sort -rn

# CSF'in engellediği IP sayısını öğren
csf -l | wc -l

# Belirli bir IP hakkında bilgi al
csf -g 192.168.1.100

Düzenli log analizi için basit bir Bash script yazalım:

#!/bin/bash
# /usr/local/bin/syn_report.sh

LOG_FILE="/var/log/lfd.log"
REPORT_FILE="/var/log/syn_flood_report.txt"
DATE=$(date '+%Y-%m-%d %H:%M')

echo "=== SYN Flood Raporu - $DATE ===" > $REPORT_FILE
echo "" >> $REPORT_FILE

# Bugün engellenen bağlantı sayısı
BLOCKED=$(grep "$(date '+%b %d')" $LOG_FILE | grep -c "blocked")
echo "Bugun engellenen toplam: $BLOCKED" >> $REPORT_FILE

# En çok saldıran IP'ler
echo "" >> $REPORT_FILE
echo "En cok saldiran IP'ler (son 24 saat):" >> $REPORT_FILE
grep "$(date '+%b %d')" $LOG_FILE | grep "DENY" | awk '{print $(NF-1)}' | sort | uniq -c | sort -rn | head -10 >> $REPORT_FILE

# Mevcut SYN_RECV sayısı
SYN_COUNT=$(netstat -an | grep -c SYN_RECV)
echo "" >> $REPORT_FILE
echo "Mevcut SYN_RECV baglanti sayisi: $SYN_COUNT" >> $REPORT_FILE

cat $REPORT_FILE

# E-posta bildirimi (opsiyonel)
if [ $SYN_COUNT -gt 100 ]; then
    mail -s "UYARI: Yuksek SYN_RECV sayisi - $SYN_COUNT" root < $REPORT_FILE
fi

Bu script’i cron’a ekleyin:

chmod +x /usr/local/bin/syn_report.sh
echo "*/15 * * * * root /usr/local/bin/syn_report.sh" >> /etc/crontab

Gerçek Dünya Senaryosu: E-ticaret Sitesi Saldırısı

Geçen yıl bir müşterimizin e-ticaret sunucusu Salı günü öğleden sonra ciddi bir SYN flood saldırısına maruz kaldı. Kara cuma öncesi rakip firma kaynaklı olduğu düşünülen bu saldırıda tek bir C sınıfı network’ten 50.000’den fazla SYN paketi geliyordu. İşte o durumda uyguladığımız adımlar:

Önce tüm network bloğunu geçici olarak engelledik:

# Saldırının geldiği /24 bloğunu engelle
csf -d 203.0.113.0/24 "SYN flood saldiri blogu"

# Engellemenin aktif olduğunu doğrula
iptables -L INPUT -n | grep 203.0.113

Sonra CSF ayarlarını o an için daha agresif hale getirdik:

# csf.conf içinde geçici olarak sıkılaştırma
SYNFLOOD_RATE = "30/s"
SYNFLOOD_BURST = "50"
CT_LIMIT = "100"
CT_BLOCK_TIME = "7200"

# Değişiklikleri uygula
csf -r

Saldırı dinince ayarları normale döndürdük ve /24 bloğunu kaldırdık. Saldırı yaklaşık 40 dakika sürdü, sitede toplam 8 dakikalık kısmi erişim sorunu yaşandı. CSF olmadan bu süre çok daha uzun olabilirdi.

Whitelist ve Güvenilir IP Yönetimi

SYN flood koruması bazen gerçek kullanıcıları da etkileyebilir, özellikle NAT arkasındaki kurumsal ağlardan gelen yüksek trafikte. Bu yüzden güvenilir IP’leri whitelist’e almak kritik önem taşır:

# Tek bir IP'yi whitelist'e ekle
csf -a 10.0.0.1 "Ofis network geçici whitelist"

# IP aralığı ekle (CIDR notasyonu)
echo "10.0.0.0/24" >> /etc/csf/csf.allow
csf -r

# Ödeme sağlayıcısı IP'lerini ekle (örnek)
# PayTR, iyzico gibi servislerin IP bloklarını mutlaka whitelist'e alın
echo "176.236.0.0/16" >> /etc/csf/csf.allow

# Arama motoru botları için özel izin
echo "66.249.64.0/19 # Google Bot" >> /etc/csf/csf.allow
csf -r

Whitelist yönetiminde dikkat edilmesi gerekenler:

  • CDN kullanıyorsanız (Cloudflare, Fastly vb.) CDN IP bloklarını mutlaka whitelist’e alın
  • Ödeme sistemi entegrasyonlarında provider IP’lerini kontrol edin
  • Monitoring sistemleri (Nagios, Zabbix) için monitoring sunucusunun IP’si whitelist’te olmalı
  • Whitelist düzenli gözden geçirilmeli, eski ve gereksiz girişler temizlenmeli

Performans ve Yük Dengeleme Ortamları İçin Özel Dikkat

Load balancer veya reverse proxy önünde çalışıyorsanız CSF yapılandırması daha dikkat gerektirir. Bu durumda gerçek istemci IP’leri yerine proxy IP’sini görürsünüz:

# Nginx veya Apache'nin gerçek IP'yi aktardığı header'ı kontrol et
# X-Forwarded-For veya X-Real-IP header'larına bakın

# Load balancer IP'sini whitelist'e ekle
echo "10.0.0.254 # Load Balancer" >> /etc/csf/csf.allow

# CT_SKIP_HTTP_PORTS kullanarak HTTP için bağlantı limitini devre dışı bırakabilirsiniz
# Ama bu güvenlik açığı yaratabilir, dikkatli olun
CT_SKIP_HTTP_PORTS = "80,443"

Cloudflare kullananlar için özel yapılandırma:

# Cloudflare IP bloklarını whitelist'e ekle
cat >> /etc/csf/csf.allow << 'EOF'
103.21.244.0/22 # Cloudflare
103.22.200.0/22 # Cloudflare
103.31.4.0/22 # Cloudflare
104.16.0.0/13 # Cloudflare
104.24.0.0/14 # Cloudflare
108.162.192.0/18 # Cloudflare
131.0.72.0/22 # Cloudflare
141.101.64.0/18 # Cloudflare
162.158.0.0/15 # Cloudflare
172.64.0.0/13 # Cloudflare
173.245.48.0/20 # Cloudflare
188.114.96.0/20 # Cloudflare
190.93.240.0/20 # Cloudflare
197.234.240.0/22 # Cloudflare
198.41.128.0/17 # Cloudflare
EOF

csf -r

Düzenli Bakım ve Test

Yapılandırdınız ve unuttunuz olmaz. CSF ayarlarının düzenli kontrol edilmesi gerekir:

# CSF'in çalışıp çalışmadığını kontrol et
csf -v
systemctl status lfd

# Mevcut kural sayısını görüntüle
iptables -L | wc -l

# Engellenen IP listesini gözden geçir ve eski girişleri temizle
csf -l | grep "Manual" | head -20

# 30 günden eski manuel engellemeleri temizle (dikkatli kullanın)
csf -tf

Ayda bir yapılması önerilen rutin:

  • Whitelist’i gözden geçirin, gereksiz IP’leri kaldırın
  • Log dosyalarını analiz edin, saldırı pattern’larını not edin
  • SYNFLOOD_RATE değerinin gerçek trafiğe uygun olup olmadığını kontrol edin
  • CSF sürümünü güncel tutun: csf -u
  • Test ortamında yapılandırma değişikliklerini doğrulayın

Sonuç

SYN flood koruması tek başına bir çözüm değil, katmanlı güvenlik stratejisinin önemli bir parçasıdır. CSF bu konuda gerçekten güçlü araçlar sunar ama doğru yapılandırılmadan kutudan çıktığı haliyle yeterli koruma sağlamaz.

Özetlemek gerekirse yapılması gerekenler şunlardır:

  • Kernel seviyesinde tcp_syncookies ve tcp_max_syn_backlog ayarlarını optimize edin
  • SYNFLOOD, SYNFLOOD_RATE ve SYNFLOOD_BURST değerlerini sunucunuzun gerçek trafik profiline göre ayarlayın
  • Bağlantı izlemeyi (CT_LIMIT) aktif tutun ve makul değerler belirleyin
  • Güvenilir IP’leri whitelist’te tutun, CDN ve ödeme sistemi IP’lerini unutmayın
  • Log izlemeyi otomatikleştirin, saldırıları anlık tespit edin
  • Düzenli bakım yapın ve ayarları gözden geçirin

SYN flood saldırıları tamamen önlenemez ama etkisi ciddi ölçüde azaltılabilir. Doğru yapılandırılmış bir CSF, çoğu saldırıyı sunucu kaynaklarınızı tüketmeden defedebilir. Zaman harcayın, test edin ve dokumentasyonunuzu güncel tutun. Gece yarısı paniklemek zorunda kalmamak için şimdi hazırlıklı olun.

Yorum yapın