当前国际主流bgp路由劫持解决方案——RPKI

摘抄自APNIC一段定义  

RPKI

资源认证是一种安全框架,用于证明特定 IP 地址块或 AS 号码与这些互联网号码资源 (INR) 的保管人之间的关联。它通过生成称为 PKI(用于公钥基础设施)的公私加密证书来实现这一点。

这些证书提供了使用给定 IPv4、IPv6 和 ASN 资源的证明和授权,并且可以通过密码进行验证。

什么是 RPKI?

资源认证使用称为资源公钥基础设施 (RPKI) 的框架,该框架基于 X.509 PKI 证书标准。使用称为 RPKI 的验证结构,资源持有者可以自信地声明正在传输的信息是正确的并且符合他们的意图。

RPKI 允许网络运营商通过使用私钥和公钥系统对边界网关协议 (BGP) 中的路由广告进行数字加密和签名。信息可以使用私钥加密和签名,并且只能使用匹配的公钥解密或验证其签名。数字签名信息保证了在路由系统中看到的路由通告可以被验证并且是真实的。

RPKI 通过将 INR 信息添加到颁发给资源持有者的 X.509 PKI 证书来工作。这表示有关特定 INR 的保管和其他状态信息。当使用 RPKI 证书时,INR 与数字签名相关联。因此,证明签名可以证明 INR 与已签名的内容相关。您无法根据证书中未包含的 INR 正确签名。

RPKI 通过形成相互签名的证书层次结构来工作。“根”证书在子证书上签名,子证书在其子证书上签名,依此类推。签署证书的行为使您成为证书颁发机构或 CA。RPKI 将 CA 状态分配给委托 INR 的机构,因此委托角色与 CA 角色一致。区域互联网注册管理机构 (RIR) 为直接成员和国家互联网注册管理机构 (NIR) 签署证书,他们都可以就其证书中的资源签署证书和其他 RPKI 产品。

除了签署其他证书(CA 角色)的证书外,证书还可用于签署其他数字对象。这称为终端实体或 EE 证书:它不签署其他 CA 证书,它只签署非证书对象。在 RPKI 中,EE 证书用于对清单(已签名对象的目录)进行签名,并对路由和其他数字对象进行签名。路由中的主要签名对象是路由源授权或 ROA。

RPKI 应用

以下是 RPKI 的两个当前应用:

RPKI 的好处

  • 比手动检查 APNIC Whois 数据库或 IRR 数据库安全得多。
  • 保护前缀或 origin-as 的来源是防止对 BGP 完整性的许多攻击的第一步。
  • 来自资源保管人的指令/信息可以加密验证(例如,授权书签名)

……

具体技术细节参考链接https://www.apnic.net/community/security/resource-certification/

接下来我们了解下国际上一些电信运营商所部属的bgp策略

Arelion

Arelion先根据IRR注册信息来构建前缀过滤器,优先级顺序为RADB、AFRINIC、RIPE、RIPE-NONAUTH、BELL、APNIC、NTTCOM、ALTDB、PANIX、NESTEGG、LEVEL3、LACNIC、REACH、AOLTW、OPENFACE、ARIN、 ARIN-NONAUTH、JPIRR、HOST、RGNET、BBOI、TC 和 CANARIE

