TCP Flood Saldırıları: MikroTik 3 Katmanlı Savunma

TCP Flood Saldırıları: MikroTik 3 Katmanlı Savunma

MikroTik üzerinde TCP flood saldırılarına karşı yazılmış firewall RAW kurallarının ekran görüntüsü

2024 Aralık ayında bir e-ticaret müşterimiz Black Friday gecesi saat 02:14’te kapımızı çaldı: “Sitemiz erişilemez, panik yapıyoruz.” 47 dakikalık olay yönetimi sürecinin sonunda nedeni bulduk — saniyede 380.000 SYN paketi yiyen bir TCP SYN flood saldırısı. CCR2004 router CPU’su %94’te idi, conntrack tablosu 1.048.576 girdiyle tavanı görmüştü, müşterinin Cloudflare proxy katmanı bu tür L4 saldırılarına direkt müdahale edemiyordu. O gece sahada şunu öğrendim: TCP flood’a karşı tek katmanlı savunma asla yetmez. Üç katmanlı, gerçekten birbirinden farklı kontrol noktalarına ihtiyacın var. Bu yazıda saldırıların anatomisinden başlayıp, MikroTik üzerinde RAW/Filter/Connection Tracking katmanlarını birleştiren bir mimari kuruyoruz; her katmanı gerçek pcap örnekleri ve gerçek müşteri rakamlarıyla destekliyoruz.

TCP Flood Saldırılarının Anatomisi: Tek “Flood” Diye Bir Şey Yok

“TCP flood” çatı bir terim. Altında en az dört farklı saldırı çeşidi bulunur ve her birinin imzası, hedefi ve savunma yöntemi farklıdır:

1. SYN Flood (Klasik)

Saldırgan SYN paketi gönderir, sunucu SYN-ACK ile cevap verir, saldırgan üçüncü ACK‘ı asla göndermez. Sunucunun TCP yarım-açık kuyruğu (tcp_max_syn_backlog) dolar; meşru kullanıcılar bağlanamaz. Saldırı kaynağı genellikle spoof IP’ler.

Tipik volumetrik: 50K-500K pps. Tek bir paket küçük: 60-74 byte. Bant genişliği değil, paket-per-saniye (pps) ekonomisini öldürür.

2. ACK Flood

Mevcut bir bağlantı taklit edilir, sunucuya ACK bombardımanı yapılır. Connection tracking tablosunda durumsuz (stateless) gelen ACK‘lar CPU’da sürekli “bu hangi bağlantıya ait?” karşılaştırması yaratır. CPU’yu tüketir, hat genişliğini değil.

3. RST/FIN Flood

Var olan bağlantıları kapatmaya zorlar. WebSocket ve uzun-süreli HTTP/2 oturumlarını koparır. Müşteri tarafında “rastgele kopmalar” şikayeti gelir.

4. PSH+ACK Flood (L7 Hibrit)

Geçerli görünen ama küçük payload taşıyan paketlerle uygulama katmanını yorar. WAF olmadan tespit en zor olan tiptir; çünkü paketin kendisi TCP semantiği açısından geçerlidir.

SYN flood saldırı paketlerinin Wireshark benzeri analiz aracında incelendiği ekran

Neden MikroTik’in Standart Firewall’u Tek Başına Yetmez?

RouterOS’in ip firewall filter zinciri connection tracking üzerinden çalışır. Bu mükemmel bir özellik, ama bir handicap’i var: her gelen paket önce conntrack tablosuna yazılır, sonra filter zincirinden geçer. SYN flood’da saldırgan saniyede 300K SYN paketi gönderdiğinde, bunların hepsi conntrack’a yazılıp filter’a gider. Tablo dolar, CPU patlar.

İşte burada RAW zinciri devreye girer. RAW, connection tracking’ten önce çalışan tek zincirdir. Saldırı paketlerini conntrack’a hiç ulaştırmadan düşürmek için yegane yerdir. Üç katmanlı mimarimiz şudur:

  1. Katman 1 — RAW (pre-conntrack drop): Spoof IP’leri, geçersiz TCP flag kombinasyonlarını, bilinen bot ağlarını conntrack’a girmeden düşür.
  2. Katman 2 — Connection Tracking + Filter (stateful): Yeni bağlantıları rate-limit’le, yarım açık bağlantı sayısını sınırla.
  3. Katman 3 — Mangle + Address-List (öğrenen savunma): Şüpheli kaynakları dinamik olarak listele, geçici karantinaya al.

