URPF (Unicast Reverse Path Forwarding)是单播逆向路径转发的简称,其主要功能是防止基于源地址欺骗的网络***行为。之所以称为“逆向”,是针对正常的路由查找而言的。一般情况下,路由器接收到包后,获取包的目的地址,针对目的地址查找路由Pair(Dst-IP, NextHop),如果找到了就转发包,否则丢弃该包。uRPF通过获取包的源地址和入接口,以源地址为目的地址,在转发表中查找源地址路由对应的出接口是否与入接口匹配,如果不匹配,认为源地址是伪装的,丢弃该包。

类似于Multicast的RPF(RPF = Forward a multicast packet only if it is received on an interface that is used by the router to route to the source)。只是这是在组播中实现的。
通过这种方式,uRPF就能有效地防范网络中通过修改源地址而进行的恶意***行为的发生。一种***模型如下:

***原理:
RtrA(伪地址2.1.1.1)------>RtrB------>RtrC(2.1.1.1)
在RouterA上伪造源地址为2.1.1.1的包,向RouterB发起请求,RouterB响应请求时将向真正的“2.1.1.1”发送包。这种非法包对RouterB和RouterC都造成了***。
当某个接口启用uRPF严格模式时,路由器会检查接收到的所有分组,验证源地址和以源地址为目的地址查找到的出接口是否出现在路由表中,以及与收到分组的接口是否匹配。URPF松散模式是在ISP行业广泛使用的触发式黑洞过滤技术的基础。在松散模式下,URPF可以根据源IP地址有效地丢弃DoS和DDoS***分组,并在很短的时间内将该方案发送到数百台路由器。
另一种基于路由器的防护策略是采用Unicast Reverse Path Forwarding (uRPF)在网络边界来阻断伪造源地址IP的***,但是对于今天的DDoS***而言,这种方法也不能奏效,其根本原因就在于URPF的基本原理是路由器通过判断出口流量的源地址,如果不属于内部子网的则给予阻断。而***者完全可以伪造其所在子网的IP地址进行DDoS***,这样就完全可以绕过uRPF防护策略。(***者伪造的报文的源地址是可以通过路由表查到的)
除此之外,如果希望uRPF策略能够真正的发挥作用,还需要在每个潜在***源的前端路由器上配置uRPF,但是要实现这种情况,现实中几乎不可能做到。
uRPF有三种方式,Strict uRPF、Loose uRPF和iACL uRPF (Infrastructure ACL)。
*在接入路由器上实施时,对于通过单链路接入时,一般使用Strict uRPF;
*在出口路由器配置uRPF的安全策略时,一般采用Loose uRPF;
*对于通过ECMP接入到网络,一般可采用iACL uRPF和Loose uRPF。
Strict, Loose和Infrastructure ACL uRPF的主要区别在于:
* Loose:只要RIB中有该SrcAddr,不管是从哪个接口学到都可。
* Strict:不仅要查SrcAddr,而且还要看是否来自从该接口学到的源地址。
* iACL:主要通过ACL来实现uRPF的功能。

在 7750上配置uRPF,其实很简单(以下是iACL uRPF的配置):
Config Example:
config router interface "to189"
address 10.1.3.2/24
port 1/2/3
ingress urpf
ingress 101
config router policy-option
prefix-list "forurpf"
prefix 200.2.2.0/24 exact
policy-statement "forurpf"
entry 1
from
prefix forurpf
exit
action accept
exit
exit
exit
Strict方式:
Router# config t
! 启用CEF
Router(Config)# ip cef
!启用Unicast Reverse-Path Verification
Router(Config)# interface eth0/1
Router(Config-if)# ip verify unicast reverse-path
ACL方式:
interface pos1/0
ip verify unicast reverse-path 190
access-list 190 permit ip {customer network} {customer network mask} any
access-list 190 deny ip any any [log]
这个功能检查每一个经过路由器的数据包的源地址,若是不符合ACL的,路由器将丢弃该数据包。
Loose方式:
interface pos 1/0
ip ver unicast source reachable-via any
这个功能检查每一个经过路由器的数据包,在路由器的路由表中若没有该数据包源IP地址的路由,路由器将丢弃该数据包。