Arelion 于 2018 年加入 MANRS ( https://www.manrs.org/ ),并在所有对等链路上实施了 RPKI

Arelion 对于RPKI不同状态所建议的操作

除了过滤掉 Invalids 之外,Arelion不会做任何deny操作,据我所知这也是大多运营商所选择的策略

也就是如果你的前缀没有做RPKI也不会影响正常发布,一旦ROAs所关联的orginas不一致就会被拒绝接收

RPKI StateDescriptionRecommended Action 
ValidCorrect IP/masklength from the correct origin AS according to the ROA.All good. No need to do anything.
UnknownNo ROA registered.We recommend customers to register ROAs to protect their address space but it’s not required.
InvalidIncorrect masklength and/or origin AS according to the registered ROA.The address space owner should correct the ROA.

PCCW

PCCW和Arelion类似,区别在于RADB的优先级放到了最低

NTT

Attn: NTT GIN enabled RPKI-aware mode on its Internet Routing Registry service (rr.ntt.net) and will suppress IRR information that conflicts with published RPKI ROAs.

This currently affects most databases with the notable exception of RADB. We expect to enable this functionality for RADB no later than October 19, 2022. More information on this functionality can be found at the IRRd RPKI integration documentation.

 NTT已经启用RPKI,但RADB除外,预计不晚于2022年10月19日为 RADB 启用此功能

RPKI服务器的搭建和使用

有以下维护良好的开源软件可以使用

我们用rpki-validator来实现,官网查看支持docker方式部署

https://hub.docker.com/r/ripencc/rpki-validator-3
docker pull ripencc/rpki-validator-3
docker run -p 8080:8080 --rm ripencc/rpki-validator-3

需要等待5-15分钟,进行数据库同步

 完成后访问http://ServerAddress:8080

可以看到这个镜像只有4大区域,少了arin.tal,需要自行下载放入tals文件夹,否则条目会有缺失

下载链接

  wget https://www.arin.net/resources/manage/rpki/arin.tal

直接复制粘贴也行,如下

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3lZPjbHvMRV5sDDqfLc/685th5FnreHMJjg8pEZUbG8Y8TQxSBsDebbsDpl3Ov3Cj1WtdrJ3CIfQODCPrrJdOBSrMATeUbPC+JlNf2SRP3UB+VJFgtTj0RN8cEYIuhBW5t6AxQbHhdNQH+A1F/OJdw0q9da2U29Lx85nfFxvnC1EpK9CbLJS4m37+RlpNbT1cba+b+loXpx0Qcb1C4UpJCGDy7uNf5w6/+l7RpATAHqqsX4qCtwwDYlbHzp2xk9owF3mkCxzl0HwncO+sEHHeaL3OjtwdIGrRGeHi2Mpt+mvWHhtQqVG+51MHTyg+nIjWFKKGx1Q9+KDx4wJStwveQIDAQAB

ROAs信息访问http://ServerAddress:8080/roas

配置RTR服务器供路由器使用

$wget https://ftp.ripe.net/tools/rpki/validator3/prod/generic/rpki-rtr-server-latest-dist.tar.gz

$mkdir rpki-rtr-server

$tar xf rpki-rtr-server-latest-dist.tar.gz -C rpki-rtr-server --strip-components 1

$cd rpki-rtr-server

$vim conf/application.properties
#修改rtr.server.address字段,对外提供RPKI-RTR服务的地址
#rtr.server.port=8323 侦听端口
#server.port=8081 RPKI服务器端口,上步所搭建
#server.address=localhost RPKI服务器地址,上步所搭建

$nohup ./rpki-rtr-server.sh > out 2> err &
#启动服务器

路由器配置使用RTR接口,以juniper为例

dark@Test-Route> show configuration routing-options
validation {
    group RPKI {
        session 10.0.3.108 {
            port 8323;
        }
    }
}



dark@Test-Route# show policy-options policy-statement bgp-import 
term RPKI-VAL {
    from {
        protocol bgp;
        validation-database valid;
    }
    then {
        validation-state valid;
        next term;
    }
}
term RPKI-INV {
    from {
        protocol bgp;
        validation-database invalid;
    }
    then {
        validation-state invalid;
        reject;
    }
}

配置完成后可以看到validation数据库数据

 来模拟下使用peer AS13335通告路由条目

可以对比上图ROAs信息可知只有1.0.0.0/24 AS13335对应关系可以在数据库中匹配到,我们缺失arin库所以,8.8.8.0/24没有对应的记录

  1.0.0.0/24  

  8.8.8.0/24

  1.0.4.0/24

通过策略过滤,只有1.0.0.0/24被标记为valid,1.0.4.0/24被标记为invalid,8.8.8.0/24未被标记,根据我们的策略valid是被拒绝掉的,查看路由表印证下

tips

  根据页面提示信息,该工具已经停止更新,生产环境中使用可以选择其他工具,如cfrpi 参考 https://github.com/cloudflare/cfrpki 

Leave a Reply

Your email address will not be published. Required fields are marked *

X