Tutorial ativando seu RPKI

Olá Pessoas!

Me chamo Rafael Galdino e juntamente com o Diego Bernadino também da Suporte Network, estavámos verificando sobre como funciona e como fazer nossa tarefa de casa. Olhando o Tutorial do Nic.br sobre RPKI: https://www.youtube.com/watch?v=wBpyhVuq8dw
fomos tentar fazer nosso servidor, porém tivemos uns problemas pois algumas posições das sintaxes mudou…. e foram horas e horas tentando. olhando outros sites, pesquisando. Com isso fizemos esse tutorial para que você mesmo possa fazer seu servidor RPKI e validar seu prefixos.

Não vamos entrar muito em detalhes pra que é, como é, de onde é o RPKI. Pedimos que olhem esse vídeo do Nic.br que tem explicando tudo sobre isso.

vamos lá mão na massa???

Configuração que utilizamos:
uma VM com 2 CPU / 2GB RAM / 20GB HD
Sistema: Debian 10 64bits

após a instalação limpa do Debian
apt-get install build-essential libssl-dev openssl pkg-config curl whois

após a instalação das dependências, criar uma pasta para a instalação do Krill

mkdir -p /opt/krill
cd /opt/krill
touch krill.conf
curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh    
( apenas apertar Enter para prosseguir)

agora vamos fazer a instalação:
source ~/.cargo/env
cargo install krill

Vamos agora criar um script para iniciar/parar o krill, pois o mesmo não tem,  ( Créditos NTLabs dos scripts )
Apenas copiar  e colar no terminal:
cat <<\EOF >/usr/bin/krill_start
#!/bin/bash
KRILL=”krill”
DATA_DIR=”/opt/krill”
KRILL_PID=”$DATA_DIR/krill.pid”
CONF=”$DATA_DIR/krill.conf”
SCRIPT_OUT=”$DATA_DIR/krill.log”
nohup $KRILL -c $CONF >$SCRIPT_OUT 2>&1 &
echo $! > $KRILL_PID
EOF
chmod +x /usr/bin/krill_start

Apenas copiar e colar no terminal:
cat <<\EOF >/usr/bin/krill_stop
#!/bin/bash
DATA_DIR=”/opt/krill”
KRILL_PID=”$DATA_DIR/krill.pid”
kill `cat $KRILL_PID`
EOF
chmod +x /usr/bin/krill_stop

vamos verificar se esta tudo ok com o comando:
krill -V

o Resultando deve ser algo: Krill 0.7.2
caso apresente algum erro digite:
ln -s /root/.cargo/bin/krill /usr/bin
ln -s /root/.cargo/bin/krillc /usr/bin
ou tente dar um stop e um start no serviço.

Parabéns você conseguiu instalar o Krill, agora vamos para a configuração, iremos precisar já já acessar o registro.br para
fazer a configuração.

Criar a configuraçãodo Krill e uma senha segura

cat <<\EOF >/opt/krill/krill.conf
ip = “0.0.0.0”
port = 3000
auth_token = “MinhaSenhasegura2020@”
EOF

Vamos criar nossa CA utilizando o cliente do Krill, adotamos o nome: ASN65000 ( coloquem o número de seu ASN aqui, isso é apenas um exemplo usando o 65000)

krillc add –server https://localhost:3000/ –token MinhaSenhasegura2020@ –ca ASN65000

Vamos criar agora nosso child_request
krillc parents request –server https://localhost:3000/ –token MinhaSenhasegura2020@ –ca ASN65000

 

Esse último comando gera um XML chamado child_request, com ele conseguiremos gerar o parent_response no site do registro.br, então copie o XML. (observe para não copiar com espaços pois pode dar erro)

Vamos gerar o parent_response:
1- Acesse sua conta no Registro.br
2- Em titularidade clique no seu Titular
3- No fim da página clique em CONFIGURAR RPKI
4- No campo child request cole o XML que foi gerado pelo comando e clique em HABILITAR RPKI.

O Registro.br irá gerar um outro XML chamado parent_response:

 


Copie o conteúdo e vamos criar o arquivo parent_response.xml no krill

cat <<\EOF >parent_response.xml
COLE AQUI O PARENT RESPONSE RECEBIDO DO REGISTRO.BR
EOF

ficaria assim o exemplo:

Copie e cole no terminal do linux

