Cisco Access-Control-Listen

routerImmer wieder stelle ich fest, dass manche Admins eine der wichtigsten Erweiterungen der Cisco Access-Listen verpasst haben:

Access-Listen lassen sich komfortabel editieren
Seit einiger Zeit (nein, an das genaue Release erinnere ich mich nicht mehr) haben die ACEs (Access-List-Entries) Sequenznummern, die man beim show access-lists sehen kann:

c1841#sh access-lists    
Extended IP access list 100
    10 permit icmp any any (5 matches)
Extended IP access list TEST
    10 permit icmp any any (5 matches)
    20 permit udp any any
    30 permit esp any any

Diese Sequenznummern können verwendet werden, um neue ACEs einzufügen. Dazu muss eine bisher nicht verwendete Nummer genommen werden:

c1841(config)#ip access-list ext TEST
c1841(config-ext-nacl)#15 permit tcp any any 
c1841(config-ext-nacl)#
c1841(config-ext-nacl)#do sh ip access-list TEST
Extended IP access list TEST
    10 permit icmp any any (5 matches)
    15 permit tcp any any
    20 permit udp any any
    30 permit esp any any
c1841(config-ext-nacl)#

ACEs können natürlich auch gelöscht werden:

c1841(config-ext-nacl)#no 10
c1841(config-ext-nacl)#do sh ip access-list TEST
Extended IP access list TEST
    15 permit tcp any any
    20 permit udp any any
    30 permit esp any any
c1841(config-ext-nacl)#

Wenn in einer ACL keine freien Sequenznummern mehr zur Verfügung stehen, können diese neu gebildet werden. Bei einem Reload werden diese mit einem Startwert von 10 und einer Schrittweite von 10 gebildet.

c1841(config)#ip access-list resequence TEST 50 20 
c1841(config)#
c1841(config)#do sh ip access-list TEST           
Extended IP access list TEST
    50 permit tcp any any
    70 permit udp any any
    90 permit esp any any
c1841(config)#

Wer noch an seinen nummerierten ACLs hängt, kann die Editier-Funktionen natürlich auch benutzen. Dafür muss die Nummer einfach wie ein Name in den named ACLs verwendet werden:

c1841(config)#ip access-list extended 100
c1841(config-ext-nacl)#20 deny ip any any log
c1841(config-ext-nacl)#
c1841(config-ext-nacl)#do sh ip access-list 100
Extended IP access list 100
    10 permit icmp any any (5 matches)
    20 deny ip any any log
c1841(config-ext-nacl)#

Weitere Funktionen, die bei den ACLs in der Vergangenheit hinzugekommen sind:

Direktes Anzeigen der ACL zu einem Interface

c1841#sh ip access-list interface loo11
Extended IP access list TEST in
    10 permit icmp any any (5 matches)
c1841#
c1841#sh ip access-list interface loo12
Extended IP access list TEST in
    10 permit icmp any any (10 matches)
c1841#
c1841#sh ip access-list interface loo13
Extended IP access list TEST in
    10 permit icmp any any (15 matches)
Extended IP access list TEST2 out
    10 permit tcp any any

Obwohl dieselbe ACL auf drei verschiedenen Interfaces gebunden wurde, werden getrennte Statistiken geführt.

Mehrere Ports pro ACE

c1841(config)#ip access-list ext IPSEC
c1841(config-ext-nacl)#permit esp any any
c1841(config-ext-nacl)#permit udp any any eq isakmp non500-isakmp 
c1841(config-ext-nacl)#
c1841(config-ext-nacl)#do sh access-list IPSEC
Extended IP access list IPSEC
    10 permit esp any any
    20 permit udp any any eq isakmp non500-isakmp
c1841(config-ext-nacl)#

Natürlich verliert man bei dieser Konfiguration die getrennten Counter für die unterschiedlichen Ports (hier 500 und 4500).

ACLs können auf weitere Felder wie z.B. den TTL-, den DSCP-Wert oder TCP-Flags filtern

