MikroTik Firewall Mimarisinin Detayları: Chain, Action, Connection-State ve Best Practice

MikroTik Firewall Mimarisinin Detayları: Chain, Action, Connection-State ve Best Practice

MikroTik yonlendirici cihaz ve firewall chain yapilandirma

MikroTik firewall’unu kullanmaya yıllar önce başladığımda, ilk hafta bana en zor gelen şey “chain” kavramıydı. Cisco veya Fortinet’ten gelen biri için MikroTik’in firewall mantığı, ilk bakışta karmaşık görünür: input, output, forward, srcnat, dstnat, prerouting, postrouting… Hangisi ne işe yarar, paket nereden geçer, neden bazen kuralın çalışmadığını anlamak haftalar alabilir. Bu yazıda, MikroTik firewall mimarisinin temel taşlarını mühendislik perspektifinden ele alacağım: chain mantığı nasıl çalışır, action tipleri nelerdir, connection-state’in pratikteki anlamı nedir, ve gerçek bir kurumsal ortamda nasıl best-practice firewall politikası yazılır. Yazının sonunda, bir hosting şirketinin tipik MikroTik firewall politikasını baştan sona inceleyerek teoriyi pratiğe bağlayacağız.

Chain Mantığı: Paketin MikroTik İçindeki Yolculuğu

MikroTik firewall, Linux netfilter altyapısı üzerine kurulu fakat kendi terminolojisini geliştirmiş bir sistemdir. Bir paket cihaza geldiği andan çıktığı ana kadar farklı chain’lerden geçer. Bu akışı anlamadan kural yazmak, gözleri bağlı araç kullanmaya benzer.

Üç ana firewall chain’i vardır:

  • input chain: Cihazın kendisine yönelik paketler. Örneğin Winbox bağlantısı, SSH, SNMP, HTTPS yönetim trafiği.
  • forward chain: Cihazdan geçen, başka bir cihaza yönelen paketler. LAN’dan WAN’a internet trafiği bu chain’den geçer.
  • output chain: Cihazın kendisi tarafından üretilen ve dışarı çıkan paketler. Örneğin SNMP cevabı, NTP sorgusu.

NAT için ise iki ayrı chain vardır:

  • srcnat chain: Postrouting’de çalışır, kaynak NAT (masquerade) kararları burada verilir. Tipik kullanım: LAN paketlerinin public IP ile dışarı çıkması.
  • dstnat chain: Prerouting’de çalışır, hedef NAT kararları burada verilir. Tipik kullanım: public IP’den iç sunuculara port forwarding.

Mangle chain’leri ise paketleri “etiketlemek” için kullanılır:

  • prerouting: Routing kararından önce paketleri işaretleme
  • postrouting: Routing kararından sonra paketleri işaretleme
  • input, output, forward: Aynı isimli firewall chain’lerine paralel mangle chain’leri

Ag yoneticisinin laptop uzerinde RouterOS yapilandirma calismasi

Paket Akış Diyagramı: Hangi Sırayla Ne Geçer?

Bir paketin MikroTik içindeki tipik yolculuğu:

Paket geldi
    |
    v
[Prerouting Mangle]  -- paket etiketle
    |
    v
[Dstnat]  -- hedef NAT (port forwarding)
    |
    v
[Routing Decision]  -- bu paket bana mi, baska yere mi?
    |
    +---> Bana ise: [Input Mangle] -> [Input Filter] -> Yerel surec
    |
    +---> Baska yere: [Forward Mangle] -> [Forward Filter] -> [Postrouting Mangle] -> [Srcnat] -> Cikis arayuzu
    |
[Yerel surecin urettigi paket]
    |
    v
[Output Mangle] -> [Output Filter] -> [Postrouting Mangle] -> [Srcnat] -> Cikis arayuzu

Bu akışı zihninizde tutmak, kural yazarken hangi chain’i kullanacağınızı bilmenin temelidir. Örneğin “WAN’dan içeri gelen SSH trafiğini engelle” derken kullanacağınız chain forward DEĞİLDİR; çünkü SSH bu cihazın kendisine geliyor, input chain’inde engellemek gerekir.

Action Tipleri: Kural Eşleştiğinde Ne Olur?

MikroTik firewall’unda action seçimi, kural davranışını belirler. En sık kullanılan action’lar:

accept

Paketi kabul et ve sonraki chain’e geçiş izin ver. Kural ağacında bu action ile karşılaşan paket, sonraki kurallara bakılmadan kabul edilir.

