blocking rogue router advertisements on switches

Eric Vyncke (evyncke) evyncke at cisco.com
Fri May 6 09:04:45 CEST 2011


Using an ACL to block rogue RA is the usual procedure indeed. While I cannot really understand (no time...) the semantic of your ACL, if you apply an layer-2 ACL blocking Ethernet packets with Ethertype 0x86DD, next header = 58 and ICMP type = 136 to ports where there is no router (= not on your uplink), then you are 99.99% safe.

Of course, an evil attacker could insert any extension header between IPv6 header and ICMP defeating your simple ACL but you will block all misconfigured PC :-)

There are other tools such as RAMOND, NDPMON and others which can also help mitigating this attack

Hope this helps

-éric


> -----Original Message-----
> From: ipv6-ops-bounces+evyncke=cisco.com at lists.cluenet.de [mailto:ipv6-ops-
> bounces+evyncke=cisco.com at lists.cluenet.de] On Behalf Of Gavin McCullagh
> Sent: jeudi 5 mai 2011 18:56
> To: ipv6-ops at lists.cluenet.de
> Subject: blocking rogue router advertisements on switches
> 
> Hi,
> 
> we have rolled out IPv6 connectivity to our campus so students should all
> use v6 where a AAAA is available.  Even if we hadn't, we'd probably still
> be suffering from machines sending rogue router adverts, but such is life.
> 
> We had a similar situation some years ago with rogue DHCP servers.  The way
> we addressed that was to first use a tcpdump one-liner to detect udp port
> 67 messages from wrong IP addresses and then to block messages with UDP
> source port 67 on all user ports on our switches.  This might not be the
> absolutely perfect approach, but we've found it to be pretty effective.
> 
> An analogous approach for detecting rogue RAs, if I understand correctly is
> to detect all icmp6 messages like this:
> 
> tcpdump <.....>  icmp6 and ip6[40] == 134 and src host not $ALLOWED_RA_SERVER
> 
> A typical captured frame looks something like
> 
>          0x0000:  3333 0000 0001 000e 0cb1 33a8 86dd 6000
>          0x0010:  0000 0050 3aff fe80 0000 0000 0000 020e
>          0x0020:  0cff feb1 33a8 ff02 0000 0000 0000 0000
>          0x0030:  0000 0000 0001 8600 ff1d 4000 0000 0000
>          0x0040:  0000 0000 0000 0304 40c0 0027 8d00 0009
>           <snip>....
> 
> We use D-Link switches a fair bit which don't have IPv6 support per se, but
> do have "packet content" filters (I think they may mean frame content).
> I'm hoping to create a filter like this across all user ports:
> 
> # inspect the IP protocol field and the type
> create access_profile packet_content_mask offset_16-31 0x0 0xff000000 0x0 0x0
> offset_48-63 0x0 0x0000ff00 0x0 0x0  port 1-48 profile_id 2
> # match ICMPv6 and router adverts
> config access_profile profile_id 2 add access_id 1 packet_content offset_16-
> 31 0x0 0x3a000000 0x0 0x0 offset_48-63 0x0 0x00008600 0x0 0x0 deny
> 
> This results in a filter like this:
> 
>  ID  Mode
>  --- ------ ----------------------------------------------------
>  1   Deny   Offset 0-15  : 0x00000000 00000000 00000000 00000000
>             Offset 16-31 : 0x00000000 3a000000 00000000 00000000
>             Offset 32-47 : 0x00000000 00000000 00000000 00000000
>             Offset 48-63 : 0x00000000 00008600 00000000 00000000
>             Offset 64-79 : 0x00000000 00000000 00000000 00000000
> 
> I can test and make sure that this will prevent the rogue RAs, but I'm
> slightly concerned in case my filter is too general and I block something I
> shouldn't.
> 
> Does anyone know if this is a safe approach to the problem or am I going to
> end up blocking some key traffic?
> 
> Thanks in advance for any insight,
> 
> Gavin
> 
> 



More information about the ipv6-ops mailing list