Skip to main content

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#

Comments

Popular posts from this blog

What should you know about HA 'override enabled' setting on Fortigate?

High availability is mandatory in most of today's network designs. Only very small companies or branches can run their business without redundancy. When you have Fortigate firewall in your network you have many options to increase network availability. You can use Fortigate Clustering Protocol ( FGCP ) or Virtual Router Redundancy Protocol ( VRRP ). FGCP has two modes: 'override' disabled (default) and 'override' enabled . I'm not going to explain how to set up HA as you can find many resources on Fortinet websites: https://cookbook.fortinet.com/high-availability-two-fortigates-56/ https://cookbook.fortinet.com/high-availability-with-fgcp-56/ Let's recap what is the main difference between them. The default HA setting is 'override' disabled and this is an order of selection an active unit: 1) number of monitored interfaces - when both units have the same number of working (up) interfaces check next parameter 2) HA uptime - an

MAC Authentication Bypass

One of the method to control your network is using MAB feature. It is helpful in case you have devices without dot1x functionality. Today I will try to implement basic configuration and analyze log messages. There is only one switch SW1 and one device attached to port Fa1/0/2.   ! aaa new - model aaa authentication dot1x default group radius ! ! int Fas1 / 0 / 2 authentication host - mode single - host authentication port - control auto mab ! I haven’t configured ACS yet but let’s see what error message I receive:   SW1 ( config - if ) # mab - ev ( Fa1 / 0 / 2 ): Received MAB context create from AuthMgr mab - ev ( Fa1 / 0 / 2 ): Created MAB client context 0x1100000F mab : initial state mab_initialize has enter mab - ev ( Fa1 / 0 / 2 ): Sending create new context event to EAP from MAB for 0x1100000F ( 0000.0000 . 0000 ) mab - sm ( Fa1 / 0 / 2 ): Received event 'MAB_START' on handle 0x1100000F mab : during state mab_initia

Inpection of asymmetric sessions on FortiGate

There is one feature available on FortiGate, and I think you should know it, as it modifies a bit what we know about stateful firewalls. In past every packet was treated individually and you had to create policies in both directions. With stateful firewalls we can track connections, and by checking couple of attributes, we can treat them as part of the same session. For example when you initiate connection from a host1 to host2, the returning connection from host2 to host1 will be treated as part of the same connection (session). They have to have the same source/destination and destination/source IPs, port numbers and interfaces.There is an exception from this rule and FortiGate in some specific cases can accept connections on port which was not used in the initial connection. Let me explain how it works on the below example:      The host1 has a default gateway on R1 (10.0.1.2), but you may notice that it is not the optimal path to host2 subnet. When we analyze the packet flo