Access-List Refresher: Standard, Extended, and Named ACL’s – Very good refresher material, some of this material like best practices I had even forgotten

OSPF_Base_Topology

I was going to just use two routers for this example, after work when I was tired and rushing, so I stopped and decided to be thorough I didn’t want to work with loopbacks. So please forget the Stub things in the topology, those area’s are not stubs, however the OSPF information is correct. Also missing is the Ethernet segment off R2 and R3, 172.12.23.0 /24 Area 23, once I get some time I’ll adjust this Topology to be correct.

(Topology corrected)

A couple of key points with ACL’s that you might forget if you are rusty:

  • ACL’s use a wildcard mask, so if you see a subnet mask, it is immediately invalid
  • ACL’s must be applied to an interface to work for filtering, and a direction of traffic flow MUST be chosen for the command to go through

First there is one subject that is important to refresh for any CCNP candidate, and that is where to place the different types of ACL’s, so I just list here the type, where to put it, and why.

Where to put ACL’s and why:

The point of this conversation, is that ACL’s should be used so that the least processing on routers and network devices is used while traffic is traversing the network, so there are naturally going to be best places for these different types of ACLs:

Extended-Access Lists: You should configure on the router closest to the source of the traffic really all the time in real life, preferably going “in” the main LAN uplink port, to save the local router some resources rather than filtering them going “out” the WAN port. Either way, best practice will dictate, Extended ACL’s be closest to source they are originating from.

Standard Access-Lists: You should configure these on the routers closest to the source as possible, because they only use the source as criteria for dropping packets.

First lets look at some access-list configuration output to get some ideas of ranges:

R1(config)#access-list ?
              IP standard access list
         IP extended access list
IPX SAP access list
Extended 48-bit MAC address access list
IPX summary address access list
       IP standard access list (expanded range)
         Protocol type-code access list
       IP extended access list (expanded range)
         DECnet access list
Appletalk access list
48-bit MAC address access list
IPX standard access list
IPX extended access list
dynamic-extended  Extend the dynamic ACL absolute timer
rate-limit        Simple rate-limit specific access list


R1(config)#access-list

As can be seen we have a lot of ranges here, but there are only 4 which are highlighted in two colors, blue for standard ACL range #’s and red for extended range #’s.

  • Standard ranges are 1-99, 1300-1999
  • Extended ranges 100-199, 2000-2699

Named ACL’s are really extended ACL’s only they use names instead of numbers for their Access-List, which I like, because due to complete lack of anyone use the Remark statements on ACL’s they sometimes name it intuitively which is nice (in the real world).

So I used Loopback44 with IP add 44.44.44.1 as R4’s RID since we will be blocking some traffic to 4.4.4.4, and just got the virtual link to form, this is almost as much work as the ACL configuration (if not more)… and assuming everything goes smoothly.

SO LETS GET TO WORK SO I CAN ENJOY THE REST OF MY NIGHT 😀

First, verify R5 and R4 see each others loopbacks and can ping each other:

R4#sh ip route ospf

Gateway of last resort is not set

      2.0.0.0/32 is subnetted, 1 subnets
O IA     2.2.2.2 [110/66] via 172.12.34.3, 00:06:51, FastEthernet0/1
      3.0.0.0/32 is subnetted, 1 subnets
O IA     3.3.3.3 [110/2] via 172.12.34.3, 00:06:51, FastEthernet0/1
      5.0.0.0/32 is subnetted, 1 subnets
O IA     5.5.5.5 [110/67] via 172.12.34.3, 00:06:51, FastEthernet0/1
      172.12.0.0/16 is variably subnetted, 5 subnets, 2 masks
O IA     172.12.15.0/24 [110/66] via 172.12.34.3, 00:06:51, FastEthernet0/1
O IA     172.12.23.0/24 [110/2] via 172.12.34.3, 00:06:51, FastEthernet0/1
O        172.12.123.0/24 [110/65] via 172.12.34.3, 00:06:51, FastEthernet0/1
R4#ping 5.5.5.5
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 5.5.5.5, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 64/64/68 ms
R4#
ASR#5
[Resuming connection 5 to r5 … ]

