前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >learning:urpf plugins

learning:urpf plugins

作者头像
dpdk-vpp源码解读
发布2023-06-23 10:40:00
1970
发布2023-06-23 10:40:00
举报
文章被收录于专栏:DPDK VPP源码分析DPDK VPP源码分析

本文主要介绍一下vpp urpf插件的配置及处理流程。首先根据华为配置指南来了解一下URPF的定义、目的及两种模式的差异。

URPF定义:

(Unicast Reverse Path Forwarding)是单播逆向路径转发的简称,其主要功能是防止基于源IP地址欺骗的网络攻击行为。

URPF目的:

拒绝服务DoS(Denial of Service)攻击是一种阻止连接服务的网络攻击。DoS的攻击方式有很多种,最基本的DoS攻击就是利用大量合法或伪造的请求占用过多的服务资源,从而使合法用户无法得到正常服务。

URPF根据报文的源IP地址查找路由表中是否存在去往该地址的路由,并判断报文入接口与路由出接口是否一致。如果路由表不存在去往该源IP地址的路由或报文入接口与路由出接口不一致,则丢弃该报文,从而预防IP欺骗,特别是针对伪造源IP地址的DoS攻击非常有效。

URPF模式:

在复杂的网络环境中,会遇到路由不对称的情况,即对端设备记录的路由路径与本端不一致,此时使能URPF的设备可能会丢弃从合法路径接收的报文,正常转发从非法路径接收的报文。为了解决该问题,设备实现了以下两种URPF模式:

  • 严格模式 严格模式下,设备不仅要求路由表中存在去往报文源IP地址的路由,还要求报文入接口与路由出接口一致。 建议在路由对称的环境下使用严格模式。例如两个网络边界设备之间只有一条路径,此时使用严格模式能够保证网络的安全性。

如上图所示中Router1地址为10.0.0.1,其伪造源地址的10.1.1.1的数据包发送至Router3,Router3收到数据包后会对接收到的数据包进行源IP匹配检查,发现IP表项里有10.1.1.1的地址。如果Router3的URPF工作在严格模式下,则会进一步对接口进行匹配检查,发现数据包接受的接口与路由表项中10.1.1.1对应的出接口不匹配而丢弃数据包。URPF严格模式进一步防止了源地址欺骗的发生,但也会存在一个问题,如果10.1.1.1通过其他路径到达Router3,Router3同样会认为数据包不合法而丢弃。

  • 松散模式 松散模式下,设备仅要求路由表中存在去往报文源IP地址的路由,不要求报文入接口与路由出接口一致。 建议在不能保证路由对称的环境下使用松散模式。例如两个网络边界设备之间有多条路径,路由的对称性无法保证,此时松散模式既可以有效地阻止网络攻击,又可以避免合法报文被错误丢弃。

如上图所示中Router1地址为10.0.0.1,其伪造源地址的10.1.1.1的数据包发送至Router2,Router2收到数据包后会对接收到的数据包进行源IP匹配检查,发现IP表项里没有10.1.1.1的地址,丢弃数据包。

首先配置接口RX TX方向URPF严格模式配置:

代码语言:javascript
复制
#分别设置接口RX TX 严格URPF模式
set urpf ip4 rx strict GigabitEthernet2/6/0
set urpf ip4 tx strict GigabitEthernet2/6/0

通过ping接口ip地址,抓取trace流程如下:

代码语言:javascript
复制
00:45:57:378473: dpdk-input
  GigabitEthernet2/6/0 rx queue 0
  IP4: a4:83:e7:64:54:70 -> 00:50:56:21:aa:c2
  ICMP: 192.168.1.16 -> 192.168.1.20
    tos 0x00, ttl 64, length 84, checksum 0x603f dscp CS0 ecn NON_ECN
    fragment id 0x96f5
  ICMP echo_request checksum 0xb257 id 33624
