Como configurar o RPKI de forma simples

Resource Public Key Infrastructure (RPKI)

RPKI é a especificação de uma tecnologia discutida e proposta pelo IETF (Internet Engeenering Task Force), RFC 6480, que permite a validação de anúncios de rotas via protocolo BGP.

Essa tecnologia faz uso de Certificados Digitais (PKI), e de uma cadeia de certificação para validar a alocação de um conjunto de Recursos de Numeração Internet feita por um RIR/NIR a uma organização.

Um dos objetos a ser assinado com a referida chave privada se chama ROA (Route Origin Authorization), e que contém uma lista de blocos IPv4 e/ou IPv6 e um ASN que está autorizado a originar rotas para os referidos blocos.

As ROAs são então publicadas em repositórios e poderão ser utilizadas para validar que uma determinada rota para um bloco IP, recebida através do protocolo BGP, está sendo originada pelo ASN autorizado pelo detentor da alocação do bloco IP em questão.

Dessa forma cria-se um mecanismo para evitar uso indevido de blocos de endereços IP ou “sequestros”, que é quando através de um ASN se origina rotas para blocos IP alocados para outras organizações que não aquela responsável pelo ASN.

Vídeo recomendado que pode lhe ajudar esclarecer a importância do RPKI.
RPKI: Uma proteção para roubo de prefixos no BGP

Está instalação tem como base o projeto Krill. Krill é um daemon de Resource RPKI, apresentando uma Autoridade de Certificação (CA) e um servidor de publicação, escrito em Rust.

Aqui você irá aprender a instalar o Krill e configurar no registro.br, e antes de mais nada deixo meu agradecimento aoRafael Galdino da Cunha e Diego Bernadino que me ajudaram a entender um pouco mais de RKPI.

Distribuição utilizada neste tutorial:
Debian 10 Stretch – Instalação Limpa

A base desta instalação foi com informações na documentação oficial.

Não esqueça de virar root da forma correta e atualizar os pacotes, e instalar alguns pacotes que serão necessários.

Adicionaremos ao repositório os pacotes da nlnetlabs, faça de acordo com sua distribuição:
Debian 10 (Mais recomendada)

Debian 9

Debian 9

Ubuntu 18

Ubuntu 20

Importe a chave do repositório.

Atualize o repositório

Na data de hoje (29/10/2020) o mesmo se encontra na versão 0.8.0

Instale o krill

Após a instalação será criado no sistema um usuário chamado krill que é dono do diretório /var/lib/krill/ (que até o momento não existe nada nele).

Por segurança criaremos um backp original do krill.conf o arquivo de configuração.

Por padrão o krill roda em localhost porta 3000. Mas para nós acessar posteriormente sua interface web (lagosta) será necessário ter acesso a mesma, tornado aberta para todos. (Veremos também como aplicar um firewall, para não deixar acessível à todos)

Adicione como no print:

Por padrão o mesmo não vem habilitado na inicialização, para isso vamos habilita-lo.

Agora inicie o serviço

Verifique se o mesmo está rodando sem nenhum erro.

Com o comando netstat você pode se certificar que agora o krill está aberto para qualquer IP “0.0.0.0”

Tudo certo até aqui, será necessário pegarmos o Token que ele gerou na instalação, ele se encontra no arquivo /etc/krill.conf, para pega-ló pode executar este comando:


Neste caso meu token é 38d8ffbe35eaa2391b01681662037600, salve isso com 7 chaves!

E a instalação é só isso! 🙂

Agora basta acessar em seu navegador https://IP:3000 e nos depararemos com interface web do krill “lagosta”. (User o Firefox) É necessário aceitar o certificado inválido.

Informe o seu token em senha, no meu ex.: “38d8ffbe35eaa2391b01681662037600”

Ao entrar pela primera vez será necessário informar um nome de autoridade, adotarei como nome “meu AS”

Hora de acessarmos nossa conta no Registro.br

