Πίσω στο blog

English  ·  Ελληνικά

Cisco / IOS  ·  Tutorial  ·  Ιουλιος 2026

Cisco IOS
Λιστες Ελεγχου Προσβασης

Το φίλτρο κίνησης του router. Standard vs extended ACL, τα wildcard masks που την πατάνε όλοι, named ACL που μπορείς όντως να επεξεργαστείς, πού στο δίκτυο ανήκει κάθε τύπος — και το ένα ACL που χρειάζεται κάθε συσκευή: η κλειδαριά στις δικές της γραμμές VTY.

Cisco IOS ACL Access-List Filtering Security Wildcard Mask CCNA

packet ACL — ελεγχεται ΑΠΟ ΠΑΝΩ ΠΡΟΣ ΤΑ ΚΑΤΩ, κερδιζει το πρωτο ταιριασμα 10 permit 192.168.10.0 0.0.0.255 20 deny 192.168.20.0 0.0.0.255 30 permit any (implicit) deny any — πάντα εκεί, αόρατο προωθηθηκε απορριφθηκε Ένα πακέτο διασχίζει τη λίστα από πάνω· η πρώτη γραμμή που ταιριάζει αποφασίζει. Αν δεν ταιριάξει τίποτα, το κρυφό deny το ρίχνει.

Ένα access control list είναι μια ταξινομημένη λίστα κανόνων permit/deny. Ένα πακέτο συγκρίνεται με τις γραμμές από πάνω· η πρώτη γραμμή που ταιριάζει αποφασίζει τη μοίρα του και η αξιολόγηση σταματάει. Αν δεν ταιριάξει τίποτα, ένα αόρατο deny any στο τέλος το ρίχνει. Αυτή είναι όλη η μηχανή — όλα τα υπόλοιπα είναι syntax.

Τα ACL είναι ό,τι πιο κοντινό σε firewall έχει ένας router IOS, αλλά είναι και το γενικής χρήσης εργαλείο «ταίριασε αυτή την κίνηση»: το NAT χρησιμοποίησε ένα στο post DHCP & NAT για να ορίσει ποιος μεταφράζεται, και το QoS, τα route-map, και τα VPN δανείζονται όλα το ίδιο syntax. Μάθε τα μία φορά για φιλτράρισμα και έμαθες τη γλώσσα ταιριάσματος όλου του IOS. Θα χτίσουμε standard και extended ACL, θα απομυθοποιήσουμε τα wildcard masks, θα επεξεργαστούμε named ACL χειρουργικά με αριθμούς ακολουθίας, και θα κλειδώσουμε το management plane — το ACL που προστατεύει τον ίδιο τον router.

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

01

Standard vs Extended — Διαλεξε το Σωστο Εργαλειο

Τα standard ACL ταιριάζουν μόνο τη διεύθυνση SOURCE — ένα αμβλύ εργαλείο. Τα extended ACL ταιριάζουν source, destination, πρωτόκολλο, και port — ένα νυστέρι. Το εύρος αριθμών λέει στο IOS ποιο εννοείς.

ΤυποςΤαιριαζει
Standard (1–99, 1300–1999)Μόνο source IP. «Κίνηση από αυτούς τους hosts.»
Extended (100–199, 2000–2699)Source + destination + πρωτόκολλο (ip/tcp/udp/icmp) + ports. «SSH από mgmt προς servers.»
Named (standard ή extended)Ίδιες μηχανές, αλλά με όνομα και επεξεργάσιμους αριθμούς γραμμών. Χρησιμοποίησέ τα για οτιδήποτε θα κρατήσεις.

Επειδή ένα standard ACL βλέπει μόνο το source, η θέση του έχει σημασία: βάλ' το κοντά στον προορισμό, αλλιώς εμποδίζει αυτό το source από το να φτάσει τα πάντα. Ένα extended ACL είναι ακριβές, οπότε βάλ' το κοντά στην πηγή και σκότωσε την ανεπιθύμητη κίνηση πριν διασχίσει το δίκτυο. Αυτός είναι ο κλασικός κανόνας τοποθέτησης, και προκύπτει κατευθείαν από το τι μπορεί να δει κάθε τύπος.

02

Wildcard Masks — Η Αντεστραμμενη Μασκα

Τα ACL δεν χρησιμοποιούν subnet masks. Χρησιμοποιούν wildcard masks — το bitwise αντίστροφο. 0 σημαίνει «πρέπει να ταιριάξει», 1 σημαίνει «αδιάφορο». Μόλις το δεις ως αντίστροφο-της-subnet-mask, γίνεται μηχανικό.

