DHCP监听:
通过DHCP监听,交换机能限制终端用户端口(非信任端口)只能够发送DHCP请求,并且丢弃来自用户端口的所有其他DHCP报文,例如DHCP提供(OFFER)相应报文等。信任端口能够发送或接受所有的DHCP报文。
带有选项82的dhcp监听是一种非常使用的机制,它能够避免dhcp ddos攻击或客户机配置不当所导致的网络异常。
DHCP监听步骤:
1. SW2(config)#ip dhcp snooping
2. SW2(config)#ip dhcp snooping vlan 400
3. SW2(config)#ip dhcp snooping information option
4. SW2(config)#interface g0/10
SW2(config-if)#ip dhcp snooping trust
5. SW2(config)#int range g0/9 , g0/11
SW2(config-if-range)#ip dhcp snooping limit rate 100
Switch DHCP snooping is enabled
DHCP snooping is configured on following VLANs:
400
Insertion of option 82 is enabled
Option 82 on untrusted port is not allowed
Verification of hwaddr field is enabled
Interface Trusted Rate limit (pps)
------------------------ ------- ----------------
GigabitEthernet0/9 no 100
GigabitEthernet0/10 yes unlimited
GigabitEthernet0/11 no 100
交换机内部有一个IP源绑定表(IP Source Binding Table)作为每个端口接受到的数据包的检测标准,只有在两种情况下,交换机会转发数据:
1. 所接收到的IP包满足IP源绑定表中Port/IP/MAC的对应关系
2. 所接收到的是DHCP数据包
其余数据包将被交换机做丢弃处理。
1. IP源绑定表可以由用户在交换机上静态添加
2. 或者由交换机从DHCP监听绑定表(DHCP Snooping Binding Table)自动学习获得。
交换机从DHCP报文中提取关键信息(包括IP地址,MAC地址,vlan号,端口号,租期等),并把这些信息保存到 DHCP 监听绑定表中。(以上这个过程是由DHCP Snooping完成的)。IP源防护只支持第2层端口,其中包括接入(access)端口和干道(trunk)接口。IP源防护的信任端口/非信任端口也就是DHCP监听的信任端口/非信任端口。对于非信任端口存在以下两种级别的IP流量安全过滤:
源IP地址过滤:默认情况下,如果端口在没有存在IP源绑定条目的情况下启用了IP源防护功能,默认的PACL将拒绝端口的所有流量(实际上是除 DHCP报文以外的所有IP流量)。配置:
SW2(config)#int g0/9
SW2(config-if)#ip verify source
源IP和源MAC地址过滤:当以IP和MAC地址作为过滤的时候,为了确保DHCP协议能够正常的工作,还必须启用DHCP监听选项82。 对于没有选项82的数据,交换机不能确定用于转发DHCP服务器响应的客户端主机端口。相反地,DHCP服务器响应将被丢弃,客户机也不能获得IP地址。
注:交换机使用端口安全(SW2(config-if)#switchport port-security)来过滤源MAC地址。
当交换机只使用“IP源地址过滤”时,IP源防护功能与端口安全功能是相互独立的关系。 端口安全是否开启对于IP源防护功能来说不是必须的。 如果同时开启,则两者也只是一种宽松的合作关系,IP源防护防止IP地址欺骗,端口安全防止MAC地址欺骗。而当交换机使用“源IP和源MAC地址过滤”时,IP源防护功能与端口安全功能是就变成了一种“集成”关系,更确切的说是端口安全功能被集成到 IP源防护功能里,作为IP源防护的一个必须的组成部分。在这种模式下,端口安全的违规处理(violation)功能将被关闭。对于非法的二层报文,都将只是被简单的丢弃,而不会再执行端口安全的违规处理了。IP源防护功能不能防止客户端PC的ARP攻击。ARP攻击问题必须由DAI功能来解决。如果要支持IP源防护功能,必须是35系列及以上的交换机。2960目前不支持该功能。
Switch#show ip dhcp snooping binding
Switch#show ip source binding
Switch#show ip verify source
ip dhcp snooping information option allow-untrusted
IP源防护只针对非信任端口起作用,对信任端口不起作用。所以不需要为接在信任端口上的主机添加静态IP源绑定,其依然可以正常通信。IP源绑定能阻止非信任端口上的客户端以静态指定IP地址的方式接入网络。 这些客户端将无法通信,除非为其手工添加静态IP源绑定条目。
说明:本例中采用“源IP和源MAC地址过滤”模式,采用该模式需要注意以下三点:
(1)交换机必须对客户端的DHCP请求插入选项82信息,即必须配置ip dhcp snooping information option命令(默认即为开启)。对于没有插入选项82的DHCP请求,交换机不能确定用于转发DHCP服务器响应的客户端主机端口。相反地,DHCP服务器响应将被丢弃,客户机也不能获得IP地址。DHCP回复包因为找不到目标端口而被交换机丢弃了。
(2)所使用的DHCP服务器必须支持利用DHCP选项82分配IP地址的功能,否则客户端将无法获得IP地址(debug信息类似第(1)项所述)。像Win2003,Cisco IOS 12.2等作为DHCP服务器时都不支持利用DHCP选项82来分配IP地址。本例中如果采用12.2版本的IOS,将出现客户端无法获得IP地址的情况。Cisco IOS从版本12.3(4)T 开始支持利用选项82分配IP地址。 最简单的方法,看IOS是否支持命令ip dhcp use class。
(3)必须在端口下同时配置switchport port-security命令。 若没有该命令,本模式的最终效果与“源IP地址过滤”模式将相同。
如果使用DHCP获得地址,在交换机上需先启动ip dhcp snooping verify mac-address命令,客户端通过服务器获得地址,这样交换机记录客户端ip和mac,并且只对该接口下匹配的ip和mac的流量进行放行,端口下同时配置switchport port-security命令或者ip verify source port-security。
将IP源防护应用于3560下联的trunk接口上,该接口为非信任接口。由于2960没有IP源防护功能,所以从2960过来的数据报文是有可能存在IP欺骗攻击的。在3560的trunk口上应用IP源防护将可以把攻击隔绝在这里,使受攻击的范围减小到最小。但由于 2960本身没有该功能,所以接在2960上的各个主机之间仍有可能存在攻击行为。对有防护能力的交换机,级联时级联端口可以选为ip dhcp snooping trust.
实例:pc < -- > Gig0/9 (3560)Gig0/11 < -- > DHCP-server (3560)
1. 试验中用的dhcp-server-IOS是12.2版本,不支持选项82分配ip地址,因此为了支持选项82分配ip地址,做dhcp-server的交换机3560一定要开ip dhcp snooping (可以不指定vlan,可不配置ip dhcp snooping information option),否则无法对DHCP option82进行处理,进行传输的交换机丢弃该包,客户端pc也收不到dhcp包。
2. dhcp-server对收到DHCP请求的端口要打开ip dhcp snooping trust (接口级命令)或者使用全局命令ip dhcp snooping information option allowed-untrusted,使dhcp请求进入该端口。接入层交换机连接pc端口应该设置为ip dhcp snooping untrust
snooping �Cswitch主要配置:
Switch#sh run
ip dhcp snooping vlan 40
ip dhcp snooping
!
interface GigabitEthernet0/9
switchport access vlan 40
ip dhcp snooping limit rate 100
interface GigabitEthernet0/11
switchport access vlan 40
no cdp enable
ip dhcp snooping trust
interface Vlan40
ip address 192.168.10.2 255.255.255.0
DHCP-server#sh run
no ip dhcp conflict logging
ip dhcp excluded-address 192.168.10.1 192.168.10.2
!
ip dhcp pool pool1
network 192.168.10.0 255.255.255.0
dns-server 192.168.2.2
default-router 192.168.10.2
!
no ip dhcp snooping information option
ip dhcp snooping
!
interface GigabitEthernet0/1
ip dhcp snooping trust
!
interface Vlan1
ip address 192.168.10.1 255.255.255.0
查看传输交换机3560和dhcp服务器3560debug信息:
10:26:53: DHCP_SNOOPING: received new DHCP packet from input interface (GigabitEthernet0/9)
10:26:53: DHCP_SNOOPING: process new DHCP packet, message type: DHCPDISCOVER, input interface: Gi0/9, MAC da: ffff.ffff.ffff, MAC sa: 000f.fee6.f2a2, IP da 255.255.255.255, IP sa: 0.0.0.0, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 0.0.0.0, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 000f.fee6.f2a2
10:26:53: DHCP_SNOOPING: add relay information option.
10:26:53: DHCP_SNOOPING_SW: Encoding opt82 in vlan-mod-port format
10:26:53: DHCP_SNOOPING: binary dump of relay info option, length: 20 data:
0x52 0x12 0x1 0x6 0x0 0x4 0x1 0x90 0x1 0x9 0x2 0x8 0x0 0x6 0x0 0x21 0x56 0x47 0xCD 0x80
10:26:55: DHCP_SNOOPING: received new DHCP packet from input interface (GigabitEthernet0/11)
10:26:55: DHCP_SNOOPING: process new DHCP packet, message type: DHCPOFFER, input interface: Gi0/11, MAC da: 000f.fee6.f2a2, MAC sa: 0021.56f8.0a48, IP da: 192.168.10.4, IP sa: 192.168.10.3, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 192.168.10.4, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 000f.fee6.f2a2
10:26:55: DHCP_SNOOPING: direct forward dhcp reply to output port: GigabitEthernet0/9.
10:26:55: DHCP_SNOOPING: received new DHCP packet from input interface (GigabitEthernet0/9)
10:26:55: DHCP_SNOOPING: process new DHCP packet, message type: DHCPREQUEST, input interface: Gi0/9, MAC da: ffff.ffff.ffff, MAC sa: 000f.fee6.f2a2, IP da: 255.255.255.255, IP sa: 0.0.0.0, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 0.0.0.0, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr:000f.fee6.f2a2
10:26:55: DHCP_SNOOPING: add relay information option.
10:26:55: DHCP_SNOOPING_SW: Encoding opt82 in vlan-mod-port format
10:26:55: DHCP_SNOOPING: binary dump of relay info option, length: 20 data:
0x52 0x12 0x1 0x6 0x0 0x4 0x1 0x90 0x1 0x9 0x2 0x8 0x0 0x6 0x0 0x21 0x56 0x47 0xCD 0x80
10:26:55: DHCP_SNOOPING_SW: bridge packet get invalid mat entry: FFFF.FFFF.FFFF, packet is flooded to ingress VLAN: (400)
10:26:55: DHCP_SNOOPING: received new DHCP packet from input interface (GigabitEthernet0/11)
10:26:55: DHCP_SNOOPING: process new DHCP packet, message type: DHCPACK, input interface: Gi0/11, MAC da: 000f.fee6.f2a2, MAC sa: 0021.56f8.0a48, IP da: 192.168.10.4, IP sa: 192.168.10.3, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 192.168.10.4, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 000f.fee6.f2a2
10:26:55: DHCP_SNOOPING: add binding on port GigabitEthernet0/9.
10:26:55: DHCP_SNOOPING: added entry to table (index 118)
10:26:55: DHCP_SNOOPING: dump binding entry: Mac=00:0F:FE:E6:F2:A2 Ip=192.168.10.4 Lease=86400 ld Type=dhcp-snooping Vlan=400 If=GigabitEthernet0/9
10:26:55: DHCP_SNOOPING: direct forward dhcp reply to output port: GigabitEthernet0/9.
10:26:57: ICMP: echo reply sent, src 192.168.10.1, dst 192.168.10.4
10:26:57: ICMP: echo reply sent, src 192.168.10.1, dst 192.168.10.4
10:26:57: ICMP: echo reply sent, src 192.168.10.1, dst 192.168.10.4
10:27:24: DHCP_SNOOPING: checking expired snoop binding entries
10:46:30: DHCP_SNOOPING: process new DHCP packet, message type: DHCPOFFER, input interface: Gi0/11, MAC da: ffff.ffff.ffff, MAC sa: 0021.56f8.0a48, IP da: 255.255.255.255, IP sa: 192.168.10.3, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 192.168.10.4, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 000f.fee6.f2a2
10:46:30: DHCP_SNOOPING: process new DHCP packet, message type: DHCPACK, input interface: Gi0/11, MAC da: ffff.ffff.ffff, MAC sa: 0021.56f8.0a48, IP da: 255.255.255.255, IP sa: 192.168.10.3, DHCP ciaddr: 0.0.0.0, DHCP yiaddr: 192.168.10.4, DHCP siaddr: 0.0.0.0, DHCP giaddr: 0.0.0.0, DHCP chaddr: 000f.fee6.f2a2