Pronto, agora sim, o RPKI está ativo no seu ASN!
Vamos então gerar os ROAs de seus prefixos para protegê-los e prevenir que sofram hijack.
Mas antes vamos ativar para que o Krill faça publicação remota no registro.br, volte ao terminal do seu linux.

krillc repo request –server https://localhost:3000/ –token MinhaSenhasegura2020@ –ca ASN65000

 

O comando anterior gerou um XML chamado publisher_request, copie e volte ao registro.br onde você ativou o RPKI,  abaixo do Parent response, tem um link “Configurar publicação remota”, clique nele, no campo que apareceu cole o XML e clique em HABILITAR PUBLICAÇÃO REMOTA.

Agora você tem outro XML, chamado Repository response, Seguindo o mesma lógica, vamos criar um arquivo XML no Linux.

cat <<\EOF >repository_response.xml
COLE AQUI O XML REPOSITORY RESPONSE
EOF
Ficará:

Agora que temos o arquivo XML criado no Linux, vamos autorizar em nosso Krill

krillc parents add –server https://localhost:3000/ –token MinhaSenhasegura2020@ –ca ASN65000 –parent nicbr_ca –response parent_response.xml

Vamos agora criar o arquivo com as ROAS

cat <<\EOF >roas.txt
A: 192.168.0.0/22 => 65000
A: 2000:2000::/32 => 65000
EOF

 

( usar os blocos que você quer fazer RPKI, e o ASN é o SEU ASN mesmo)

 

Estamos dizendo que o bloco /22 ipv4 e o /32 ipv6 são os únicos válidos, ou seja, quando algum provedor for exportar seus blocos, e por algum motivo ele tentar exportar um prefixo /23 ou um /24 por exemplo para um AS que valide os prefixos por RPKI, esse AS não vai aceitar esse prefixo /23 pois você não validou o /23 e com isso o prefixo é descartado e não será roteado por esse AS.

Vamos supor que você fez o exemplo de validar o prefixo 22, e depois resolveu que não quer mais dessa forma e quer somente validar
os 4 prefixos /24, ai você abre o seu arquivo de roas, apaga tudo e faz o seguinte:

R: 192.168.0.0/22-24 => 65000

Salva o arquivo e atualiza suas ROAs, e agora abre de novo o arquivo e faz o seguinte:

A: 192.168.0.0/24 => 65000
A: 192.168.1.0/24 => 65000

A: 192.168.2.0/24 => 65000
A: 192.168.3.0/24 => 65000

 

E agora pode atualizar novamente seus ROAs, nesse momento, todos os AS que fazem drop de RPKI invalid, não irão mais aceitar diferentes dos prefixos /24 do seu AS originados por qualquer AS, e perceberam que toda vez que for mudar algo precisa apagar o que foi feito com “R”emover e depois “A”adicionar?

Vamos aos comandos para atualizar e autorizar os ROAs.

A: 192.168.0.0/22 => 65000
A: 2001:db8::/32 => 65000

Você colocou seus prefixos no arquivo, agora execute o seguinte comando para update:

krillc repo update –response repository_response.xml –server https://localhost:3000/ –token MinhaSenhasegura2020@ –ca ASN65000

krillc roas update –server https://localhost:3000/ –token MinhaSenhasegura2020@ –ca ASN65000 –delta roas.txt

Com isso aguardar em média de 10 a 15 minutos para a propagação.

vamos usar o site da operadora G8 que é aqui no Brasil e já Valida RPKI, e vamos ver da operadora Telia

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

colocamos os dados no site e vamos ter o seguinte resultado:

Na Telia:

 

 

 

 

 ainda temos a possibilidade de validar no próprio Linux depois de um tempo, aqui validou primeiro na G8 e Telia que no Linux rs…..
com o seguinte comando:

whois -h whois.bgpmon.net 192.168.0.0/24

 

bem Pessoal espero que tenham gostado, qualquer dúvida ou crítica estamos no contato@suporte.network

deixo aqui em baixo alguns locais para consulta e aprofundamento do assunto:

https://wiki.brasilpeeringforum.org/w/Protegendo_seu_ASN_com_RPKI

https://registro.br/tecnologia/numeracao/rpki/

 

Agradecimentos:
Diego Bernadino
Renato Pereira
Eduardo Morales
Rudimar Remotti