Λογικη wildcard mask — 0 = ταιριασε ακριβως, 1 = οτιδηποτε
# Subnet mask 255.255.255.0  →  wildcard 0.0.0.255   (ένα /24)
192.168.10.0  0.0.0.255   → ταιριάζει 192.168.10.0 – 192.168.10.255

# Ένας μεμονωμένος host — κάθε bit πρέπει να ταιριάξει:
192.168.10.5  0.0.0.0     → ακριβώς 192.168.10.5 (συντόμευση: host 192.168.10.5)

# Τα πάντα — κανένα bit δεν χρειάζεται να ταιριάξει:
0.0.0.0  255.255.255.255  → οποιαδήποτε διεύθυνση (συντόμευση: any)

# Η νοητή συντόμευση για κοινές masks: 255 μείον κάθε octet
/24 → 0.0.0.255      /16 → 0.0.255.255      /30 → 0.0.0.3
/25 → 0.0.0.127      /28 → 0.0.0.15         /32 → 0.0.0.0
⚠ Παγιδα — Γραφεις Subnet Mask Εκει που Ανηκει Wildcard

Το να γράψεις permit 192.168.10.0 255.255.255.0 σε ένα ACL δεν βγάζει σφάλμα — το IOS το δέχεται και ταιριάζει σχεδόν τίποτα από όσα ήθελες (διαβάζει αυτά τα 255 ως octet «αδιάφορα»). Αυτό είναι το νούμερο-ένα σιωπηλό bug σε ACL. Αν ένα ACL «δεν ταιριάζει τίποτα» (το show access-lists δείχνει μηδέν matches), έλεγξε πρώτα τη mask: στη χώρα των ACL είναι πάντα το wildcard, το αντίστροφο της subnet mask. (Το access-list του NAT, από το προηγούμενο post, χρησιμοποιεί κι αυτό wildcards.)

03

Ενα Standard ACL — Χτισε το και Εφαρμοσε το

Το τελετουργικό δύο βημάτων για κάθε ACL: χτίσε τη λίστα στο global config, μετά εφάρμοσέ την σε ένα interface με μια κατεύθυνση. Ένα ACL που δεν εφαρμόζεται δεν φιλτράρει τίποτα.

IOS — standard ACL: οι guest δεν φτανουν το VLAN των servers
# 1. Χτίσε τη λίστα (numbered standard, 1-99)
R1(config)# access-list 10 deny 192.168.20.0 0.0.0.255
R1(config)# access-list 10 permit any
# Χωρίς "permit any", το implicit deny θα έκλεινε ΟΛΟΥΣ.

# 2. Εφάρμοσέ το OUTBOUND στο interface που βλέπει τους servers
#    (standard ACL → κοντά στον προορισμό)
R1(config)# interface GigabitEthernet0/2
R1(config-if)# ip access-group 10 out
R1(config-if)# end

# Επαλήθευσε: κανόνες + μετρητές hit (ασφαλές)
R1# show access-lists 10
Standard IP access list 10
    10 deny   192.168.20.0, wildcard bits 0.0.0.255 (43 matches)
    20 permit any (1287 matches)

Η κατεύθυνση είναι από τη σκοπιά του router. in = πακέτα που φτάνουν σε αυτό το interface από το καλώδιο· out = πακέτα που ο router πάει να στείλει έξω από αυτό. Το να το μπερδέψεις είναι το δεύτερο πιο συχνό bug σε ACL μετά τα wildcard masks.

04

Extended ACL — Ταιριασε με Ακριβεια

Πρωτόκολλο, source, destination, port. Τα extended ACL εκφράζουν πραγματική πολιτική: «οι guest παίρνουν web και DNS, και τίποτα άλλο προς το LAN.»

IOS — extended ACL, εφαρμοσμενο κοντα στην πηγη (guest VLAN in)
# Named extended ACL — χρησιμοποίησε ονόματα για ό,τι είναι μόνιμο
R1(config)# ip access-list extended GUEST-IN

# Επίτρεψε DNS και web προς το internet, κλείσε τα πάντα προς το LAN
R1(config-ext-nacl)# permit udp 192.168.20.0 0.0.0.255 any eq 53
R1(config-ext-nacl)# permit tcp 192.168.20.0 0.0.0.255 any eq 443
R1(config-ext-nacl)# permit tcp 192.168.20.0 0.0.0.255 any eq 80
R1(config-ext-nacl)# deny   ip  192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255
R1(config-ext-nacl)# deny   ip  192.168.20.0 0.0.0.255 192.168.99.0 0.0.0.255
R1(config-ext-nacl)# permit ip  192.168.20.0 0.0.0.255 any
R1(config-ext-nacl)# exit

# Εφάρμοσέ το INBOUND στο interface που βλέπει τους guest (extended → κοντά στην πηγή)
R1(config)# interface GigabitEthernet0/1.20
R1(config-subif)# ip access-group GUEST-IN in
R1(config-subif)# end
⚠ Παγιδα — Η Σειρα ΕΙΝΑΙ Πολιτικη: Permits Πριν το Deny που θα Χτυπουσαν

Κερδίζει το πρώτο ταίριασμα, οπότε η θέση ενός κανόνα είναι μέρος της πολιτικής. Στο GUEST-IN, τα permit web/DNS κάθονται πάνω από τα deny του LAN — αντάλλαξέ τα και οι guest χάνουν DNS αν ο DNS server σου ζει στο εύρος του LAN. Όταν ένα ACL φέρεται παράξενα, διάβασέ το από πάνω προς τα κάτω όπως θα το έκανε το πακέτο: το show access-lists δείχνει μετρητές match ανά γραμμή, και η γραμμή που απορροφά τα hits είναι εκεί που πραγματικά προσγειώνεται η κίνησή σου — συχνά όχι η γραμμή που νόμιζες.

💡 Pro Tip — established, και Logging των Deny

Δύο λέξεις-κλειδιά αξίζει να τις ξέρεις από νωρίς. Το permit tcp any any established ταιριάζει μόνο πακέτα TCP που ανήκουν σε ήδη ξεκινημένες συνομιλίες (με ACK/RST)— η κλασική γραμμή «οι απαντήσεις μπορούν να γυρίσουν, αλλά οι εξωτερικοί δεν μπορούν να ξεκινήσουν» σε ένα inbound ACL του WAN. Και το να προσθέσεις log σε ένα deny (deny ip any any log ως τη ρητή τελευταία σου γραμμή) κάνει το αόρατο ορατό: παίρνεις μια εγγραφή syslog για κάθε drop, που μετατρέπει το «η εφαρμογή δεν δουλεύει» σε «το ACL ρίχνει TCP/8443 από .20.14, πρόσθεσε ένα permit.» Ένα ρητό τελικό deny με log δεν κοστίζει τίποτα και αντικαθιστά τις εικασίες με αποδείξεις.

05

Επεξεργασια ACL — Αριθμοι Ακολουθιας

Ο παλιός πόνος: τα numbered ACL δεν επεξεργάζονταν — έσβηνες και ξαναέγραφες όλη τη λίστα. Το named ACL config mode το διορθώνει με αριθμούς ακολουθίας. Γι' αυτό χρησιμοποιείς named ACL.

IOS — εισαγωγη, διαγραφη, και επαναριθμηση χειρουργικα
# Οι γραμμές είναι αριθμημένες 10, 20, 30... — τα κενά είναι για εισαγωγές
R1# show access-lists GUEST-IN
Extended IP access list GUEST-IN
    10 permit udp 192.168.20.0 0.0.0.255 any eq domain
    20 permit tcp 192.168.20.0 0.0.0.255 any eq 443
    30 permit tcp 192.168.20.0 0.0.0.255 any eq www
    40 deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255

# Εισάγαγε έναν νέο κανόνα ΑΝΑΜΕΣΑ στο 10 και το 20 — δώσ' του sequence 15
R1(config)# ip access-list extended GUEST-IN
R1(config-ext-nacl)# 15 permit udp 192.168.20.0 0.0.0.255 any eq 123   # NTP

# Διάγραψε μία γραμμή με τον αριθμό ακολουθίας της — οι υπόλοιπες μένουν ανέγγιχτες
R1(config-ext-nacl)# no 30
R1(config-ext-nacl)# exit

# Τελείωσαν τα κενά; Επαρίθμησε ξανά: ξεκίνα στο 10, βήμα 10
R1(config)# ip access-list resequence GUEST-IN 10 10
⚠ Παγιδα — Το "no access-list 110" Διαγραφει ΟΛΟΚΛΗΡΗ την Numbered Λιστα

