RPKI (Resource Public Key Infrastructure)

De ISPUP!
Revisão de 17h18min de 4 de março de 2023 por Gondim (discussão | contribs)
Ir para navegação Ir para pesquisar

Introdução

É uma tecnologia discutida e proposta pelo IETF (Internet Engeenering Task Force), definida na RFC6480 e que serve para validar anúncios de rotas recebidas através do protocolo BGP. O RPKI pode ser separado em duas partes independentes: a parte que faz os anúncios das ROAs (Route Origin Authorization) e a parte que faz a validação das ROAs através do protocolo RtR (RPKI to Router). Esta última requer que o equipamento possua suporte a esse protocolo para funcionar. Juniper, Cisco, Huawei e até FRR possuem suporte a RtR. Os softwares utilizados e recomendados pelo NIC.br para o RPKI são: Krill e Routinator, ambos desenvolvidos pela NLNET Labs, a mesma empresa que desenvolve o Unbound e o NSD.

Um servidor virtualizado e com pouco recurso, pode hospedar tanto o Krill quanto o Routinator não só para atender um ASN, mas para diversos. Mais informações sobre RPKI podem ser encontradas aqui: https://registro.br/tecnologia/numeracao/rpki/

Requisitos

Embora não seja obrigatório você pode instalar no mesmo sistema o seu krill e o routinator. O krill não necessita de acesso entrante vindo da Internet e por isso pode estar atrás de qualquer NAT, que irá funcionar e o routinator também pode estar com um IP privado para se comunicar com o seu router de borda e fazer as validações das ROAs. Nesse artigo vamos usar o mesmo sistema para ambos e como de costume usaremos nosso querido Debian. Quem ainda não viu esse artigo sobre Template de Servidor Debian GNU/Linux dê uma olhada antes de começar, que pode ser interessante. Vamos precisar para o nosso sistema:

CPU Memória Disco Sistema
2.4Ghz 4 cores 2G 30G Debian 11 amd64

Instalação krill

Existem alguns pacotes que precisamos instalar além do repositório oficial do RPKI para o Debian. Então façamos conforme abaixo:

# apt install ca-certificates curl gnupg lsb-release
# curl -fsSL https://packages.nlnetlabs.nl/aptkey.asc | gpg --dearmor -o /usr/share/keyrings/nlnetlabs-archive-keyring.gpg
# echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/nlnetlabs-archive-keyring.gpg] https://packages.nlnetlabs.nl/linux/debian $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/nlnetlabs.list > /dev/null
# apt update
# apt install krill

Vamos adicionar dentro de /etc/krill.conf a variável abaixo:

ip = "0.0.0.0"

Dentro deste mesmo arquivo de configuração, será gerado durante a instalação um token e é com ele que faremos todas as nossas configurações e acesso à interface web do krill. Você pode facilmente descobrir o seu token olhando o arquivo ou fazendo isso na linha de comando:

# grep admin_token /etc/krill.conf
admin_token = "bd7b942dxxxxxxxxxxxxxxx69f2194ed"
#   "admin-token"    admin_token  role = "admin"  id = "admin-token"

Reinicie o processo do krill:

# systemctl restart krill

Configurando sua primeira CA no Krill

Quando instalamos o krill precisamos configurar nossa primeira CA (Certificate Authority) que na maioria dos casos será apenas uma, mas se você tiver fazendo a gerência de outros ASNs em diferentes CNPJs, pode ser necessário criar mais de uma CA e mostrarei depois como fazê-lo. Como exemplo você vai acessar a interface web assim:

https://<IP>:3000

Na caixa de diálogo você entrará com o nome da CA, por exemplo vou entrar com o nome: ISPUP e clicar em Create CA.

Após criar o CA, o primeiro item que vamos configurar será o Parents com o Registro.br e nesse caso você precisará acessar com o ID administrativo do AS para poder fazer essa configuração.

Na tela acima temos o Child Request e clicaremos no botão abaixo para copiar as instruções para o clipboard:

Enquanto isso lá no Registro.br precisamos ir nas configurações do ASN e acessar as configurações do RPKI: