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