Σε ένα κλασικό numbered ACL, το να γράψεις no access-list 110 deny … με σκοπό να αφαιρέσεις μία γραμμή αφαιρεί ολόκληρο το ACL 110 — και ένα interface με ip access-group 110 in τώρα δεν φιλτράρει τίποτα (ένα εφαρμοσμένο-αλλά-ανύπαρκτο ACL επιτρέπει τα πάντα). Αν αυτό το ACL ήταν το φίλτρο WAN σου, μόλις άνοιξες τον router. Επεξεργάσου numbered ACL μόνο ξαναγράφοντάς τα offline και κάνοντας paste· καλύτερα, χρησιμοποίησε named ACL και αριθμούς ακολουθίας και μην αντιμετωπίσεις ποτέ το πρόβλημα.

06

Προστασια του Ιδιου του Router — VTY Access-Class

Το πιο σημαντικό ACL σε κάθε συσκευή είναι αυτό που αποφασίζει ποιος μπορεί καν να δοκιμάσει SSH. Ένα interface ACL φιλτράρει κίνηση διέλευσης· το access-class στις γραμμές VTY φυλάει το management plane από κάθε κατεύθυνση ταυτόχρονα.

IOS — διαχειριση SSH κλειδωμενη στο admin subnet
# Ένα standard ACL φτάνει εδώ — μας νοιάζει μόνο το ΠΟΙΟΣ (source)
R1(config)# ip access-list standard MGMT-ONLY
R1(config-std-nacl)# permit 192.168.99.0 0.0.0.255
R1(config-std-nacl)# deny any log
R1(config-std-nacl)# exit

# Εφάρμοσε με access-class στις γραμμές VTY — όχι ip access-group
R1(config)# line vty 0 4
R1(config-line)# access-class MGMT-ONLY in
R1(config-line)# end

# Τώρα απόπειρες SSH από οπουδήποτε εκτός 192.168.99.0/24 απορρίπτονται
# στη γραμμή — ανεξάρτητα από ποιο interface έφτασαν.
💡 Γιατι το access-class Νικαει τα Interface ACL για Διαχειριση

Θα μπορούσες να προσθέσεις γραμμές «deny SSH στον router» σε κάθε interface ACL — και να ξεχάσεις μία, που είναι ακριβώς αυτό που μετράνε οι επιτιθέμενοι. Το access-class κάθεται στις ίδιες τις γραμμές VTY, οπότε καλύπτει κάθε τρέχον και μελλοντικό interface σε ένα μέρος. Αυτό συνδυάζεται με το setup SSH από το First Contact: το transport input ssh αποφασίζει πώς μπορείς να συνδεθείς, το access-class αποφασίζει από πού. Σε εξοπλισμό που παραδίδουμε, και τα δύο είναι μη-διαπραγματεύσιμα.

07

Ελεγχος & Troubleshooting Ασφαλες να το Τρεξεις

Τρεις ερωτήσεις λύνουν τα περισσότερα tickets ACL: τι λένε στην πράξη οι κανόνες, ποια γραμμή χτυπάει η κίνηση, και είναι το ACL εφαρμοσμένο εκεί που νομίζεις.

ΕντοληΑπανταει
show access-listsΚάθε ACL με μετρητές match ανά γραμμή — η αλήθεια στο έδαφος.
show access-lists GUEST-INΟι γραμμές και οι μετρητές ενός ACL.
show ip interface gi0/1Ποιο ACL είναι εφαρμοσμένο σε αυτό το interface, και προς ποια κατεύθυνση.
show run | section access-listΤα ACL όπως έχουν ρυθμιστεί, μαζί με τα remarks.
show run | section line vtyΕπιβεβαιώνει το access-class που φυλάει τη διαχείριση.
clear access-list countersΜηδένισε τους μετρητές match πριν από ένα test, ώστε τα hits να είναι ξεκάθαρα.
IOS — το τελετουργικο debugging με μετρητες
# 1. Μηδένισε τους μετρητές
R1# clear access-list counters GUEST-IN

# 2. Αναπαρήγαγε το πρόβλημα (βάλε τον χρήστη να ξαναδοκιμάσει / στείλε την κίνηση)

# 3. Διάβασε ποια γραμμή κουνήθηκε
R1# show access-lists GUEST-IN
    ...
    40 deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255 (17 matches)
# 17 νέα matches στη γραμμή 40 — η κίνηση τρώγεται από το deny του LAN.
# Η απόφαση είναι τώρα ενημερωμένη: εισάγαγε permit πάνω από το 40, ή επιβεβαίωσε ότι είναι πολιτική.

08

MikroTik ↔ Cisco — Φιλοσοφια Φιλτρου

