English · Ελληνικά
Τα ACL κρίνουν κάθε πακέτο μόνο του. Ένα πραγματικό firewall θυμάται συνομιλίες — αφήνει μια απάντηση να μπει πίσω επειδή επέτρεψες το αίτημα να βγει. Το Zone-Based Firewall μετατρέπει έναν router IOS ακριβώς σε αυτό: ομαδοποίησε interfaces σε zones, και γράψε stateful πολιτική για την κίνηση ανάμεσά τους.
Το post των ACL τελείωσε ειλικρινά: τα κλασικά ACL είναι stateless. Κάθε πακέτο κρίνεται μεμονωμένα, οπότε για να αφήσεις τις απαντήσεις web να μπουν πίσω είτε ανοίγεις μια φαρδιά τρύπα inbound είτε στηρίζεσαι στην ακατέργαστη λέξη-κλειδί established — μόνο TCP, και τυφλή στην πραγματική συνομιλία. Ένα πραγματικό firewall είναι stateful: θυμάται ότι ένας inside host άνοιξε μια σύνδεση προς τα έξω, και επιτρέπει αυτόματα την επιστρεφόμενη κίνηση αυτής της σύνδεσης ενώ κλείνει ό,τι είναι αυθόρμητο. Κανένας κανόνας-καθρέφτης, κάθε πρωτόκολλο.
Το Zone-Based Firewall (ZBF) της Cisco φέρνει stateful inspection σε κάθε router IOS/IOS-XE — χωρίς ξεχωριστή συσκευή. Το μοντέλο είναι καθαρό μόλις κλειδώσει: βάλε τα interfaces σε security zones (LAN, WAN, DMZ), και η κίνηση ανάμεσα σε οποιεσδήποτε δύο zones απορρίπτεται by default μέχρι να προσαρτήσεις μια πολιτική zone-pair που λέει αλλιώς. Η πολιτική χτίζεται από το ίδιο modular CLI (class-maps και policy-maps) που χρησιμοποιεί το QoS. Αυτό το post χτίζει ένα λειτουργικό edge τριών zones — πρόσβαση internet προς τα έξω, τίποτα αυθόρμητο προς τα μέσα, έναν δημοσιευμένο server DMZ — και το μοντέλο κλιμακώνεται κατευθείαν σε απομόνωση guest.
show version / άδεια)01
Τέσσερα κινούμενα μέρη, πάντα με την ίδια σειρά: όρισε zones, ταίριασε κίνηση (class-map), αποφάσισε τι να κάνεις μαζί της (policy-map), και δέσε την πολιτική σε μια κατεύθυνση ανάμεσα σε δύο zones (zone-pair).
| Κομματι | Ρολος |
|---|---|
| zone security | Μια ονομασμένη ομάδα interfaces (LAN, WAN, DMZ). |
| class-map type inspect | Ταιριάζει ποια κίνηση — συνήθως μέσω ενός ACL. «Για ποια κίνηση μιλάμε;» |
| policy-map type inspect | Λέει τι να κάνεις με κάθε class: inspect / pass / drop. «Τι κάνουμε μαζί της;» |
| zone-pair security | Δένει μια πολιτική σε κίνηση ΑΠΟ μια zone ΠΡΟΣ μια άλλη. Η κατεύθυνση έχει σημασία. |
Δύο κανόνες κάνουν όλο το σύστημα προβλέψιμο. Η κίνηση μέσα στην ίδια zone ρέει ελεύθερα (δύο interfaces LAN μιλάνε χωρίς καμία πολιτική). Η κίνηση ανάμεσα σε διαφορετικές zones πέφτει εκτός αν ένα zone-pair την επιτρέψει ρητά — και ένα zone-pair είναι μονής κατεύθυνσης, οπότε το LAN→WAN και το WAN→LAN είναι ξεχωριστές πολιτικές. Ένα interface χωρίς zone δεν μπορεί να μιλήσει με κανένα interface που έχει, που είναι μια κλασική έκπληξη «γιατί σταμάτησαν όλα».
02
Ονόμασε τα domains εμπιστοσύνης, μετά ανάθεσε κάθε interface σε ακριβώς ένα. Αυτή είναι η στιγμή που το firewall αρχίζει να ρίχνει κίνηση inter-zone, οπότε σχεδίασε πριν αναθέσεις.
R1(config)# zone security LAN R1(config)# zone security WAN R1(config)# zone security DMZ R1(config)# interface GigabitEthernet0/1 R1(config-if)# zone-member security LAN R1(config-if)# exit R1(config)# interface GigabitEthernet0/0 R1(config-if)# zone-member security WAN R1(config-if)# exit R1(config)# interface GigabitEthernet0/2 R1(config-if)# zone-member security DMZ R1(config-if)# end
Τη στιγμή που ένα interface μπαίνει σε μια zone, όλη η κίνηση προς/από άλλες zones — μαζί με το δικό σου session SSH αν διασχίζει ένα σύνορο zone — πέφτει μέχρι ένα zone-pair να την επιτρέψει. Ανάθεσε το WAN ή το interface διαχείρισης σε μια zone χωρίς αντίστοιχη πολιτική self-zone και θα χάσεις τη συσκευή. Δύο άμυνες: ρύθμισε μέσω console για την αρχική μετάβαση, και θυμήσου ότι η ειδική self zone (επόμενη παγίδα) διέπει την κίνηση προς τον ίδιο τον router. Χτίσε τα zone-pairs πρώτα, ανάθεσε interfaces τελευταία, ή κάν' το από το console.
03
Όρισε ποια κίνηση σε νοιάζει (ένα ACL τυλιγμένο σε ένα class-map), μετά μια πολιτική που την κάνει inspect. Το «Inspect» είναι η μαγική λέξη — σημαίνει stateful.
# Ποια κίνηση; Ένα ACL, δεμένο σε ένα class-map (η συνήθεια από τα ACL πληρώνει) R1(config)# ip access-list extended LAN-OUT R1(config-ext-nacl)# permit ip 192.168.1.0 0.0.0.255 any R1(config-ext-nacl)# exit R1(config)# class-map type inspect match-any LAN-TRAFFIC R1(config-cmap)# match access-group name LAN-OUT R1(config-cmap)# exit # Τι κάνουμε; Κάνουμε inspect — αυτή είναι η STATEFUL ενέργεια R1(config)# policy-map type inspect LAN-TO-WAN-POLICY R1(config-pmap)# class type inspect LAN-TRAFFIC R1(config-pmap-c)# inspect R1(config-pmap-c)# exit R1(config-pmap)# class class-default R1(config-pmap-c)# drop log # ό,τι άλλο σε αυτό το pair: drop + log R1(config-pmap-c)# end
Ένα class πολιτικής έχει τρεις πιθανές ενέργειες. Το inspect είναι stateful: επιτρέπει την κίνηση και χτίζει ένα session ώστε η επιστρεφόμενη κίνηση να επιτρέπεται αυτόματα — αυτό θέλεις για ροές TCP/UDP/ICMP που ξεκινούν από μια έμπιστη zone. Το pass επιτρέπει stateless μόνο προς μία κατεύθυνση (χωρίς session επιστροφής) — χρησιμοποιείται για stateless πρωτόκολλα όπως κάποια IPsec/ESP όπου ο router δεν πρέπει να παρακολουθεί state. Το drop απορρίπτει. Το class class-default στο τέλος κάθε πολιτικής είναι το ρητό default-deny σου — βάλ' το πάντα σε drop (πρόσθεσε log για να δεις τι απορρίπτεις), το ισοδύναμο ZBF του implicit deny ενός ACL κάνοντάς το ορατό.
04
Τίποτα δεν συμβαίνει μέχρι ένα zone-pair να συνδέσει την πολιτική με μια κατεύθυνση. Αυτή είναι η γραμμή που πραγματικά ανάβει την κίνηση ανάμεσα σε δύο zones.
R1(config)# zone-pair security LAN-TO-WAN source LAN destination WAN R1(config-sec-zone-pair)# service-policy type inspect LAN-TO-WAN-POLICY R1(config-sec-zone-pair)# end # Αυτό ήταν. Οι hosts LAN φτάνουν τώρα το internet, και επειδή τα sessions # είναι INSPECTED, όλη η επιστρεφόμενη κίνησή τους επιτρέπεται αυτόματα. ΔΕΝ υπάρχει # zone-pair WAN-TO-LAN, οπότε η αυθόρμητη inbound κίνηση πέφτει by default — # ακριβώς η stateful συμπεριφορά που τα ACL σε έκαναν να προσποιείσαι. R1# show policy-map type inspect zone-pair sessions Zone-pair: LAN-TO-WAN Number of established sessions = 42 Established Sessions Session 192.168.1.20:51344=>93.184.216.34:443 tcp SIS_OPEN
05
Η μία περίπτωση όπου επιτρέπεις σκόπιμα αυθόρμητη inbound κίνηση: έναν δημόσιο web server στο DMZ. Ένα zone-pair WAN→DMZ, περιορισμένο σε ακριβώς ένα port, συνδυασμένο με το static NAT από το post του NAT.
# Ταίριασε ΜΟΝΟ tcp/443 προς τον server DMZ R1(config)# ip access-list extended WEB-IN R1(config-ext-nacl)# permit tcp any host 192.168.50.10 eq 443 R1(config-ext-nacl)# exit R1(config)# class-map type inspect match-any WEB R1(config-cmap)# match access-group name WEB-IN R1(config-cmap)# exit R1(config)# policy-map type inspect WAN-TO-DMZ-POLICY R1(config-pmap)# class type inspect WEB R1(config-pmap-c)# inspect R1(config-pmap)# class class-default R1(config-pmap-c)# drop log R1(config-pmap-c)# exit R1(config)# zone-pair security WAN-TO-DMZ source WAN destination DMZ R1(config-sec-zone-pair)# service-policy type inspect WAN-TO-DMZ-POLICY R1(config-sec-zone-pair)# end # Συνδύασέ το με: ip nat inside source static tcp 192.168.50.10 443 interface g0/0 443
Στην εισερχόμενη κίνηση WAN→DMZ, το NAT κάνει untranslate τον προορισμό πριν το firewall την κάνει inspect, οπότε το ACL του ZBF σου πρέπει να ταιριάζει με την ιδιωτική διεύθυνση του server (192.168.50.10), όχι τη δημόσια. Κάν' το ανάποδα και το class δεν ταιριάζει ποτέ, η κίνηση χτυπάει στο class-default, και πέφτει σιωπηλά — μια πολύ συνηθισμένη αιτία «port-forward + firewall = τίποτα δεν δουλεύει». Στην αμφιβολία, το show policy-map type inspect zone-pair δείχνει μετρητές ανά class: αν το WEB δείχνει μηδέν και το class-default ανεβαίνει, η διεύθυνση ταιριάσματός σου είναι λάθος.
06
Η κίνηση ΠΡΟΣ τον ίδιο τον router (SSH, SNMP, πρωτόκολλα δρομολόγησης, τα IP SLA pings σου) ζει σε μια ειδική ενσωματωμένη zone που λέγεται «self». By default η κίνηση self επιτρέπεται — σφίξ' την σκόπιμα.
# Ταίριασε πρωτόκολλα διαχείρισης με προορισμό τον router R1(config)# ip access-list extended TO-ROUTER R1(config-ext-nacl)# permit tcp 192.168.1.0 0.0.0.255 any eq 22 R1(config-ext-nacl)# permit icmp any any R1(config-ext-nacl)# exit R1(config)# class-map type inspect match-any MGMT R1(config-cmap)# match access-group name TO-ROUTER R1(config)# policy-map type inspect TO-SELF R1(config-pmap)# class type inspect MGMT R1(config-pmap-c)# inspect R1(config-pmap)# class class-default R1(config-pmap-c)# drop R1(config-pmap-c)# exit R1(config)# zone-pair security WAN-TO-SELF source WAN destination self R1(config-sec-zone-pair)# service-policy type inspect TO-SELF R1(config-sec-zone-pair)# end # Αυτό συμπληρώνει το access-class του VTY από το post των ACL — διπλή ασφάλεια.
07
Το ZBF αποτυγχάνει με προβλέψιμους τρόπους — ένα interface χωρίς ανάθεση, ένα zone-pair που λείπει, ή ένα class που δεν ταιριάζει ποτέ. Αυτές οι εντολές εντοπίζουν και τα τρία.
| Εντολη | Δειχνει |
|---|---|
| show zone security | Κάθε zone και τα interfaces-μέλη της — εντόπισε αυτό που λείπει. |
| show zone-pair security | Όλα τα zone-pairs και η προσαρτημένη πολιτική — εντόπισε την κατεύθυνση που λείπει. |
| show policy-map type inspect zone-pair | Μετρητές πακέτων ανά class — η όψη «ποιο class τρώει την κίνησή μου». |
| show policy-map type inspect zone-pair sessions | Ο ζωντανός πίνακας stateful sessions. |
| show class-map type inspect | Τι ταιριάζει κάθε class-map. |
Δεν χρειάζονται όλα ZBF. Για απλό L3 segmentation και έλεγχο management-plane — ο guest δεν φτάνει το LAN, μόνο το mgmt subnet κάνει SSH — τα ACL είναι πιο ελαφριά και απολύτως επαρκή, και αυτή είναι η δουλειά των περισσότερων switch/router SMB. Στρέψου στο ZBF όταν χρειάζεσαι πραγματικό statefulness σε ένα internet edge: χειρισμό επιστρεφόμενης κίνησης για κάθε πρωτόκολλο, ένα DMZ, protocol inspection, ή πολιτική ανά zone που θα ήταν εφιάλτης από καθρεφτισμένα ACL. Σε sites που χρειάζονται σοβαρό stateful edge, ένα αποκλειστικό firewall (ή οι νεότερες πολιτικές του IOS-XE) μπορεί να είναι η καλύτερη επιλογή — το ZBF είναι το ενδιάμεσο «πραγματικό firewall χωρίς να αγοράσεις συσκευή», και είναι αρκετό για τις περισσότερες SMB της Κρήτης.
Συμπερασματα
established.class class-default drop log ως το ορατό default-deny σου.access-class.Χτίζω πολιτικές Zone-Based Firewall σε router Cisco για internet edges, DMZ, και απομόνωση guest — κλειδωμένα by default, με κάθε πολιτική zone-pair τεκμηριωμένη αρκετά ώστε το να αφαιρέσεις μία να είναι σκόπιμη απόφαση, όχι μυστήριο.
Κλεισε μια Discovery Call →