00:45:57:378509: ethernet-input
  frame: flags 0x3, hw-if-index 1, sw-if-index 1
  IP4: a4:83:e7:64:54:70 -> 00:50:56:21:aa:c2
00:45:57:378515: ip4-input-no-checksum
  ICMP: 192.168.1.16 -> 192.168.1.20
    tos 0x00, ttl 64, length 84, checksum 0x603f dscp CS0 ecn NON_ECN
    fragment id 0x96f5
  ICMP echo_request checksum 0xb257 id 33624
00:45:57:378518: ip4-rx-urpf-strict #rx urpf node节点。
  uRPF:14 # show ip fib 192.168.1.16 查询路由表中的urpf-list索引
00:45:57:378534: ip4-lookup

00:45:57:378536: ip4-receive

00:45:57:378537: ip4-icmp-input
  ICMP: 192.168.1.16 -> 192.168.1.20
    tos 0x00, ttl 64, length 84, checksum 0x603f dscp CS0 ecn NON_ECN
    fragment id 0x96f5
  ICMP echo_request checksum 0xb257 id 33624
00:45:57:378538: ip4-icmp-echo-request
  ICMP: 192.168.1.16 -> 192.168.1.20
    tos 0x00, ttl 64, length 84, checksum 0x603f dscp CS0 ecn NON_ECN
    fragment id 0x96f5
  ICMP echo_request checksum 0xb257 id 33624
00:45:57:378540: ip4-load-balance

00:45:57:378541: ip4-rewrite
  tx_sw_if_index 1 dpo-idx 4 : ipv4 via 192.168.1.16 GigabitEthernet2/6/0: mtu:9000 next:3 flags:[features ] 
00:45:57:378542: ip4-tx-urpf-strict  # tx urpf 节点
  uRPF:13 # show ip fib 192.168.1.20 查询路由表中的urpf-list索引
00:45:57:378543: GigabitEthernet2/6/0-output
00:45:57:378546: GigabitEthernet2/6/0-tx
  GigabitEthernet2/6/0 tx queue 0
  IP4: 00:50:56:21:aa:c2 -> a4:83:e7:64:54:70
  ICMP: 192.168.1.20 -> 192.168.1.16
    tos 0x00, ttl 64, length 84, checksum 0xecab dscp CS0 ecn NON_ECN
    fragment id 0x0a89
  ICMP echo_reply checksum 0xba57 id 33624

URPF 松散模式node流程图和严格模式一样,这里就不再过多介绍。下面说一下新增一个命令行用来增加一个ip前缀用来通过URPF loose 模式的检测规则:

代码语言:javascript
复制
# 设置接受指定IP地址通过urpf检查,在fib表中可以查询到。
vpp# set urpf-accept add 192.168.1.15/32
vpp#
vpp# show ip fib 192.168.1.15
ipv4-VRF:0, fib_index:0, flow hash:[src dst sport dport proto flowlabel ] epoch:0 flags:none locks:[adjacency:1, default-route:1, ]
192.168.1.15/32 fib:0 index:13 locks:2
  urpf-exempt refs:1 entry-flags:connected,attached,drop, src-flags:added,contributing,active, cover:7
    path-list:[20] locks:2 uPRF-list:16 len:1 itfs:[1, ]
      path:[22] pl-index:20 ip4 weight=1 pref=0 attached-nexthop:  oper-flags:resolved,
        192.168.1.15 GigabitEthernet2/6/0
      [@0]: arp-ipv4: via 192.168.1.15 GigabitEthernet2/6/0

 forwarding:   unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:15 buckets:1 uRPF:16 to:[0:0]]
    [0] [@3]: arp-ipv4: via 192.168.1.15 GigabitEthernet2/6/0

参考资料 https://support.huawei.com/enterprise/zh/doc/EDOC1100277017/fcdcd4bb https://www.h3c.com/cn/d_202108/1449936_30005_0.htm https://blog.csdn.net/qq_41062084/article/details/11266063

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-03-27,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com