Οι κανόνες firewall του RouterOS και τα ACL του IOS λύνουν το ίδιο πρόβλημα με διαφορετικές μηχανές — το ένα είναι stateful by default, το άλλο μια stateless λίστα που την κάνεις πιο έξυπνη.

MikroTik / RouterOSCisco IOS
/ip firewall filter ruleΜια γραμμή ACL (permit/deny)
chain=forwardACL εφαρμοσμένο σε interface διέλευσης (in/out)
chain=input (προς τον router)access-class στο VTY + πολιτικές control-plane
connection-state=established,relatedpermit tcp any any established (μόνο TCP, πιο ακατέργαστο)
src-address=192.168.10.0/24192.168.10.0 0.0.0.255 (wildcard, όχι CIDR)
log=yesλέξη-κλειδί log στη γραμμή ACL
Κανόνες αξιολογούνται top-down, πρώτο ταίριασμαΊδιο — και τα δύο καταλήγουν σε implicit drop/deny
💡 Η Πραγματικη Διαφορα — State

Το filter του RouterOS είναι stateful firewall: το connection tracking είναι ενσωματωμένο, και το established,related χειρίζεται κίνηση επιστροφής για κάθε πρωτόκολλο. Τα κλασικά ACL του IOS είναι stateless — κάθε πακέτο κρίνεται μόνο του, και το established προσεγγίζει το state μόνο για TCP. Αυτό είναι εντάξει για segmentation και έλεγχο management-plane, που είναι γι' αυτό που φτιάχτηκαν τα ACL. Όταν ένα site χρειάζεται πραγματικό stateful edge σε Cisco, αυτό είναι το Zone-Based Firewall (ή μια αποκλειστική συσκευή firewall) — διαφορετικό εργαλείο, και θέμα για αργότερα σε αυτή τη σειρά.

Συμπερασματα

  1. Top-down, πρώτο ταίριασμα, αόρατο deny στο τέλος. Αυτή η μοναδική πρόταση είναι όλη η μηχανή ACL. Κάθε μπερδεμένη συμπεριφορά ξαναγυρνάει σε μία από τις τρεις προτάσεις της.
  2. Τα wildcard masks είναι αντεστραμμένα subnet masks. 0 = πρέπει να ταιριάξει, 1 = αδιάφορο· /24 → 0.0.0.255. Το να γράψεις subnet mask από συνήθεια δεν βγάζει σφάλμα — απλώς ταιριάζει σιωπηλά λάθος πράγμα.
  3. Standard κοντά στον προορισμό, extended κοντά στην πηγή. Ο κανόνας τοποθέτησης προκύπτει από το τι βλέπει κάθε τύπος. Και θυμήσου η κατεύθυνση είναι η οπτική του router: in φτάνει, out φεύγει.
  4. Χρησιμοποίησε named ACL με αριθμούς ακολουθίας. Εισαγωγή με 15 permit …, διαγραφή με no 30, τακτοποίηση με resequence. Τα numbered ACL διαγράφονται ολικά — το no access-list 110 αφαιρεί όλη τη λίστα και αποτυγχάνει ανοιχτά.
  5. Ένα ACL που δεν εφαρμόζεται δεν φιλτράρει τίποτα. Χτίσε, μετά ip access-group … in|out — και επαλήθευσε με show ip interface, όχι από μνήμης.
  6. Το management plane παίρνει το δικό του ACL. Το access-class στις γραμμές VTY περιορίζει ποιος μπορεί καν να δοκιμάσει SSH, σε κάθε interface ταυτόχρονα. Είναι οι πέντε γραμμές ασφάλειας με τη μεγαλύτερη αξία στη συσκευή.
  7. Κάνε debug με μετρητές, όχι θεωρίες. clear access-list counters, αναπαρήγαγε, show access-lists — η γραμμή που κουνήθηκε είναι η υπεύθυνη γραμμή. Πρόσθεσε log σε ρητά deny και τα drops σταματούν να είναι μυστήριο.

Χρειαζεσαι πραγματικο segmentation για γραφειο, ξενοδοχειο ή SMB στην Κρητη;

Ένα ACL που δεν καταλαβαίνει κανείς μένει εκεί για πάντα, σωστό ή όχι. Γράφω πολιτικές φιλτραρίσματος σε Cisco και MikroTik με ενσωματωμένη απομόνωση guest και κλείδωμα management-plane, και τεκμηριώνω κάθε γραμμή με τον λόγο που υπάρχει, ώστε η πολιτική να επιβιώνει τον επόμενο που θα την αγγίξει.

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