drop

Paketi sessizce düşür. Gönderene hiçbir bildirim yapılmaz. Saldırı tespit ettiğin trafikte tercih edilen action; saldırgan “port açık mı, kapalı mı?” bile diyemez.

reject

Paketi reddet ve gönderene ICMP “destination unreachable” mesajı gönder. Legitim trafiklerde (örneğin bir uygulama yanlış porta bağlanmaya çalışırken) tercih edilir; çünkü uygulama hızla cevap alır.

tarpit

TCP bağlantıyı kabul et ama sonsuza kadar açık tut; herhangi bir veri akışına izin verme. Port tarama yapan saldırganları yavaşlatmak için kullanılır.

log

Paketi logla, sonraki kurallara geçişi engelleme (passthrough). Genellikle “log + drop” iki kural birleşik yazılır: önce log, sonra drop.

add-src-to-address-list / add-dst-to-address-list

Eşleşen paketin kaynak veya hedef IP’sini dinamik bir address-list’e ekle. Brute-force koruma için temel mekanizma. Belirli bir timeout ile kayıt sona erer.

jump / return

Başka bir custom chain’e dallan veya dallanılan chain’den dön. Karmaşık politikaları modüler hale getirmek için kullanılır.

passthrough

Sadece istatistik veya log için kullanılır; paket akışını etkilemez. “Bu kuralı geçen paket sayısını sayalım” demek için.

NAT-specific action’lar

  • masquerade: srcnat’ta otomatik public IP ile değiştir (dynamic IP’li WAN için ideal).
  • src-nat: srcnat’ta belirli bir IP’ye sabit NAT.
  • dst-nat: dstnat’ta hedef adresi değiştir (port forwarding).
  • redirect: Trafiği lokal cihaza yönlendir (transparent proxy senaryoları).
  • netmap: Bire-bir IP eşleme (subnet mapping).

Connection-State: Stateful Firewall’un Yıldız Özelliği

MikroTik firewall’un en güçlü mekanizmalarından biri connection tracking üzerinden çalışan connection-state matcher’ıdır. Her paketin durumu beş kategoriden birine girer:

  • new: Yeni bir bağlantı başlatma denemesi (TCP SYN gibi).
  • established: Daha önce kurulmuş aktif bir bağlantıya ait paket.
  • related: Var olan bir bağlantı ile ilişkili yan bağlantı (FTP veri kanalı gibi).
  • invalid: Geçersiz state’e sahip paket. Çoğu zaman saldırı veya bozuk trafik göstergesi.
  • untracked: Conntrack’a girmeden raw chain’de notrack işaretlenmiş paketler.

Best practice bir MikroTik firewall politikasının ilk üç kuralı şöyle olmalıdır:

/ip firewall filter
add chain=input action=accept connection-state=established,related comment="Kabul: established/related"
add chain=input action=drop connection-state=invalid comment="Drop: invalid state"
add chain=input action=accept protocol=icmp comment="Accept: ICMP (ping)"

Bu üç kural, gelen trafiğin %95’ini hızla işler. Sadece NEW state’deki paketler için detaylı kural değerlendirmesi yapılır; bu da CPU performansını ciddi şekilde optimize eder.

Address-List: Dinamik IP Yönetimi

Address-list, MikroTik firewall’unun en güçlü kavramlarından biridir. Statik veya dinamik IP listelerini tek bir isim altında toplamak ve kurallarda kullanmak mümkündür.

Statik address-list örneği:

/ip firewall address-list
add list=admin-ips address=10.0.0.5 comment="CEO laptop"
add list=admin-ips address=10.0.0.10 comment="Network admin"
add list=admin-ips address=192.168.1.0/24 comment="Yonetim subnet"

/ip firewall filter
add chain=input action=accept src-address-list=admin-ips protocol=tcp dst-port=22,8291
add chain=input action=drop protocol=tcp dst-port=22,8291 comment="Reddet: SSH/Winbox digerleri"

Bu yapı, yönetim erişimini sadece admin-ips listesindeki cihazlara açar; geri kalan tüm SSH ve Winbox denemelerini bloklar.

Dinamik address-list örneği (brute-force koruma):

/ip firewall filter
add chain=input protocol=tcp dst-port=22 src-address-list=ssh-blacklist action=drop comment="Drop: blacklist"
add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh-stage3 
    action=add-src-to-address-list address-list=ssh-blacklist address-list-timeout=1w