Clique em titularidade, em seguida “1 ASN”

Role a página ate o final e clique em Configurar RPKI

Volte a tela do Krill, e clique em Parents e copie o conteúdo do Child Request

Retorne ao Registro.BR e cole o conteúdo no campo Child Request e Habilitar RPKI

Copie o conteúdo do Parent Response que o RegistroBR gerou

Cole o mesmo no Krill campo Parent Response e clique em confirmar.

Deve retornar uma mensagem de sucesso.

Você será já direcionado para o Repository, então copie a Publisher Request

Vá ao registroBR e logo a baixo de parent response clique em Configurar publicação remota irá abrir um campo Publisher Request, agora cole e clique em Habilitar Publicação Remota

Role um pouco a paixa para baixo e veja que temos agora o Repository Response copie o mesmo e volte ao Krill

Cole no campo Repository Response e clique em Confirmar

Novamente deve retornar uma mensagem de sucesso.

Será direcionado para aba ROAs. Clique em Click Here to refresh/Clique aqui para atualizar.

Você verá seus prefixos anunciados

Agora precisamos adicionar nossos ROAs, clique em Add ROA/Adicionar ROA

Adicione todos seus prefixos

ROAs adicionados com sucesso! Nosso RPKI está finalizado!

Para validar você pode acessar os Looking Glass da G8 e da Telia que fazem validação do RPKI, mas tenha paciência, aguarde pelo menos 1 hora antes de arrancar os cabelos se não validar.

https://lg.sp4.spo.g8.net.br/

https://lg.telia.net/

Temos o site que é bem legal também: https://rpki-validator.ripe.net/

Não podemos esquecer o firewall, usarei o nftables

Instale e ative-o para iniciar com o sistema.

Edite as regras

Neste exemplo eu acessível apenas deixo apenas aberto para 200.200.200.0/22 e 192.168.0.0/24

Reinicie o serviço

Verificar as regras:

Backup

Não esqueça de colocar o diretório em suas políticas de backups: /var/lib/krill/. Uma dica é o tutorial: Criando backups de forma simples e enviando para o Telegram ou servidor via SSH

Bônus – Múltiplos CA

Se quiser hospedar as CA de outros provedores ou é responsável por mais de um AS, basta adicionar nova CA pelo cliente do terminal, e assim será possível gerenciar pela interface web (lagosta)

Ex:


Deixou meu agradecimento ao amigo @GlauberMattar por essa dica.

Monitoramento

Template Zabbix 5 e 4.4 para monitorar se a porta 3000 está respondendo. RR Krill Zabbix 5 / RR Krill Zabbix 4.4

Curtiu o conteúdo? Quer me ajudar manter essa p*** ? 🙂

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Participe do canal no telegram para ficar atualizado sempre que publicar um novo tutorial.

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Fontes:
https://github.com/NLnetLabs/krill
https://rpki.readthedocs.io/en/latest/krill/get-started.html
https://registro.br/tecnologia/numeracao/rpki/

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

9 Resultados

  1. Wagner Bento da Costa Junior disse:

    Parabéns pelo Tutorial.
    Qualidade 10000!!

  2. Diogo disse:

    Boa tarde, Parabéns. Próximo tutorial poderia ser de um validador, por exemplo o Routinator. hehehe! Show de bola.

  3. Ricardo Costa disse:

    Boa tarde, tenho uma duvida, no meu provedor uso Mikrotik, nele já consigo implementar RPKI?

  4. Diogo disse:

    Tutorial de excelência, assim como todos os outros. Parabéns.

  5. David disse:

    Primeiramente Parabéns e obrigado pelo post.Na lista de permissões de endereços , quais endereços eu devo permitir ? vc postou uma classe lá 200.200.x no seu diagrama de rede à quem pertenceria esses endereços , tomando como base esse post que vc fez.

  6. Leandro disse:

    Excelente. Parabéns demais

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *