Πίσω στο blog

English  ·  Ελληνικά

MikroTik / RouterOS  ·  Οδηγος  ·  Αυγουστος 2026

Το Firewall του RouterOS
Σωστα

Κάθε MikroTik έρχεται με ένα default firewall που είναι στην πραγματικότητα αξιοπρεπές — και σχεδόν κάθε χαλασμένο MikroTik που κάνουμε audit το είχε κάποιος «βελτιώσει» αντιγράφοντας κανόνες που δεν καταλάβαινε. Αυτό το post χτίζει το firewall από πρώτες αρχές: connection tracking, μια default-deny input chain που δεν μπορεί να σε κλειδώσει έξω, μια forward chain με FastTrack που δεν σαμποτάρει το QoS σου, και address lists που κάνουν τις brute-force επιθέσεις βαρετές.

RouterOS Firewall Connection Tracking FastTrack Address Lists Θωρακιση MTCNA+

RouterOS chain=input → ο ίδιος ο router chain=forward → κίνηση που περνά μέσα του SSH/WinBox προς τον router client LAN → internet έξοδος από το WAN Δύο διαφορετικές ερωτήσεις: «μπορείς να μου μιλήσεις ΕΜΕΝΑ;» (input) vs «μπορείς να μιλήσεις ΜΕΣΩ εμού;» (forward). Το να τις μπερδεύεις είναι το bug #1 στα firewalls.

Το firewall του RouterOS είναι netfilter από κάτω — η ίδια μηχανή με το iptables του Linux — και ανταμείβει το ίδιο mental model: τα πακέτα διασχίζουν chains κανόνων από πάνω προς τα κάτω, κερδίζει ο πρώτος κανόνας που ταιριάζει, και ένας πίνακας connection-tracking αφήνει έναν φθηνό κανόνα («ήδη established; accept») να χειρίζεται το 99% των πακέτων ώστε οι ακριβές αποφάσεις να τρέχουν μόνο στο πρώτο πακέτο κάθε σύνδεσης.

Όλα σε αυτό το post κρέμονται από τρεις βασικούς κανόνες: το input προστατεύει τον router, το forward προστατεύει το δίκτυο, και ό,τι δεν γίνεται ρητά accept ρίχνεται. Θα χτίσουμε και τις δύο chains με τη σειρά που δεν μπορεί να σε κλειδώσει έξω, θα συνδέσουμε την απομόνωση inter-VLAN που υποσχέθηκε το post του VLAN, θα ανάψουμε το FastTrack χωρίς να σπάσουμε τις ουρές του post του QoS, και θα κλείσουμε με το pattern address-list που μετατρέπει το SSH brute-force από απειλή σε γραμμή log.

Προαπαιτουμενα

01

Connection Tracking — η Μηχανη Κατω απο τα Παντα

Το firewall δεν κρίνει πακέτα· κρίνει συνδέσεις. Κατάλαβε τις τέσσερις καταστάσεις και κάθε κανόνας σε αυτό το post γίνεται προφανής.

StateΣημασια — και τι να κανεις με αυτο
newΠρώτο πακέτο μιας σύνδεσης. Η μόνη κατάσταση που χρειάζεται πραγματική απόφαση.
establishedΑνήκει σε σύνδεση που έχουμε ήδη επιτρέψει. Accept, φθηνά, πρώτα.
relatedΝέα σύνδεση που γεννήθηκε από μια επιτρεπόμενη (FTP data, σφάλματα ICMP). Accept μαζί με established.
invalidΟ tracker δεν μπορεί να το τοποθετήσει — αδέσποτα RST, spoofed σκουπίδια, ασύμμετρα κατάλοιπα. Drop, πάντα.
RouterOS — δες τον tracker να κανει τη δουλεια του (ασφαλες)
[admin@MikroTik] > /ip/firewall/connection print where dst-address~":443"
 #  PROTO  SRC-ADDRESS           DST-ADDRESS          TCP-STATE   TIMEOUT
 0  tcp    192.168.88.34:52114   142.250.184.4:443    established 23h59m
 1  tcp    192.168.88.51:49220   104.18.32.7:443      established 23h58m

# Κάθε κανόνας παρακάτω που λέει connection-state= συμβουλεύεται αυτόν τον πίνακα.
💡 Γιατι το State-First Ειναι Επισης Κανονας Επιδοσης

Ένα φορτωμένο edge ξενοδοχείου σπρώχνει εκατομμύρια πακέτα το λεπτό μέσα από το firewall, αλλά μόνο μερικές εκατοντάδες νέες συνδέσεις. Με το accept established/related στην κορυφή της chain, οι ακριβοί κανόνες από κάτω — address lists, ταίριασμα interface, έλεγχοι port — τρέχουν μόνο σε εκείνες τις μερικές εκατοντάδες. Ταξινόμησε τις chains σου κατά συχνότητα ταιριάσματος και το CPU μόλις που καταλαβαίνει ότι υπάρχει firewall· ταξινόμησέ τες απρόσεκτα και ένα hEX αρχίζει να ρίχνει πακέτα στα 300 Mb/s.

02

Η Input Chain — Προστατεψε τον Router

Το input είναι κίνηση απευθυνόμενη στον ίδιο τον router: WinBox, SSH, ερωτήματα DNS, pings. Ο στόχος είναι μια chain που καταλήγει σε drop — χτισμένη με σειρά που δεν μπορεί να σε αφήσει απ' έξω.

RouterOS — default-deny input, σειρα χωρις κινδυνο lockout
# SAFE MODE ΠΡΩΤΑ. Ctrl+X στο terminal — αν κοπείς μόνος σου,
# η πτώση του session επαναφέρει τα πάντα. Μη διαπραγματεύσιμο για δουλειά firewall.
[admin@MikroTik] > [Safe Mode taken]

[admin@MikroTik] > /ip/firewall/address-list
[admin@MikroTik] /ip/firewall/address-list> add list=MGMT address=192.168.88.0/24 comment="management subnet"

[admin@MikroTik] > /ip/firewall/filter
# 1. Το φθηνό accept που χειρίζεται σχεδόν τα πάντα
[admin@MikroTik] /ip/firewall/filter> add chain=input action=accept connection-state=established,related comment="accept est/rel"
# 2. Σκότωσε τα σκουπίδια νωρίς
[admin@MikroTik] /ip/firewall/filter> add chain=input action=drop connection-state=invalid comment="drop invalid"
# 3. ICMP — κράτα το ping και το path-MTU να δουλεύουν
[admin@MikroTik] /ip/firewall/filter> add chain=input action=accept protocol=icmp comment="accept icmp"
# 4. Management, μόνο από τη λίστα management
[admin@MikroTik] /ip/firewall/filter> add chain=input action=accept src-address-list=MGMT comment="mgmt access"
# 5. Το LAN χρειάζεται το DNS του router (αφαίρεσέ το αν οι clients χρησιμοποιούν εξωτερικό DNS)
[admin@MikroTik] /ip/firewall/filter> add chain=input action=accept protocol=udp dst-port=53 in-interface-list=LAN comment="LAN dns"
# 6. Ο ΤΟΙΧΟΣ — ό,τι άλλο, φεύγει
[admin@MikroTik] /ip/firewall/filter> add chain=input action=drop comment="drop all else"

# Ακόμα συνδεδεμένος; Ωραία. Άφησε το Safe Mode (Ctrl+X ξανά) για να γίνει commit.
⚠ Παγιδα — Ο Κανονας Drop Ειναι Μονοδρομη Πορτα

Οι κανόνες 1–5 πριν τον κανόνα 6 δεν είναι προτίμηση στιλ. Πρόσθεσε το τελικό drop πρώτα (ή μετακίνησέ το πάνω ενώ «αναδιοργανώνεις») και τη στιγμή που γίνεται commit, τα πακέτα του δικού σου session σταματούν να ταιριάζουν με τίποτα από πάνω του — το established σώζει ένα υπάρχον session SSH, αλλά το WinBox reconnect, το DNS, και κάθε μελλοντικό login πεθαίνουν. Αυτός είναι ο πιο συχνός τρόπος που ο κόσμος «τούβλωνει» απομακρυσμένα MikroTik. Το Safe Mode υπάρχει ακριβώς γι' αυτό· το δεύτερο επίπεδο προστασίας είναι το να τεσταρίζεις από ξεχωριστό session πριν κλείσεις αυτό που έκανε την αλλαγή.

03

Η Forward Chain — Προστατεψε το Δικτυο

Το forward είναι ό,τι διασχίζει τον router: LAN προς internet, VLAN προς VLAN, internet προς τα port-forwards σου. Ίδια λογική default-deny, δύο νέες ιδέες — FastTrack και η εξαίρεση DSTNAT.

RouterOS — default-deny forward
# 1. Κάνε FastTrack τον όγκο established (δες το section 04 πριν το ενεργοποιήσεις!)
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=fasttrack-connection hw-offload=yes connection-state=established,related comment="fasttrack"
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=accept connection-state=established,related comment="accept est/rel"
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=drop connection-state=invalid comment="drop invalid"

# 2. Απομόνωση inter-VLAN — οι επισκέπτες και το IoT βλέπουν μόνο internet, τίποτα άλλο
#    (interface lists από το post VLAN: LAN = όλα τα SVI, WAN = uplinks)
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=drop in-interface=vlan20-guest out-interface-list=LAN comment="guest isolation"
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=drop in-interface=vlan30-iot out-interface-list=LAN comment="iot isolation"

# 3. Από το internet, μπαίνει μόνο κίνηση port-forwarded
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=accept connection-state=new connection-nat-state=dstnat in-interface-list=WAN comment="allow port-forwards"
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=drop connection-state=new in-interface-list=WAN comment="drop unsolicited WAN"

# 4. LAN προς τον κόσμο
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=accept in-interface-list=LAN out-interface-list=WAN comment="LAN to internet"
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=drop comment="drop all else"
💡 Το connection-nat-state=dstnat Ειναι το Post Port-Forward, Ολοκληρωμενο

Το post port-forwarding δημιούργησε κανόνες dst-nat· αυτή η chain αποφασίζει αν εκείνη η κίνηση μπορεί πραγματικά να περάσει. Το ταίριασμα connection-nat-state=dstnat αντί για απαρίθμηση ports σημαίνει ότι κάθε τρέχον και μελλοντικό port-forward επιτρέπεται αυτόματα — και μόνο τα port-forwards, γιατί αυθόρμητη κίνηση WAN που δεν χτύπησε κανόνα dst-nat αποτυγχάνει στο ταίριασμα και πεθαίνει στον επόμενο κανόνα. Πρόσθεσε ένα forward, μην ξαναγγίξεις το filter.

04

FastTrack — Δωρεαν Ταχυτητα, με μια Κοφτερη Ακμη

Το FastTrack αφήνει τις established συνδέσεις να παρακάμπτουν το μεγαλύτερο μέρος του firewall, του NAT, και — αυτή είναι η κοφτερή ακμή — τη μηχανή ουρών. Μπορεί να διπλασιάσει το throughput σε μικρά CPU, και απενεργοποιεί σιωπηλά το QoS.

Όταν μια σύνδεση γίνεται fasttracked, τα πακέτα της παρακάμπτουν τους υπόλοιπους κανόνες filter, το μεγαλύτερο μέρος του mangle, και τα simple queues και τα queue trees δεν τα βλέπουν ποτέ. Σε ένα hEX που σπρώχνει ένα gigabit, αυτή είναι η διαφορά ανάμεσα σε 60% CPU και 15%. Στο δίκτυο ξενοδοχείου από το post του QoS, είναι επίσης ο λόγος που τα όρια bandwidth επισκεπτών σταμάτησαν να δουλεύουν τη μέρα που κάποιος ενεργοποίησε το FastTrack «για επίδοση».

RouterOS — καν' το fasttrack επιλεκτικα οταν μετραει το QoS
# Option A — κανένα QoS σε αυτό το box: κάνε fasttrack τα πάντα (κανόνας section 03)