add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh-stage2 
    action=add-src-to-address-list address-list=ssh-stage3 address-list-timeout=1m
add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh-stage1 
    action=add-src-to-address-list address-list=ssh-stage2 address-list-timeout=1m
add chain=input protocol=tcp dst-port=22 connection-state=new 
    action=add-src-to-address-list address-list=ssh-stage1 address-list-timeout=1m

Bu meşhur “stage” pattern’i, bir kaynaktan 4 deneme/dakika üstünde gelen SSH bağlantısı denemesini 1 hafta bloklar. Network güvenliği topluluğu içinde bu pattern, MikroTik’in marka değeri haline gelmiştir.

Custom Chain’ler: Modüler Firewall Tasarımı

MikroTik, custom chain oluşturmaya izin verir. Bu, karmaşık politikaları modüler ve okunabilir hale getirir. Örnek bir tasarım:

/ip firewall filter
# Ana input chain'i
add chain=input action=jump jump-target=icmp-rules protocol=icmp
add chain=input action=jump jump-target=mgmt-rules protocol=tcp dst-port=22,8291,443
add chain=input action=jump jump-target=service-rules
add chain=input action=drop comment="Default deny"

# ICMP rules custom chain
add chain=icmp-rules action=accept icmp-options=0:0 comment="Echo reply"
add chain=icmp-rules action=accept icmp-options=3:0-1 comment="Dest unreachable"
add chain=icmp-rules action=accept icmp-options=8:0 limit=5,5:packet comment="Echo request, rate-limited"
add chain=icmp-rules action=drop comment="Drop other ICMP"

# Management rules
add chain=mgmt-rules action=accept src-address-list=admin-ips
add chain=mgmt-rules action=drop log=yes comment="Drop unauthorized mgmt"

Bu yapıda her chain kendi sorumluluğuna odaklanır. Yeni bir admin IP eklerken sadece admin-ips listesine ekleme yapmak yeter; tüm filter kuralları olduğu gibi kalır.

Yonlendirici terminal ekraninda firewall kural tanimlamasi

NAT Stratejileri: Tipik Senaryolar

1. Klasik SOHO Masquerade

/ip firewall nat
add chain=srcnat action=masquerade out-interface=ether1-wan comment="LAN -> WAN NAT"

Bu tek satır, LAN’dan dışarıya çıkan tüm trafiğin WAN interface’inin atanmış public IP’sine NAT yapılmasını sağlar.

2. Port Forwarding (DNAT)

/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=192.168.1.100 to-ports=80 
    protocol=tcp dst-port=80 in-interface=ether1-wan comment="Web -> iç sunucu"
add chain=dstnat action=dst-nat to-addresses=192.168.1.100 to-ports=443 
    protocol=tcp dst-port=443 in-interface=ether1-wan

Dış 80/443 portlarına gelen trafik, iç ağdaki web sunucusuna yönlendirilir. Burada kritik: forward chain’inde de bu trafiğe izin vermek gerekir.

3. Hairpin NAT

İç kullanıcının kendi public IP’sine erişmesini sağlamak için gereken klasik problem:

/ip firewall nat
add chain=srcnat action=masquerade src-address=192.168.1.0/24 
    dst-address=192.168.1.100 protocol=tcp dst-port=80,443

Bu kural, iç kullanıcılar kendi public IP’siyle web sunucularına bağlandığında trafiği doğru yöne yönlendirir.

4. 1:1 NAT (netmap)

Bir public IP’yi tek bir iç IP’ye sabit eşleme:

/ip firewall nat
add chain=dstnat action=netmap dst-address=85.95.246.100 to-addresses=192.168.1.50 
    in-interface=ether1-wan
add chain=srcnat action=netmap src-address=192.168.1.50 to-addresses=85.95.246.100

Gerçek Bir Kurumsal Firewall Politikası

Bir hosting şirketinde tasarladığım tipik bir MikroTik perimeter firewall politikasını adım adım inceleyelim. Bu politika, 100+ sunucuyu barındıran bir DMZ’in önündedir.

# 1. Conntrack optimizasyonu
/ip settings set tcp-syncookies=yes
/ip firewall connection tracking set tcp-established-timeout=1d

# 2. Address listeleri
/ip firewall address-list
add list=admin-ips address=185.x.x.0/29 comment="Ofis VPN cikis IP'si"
add list=admin-ips address=78.x.x.x comment="On-call mobil IP"
add list=bogon-nets address=10.0.0.0/8 comment="RFC1918"
add list=bogon-nets address=172.16.0.0/12 comment="RFC1918"
add list=bogon-nets address=192.168.0.0/16 comment="RFC1918"
add list=bogon-nets address=169.254.0.0/16 comment="Link-local"

