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

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.
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:
- 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.
- 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.
- 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=15sVarsayı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.
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-blacklistBu üç 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-wanPek ç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)
- Origin IP yeni bir /32 ile değiştirildi, DNS A record Cloudflare’in tüm proxy IP’lerine geçti.
- Eski origin IP’ye gelen tüm trafik RAW’da
dropedildi. - 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ü.
İ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-receivedBu 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=dropSaniyede 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çinBu 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 statsBu 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 scanHer üçü 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 8Meş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:
- Firewall'lar Paketleri Nasıl İnceler? Connection Tracking, Stateful Inspection ve DPI — Firewall’larin paketleri nasil inceledigini dusuk seviyeden anlatan rehber: connection tra
- UDP Flood Saldırılarının Anatomisi ve MikroTik ile Aşırı Düşük Latency Koruma — UDP flood saldirilarinin paket anatomisi, DNS/NTP/Memcached amplification vektorleri ve Mi
- MikroTik ile DDoS Koruması: Volumetric, Protocol ve Layer-7 Saldırıları için Katmanlı Savunma — MikroTik uzerinde volumetric, protocol ve Layer-7 DDoS saldirilari icin gercek PCAP ornekl
- Metin2 Sunucu Operatörü için DDoS Koruma: 9 Yıllık Deneyimden Pratik Mitigation Reçetesi — 9 yillik Metin2 sunucu operatorlugu deneyiminden DDoS mitigation recetesi: login flood, pa
Kaynaklar ve Daha Fazla Bilgi
Bu yazıdaki konuları derinleştirmek için aşağıdaki otoriter kaynaklara başvurabilirsiniz:
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.