R5(config-router)#^Z
R5#sh
*Mar 14 04:37:13.827: %SYS-5-CONFIG_I: Configured from console by console
R5#sh ip route ospf

Gateway of last resort is not set

      2.0.0.0/32 is subnetted, 1 subnets
O IA     2.2.2.2 [110/66] via 172.12.15.1, 00:17:03, FastEthernet0/1
      3.0.0.0/32 is subnetted, 1 subnets
O IA     3.3.3.3 [110/66] via 172.12.15.1, 00:13:05, FastEthernet0/1
      4.0.0.0/32 is subnetted, 1 subnets
O IA     4.4.4.4 [110/67] via 172.12.15.1, 00:07:03, FastEthernet0/1
      44.0.0.0/32 is subnetted, 1 subnets
O IA     44.44.44.1 [110/67] via 172.12.15.1, 00:02:46, FastEthernet0/1
      172.12.0.0/16 is variably subnetted, 5 subnets, 2 masks
O IA     172.12.23.0/24 [110/66] via 172.12.15.1, 00:17:03, FastEthernet0/1
O IA     172.12.34.0/24 [110/66] via 172.12.15.1, 00:14:53, FastEthernet0/1
O IA     172.12.123.0/24 [110/65] via 172.12.15.1, 00:17:03, FastEthernet0/1
R5#ping 4.4.4.4

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.4.4.4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 64/64/68 ms
R5#

Beautiful, now first example is a Standard access-list blocking all traffic from reaching 4.4.4.4, but this presents a fun opportunity, because this router also has an interface in an  Ethernet Segment not yet in the Topology, so I will want to get this as close to the source address by applying it to outbound interface facing the destination network rather than “in”coming packets from the WAN:

R3(config-router)#exit
R3(config)#access-list 15 deny 172.12.15.0 0.0.0.255
R3(config)#access-list 15 permit any
R3(config)#int fa0/1
R3(config-if)#ip access-group ?
        IP access list (standard or extended)
    IP expanded access list (standard or extended)
  WORD         Access-list name

R3(config-if)#ip access-group 15

% Incomplete command.

R3(config-if)#ip access-group 15 ?
  in   inbound packets
  out  outbound packets

R3(config-if)#ip access-group 15 out
R3(config-if)#

I left that derp in there to underscore, you really need to remember a direction MUST be chosen, and in this instance it is outbound traffic toward R4 blocking network 172.12.15.0:

R5#ping 4.4.4.4

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.4.4.4, timeout is 2 seconds:
U.U.U

Success rate is 0 percent (0/5)
R5#

Success, but we demand answers about that U.U.U, and the explanation is as part of the “security” of the router it doesn’t just want to drop pings and let a would be intruder know an ACL is set, so it responds with the same response you get when an upstream router doesn’t have a return route to your network.

Also I picked the Fa0/1 interface and direction going “out” again so it is only impacting that network, and not “in” on the WAN interface possibly interfering with traffic destined for 172.12.23.0/24 network.

So on to Extended ACL’s!

This will be an R3 configuration again, and I actually don’t want R4 to ping 1.1.1.1 on R1, which will again go on R3’s Fa0/1 interface – However we get to have an ACL going in both directions so no sweat! :

R3(config-if)#exit
R3(config)#access-list 111 ?
  deny     Specify packets to reject
  dynamic  Specify a DYNAMIC list of PERMITs or DENYs
  permit   Specify packets to forward
  remark   Access list entry comment

R3(config)#access-list 111 deny ?
    An IP protocol number
  ahp      Authentication Header Protocol
  eigrp    Cisco’s EIGRP routing protocol
  esp      Encapsulation Security Payload
  gre      Cisco’s GRE tunneling
  icmp     Internet Control Message Protocol
  igmp     Internet Gateway Message Protocol
  ip       Any Internet Protocol
  ipinip   IP in IP tunneling
  nos      KA9Q NOS compatible IP over IP tunneling
  ospf     OSPF routing protocol
  pcp      Payload Compression Protocol
  pim      Protocol Independent Multicast
  tcp      Transmission Control Protocol
  udp      User Datagram Protocol

R3(config)#access-list 111 deny ip ?
  A.B.C.D  Source address
  any      Any source host
  host     A single source host

R3(config)#access-list 111 deny ip any ?
  A.B.C.D  Destination address
  any      Any destination host
  host     A single destination host

R3(config)#access-list 111 deny ip any host 1.1.1.1 ?
  dscp        Match packets with given dscp value
  fragments   Check non-initial fragments
  log         Log matches against this entry
  log-input   Log matches against this entry, including input interface
  precedence  Match packets with given precedence value
  time-range  Specify a time-range
  tos         Match packets with given TOS value
 

R3(config)#access-list 111 deny ip any host 1.1.1.1
R3(config)#int fa0/1
R3(config-if)#ip access-group 111 in
R3(config-if)#

As can be seen, you always have to state permit / deny / remark with ACL’s, I like the way that has never changed, that your first order of business is always permit or deny.

I completely screwed the pooch on this configuration though, I am not sure if you (the one person reading this post maybe) caught it, I forgot the permit ip any any statement to allow all other traffic to flow without the implicit deny smacking them down.

In fact, it’s already impacting the network almost immediately, so lets examine the output that showed me I have killed the OSPF adjacencies with no regard to OSPF life, and then correct the issue:

The adjacencies dying:

R3(config-if)#ip access-group 111 in
R3(config-if)#
*Mar  2 09:59:45.761: %OSPF-5-ADJCHG: Process 1, Nbr 44.44.44.1 on FastEthernet0/1 from FULL to DOWN, Neighbor Down: Dead timer expired
R3(config-if)#
*Mar  2 09:59:51.266: %OSPF-5-ADJCHG: Process 1, Nbr 44.44.44.1 on OSPF_VL0 from FULL to DOWN, Neighbor Down: Interface down or detached

Fixing the adjacencies:

R3(config-if)#exit
R3(config)#access-list 111 permit ip any any
*Mar  2 10:04:55.661: %OSPF-5-ADJCHG: Process 1, Nbr 44.44.44.1 on FastEthernet0/1 from LOADING to FULL, Loading Done
R3(config)#
*Mar  2 10:05:10.690: %OSPF-5-ADJCHG: Process 1, Nbr 44.44.44.1 on OSPF_VL0 from LOADING to FULL, Loading Done

Now lets test a ping to 1.1.1.1 from R4, and move right along here:

[Resuming connection 4 to r4 … ]

R4(config)#do ping 1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
…..
Success rate is 0 percent (0/5)
R4(config)#

It is using all dots for a reply I found when working with the ACL below, check it out.

And Finally, Named ACL’s!

The exact same as an extended ACL, except it uses a name, making it a bit more intuitive. I just learned tonight (or probably re-learned) that you can actually drop into ACL mode with extended ACL #’s to revise it line by line:

R3(config)#ip access-list ?
  extended    Extended Access List
  log-update  Control access list log updates
  logging     Control access list logging
  resequence  Resequence Access List
  standard    Standard Access List

R3(config)#ip access-list extended ?
      Extended IP access-list number
    Extended IP access-list number (expanded range)
  WORD         Access-list name

R3(config)#ip access-list extended 111 ?
 

R3(config)#ip access-list extended 111
R3(config-ext-nacl)#?
Ext Access List configuration commands:
    Sequence Number
  default         Set a command to its defaults
  deny            Specify packets to reject
  dynamic         Specify a DYNAMIC list of PERMITs or DENYs
  evaluate        Evaluate an access list
  exit            Exit from access-list configuration mode
  no              Negate a command or set its defaults
  permit          Specify packets to forward
  remark          Access list entry comment

R3(config-ext-nacl)#do sh access-list 111
Extended IP access list 111
    10 deny ip any host 1.1.1.1  
    20 permit ip any any (118 matches)
