Como configurar um servidor DNS Response Policy Zone (RPZ) + Shallalist

Neste tutoria vamos aprender a configurar o um servidor DNS com RPZ, uma política personalizada para que os resolvedores recursivos retornem resultados modificados. Desta forma administradores de rede podem usar o DNS RPZ para impedir exemplo que hosts infectados por malwares entre outros casos como sites pornográficos tenham a resolução de nomes bloqueando.

O DNS RPZ é uma tecnologia desenvolvida pelo ISC disponível desde a versão 9.8 do Bind.

Muitas pessoas se referem ao DNS RPZ como um “DNS Firewall”. ISPs estão testando e implementando isso para fornecer proteção adicional aos seus clientes. Um bom exemplo é o OpenDNS Family Shield que utiliza deste recurso.

Mas o mais perigoso aqui é usar o RPZ para o mau! Essa política é muito usada infelizmente para tal. Sabe aquele roteador que foi infectado e todos os sites de bancos etc foram direcionado para servidores de hackers é bem possível que esse servidor esteja usando RPZ. Por isso você administrador de uma rede é muito importante bloquear todos os DNS que são suspeitos, ou melhor faça uma lista com todos os DNS mais famosos e confiáveis da internet e autorize apenas eles, seja um profissional que pensa na segurança do seu cliente.

Instalação do servidor DNS será com base no tutorial: Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster

Vou replicar apenas os comandos principais aqui para subir nosso DNS, se você deseja ter detalhes sobre a instalação do DNS leia o tutorial citado acima.

Ajuste sua interface de rede:

Instalando Bind9

Instalando Fail2ban

Altere:

Altere:

Altere:

Crie:

Crie:

Adicione:

DNS configurado e seguro! Vamos as configurações do RPZ.

RPZ

Primeiramente vamos supor que o servidor DNS tenha o IP 45.80.50.5 / 2804:f123:bebe:cafe::5, Então acesse seu servidor DNS MASTER responsável pelo domínio autoritativo e crie um subdomínios chamado exemplo “umbrella“. Também pode alterar o nome no reverso.

Voltando para o servidor DNS RPZ

Crie uma zona chamada rpz.zone

Adicione:

Adicione o response-policy

Vamos criar o arquivo qual vai ter todos nossos hosts (Domínios) bloqueados.

No exemplo vou adicionar alguns sites pornos.

Reinicie o serviço e verifique se o mesmo está rodando sem nenhum erro.

Vamos fazer um teste para ver se os domínios acima estão sendo direcionado para o nosso IP:

Testado subdomínios:

Seu DNS RPZ já está funcional.

Mas seria legal instalarmos um Serviço Web já que o IP do dos domínios bloqueados é nosso próprio servidor DNS-RPZ. Assim todas as páginas acessadas vão carregar um aviso que o site está sendo bloqueado por algum motivo.

Você pode acessar os tutoriais para saber mais sobre servidor web e domínios virtuais:
Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”
Como ter diversos sub/domínios no mesmo servidor? (Domínios virtuais com Apache2)

Instalando o Apache2+PHP

Por segurança recomendo remover a assinatura do servidor:

Alteramos a configurar padrão do apache para nosso domínio umbrella.remontti.net.br e restringir ele apenas para nossos IP de da nossa rede, da mesma forma feita para com os DNS.

Faça as devidas alterações, não esqueça de alterar em Require ip alterar para os IPs que você vai autorizar as conexões. Seu arquivo 000-default.conf vai ficas assim:

Vamos criar o arquivo 000-default-ssl.conf para usar certificado porém inválido, pois não fará diferença configurar um certificado válido (se você desejar pode seguir o passo no outro tutorial usando letsencrypt), pois os os hosts bloqueados não vão corresponder ao IP que o DNS resolveu, logo sempre vai retornar erro de certificado, mas para que quando um domínio com certificado for acessado não fique sem carregar a página iremos fazer o seguinte:

Adicione:

Para facilitar montei um modelinho de página que será nosso alerta. Você deve alterar o logo entre outros detalhes da index.php para sua realidade!
html.tar

Altere o nome da empresa/site, substitua também o arquivo do logo.

Caso você não gostou da página sinta-se livre para criar a sua própria, a ideia é apenas demonstrar como faze-la.

Hora de ver funcionar 🙂
Altere o DNS do seu computador para o IP do seu servidor RPZ e acesse um site proibido!

BINGO! 😛

Mas como fazer para saber tantos domínios? Bom existe uma lista chamada shallalist bem antiga por sinal mas ainda é atualizada. É claro que não vai ter todos os hosts, pois a todo minuto alguém esta criando um novo, mas vai já ajudar muito! Ao fazer donwload da lista teremos varias pastas divididas em categorias:

Montei um script para ler esses arquivos e montar nosso arquivo db.rpz.zone com base na shallalist. 🙂 Aceito presente depois dessa!
Para ficar organizado vamos criar uma pasta chamada script-rpz

Vamos criar um arquivo rpz.pl em linguagem perl para montar nosso arquivo db.rpz.zone.

No arquivo ajuste para as listas que desejar, no exemplo vou usar as: drugs, hacking, porn, spyware, violence, warez. Também seu domínios RPZ.

Próximo passo é criar o um shell script chamado gera.rpz.sh para baixar a lista e ajustar os domínios para não ter nenhum erro. Note que farei o ajuste apenas para categorias que usei, se você for fazer para outras não deixe de configurar no gera.rpz.sh.

De permissões entre no diretório do nosso script e execute o mesmo, fique atento se der algum erro!

Vai retornar:

Note que a linha 28 recebemos um OK isso significa que nosso arquivo está apto para ser usado!

Como descrito vamos primeiro gerar um bkp do nosso antigo db.rpz.zone.DATA_HJ

Em seguida mover o novo db.rpz.zone e restartar o bind.

Uau agora temos mais de um milhão de domínios em nosso RPZ!

Uma boa fonte de hosts você pode encontrar aqui.

Espero que tenha gostado! 🙂

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

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!

Rudimar Remontti

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

Você pode gostar...

9 Resultados

  1. Carvalho disse:

    Primeiramente, ótimo artigo. Sempre bem explicado e bem ilustrado!

    Tenho um autritativo aqui e não sei se serviria para o que gostaria de fazer. Tenho na rede “uma coleção” de URLs para acessar os equipamentos da infra. Gostaria de saber se, usando o recurso RPZ conseguiria fazer com que os clientes/internet (sou de um ISP) não conseguissem resolver essas URLs e só os host/redes autorizadas conseguissem essa resolução. Consigo fazer com o RPZ?

    Desde já, muito obrigado pelas postagens.

  2. italo disse:

    pode ser configurado no mesmo servidor master?

  3. Marcos Vinicius disse:

    Interessante, é possível redirecionar qualquer acesso para uma pagina, ex: no provedor o cliente não fez o pagamento então gostaria de exibir uma pagina de bloqueio para ele, então qualquer host que ele acessar iria exibir a pagina de bloqueio.

  4. Erlan Siqueira disse:

    Não consigo usar esses dois comandos

    a2ensite 000-default-ssl.conf
    # a2enmod http2 rewrite ssl

    o sistema diz que não encontrou o comando, alguém mais se deparou com esse erro??

  5. Bryam A P Balan disse:

    Demonstro muito obrigado por mais um belíssimo tutorial, com certeza irei fazer bom proveito dele. Acompanho seu blog desde a postagem de como configurar o bind, e desde então a cada novo tutorial me surpreendo mais e mais com o conhecimento que você compartilha !!!

Deixe um comentário

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