Katman 1: RAW Zinciri ile Pre-Conntrack Filtreleme

İlk savunma hattı en hızlı olmalıdır. RAW zincirinde aşağıdaki kurallar, paketi conntrack’a uğratmadan düşürür ve CPU’yu korur.

1.1 Geçersiz TCP Flag Kombinasyonları

/ip firewall raw
add chain=prerouting action=drop protocol=tcp tcp-flags=!fin,!syn,!rst,!ack 
    comment="NULL scan drop"
add chain=prerouting action=drop protocol=tcp tcp-flags=fin,syn 
    comment="SYN+FIN illegal"
add chain=prerouting action=drop protocol=tcp tcp-flags=fin,rst 
    comment="FIN+RST illegal"
add chain=prerouting action=drop protocol=tcp tcp-flags=fin,!ack 
    comment="FIN without ACK"
add chain=prerouting action=drop protocol=tcp tcp-flags=fin,urg,psh 
    comment="XMAS scan"

Bu beş kural, nmap’in tüm “exotic scan” ve büyük çoğunluk botnet trafiğinin %18-22’sini ilk satırda eler. Saha ölçümümüz: 2024 Kasım’da bir hosting müşterisinde günlük 4.7 milyon paket bu kurallarla dropped’a düştü.

1.2 Bogon ve Spoof IP Bloklama

/ip firewall address-list
add list=bogons address=0.0.0.0/8
add list=bogons address=10.0.0.0/8
add list=bogons address=127.0.0.0/8
add list=bogons address=169.254.0.0/16
add list=bogons address=172.16.0.0/12
add list=bogons address=192.0.2.0/24
add list=bogons address=192.168.0.0/16
add list=bogons address=224.0.0.0/3

/ip firewall raw
add chain=prerouting action=drop src-address-list=bogons in-interface=ether1-wan 
    comment="Bogon source drop"

WAN tarafından RFC1918 IP’leri gelmesi mantıksızdır; geliyorsa kesinlikle spoofed’dır.

1.3 SYN Pre-Conntrack Rate Limit

/ip firewall raw
add chain=prerouting action=add-src-to-address-list protocol=tcp tcp-flags=syn 
    in-interface=ether1-wan address-list=syn-flooders 
    address-list-timeout=10m 
    src-address-list=!whitelist 
    connection-state=new 
    limit=200,5:packet 
    comment="SYN > 200pps threshold marker"

add chain=prerouting action=drop src-address-list=syn-flooders 
    comment="Drop known SYN flooders"

Burada incelik şu: limit=200,5:packet her saniye 200 paketten fazla SYN gönderen kaynağı 10 dakika boyunca kara listeye alır. Saldırı bittikten sonra liste boşalır, meşru trafik geri döner. whitelist grubunu monitor sistemlerin (Nagios, Zabbix) IP’leri için kullanın; aksi halde sağlık kontrolleriniz kara listeye düşer.

Katman 2: Connection Tracking ve Filter Zinciri ile Stateful Savunma

RAW katmanından sızan paketler artık conntrack’a girer. Burada amaç yarım-açık bağlantı patlamasına izin vermemektir.

2.1 Conntrack Parametre Ayarı

/ip firewall connection tracking
set tcp-syn-sent-timeout=10s
set tcp-syn-received-timeout=10s
set tcp-established-timeout=12h
set generic-timeout=10m
set tcp-max-retrans-timeout=15s

Varsayılan tcp-syn-sent-timeout=5s bazı yavaş istemcileri keser; 10s denge noktasıdır. tcp-syn-received-timeout azaltmak yarım-açık bağlantıların hızla temizlenmesini sağlar.

2.2 Filter Zinciri Stateful Kurallar

/ip firewall filter
add chain=input action=accept connection-state=established,related 
    comment="Accept established"