R3(config-ext-nacl)#
ASR#4
[Resuming connection 4 to r4 … ]

R4(config)#
R4(config)#do sh ip route
Codes: L – local, C – connected, S – static, R – RIP, M – mobile, B – BGP
       D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
       N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
       E1 – OSPF external type 1, E2 – OSPF external type 2
       i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
       ia – IS-IS inter area, * – candidate default, U – per-user static route
       o – ODR, P – periodic downloaded static route, H – NHRP, l – LISP
       + – replicated route, % – next hop override

Gateway of last resort is not set

      2.0.0.0/32 is subnetted, 1 subnets
O IA     2.2.2.2 [110/66] via 172.12.34.3, 00:11:43, FastEthernet0/1
      3.0.0.0/32 is subnetted, 1 subnets
O IA     3.3.3.3 [110/2] via 172.12.34.3, 00:11:43, FastEthernet0/1
      4.0.0.0/32 is subnetted, 1 subnets
C        4.4.4.4 is directly connected, Loopback4
      5.0.0.0/32 is subnetted, 1 subnets
O IA     5.5.5.5 [110/67] via 172.12.34.3, 00:11:43, FastEthernet0/1
      44.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        44.44.44.0/24 is directly connected, Loopback44
L        44.44.44.1/32 is directly connected, Loopback44

(At this point I have no idea 1.1.1.1 is not in the routing table, my tired mind has once again glossed over a major detail looking for some other information)

R4(config)#
ASR#3
[Resuming connection 3 to r3 … ]

R3(config-ext-nacl)#15 ?
  deny      Specify packets to reject
  dynamic   Specify a DYNAMIC list of PERMITs or DENYs
  evaluate  Evaluate an access list
  exit      Exit from access-list configuration mode
  permit    Specify packets to forward

R3(config-ext-nacl)#15 deny ?
    An IP protocol number
  ahp      Authentication Header Protocol
  eigrp    Cisco’s EIGRP routing protocol
  esp      Encapsulation Security Payload
  gre      Cisco’s GRE tunneling
  icmp     Internet Control Message Protocol
  igmp     Internet Gateway Message Protocol
  ip       Any Internet Protocol
  ipinip   IP in IP tunneling
  nos      KA9Q NOS compatible IP over IP tunneling
  ospf     OSPF routing protocol
  pcp      Payload Compression Protocol
  pim      Protocol Independent Multicast
  tcp      Transmission Control Protocol
  udp      User Datagram Protocol

R3(config-ext-nacl)#15 deny ip 172.12.34.0 0.0.0.255 ?
  A.B.C.D  Destination address
  any      Any destination host
  host     A single destination host

R3(config-ext-nacl)#15 deny ip host 172.12.34.4 ?
  A.B.C.D  Destination address
  any      Any destination host
  host     A single destination host

R3(config-ext-nacl)#15 deny ip host 172.12.34.4 host 2.2.2.2
R3(config-ext-nacl)#do sh access-list 111
Extended IP access list 111
    10 deny ip any host 1.1.1.1
    15 deny ip host 172.12.34.4 host 2.2.2.2
    20 permit ip any any (134 matches)
R3(config-ext-nacl)#
ASR#4
[Resuming connection 4 to r4 … ]

R4(config)#do ping 2.2.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:

U.U.U

Success rate is 0 percent (0/5)
R4(config)#
ASR#3
[Resuming connection 3 to r3 … ]

R3(config-ext-nacl)#do sh access-list 111
Extended IP access list 111
    10 deny ip any host 1.1.1.1
    15 deny ip host 172.12.34.4 host 2.2.2.2 (11 matches)
    20 permit ip any any (144 matches)
R3(config-ext-nacl)#

I actually did this to fix it before realizing I hadn’t put 1.1.1.1 into OSPF to be advertised:

R3(config-ext-nacl)#no 10
R3(config-ext-nacl)#10 deny ip host 172.12.34.4 host 1.1.1.1
R3(config-ext-nacl)#do sh access-list 111
Extended IP access list 111
    10 deny ip host 172.12.34.4 host 1.1.1.1
    15 deny ip host 172.12.34.4 host 2.2.2.2 (11 matches)
    20 permit ip any any (162 matches)
R3(config-ext-nacl)#

I really did want to post that just to show how easy it is, and the reason we got ….. instead of U.U.U was because we didn’t have a route to it, lets check now:

R4(config)#do sh ip route ospf | i 1.1.1.1
O IA     1.1.1.1 [110/66] via 172.12.34.3, 00:02:41, FastEthernet0/1
R4(config)#

Minimal output, maximum effort, so lets ping away and see some hits:

R3(config-ext-nacl)#do sh access-list 111
Extended IP access list 111
    10 deny ip host 172.12.34.4 host 1.1.1.1 (11 matches)
    15 deny ip host 172.12.34.4 host 2.2.2.2 (11 matches)
    20 permit ip any any (208 matches)
R3(config-ext-nacl)#

You will notice that other ACL of permit any any to increment for OSPF traffic, and I am sure that would have worked with “Any” defined as well, because only R4 traffic is coming into that interface so that is fine.

I won’t go into a configuration about named ACL’s as you’ve seen in the access-group on interfaces you can use (word) instead of number, but also you’ve seen the ACL (or nacl) configuration mode and how it works a bit, but I will show you this:

R3(config)#ip access-list extended ?
      Extended IP access-list number
    Extended IP access-list number (expanded range)
  WORD         Access-list name

R3(config)#ip access-list extended

Once you type a number from those ranges or a word, it puts you into the nacl config mode to build your ACL.

The only real tricky part is typing ip first when configuring the access-list to get to nacl config mode to remove and insert lines to extended lists, otherwise named ones work the exact same as extended they just swap out numbers for names.

As much as I want this to be over, a couple of commands to verify or check quickly what ACL’s is on your router or a given interface:

R3#sh access-list
Standard IP access list 15
    10 deny   172.12.15.0, wildcard bits 0.0.0.255 (8 matches)
    20 permit any
Extended IP access list 111
    10 deny ip host 172.12.34.4 host 1.1.1.1 (11 matches)
    15 deny ip host 172.12.34.4 host 2.2.2.2 (11 matches)
    20 permit ip any any (243 matches)
R3#

It doesn’t show you what interfaces they are applied to (or what mechanism on the router is using them), but it shows they are there and their hit counts. To see what ACL is configured to an interface its seen under ip access-group in sh run, but because we can’t count on that for lab day you can also use “sh ip int …”:

R3#sh ip int fa0/1
FastEthernet0/1 is up, line protocol is up
  Internet address is 172.12.34.3/24
  Broadcast address is 255.255.255.255
  Address determined by non-volatile memory
  MTU is 1500 bytes
  Helper address is not set
  Directed broadcast forwarding is disabled
  Multicast reserved groups joined: 224.0.0.5 224.0.0.6
  Outgoing access list is 15
  Inbound  access list is 111
  Proxy ARP is enabled
  Local Proxy ARP is disabled
  Security level is default
  Split horizon is enabled
  ICMP redirects are always sent
  ICMP unreachables are always sent
  ICMP mask replies are never sent
  IP fast switching is enabled
  IP fast switching on the same interface is disabled
  IP Flow switching is disabled
  IP CEF switching is enabled
  IP CEF Feature Fast switching turbo vector
  IP multicast fast switching is enabled
  IP multicast distributed fast switching is disabled
  IP route-cache flags are Fast, CEF
  Router Discovery is disabled
  IP output packet accounting is disabled
  IP access violation accounting is disabled
  TCP/IP header compression is disabled
  RTP/IP header compression is disabled
  Policy routing is disabled
  Network address translation is disabled
  BGP Policy Mapping is disabled
  WCCP Redirect outbound is disabled
  WCCP Redirect inbound is disabled
  WCCP Redirect exclude is disabled
R3#

Alright, and that concludes my middle of the night lab session on ACL’s, see you next time with some time based ACL configurations!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s