# 3. Raw chain - erken drop
/ip firewall raw
add chain=prerouting action=drop src-address-list=bogon-nets in-interface=ether1-wan
add chain=prerouting action=drop dst-address-list=bogon-nets out-interface=ether1-wan

# 4. Input chain - cihazi koru
/ip firewall filter
add chain=input action=accept connection-state=established,related
add chain=input action=drop connection-state=invalid
add chain=input action=accept protocol=icmp limit=10,20:packet
add chain=input action=accept src-address-list=admin-ips protocol=tcp dst-port=22,8291,443
add chain=input action=drop in-interface=ether1-wan log=yes log-prefix="INPUT-DROP"

# 5. Forward chain - DMZ trafigi
add chain=forward action=accept connection-state=established,related
add chain=forward action=drop connection-state=invalid
add chain=forward action=accept dst-address-list=dmz-servers protocol=tcp dst-port=80,443
add chain=forward action=accept dst-address-list=dmz-servers protocol=tcp dst-port=25 src-address-list=mail-relays
add chain=forward action=drop log=yes log-prefix="FORWARD-DROP"

# 6. DDoS koruma - dynamic blacklist
add chain=input protocol=tcp dst-port=80,443 connection-limit=100,32 
    action=add-src-to-address-list address-list=connflood address-list-timeout=1h
add chain=input src-address-list=connflood action=drop

Bu politika, üç temel disiplin uygular: erken drop (raw chain ile gereksiz trafiği conntrack’a sokmama), explicit allow (sadece tanımlı kurallar geçer), comprehensive logging (drop edilen her şey loglanır).

Performans Optimizasyonu

MikroTik firewall’un performansı, kural sayısı ve sırasından doğrudan etkilenir. Birkaç best practice:

  1. connection-state kontrolünü ilk kurala koy: ESTABLISHED paketler kuralların gerisine düşmeden hızla geçer.
  2. Raw chain kullan: Bilinen kötü IP’leri conntrack’a hiç girmeden raw chain’de drop et.
  3. Custom chain’lerle dallandır: 200+ kuralı düz bir chain’de tutmak yerine, protokol ve hedef bazında custom chain’lere ayır.
  4. address-list kullan: 50 ayrı IP için 50 kural yazmak yerine, address-list ile tek kural yaz.
  5. Fast-track kullan: connection-state=established trafiği fast-track action ile işle; CPU kullanımı düşer.
  6. Layer7-protocol kullanımını azalt: Her paket için regex çalıştırması maliyetlidir; gerçekten gerekli yerlerde ve sadece NEW state’de uygula.

Fast-Track: Performans Booster

Fast-track, MikroTik’in özel bir feature’ıdır. Bir bağlantı ESTABLISHED state’ine geldikten sonra, fast-track ile işaretlendiğinde sonraki paketler firewall’un büyük kısmını bypass eder ve kernel level’da hızla işlenir. Tipik kullanım:

/ip firewall filter
add chain=forward action=fasttrack-connection connection-state=established,related
add chain=forward action=accept connection-state=established,related

Fast-track ile aynı cihaz üzerinde throughput %200-300 artabilir. Ancak fast-track’in dezavantajları da vardır: trafik üzerinde mangle, queue, IPsec policy gibi işlemler uygulanamaz. Eğer bu özellikler kullanılıyorsa fast-track kapatılmalıdır.

Logging Stratejisi

Log’lamak güzel, ama her şeyi loglamak kötüdür. MikroTik’in logging sisteminin sınırları vardır; aşırı log üretimi cihazı yavaşlatır ve önemli log’ları boğar. Best practice:

  • Drop kurallarını logla, accept kurallarını loglama (zaten geçen trafiği takip etmek için).
  • Log prefix kullan: “INPUT-DROP”, “FORWARD-DROP” gibi kategorilere ayır.
  • Remote syslog kullan: cihaz üzerindeki memory dolarsa eski loglar kaybolur; harici bir syslog server kritiktir.
  • SIEM entegrasyonu: log’ları Splunk, Elastic, Graylog gibi SIEM’lere göndererek korelasyon yap.
/system logging action
add name=remote-syslog target=remote remote=10.0.0.50 remote-port=514 src-address=10.0.0.1