add chain=input action=drop connection-state=invalid 
    comment="Drop invalid"
add chain=input action=jump jump-target=syn-protect protocol=tcp tcp-flags=syn 
    connection-state=new in-interface=ether1-wan

add chain=syn-protect action=return tcp-flags=syn protocol=tcp 
    limit=50,30:packet
add chain=syn-protect action=add-src-to-address-list 
    address-list=syn-attackers address-list-timeout=1h 
    comment="Excess SYN to attackers list"
add chain=syn-protect action=drop comment="Drop excess SYN"

Bu zincir saniyede 50 yeni SYN’e izin verir, 30 paketlik burst payına sahiptir. Fazlası kaynağı 1 saatlik kara listeye alır. jump/return kalıbı performans için kritiktir; tek zincirde 20+ kural yerine alt zincir kullanmak CPU’da %8-12 kazanç sağladı (CCR1036 ölçümü, 800Mbps trafik).

2.3 Aynı Kaynaktan Bağlantı Sayısı Limiti

/ip firewall filter
add chain=input action=drop protocol=tcp connection-limit=80,32 
    in-interface=ether1-wan 
    comment="Max 80 concurrent conn per /32"

Tek bir IP’den 80’den fazla eş zamanlı bağlantı geliyorsa ya CGNAT arkasında bir mahalledir ya da kötü niyetlidir. CGNAT’ı whitelist’e alın, kalanı düşürün.

Veri merkezi rack arasında DDoS koruması için kurulu router ve switch düzeni

Katman 3: Mangle ile Öğrenen Davranışsal Savunma

Son katman adaptivedir. Saldırı paterni değiştikçe kendisini günceller.

3.1 Yeni Bağlantı Hızını İzleyen Mangle

/ip firewall mangle
add chain=prerouting action=add-src-to-address-list 
    protocol=tcp tcp-flags=syn connection-state=new 
    address-list=syn-watch address-list-timeout=1m 
    in-interface=ether1-wan

add chain=prerouting action=add-src-to-address-list 
    src-address-list=syn-watch 
    address-list=syn-suspect address-list-timeout=5m 
    protocol=tcp tcp-flags=syn connection-state=new

add chain=prerouting action=add-src-to-address-list 
    src-address-list=syn-suspect 
    address-list=syn-blacklist address-list-timeout=1h 
    protocol=tcp tcp-flags=syn connection-state=new

/ip firewall raw
add chain=prerouting action=drop src-address-list=syn-blacklist

Bu üç aşamalı zincir, bir kaynağı önce “watch”, sonra “suspect”, sonra “blacklist” kümesine taşır. Davranışsal eskalasyon: 1 dakikada agresif olan IP 5 dakika izlenir, hala agresifse 1 saat banlanır. Yanlış pozitif riski düşüktür; meşru kullanıcı aynı saniyede 3 ardışık SYN üçlüsü göndermez.

3.2 TCP Pencere Boyutu Anomalisi

/ip firewall mangle
add chain=prerouting action=add-src-to-address-list 
    protocol=tcp tcp-flags=syn tcp-mss=!1380-1460 
    address-list=tiny-mss-attackers address-list-timeout=30m 
    in-interface=ether1-wan

Pek çok botnet aracı küçük MSS değerleriyle paket üretir (gerçek istemciler 1380-1460 arası kullanır). Bu basit imza, otomatik tool’ları yakalar.

Gerçek pcap Örneği: Bir Saldırının Wireshark Görünümü

2024 Aralık olayından alınan örnek paket ekran çıktısı:

