L2 security – Dynamic ARP Inspection.
When we enable DHCP Snooping (in my previous post) we should also consider Dynamic ARP Inspection. This feature protects against ARP poisoning.
Let’s test this feature on below example:
DHCP SERVER
/----\
| R1 |
\----/
| / fa1/0/9
-------
| SW1 |
|_____|
fa1/0/11- / \ -fa1/0/13
/ \
/ \
/ \
/----\ /----\
| R2 | | R3 |
\----/ \----/
DHCP CLIENT1 DHCP CLIENT2
Initial configuration of R1:
!
interface GigabitEthernet0/0
description link to SW1 Fas 1/0/9
ip address 192.168.1.10 255.255.255.0
no sh
!
ip dhcp excluded-address 192.168.1.1 192.168.1.30
!
ip dhcp pool DHCP-POOL
network 192.168.1.0 255.255.255.0
!
R2:
!
hostname R2
!
interface gig0/0
ip address dhcp
no shu
!
R3:
!
hostname R3
!
interface FastEthernet0/0
ip address dhcp
no sh
!
SW1:
ip dhcp snooping vlan 1
no ip dhcp snooping information option
ip dhcp snooping database flash:DHCP.txt
ip dhcp snooping database write-delay 30
ip dhcp snooping
errdisable recovery cause dhcp-rate-limit
errdisable recovery interval 30
!
interface FastEthernet1/0/11
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 50
!
interface FastEthernet1/0/13
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 50
!
interface FastEthernet1/0/9
description to R1-2911 gi0/0
ip dhcp snooping trust
!
DHCP Snooping created bindings:
SW1#sh ip dhcp snooping binding
MacAddress IpAddress Lease(sec) Type VLAN Interface
------------------ --------------- ---------- ------------- ---- --------------------
E8:B7:48:42:45:C8 192.168.1.32 86323 dhcp-snooping 1 FastEthernet1/0/11
04:C5:A4:3F:D6:D0 192.168.1.33 86356 dhcp-snooping 1 FastEthernet1/0/13
Total number of bindings: 2
Now we check ARP tables on all three devices:
r1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.10 - e8b7.4842.4c58 ARPA GigabitEthernet0/0
Internet 192.168.1.32 2 e8b7.4842.45c8 ARPA GigabitEthernet0/0
Internet 192.168.1.33 1 04c5.a43f.d6d0 ARPA GigabitEthernet0/0
r1#
r2#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.10 0 e8b7.4842.4c58 ARPA GigabitEthernet0/0
Internet 192.168.1.32 - e8b7.4842.45c8 ARPA GigabitEthernet0/0
Internet 192.168.1.33 0 04c5.a43f.d6d0 ARPA GigabitEthernet0/0
r2#
r3#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.10 1 e8b7.4842.4c58 ARPA FastEthernet0/0
Internet 192.168.1.32 0 e8b7.4842.45c8 ARPA FastEthernet0/0
Internet 192.168.1.33 - 04c5.a43f.d6d0 ARPA FastEthernet0/0
r3#
Now let’s set static IP (192.168.1.32) on R3, the same as R2, and then ping R1. Compare below outputs before and after R3 ping R1:
r1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.10 - e8b7.4842.4c58 ARPA GigabitEthernet0/0
Internet 192.168.1.32 52 e8b7.4842.45c8 ARPA GigabitEthernet0/0
Internet 192.168.1.33 52 04c5.a43f.d6d0 ARPA GigabitEthernet0/0
r1#
r3#ping 192.168.1.10
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 1/1/4 ms
r3#
r1#
r1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.10 - e8b7.4842.4c58 ARPA GigabitEthernet0/0
Internet 192.168.1.32 0 04c5.a43f.d6d0 ARPA GigabitEthernet0/0
r1#
As we see above we can easily change the ARP table on R1. Now we try to do the same with Dynamic ARP Inspection.
The current ARP table on R1:
r1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.10 - e8b7.4842.4c58 ARPA GigabitEthernet0/0
Internet 192.168.1.32 0 e8b7.4842.45c8 ARPA GigabitEthernet0/0
Internet 192.168.1.34 0 04c5.a43f.d6d0 ARPA GigabitEthernet0/0
r1#
The snooping binding table on SW1:
SW1#sh ip dhcp snooping binding
MacAddress IpAddress Lease(sec) Type VLAN Interface
------------------ --------------- ---------- ------------- ---- --------------------
E8:B7:48:42:45:C8 192.168.1.32 82485 dhcp-snooping 1 FastEthernet1/0/11
04:C5:A4:3F:D6:D0 192.168.1.34 86219 dhcp-snooping 1 FastEthernet1/0/13
Total number of bindings: 2
On SW1 we have to add:
int fa1/0/9
ip arp inspection trust
and
ip arp inspection vlan 1
ip arp inspection vlan 1 logging dhcp-bindings all
ip arp inspection vlan 1 logging arp-probe
Let’s try set IP address on R3 that is currently assigned to R2:
r3(config)#int fa0/0
r3(config-if)#ip add
r3(config-if)#ip address 192.168.1.32 255.255.255.0
r3(config-if)#end
and then ping R1:
r3#ping 192.168.1.10
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.10, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
r3#
On SW1 we can see:
SW1#
Apr 22 12:23:22.523: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Res) on Fa1/0/13, vlan 1.([04c5.a43f.d6d0/192.168.1.32/ffff.ffff.ffff/192.168.1.32/12:23:22 UTC Tue Apr 22 2014])
Apr 22 12:23:29.569: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Fa1/0/13, vlan 1.([04c5.a43f.d6d0/192.168.1.32/0000.0000.0000/192.168.1.10/12:23:28 UTC Tue Apr 22 2014])
Apr 22 12:23:31.583: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Fa1/0/13, vlan 1.([04c5.a43f.d6d0/192.168.1.32/0000.0000.0000/192.168.1.10/12:23:30 UTC Tue Apr 22 2014])
Apr 22 12:23:33.596: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Fa1/0/13, vlan 1.([04c5.a43f.d6d0/192.168.1.32/0000.0000.0000/192.168.1.10/12:23:32 UTC Tue Apr 22 2014])
Apr 22 12:23:35.609: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Fa1/0/13, vlan 1.([04c5.a43f.d6d0/192.168.1.32/0000.0000.0000/192.168.1.10/12:23:34 UTC Tue Apr 22 2014])
Apr 22 12:23:37.622: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Fa1/0/13, vlan 1.([04c5.a43f.d6d0/192.168.1.32/0000.0000.0000/192.168.1.10/12:23:36 UTC Tue Apr 22 2014])
As we see with the DAI feature we can’t ping R1 from R3, whose MAC address doesn’t match with DHCP snooping table:
r1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.10 - e8b7.4842.4c58 ARPA GigabitEthernet0/0
Internet 192.168.1.32 11 e8b7.4842.45c8 ARPA GigabitEthernet0/0
r1#
Some useful commands for DAI:
SW1#sh ip arp inspection vlan 1
Apr 22 12:30:59.241: %SYS-5-CONFIG_I: Configured from console by statistics
Vlan Forwarded Dropped DHCP Drops ACL Drops
---- --------- ------- ---------- ---------
1 0 59 59 0
Vlan DHCP Permits ACL Permits Probe Permits Source MAC Failures
---- ------------ ----------- ------------- -------------------
1 0 0 0 0
Vlan Dest MAC Failures IP Validation Failures Invalid Protocol Data
---- ----------------- ---------------------- ---------------------
1 0 0 0
SW1#sh ip arp inspection
Source Mac Validation : Enabled
Destination Mac Validation : Disabled
IP Address Validation : Enabled
Vlan Configuration Operation ACL Match Static ACL
---- ------------- --------- --------- ----------
1 Enabled Active
Vlan ACL Logging DHCP Logging Probe Logging
---- ----------- ------------ -------------
1 Deny All Permit
Vlan Forwarded Dropped DHCP Drops ACL Drops
---- --------- ------- ---------- ---------
1 0 59 59 0
Vlan DHCP Permits ACL Permits Probe Permits Source MAC Failures
---- ------------ ----------- ------------- -------------------
1 0 0 0 0
Vlan Dest MAC Failures IP Validation Failures Invalid Protocol Data
---- ----------------- ---------------------- ---------------------
1 0 0 0
SW1#sh ip arp inspection interfaces
Interface Trust State Rate (pps) Burst Interval
--------------- ----------- ---------- --------------
Fa1/0/1 Untrusted 15 1
Fa1/0/2 Untrusted 15 1
Fa1/0/3 Untrusted 15 1
Fa1/0/4 Untrusted 15 1
Fa1/0/5 Untrusted 15 1
Fa1/0/6 Untrusted 15 1
Fa1/0/7 Untrusted 15 1
Fa1/0/8 Untrusted 15 1
Fa1/0/9 Trusted None N/A
Fa1/0/10 Untrusted 15 1
Fa1/0/11 Untrusted 15 1
Fa1/0/12 Untrusted 15 1
Fa1/0/13 Untrusted 15 1
Fa1/0/14 Untrusted 15 1
Fa1/0/15 Untrusted 15 1
Fa1/0/16 Untrusted 15 1
Fa1/0/17 Untrusted 15 1
Fa1/0/18 Untrusted 15 1
Fa1/0/19 Untrusted 15 1
Fa1/0/20 Untrusted 15 1
Fa1/0/21 Untrusted 15 1
Interface Trust State Rate (pps) Burst Interval
--------------- ----------- ---------- --------------
Fa1/0/22 Untrusted 15 1
Fa1/0/23 Untrusted 15 1
Fa1/0/24 Untrusted 15 1
Gi1/0/1 Untrusted 15 1
Gi1/0/2 Untrusted 15 1
SW1#