c1841(config)#ip access-list extended TEST3
c1841(config-ext-nacl)#permit icmp any any ttl gt 128
c1841(config-ext-nacl)#permit udp any any dscp ef 
c1841(config)#ip access-list extended TEST4
c1841(config-ext-nacl)#permit tcp any any match-all +syn +ack +fin -urg 

Im zweiten Beispiel wird TCP-Traffic erlaubt, der sowohl das SYN, ACK und FIN-Bit trägt, aber nicht das URG-Bit.

Gruppieren von Network- oder Service-Objekten
Wer sich traut, das IOS 12.4(20)T einzusetzen, hat sogar die Möglichkeit, Object-Groups zu verwenden, wie es die PIX bzw. ASA schon lange vorgemacht hat:

c1841(config)#object-group network RFC1918
c1841(config-network-group)#10.0.0.0 0.255.255.255
c1841(config-network-group)#172.16.0.0 0.15.255.255
c1841(config-network-group)#range 192.168.0.0 192.168.255.255
c1841(config-network-group)#exit
c1841(config)#
c1841(config)#ip access-list extended TEST5
c1841(config-ext-nacl)#permit icmp any object-group RFC1918 

Setzen von Cookies für das Logging
Ab 12.4(22)T kann an das Keyword log oder log-input ein “Cookie” angehängt werden, das als Tag zum Syslog-Server mitgesendet wird:

c1841(config)#ip access-list ext TEST6
c1841(config-ext-nacl)#deny icmp host 10.1.1.1 host 10.2.2.2 log BewareOfTheseHosts
c1841(config-ext-nacl)#
c1841(config-ext-nacl)#do sh ip access-lists TEST6
Extended IP access list TEST6
    10 deny icmp host 10.1.1.1 host 10.2.2.2 log (10 matches) (tag = BewareOfTheseHosts)
c1841(config-ext-nacl)#

Auf dem Syslog-Server kommt dieses Tag mit der Log-Meldung an und kann z.B. gefiltert werden:

%SEC-6-IPACCESSLOGDP: list TEST6 denied icmp 10.1.1.1 -> 10.2.2.2 (0/0), 10 packets  [BewareOfTheseHosts]

7 Replies to “Cisco Access-Control-Listen”

  1. Super Artikel! Ich ueberflieg die Release Notes immer, aber ohne konkrete Beispiele nimmt man die Features nicht wahr.

  2. Fehlt nur mehr ein Trick um sich schnell anzeigen zu lassen welche ACL auf welchem Interface verwendet wird. Ohne sich mühseelig durch die gesamte config (oder halt “sh run | section interfaces”) quälen zu müssen.
    Bei dicken L3 Switches mit vielen Configzeilen je interface (sagen wir zB manuell gesetzte Speed/duplex,HSRP Config,..) übersieht man da schnell ein ip access-group statement.

    Dummerweise lässt sich | section nicht mit anderen Funktionen kombinieren und sh run int alleine geht nicht….vermute das lässt sich nur via tcl umgehen ?

  3. @Roert: Ohne jetzt über TCL nachzudenken (damit würde es sicher besonders elegant gehen) würde ich folgendes nehmen:

    sh run | i (^interface | access-group)

  4. schon mal brauchbar, allerdings werden mir so auch interfaces ohne ACLs angezeigt. Bei einem voll bestücktem 6500er ist das schon jede Menge.

    rein mit den CLI Funktionen lässt sich das nicht mehr ausfiltern

  5. Die Listen lassen sich ab 12.2(15)T, 12.2(14)S, bzw 12.3(2)T mit Hilfe der Sequenznummern editieren.

    😉

    btw: nette Arbeit, Carsten! Respekt!

    1. Danke für die Ergänzung und das Lob. 🙂

      BTW: Ich bin *K*arsten, nicht Carsten …
      (Aber da Du mich im Real-Life immer nur Konjunktiv-Schnösel nennst ist es verständlich, dass solche Kleinigkeiten untergehen 😉 )

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.