# Option B — QoS μόνο στην κίνηση επισκεπτών: εξαίρεσε τους επισκέπτες από το fasttrack
# ώστε οι ουρές να τους διαμορφώνουν ακόμα, κάνε fasttrack τα υπόλοιπα
[admin@MikroTik] /ip/firewall/filter> add chain=forward action=fasttrack-connection connection-state=established,related src-address=!10.20.0.0/24 dst-address=!10.20.0.0/24 comment="fasttrack non-guest"

# Έλεγξε τι πραγματικά γίνεται fasttracked:
[admin@MikroTik] > /ip/firewall/filter print stats where action=fasttrack-connection
 #  CHAIN    ACTION                 BYTES         PACKETS
 0  forward  fasttrack-connection   84 812 331 90    71 224 118
⚠ Παγιδα — «Οι Ουρες μου Δειχνουν Μηδεν Κινηση»

Αν οι ουρές αναφέρουν σχεδόν καμία κίνηση ενώ οι χρήστες ξεκάθαρα κορένουν τη γραμμή, το FastTrack τρώει τα πακέτα πριν τρέξει η μηχανή ουρών. Οι μετρητές δεν λένε ψέματα — απλώς μετράνε ό,τι τους επιτρέπεται να δουν. Είτε περιόρισε τον κανόνα fasttrack γύρω από την κίνηση που διαμορφώνεις (Option B), είτε δέξου ότι σε εκείνο το box παίρνεις FastTrack ή QoS ανά flow, όχι και τα δύο. Το ίδιο ισχύει για routing βασισμένο σε mangle: τα fasttracked flows αγνοούν routing marks που μπήκαν μετά το πρώτο πακέτο.

05

Address Lists — το Firewall Που Ανανεωνεται Μονο του

Ένα address list είναι ένα ονομασμένο σύνολο IP που οι κανόνες μπορούν να ταιριάξουν — και στο οποίο οι κανόνες μπορούν να ΓΡΑΨΟΥΝ, με timeouts. Αυτό κλείνει τον κύκλο: το firewall παρατηρεί, καταγράφει, και αντιδρά.

RouterOS — κλασικη σταδιακη παγιδα SSH brute-force
# Όποιος ανοίγει μια ΝΕΑ σύνδεση προς :22 καταγράφεται στο stage1.
# Το να το ξανακάνει μέσα σε ένα λεπτό τον προάγει στάδιο προς στάδιο σε ban 10 ημερών.
# Οι κανόνες πρέπει να κάθονται ΠΑΝΩ από το accept mgmt στην input chain.
[admin@MikroTik] /ip/firewall/filter> add chain=input action=drop protocol=tcp dst-port=22 src-address-list=ssh-blacklist comment="drop banned"
[admin@MikroTik] /ip/firewall/filter> add chain=input action=add-src-to-address-list protocol=tcp dst-port=22 connection-state=new src-address-list=ssh-stage2 address-list=ssh-blacklist address-list-timeout=10d comment="stage3: ban"
[admin@MikroTik] /ip/firewall/filter> add chain=input action=add-src-to-address-list protocol=tcp dst-port=22 connection-state=new src-address-list=ssh-stage1 address-list=ssh-stage2 address-list-timeout=1m comment="stage2"
[admin@MikroTik] /ip/firewall/filter> add chain=input action=add-src-to-address-list protocol=tcp dst-port=22 connection-state=new address-list=ssh-stage1 address-list-timeout=1m comment="stage1"

# Μια εβδομάδα μετά, σε οποιοδήποτε box εκτεθειμένο στο internet:
[admin@MikroTik] > /ip/firewall/address-list print count-only where list=ssh-blacklist
347   ← 347 bots που κάνουν ban τον εαυτό τους, μηδέν προσπάθεια admin

Η ίδια primitive λύνει τη μισή πρακτική δουλειά firewall: μια λίστα MGMT που επεξεργάζεσαι σε ένα μέρος αντί για πέντε κανόνες· μια allow-list χωρών που τροφοδοτείται από ένα script· μια λίστα wireguard-peers που θα χρησιμοποιήσει το post του VPN. Όταν ένα κριτήριο ταιριάσματος εμφανίζεται σε παραπάνω από έναν κανόνα, πιθανότατα πρέπει να γίνει address list.

06

Επαληθευσε οτι Οντως Πυροδοτειται Ασφαλες να το Τρεξεις

Ένα firewall που δεν έχεις τεσταρίσει είναι υπόθεση εργασίας. Μετρητές, logging, και μια σκόπιμη επίθεση από το VLAN επισκεπτών το μετατρέπουν σε γεγονός.

ΕντοληΤι αποδεικνυει
/ip/firewall/filter print statsΜετρητές πακέτων ανά κανόνα — ένας κανόνας με 0 πακέτα για πάντα είναι νεκρό βάρος ή λάθος σειρά.
/ip/firewall/connection printΖωντανός πίνακας συνδέσεων — states, timeouts, ποιος μιλά με ποιον.
/ip/firewall/address-list printΤρέχουσα συμμετοχή λίστας, μαζί με dynamic εγγραφές με χρονόμετρα αντίστροφης μέτρησης.
/log print where topics~"firewall"Hits σε κανόνες με log=yes — άναψέ το ανά κανόνα ενώ τεσταρίζεις, σβήσ' το μετά.
/tool/torchΖωντανή προβολή ανά flow ενός interface ενώ παράγεις δοκιμαστική κίνηση.

Μετά το τίμιο τεστ, ίδια πειθαρχία με το post του VLAN: σύνδεσε ένα laptop στο VLAN επισκεπτών και προσπάθησε να μπεις. Κάνε ping στο subnet του CCTV (πρέπει να αποτύχει), WinBox στον router (πρέπει να αποτύχει), κάνε browse το internet (πρέπει να δουλέψει), μετά δες τις προσπάθειές σου να προσγειώνονται στο filter print stats πάνω στους κανόνες απομόνωσης. Ένας μετρητής που ανέβηκε ενώ επιτιθόσουν είναι η μόνη απόδειξη που σου δίνει ποτέ ένας κανόνας drop.

Βασικα Συμπερασματα

  1. Το input προστατεύει τον router, το forward προστατεύει το δίκτυο — δύο chains, δύο ερωτήσεις, και το να τις μπερδεύεις είναι το πώς «το firewall» αποτυγχάνει να σταματήσει ό,τι όλοι υπέθεταν ότι σταματούσε.
  2. State πρωτα: accept established/related στην κορυφή, drop invalid αμέσως μετά. Όλα από κάτω τότε τρέχουν μόνο σε νέες συνδέσεις — σωστό και γρήγορο.
  3. Χτίζε προς το τελικό drop, σε Safe Mode, και τεσταρίζε από δεύτερο session πριν κάνεις commit. Ο κανόνας drop-all είναι μονόδρομη πόρτα αν λείπει κάτι από πάνω του.
  4. Το connection-nat-state=dstnat δέχεται ακριβώς τα port-forwards σου, παρόντα και μελλοντικά, χωρίς να απαριθμήσεις ούτε ένα port στο filter.
  5. Το FastTrack παρακαμπτει ουρές και το μεγαλύτερο μέρος του mangle. Είναι δωρεάν throughput σε boxes χωρίς QoS και σιωπηλός δολοφόνος QoS σε boxes με αυτό — περιόρισέ το ή παράλειψέ το.
  6. Τα address lists με timeouts κάνουν το firewall αυτο-ανανεωμένο — η σταδιακή παγίδα brute-force κάνει ban εκατοντάδες bots με τέσσερις κανόνες και καμία συντήρηση.
  7. Οι μετρητές είναι η μόνη αλήθεια. Επιτέθεσε στο δικό σου δίκτυο από το VLAN επισκεπτών και δες τους κανόνες drop να μετράνε — αυτό είναι ένα τεσταρισμένο firewall.

Το firewall του MikroTik σου προστατευει η προσποιειται;

Κάνω audit και ξαναχτίζω firewalls RouterOS σε default-deny και στις δύο chains, με απομόνωση που έχω πραγματικά τεσταρίσει αντί να την έχω υποθέσει, και παγίδες brute-force στα management ports όπου έχουν τη μεγαλύτερη σημασία.

Κλεισε μια Discovery Call →