/system logging
add topics=firewall action=remote-syslog

Ethernet patch panel ve ag baglantisi altyapisi gorseli

VLAN ve İç Segmentasyon

Modern bir MikroTik firewall mimarisinde tek bir LAN segmenti olmaz. En azından şu segmentler ayrılır:

  • Management VLAN (sadece admin erişimi)
  • User VLAN (çalışanların kullandığı)
  • Guest VLAN (misafir Wi-Fi)
  • IoT VLAN (akıllı cihazlar, kamera, vb.)
  • Server VLAN (iç sunucular)
  • DMZ VLAN (public-facing sunucular)

VLAN’lar arası trafik, forward chain’de explicit kurallarla kontrol edilir. Örneğin IoT segmenti internete çıkabilsin ama iç ağa bağlanamasın:

/ip firewall filter
add chain=forward action=drop in-interface=vlan-iot dst-address=192.168.0.0/16
add chain=forward action=accept in-interface=vlan-iot out-interface=ether1-wan
add chain=forward action=drop in-interface=vlan-iot log=yes

Best Practice Özeti: 10 Altın Kural

  1. Default deny ile başla, sonra explicit allow ekle.
  2. İlk kural her zaman connection-state=established,related accept olmalı.
  3. connection-state=invalid’ı her zaman drop et.
  4. Address-list kullan, statik IP listeleri kurallarda yazma.
  5. Dinamik blacklist için stage pattern uygula.
  6. Yönetim portlarını (22, 8291, 443) sadece admin-ips’e aç.
  7. Drop kurallarını logla, accept’leri loglama.
  8. Raw chain’de erken filtreleme yap.
  9. Fast-track ile ESTABLISHED trafiği optimize et.
  10. Periodik olarak /ip firewall connection print count-only ile sağlığı kontrol et.

Sıkça Sorulan Sorular

input ve forward chain arasındaki temel fark nedir?

input chain cihaza yönelik paketler için, forward chain cihazdan geçen paketler için kullanılır. Bir Winbox bağlantısı input’tan, LAN’dan WAN’a giden bir web trafiği ise forward’dan geçer.

Mangle chain’i ne zaman gerekir?

Paketleri sadece firewall filtreleme amacıyla değil, routing, queueing veya VPN routing kararlarında kullanmak için işaretlemek gerektiğinde. Örneğin belirli bir kullanıcının trafiğini farklı bir gateway’den geçirmek için.

Fast-track açmalı mıyım?

Eğer mangle, queue tree, IPsec policy gibi özellikler kullanmıyorsanız evet. Yüksek throughput senaryolarında kritik performans artışı sağlar.

RouterOS 6 ve 7 firewall arasında fark var mı?

Evet. RouterOS 7’de fast-path yeniden tasarlandı, container desteği eklendi, IPv6 firewall iyileştirildi. Ancak temel chain mantığı aynı kaldı; v6’da yazılan kural setleri büyük oranda v7’de de çalışır.

address-list’i kalıcı yapmak için ne gerekir?

address-list’e timeout vermezseniz statik (kalıcı) kayıt olur. Timeout verdiğinizde kayıt dinamik olur ve süre sonunda silinir. /file ve script ile periyodik backup almak da önemlidir.

Sonuç

MikroTik firewall mimarisi, ilk bakışta karmaşık görünse de altında yatan mantık tutarlı ve güçlüdür. Chain’lerin paket akışı içindeki sırası, action tiplerinin doğru kullanımı, connection-state’in stratejik konumlandırılması ve address-list’lerin akıllı kullanımı; tüm bunlar bir araya geldiğinde MikroTik, kurumsal düzeyde güvenilir bir L3/L4 firewall haline gelir. Bu yazıdaki best-practice’leri kendi politikalarınıza uyguladığınızda hem güvenlik hem performans açısından ciddi iyileşmeler göreceksiniz. Bir sonraki adım, bu temellerin üzerine hardening, monitoring ve incident response süreçlerini eklemek olacak; ancak temel doğru kurulduğunda diğer her şey daha kolay yapı taşı haline gelir.

Sahaya Yansıyan İlgili İçerikler

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 Nedir? Tarihçesinden Modern Uygulamalarına Kavramsal Rehber; TCP Flood Saldırıları: MikroTik 3 Katmanlı Savunma; MikroTik Layer 7 Protocol Filtering: Uygulama Katmanı Trafik Tanıma ve Engelleme.


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.