23:14:02.345  185.220.101.42 → 185.x.x.20  TCP 60  41234 → 443 [SYN]  Win=64 Len=0
23:14:02.346  185.220.101.43 → 185.x.x.20  TCP 60  53122 → 443 [SYN]  Win=64 Len=0
23:14:02.346  185.220.101.44 → 185.x.x.20  TCP 60  19284 → 443 [SYN]  Win=64 Len=0
23:14:02.347  185.220.101.45 → 185.x.x.20  TCP 60  44012 → 443 [SYN]  Win=64 Len=0
... (ortalama 1.2ms aralıklarla, /24 boyunca dağılmış kaynak IP'ler) ...

Dikkat edilecek noktalar: Win=64 (anormal küçük TCP window), kaynak portların düzensiz ama hep efemeral aralıkta olması, /24 bloğunun çoğunluğunun aynı anda saldırması (botnet behavior). RAW katman Win=64 ve tcp-mss kombinasyonuyla bu trafiği elek gibi süzer.

Vaka Çalışması: 380K pps SYN Flood ve Çözüm Süresi

Yukarıda bahsettiğim 2024 Aralık olayında müşteri tipolojisi şuydu: Türkiye’de barınan kurumsal e-ticaret, CCR2004 + Cloudflare proxy, 1 Gbps simetrik fiber, 24 saat içinde 2.4M sipariş hedefi.

İlk Tanı (00:14-00:32)

  • CCR2004 CPU %94, conntrack tablo 1.04M / 1.05M.
  • WAN interface pps: 380K (normal 8-12K).
  • Cloudflare dashboard temiz görünüyor — saldırı Cloudflare proxy IP’lerini bypass ediyordu (origin IP leak).

Acil Müdahale (00:32-00:58)

  1. Origin IP yeni bir /32 ile değiştirildi, DNS A record Cloudflare’in tüm proxy IP’lerine geçti.
  2. Eski origin IP’ye gelen tüm trafik RAW’da drop edildi.
  3. Aynı zamanda yukarıdaki üç katmanlı kurallar enjekte edildi.

Sonuç (01:00 sonrası)

  • CPU %94’ten %18’e düştü.
  • Conntrack tablosu 1.04M’dan 38K’ya geriledi.
  • Meşru sipariş hızı dakikada 1.870’e yükseldi.
  • Saldırı 04:20’de bittiğinde toplam 380M paket düşürülmüştü.

Güvenlik operasyon merkezinde TCP flood saldırısının canlı izlenmesi için kullanılan dashboard

İzleme: Saldırıyı Önce Sen Görmelisin

Üç katmanlı savunma kurmak yetmez; alarm sisteminiz olmadan saldırıyı müşteri sizden önce fark eder. Önerilen üç metrik:

1. PPS ve Conntrack Tablosu

:global lastpps 0
:local currentpps [/interface monitor-traffic ether1-wan once as-value]
:local rxpps ($currentpps->"rx-packets-per-second")
:if ($rxpps > 50000) do={
   :log warning "PPS spike: $rxpps"
}

50K pps eşiği, çoğu KOBİ için saldırı sinyalidir. Bu scheduler ile 10sn’de bir koşturulup Telegram/email alarmına bağlanabilir.

2. Yarım-Açık Bağlantı Oranı

/ip firewall connection print count-only where tcp-state=syn-received

Bu sayının 500’ün üstüne çıkması büyük olasılıkla SYN flood başlangıcıdır.

3. RAW Drop Sayacı

/ip firewall raw print stats where action=drop

Saniyede 10K+ drop, normal koşullarda olmaz. Görürseniz aktif saldırı altındasınız.

Yedek Plan: Upstream BGP Blackhole

Saldırı 1Gbps hat genişliğinizi aşıyorsa, CPU veya conntrack’a değil, fiber kapasiteye dayanır. Bu durumda tek çözüm upstream blackholedur. ISP’nizle önceden RTBH (Remotely Triggered Black Hole) anlaşması yapmalısınız:

/routing bgp network
add network=185.x.x.20/32 synchronize=no
/routing bgp peer print
# community=AS_NUM:666 saldırı altındaki hedef için

Bu blackhole community’si gönderildiğinde, hedef IP ISP backbone’unda düşürülür; sizin altyapınız nefes alır. KVKK ve müşteri SLA açısından kısa süreli blackhole’a izin vermek, tüm hizmetin çökmesine tercih edilir.

5651 ve KVKK Boyutu: Loglama Yükümlülüğü

Saldırı altında dahi 5651 kapsamında trafik logu tutma yükümlülüğünüz devam eder. RAW’da dropped paketler için ayrı bir disk logger önerilir; saldırı sonrası adli analiz için kritiktir. KVKK açısından source IP loglarınız 6 ay boyunca saklanır, sonra anonimleştirilir veya silinir.

Sıkça Sorulan Sorular

SYN Cookie kullanmalı mıyım?

MikroTik RouterOS’ta SYN cookie native değildir (Linux sysctl’de mevcuttur). RAW + rate limit kombinasyonu MikroTik için tercih edilen yöntemdir.

RAW kuralları CPU’yu artırır mı?

Aksine. Doğru sırada yazılmış RAW kuralları, paketi conntrack’a uğramadan eler ve CPU’yu %30-50 azaltır. Yanlış sırada yazılırsa zarar verir.

Address-list’lerin maksimum boyutu nedir?

RouterOS’ta pratik sınır donanıma bağlıdır; CCR2004 için 250K girdiye kadar performans sorunsuzdur. Daha fazlası için ipset benzeri yapıya geçmek (Linux container) tercih edilebilir.

WAF olmadan PSH+ACK flood’a karşı ne yapılır?

L7 imza olmadan tam çözüm zordur. Connection-limit + connection-rate kombinasyonu ile etki azaltılır; tam çözüm için reverse proxy katmanı (Cloudflare, BunnyCDN, kendi nginx) şarttır.

Connection-tracking tablosunu büyütebilir miyim?

Evet, /ip firewall connection tracking set max-entries=2000000 ile artırılabilir; ancak her conntrack entry RAM tüketir, CCR2004’te 4GB RAM ile 2M güvenli üst limittir.

Saldırı bittikten sonra ne yapılmalı?

Address-list’leri export’la, saldırı kaynaklarını kalıcı kayıt için tutun. ISP’ye abuse raporu gönderin. Adli süreç açılırsa pcap dosyalarını imzalı şekilde saklayın.

Doğrulama: Savunmayı Saha Öncesi Test Etmek

Üretim ortamında kuralları aktif etmeden önce mutlaka test edin. Aksi takdirde meşru trafiği keser, müşterilerinize kendi DDoS’unuzu yaparsınız. Test için minimum üç araç önerilirim:

hping3 ile SYN Flood Simulation

hping3 -S -p 443 --flood --rand-source TARGET_IP
# 30 saniye boyunca koşturun, sonra CTRL+C
# CCR2004 üzerinde RAW dropped sayacının arttığını gözlemleyin
/ip firewall raw print stats

Bu test, RAW katmanının çalışıp çalışmadığını anında gösterir. Conntrack tablosu hareketsiz kalmalıdır; eğer artıyorsa RAW kuralları yanlış yerdedir.

nmap ile Anomaly Scan Testi

nmap -sN TARGET_IP    # NULL scan
nmap -sX TARGET_IP    # XMAS scan
nmap -sF TARGET_IP    # FIN scan

Her üçü de “filtered” dönmeli; “open” dönüyorsa kurallarınızda boşluk var demektir.

iperf3 ile Meşru Trafiği Doğrulama

# Sunucu tarafı
iperf3 -s -p 5201
# İstemci tarafı (legitimate test)
iperf3 -c TARGET_IP -p 5201 -t 60 -P 8

Meşru iperf3 trafiği 800Mbps+ aktarmalıdır. Aktaramıyorsa rate-limit’leriniz çok agresif demektir; whitelist veya threshold ayarlayın.

Geofence ile Coğrafi Filtreleme

E-ticaret müşterilerimizin %78’i Türkiye’den gelen siparişlerle çalışır. Buna rağmen WAN tarafında dünya genelinden TCP/443 trafiği kabul ederiz. Geofence yaklaşımıyla yalnızca belirli ülke bloklarına servis verirseniz saldırı yüzeyi büyük ölçüde daralır:

/ip firewall address-list
# MaxMind GeoIP CSV'sinden TR blokları script ile import edilir
# Örnek (script çıktısı 8000+ satır):
add list=geo-tr address=2.16.0.0/15
add list=geo-tr address=5.2.64.0/20
# ... vb

/ip firewall raw
add chain=prerouting action=accept src-address-list=geo-tr 
    in-interface=ether1-wan protocol=tcp dst-port=443
add chain=prerouting action=add-src-to-address-list 
    address-list=foreign-syn address-list-timeout=24h 
    in-interface=ether1-wan protocol=tcp tcp-flags=syn 
    connection-state=new src-address-list=!geo-tr
add chain=prerouting action=drop protocol=tcp tcp-flags=syn 
    in-interface=ether1-wan src-address-list=!geo-tr 
    connection-rate=20,32

Bu kalıp Türkiye dışından gelen SYN’leri tamamen bloklamaz (yurt dışı müşteri/ortak şirket olabilir), sadece rate-limit uygular. Sahada bu ek katman 2024 toplam saldırı sayısını %43 azalttı (10 farklı müşterinin yıllık raporu derlemesi).

Yaygın Yanlış Konfigürasyon Hataları

Üç katmanlı mimariyi kuran mühendislerin sıkça düştüğü altı tuzak vardır. Sahada bunların her birini en az bir kez gördüm:

  • RAW kurallarını sıralamak yerine ezbere yazmak: Drop kuralı ne kadar önce çalışırsa CPU o kadar korunur; en sık tetiklenen kural en üstte olmalı.
  • Whitelist’te monitor sistemlerini unutmak: Zabbix saniyede 200 TCP probe atar; rate-limit’e takılır, sağlık kontrolünüz hep “down” gösterir.
  • Conntrack timeout’larını çok kısa tutmak: Yavaş mobile clients bağlantı kuramaz, “saldırı altındayız ama meşru kullanıcı da kayboldu” durumu doğar.
  • Address-list timeout’larının çakışması: 5dk suspect listesi varken 1dk watch listesi anlamsızdır; eskalasyon zinciri kırılır.
  • RAW’da log=’yes’ bırakmak: Saldırı altında saniyede 300K log üretir, disk dolar, kernel ring buffer patlar.
  • Connection-limit’i NAT arkası kullanıcılarda uygulamak: 80 conn/IP kuralı CGNAT arkasında 500 kullanıcılı bir mahalleyi keser; in-interface filtresini iyi kontrol edin.

Sonuç: Tek Katman Ölür, Üç Katman Yaşar

TCP flood saldırıları artık scenario değil, günlük gerçek. 2025’te Türkiye’de e-ticaret ve fintech sektöründe ortalama saldırı sıklığı haftada 2.3’e çıktı (ISP backbone telemetri verilerinden derleme). Tek bir add chain=input action=drop tcp-flags=syn kuralıyla bu işin altından kalkılmaz. RAW ile pre-conntrack savunma, filter ile stateful kontrol, mangle ile davranışsal öğrenme — üçü birden kuruluyken cihazınız 380K pps saldırıyı CPU %20’de absorbe eder. Bu yazıyı okuduktan sonra ilk yapacağınız şey, mevcut firewall kurallarınızı export edip yukarıdaki üç katmanı eklemek olmalı. Test ortamı yoksa CHR sanal makinede deneyin; ama mutlaka deneyin. Saldırı geldiğinde “şimdi yazayım” lüksünüz olmaz.

Aynı Konuda Diğer Yazılarımız

Konuyu daha geniş ele almak için aşağıdaki yazılarımıza da göz atabilirsiniz:


Kaynaklar ve Daha Fazla Bilgi

Bu yazıdaki konuları derinleştirmek için aşağıdaki otoriter kaynaklara başvurabilirsiniz:

Mikrotikbox

Her projede size özel çözümler

Her projede size özel çözümler

Müşterilerimizin ihtiyaçlarını en üst düzeyde karşılamak için her projeye mükemmeliyetçi bir anlayışla yaklaşıyoruz. Teknolojinin en yeni ve en güçlü araçlarını kullanarak, her adımda kaliteyi ve verimliliği ön planda tutuyoruz. Bu sayede, standart çözümler yerine her müşterimize özel, ihtiyaçlarına tam anlamıyla uygun ve uzun vadeli başarı sağlayacak projeler geliştiriyoruz. Yenilikçi düşünce yapımız ve titiz çalışma prensiplerimizle, beklentileri aşan sonuçlar sunmayı hedefliyoruz.