Como bloquear sites pelo DNS (BIND9) Response Policy Zones
Neste tutorial vamos aprender a configurar um DNS Response Policy Zones (RPZ) para que retornem resultados de resoluções de nomes modificados de uma foma simples pensando em grandes escalas, pois parece que no Brasil vai virar modinha solicitar que os provedores fiquem bloqueando sites. Diga olá a censura!.
Não irei ensinar instalar o bind até porque já tem tutorial explicando aqui no blog.
Se você deseja configurar que toda vez que o domínio bloqueado for traduzido, traduza um IP da sua rede qual tenha um serviço web rodando com alguns dizerem por exemplo, será necessário configurar um subdomínio no seu DNS Autoritativo. Exemplo:
# vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts
Exemplo “umbrella” , ou então apontando para os IPs de localhost mesmo 127.0.0.1 e ::1
//... umbrella A 45.10.20.5 AAAA 2804:f123:bebe:cafe::5 //...
Agora basta criar uma zona chamada rpz.zone em seu /etc/bind/named.conf.local.
# vim /etc/bind/named.conf.local
zone "rpz.zone" { type master; file "/var/cache/bind/rpz/db.rpz.zone"; allow-query { none; }; };
Criaremos o diretório rpz, bem como o arquivos de hosts quais serão bloqueados
# mkdir /var/cache/bind/rpz/ # ln -s /var/cache/bind/rpz/ /etc/bind/rpz # vim /var/cache/bind/rpz/db.rpz.zone
Se você está resolvendo para subdomínio exemplo umbrella.cursodns.com.br, crie o arquivo da seguinte forma:
$TTL 1H @ IN SOA LOCALHOST. umbrella.cursodns.com.br. ( 2022042801 ; Serial 1h ; Refresh 15m ; Retry 30d ; Expire 2h ; Negative Cache TTL ) NS umbrella.cursodns.com.br. sitequeprecisabloquear.com IN CNAME . *.sitequeprecisabloquear.com IN CNAME . elesmandamnosfaz.bo.bo IN CNAME . *.elesmandamnosfaz.bo.bo IN CNAME .
Ou se só ta querendo jogar para o infinito e além, aponte para localhost mesmo.
$TTL 1H @ IN SOA LOCALHOST. localhost.localhost. ( 2022042801 ; Serial 1h ; Refresh 15m ; Retry 30d ; Expire 2h ; Negative Cache TTL ) NS localhost. sitequeprecisabloquear.com IN CNAME . *.sitequeprecisabloquear.com IN CNAME . elesmandamnosfaz.bo.bo IN CNAME . *.elesmandamnosfaz.bo.bo IN CNAME .
Sendo que para cada domínio que você deseja bloquear, siga o formato:
alllllandossssantos.com IN CNAME . *.alllllandossssantos.com IN CNAME .
Assim qualquer subdomínio (*).domino.com seja traduzido sempre irá ser apontado para seu IP ou Localhost.
Agora adicione o response-policy dentro do seu /etc/bind/named.conf.options
# vim /etc/bind/named.conf.options
Deve ficar dentro de options { … } adcione:
options { //... response-policy { zone "rpz.zone" policy CNAME umbrella.cursodns.com.br; }; //...
Se usou os ips de localhost use:
options { //... response-policy { zone "rpz.zone" policy CNAME localhost; }; //...
Altere as permissões do diretório /var/cache/bind/rpz/ para que o bind consiga ler o mesmo e reinicie o serviço.
# chown bind. /var/cache/bind/rpz/ -R # systemctl restart bind9
Testes
Agora faça um teste para ver o que seu servidor ira traduzir corretamente:
# dig @localhost alllllandossssantos.com
; <<>> DiG 9.16.27-Debian <<>> @localhost alllllandossssantos.com ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20245 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: d9b8e60a2ecf09ad01000000626ad597bd40b368154c9bdb (good) ;; QUESTION SECTION: ;alllllandossssantos.com. IN A ;; ANSWER SECTION: alllllandossssantos.com. 5 IN CNAME localhost. localhost. 604800 IN A 127.0.0.1 ;; ADDITIONAL SECTION: rpz.zone. 1 IN SOA LOCALHOST. localhost.localhost. 2022042801 3600 900 2592000 7200 ;; Query time: 4 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Apr 28 14:57:43 -03 2022 ;; MSG SIZE rcvd: 182
# dig sitequeprecisabloquear.com
; <<>> DiG 9.16.27-Debian <<>> sitequeprecisabloquear.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11551 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: dc78338a3afd94bc01000000626ad6724eeea9366a7d771d (good) ;; QUESTION SECTION: ;sitequeprecisabloquear.com. IN A ;; ANSWER SECTION: sitequeprecisabloquear.com. 5 IN CNAME umbrella.cursodns.com.br. umbrella.cursodns.com.br. 14362 IN A 45.10.20.5 ;; ADDITIONAL SECTION: rpz.zone. 1 IN SOA LOCALHOST. umbrella.cursodns.com.br. 2022042801 3600 900 2592000 7200 ;; Query time: 4 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Apr 28 15:01:22 -03 2022 ;; MSG SIZE rcvd: 186
# host sitequeprecisabloquear.com
sitequeprecisabloquear.com is an alias for umbrella.cursodns.com.br. umbrella.cursodns.com.br has address 45.10.20.5 umbrella.cursodns.com.br has IPv6 address 2804:f123:bebe:cafe::5
# ping sitequeprecisabloquear.com
PING sitequeprecisabloquear.com(webhost.cursodns.com.br (2804:f123:bebe:cafe::5)) 56 data bytes 64 bytes from webhost.cursodns.com.br (2804:f123:bebe:cafe::5): icmp_seq=1 ttl=61 time=1.06 ms 64 bytes from webhost.cursodns.com.br (2804:f123:bebe:cafe::5): icmp_seq=2 ttl=61 time=1.17 ms 64 bytes from webhost.cursodns.com.br (2804:f123:bebe:cafe::5): icmp_seq=3 ttl=61 time=1.18 ms --- sitequeprecisabloquear.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 1.061/1.116/1.171/0.055 ms
# ping -4 sitequeprecisabloquear.com
PING (45.10.20.5) 56(84) bytes of data. 64 bytes from webhost.cursodns.com.br (45.10.20.5): icmp_seq=1 ttl=61 time=0.991 ms 64 bytes from webhost.cursodns.com.br (45.10.20.5): icmp_seq=2 ttl=61 time=1.32 ms 64 bytes from webhost.cursodns.com.br (45.10.20.5): icmp_seq=3 ttl=61 time=1.59 ms 64 bytes from webhost.cursodns.com.br (45.10.20.5): icmp_seq=4 ttl=61 time=0.789 ms --- ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 4703ms rtt min/avg/max/mdev = 0.789/1.172/1.590/0.306 ms
Gostou? Se quiser apoiar o blog e 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!
apresenta este erro
named-checkconf named-checkconf /etc/bind/named.conf.options
/etc/bind/named.conf.options:23: response-policy zone ‘rpz.zone’ is not a primary or secondary zone
/etc/bind/named.conf.options:23: response-policy zone ‘rpz.zone’ is not a primary or secondary zone
named-checkconf -p
named-checkconf -p
acl “autorizados” {
127.0.0.1/32;
::1/128;
77.77.700.0/22;
7777:7777::/32;
100.64.0.0/10;
fd00::/8;
fe80::/10;
fc00::/8;
};
logging {
…
};
options {
directory “/var/cache/bind”;
listen-on {
“any”;
};
listen-on-v6 {
“any”;
};
version “RR DNS Server”;
allow-query-cache {
“autorizados”;
};
allow-recursion {
“autorizados”;
};
auth-nxdomain no;
dnssec-validation auto;
minimal-responses yes;
response-policy {
zone “rpz.zone” policy CNAME “localhost”;
};
allow-query {
“any”;
};
allow-transfer {
77.77.700.3/32;
7777:7777:0:1::3/128;
};
also-notify {
77.77.700.3;
7777:7777:0:1::3;
};
masterfile-format text;
};
zone “meu-site.net.br” {
type master;
file “/var/cache/bind/master-aut/meu-site.net.br/meu-site.net.br.hosts”;
inline-signing yes;
dnssec-policy “default”;
key-directory “/var/cache/bind/master-aut/meu-site.net.br/keys/”;
serial-update-method unixtime;
};
zone “rpz.zone” {
type master;
file “/var/cache/bind/rpz/db.rpz.zone”;
allow-query {
“none”;
};
Boa tarde,
Seria possível fazer o bloqueio de um domínio com diversas variações no nome do domínio?
Exemplo: gostaria de bloquear o site-*.com, bloquear qualquer coisa que tenha no nome do dominio site-*.
Opa, beleza?
No caso eu estou usando o autoritativo direto do registro br,
eu consigo fazer os bloqueios pelo recursivo?
é possível fazer esse bloqueio somente com servidor recursivo?
Sim, você só está criando uma entrada autoritativa que resolve apenas para seus clientes
No meu caso o bind restartou normal, estava dando uns erros mas corrigi….porem ele continua resolvendo os nomes normalmente, mesmo com a policy
Parabens ! muito didatico e funcional seus tutoriais ! ajuda demais ! parabens!
Como sempre o conteúdo é rico em conhecimento. Parabeéns!
Quem quiser fazer com o unbound precisa ser versão >= 1.10.0. No unbound.conf você habilita assim:
Carregando o respip:
Ainda no unbound.conf:
Cria o arquivo /etc/unbound/rpz.block.hosts.zone conforme esse conteúdo de exemplo:
Pronto só reiniciar o unbound.
Marcelo,
Boa tade.
No meu caso ele da erro na procura pela chave rpz, isso acontece após adiciona rpz ao final do arquivo .conf
Parabéns pelos conteúdos!
Sempre acompanho, e sempre fico esperando, para poder ver o que de bom você traz de novidade, para poder aprender mais com o que você ensina.
O meu só da erro de chave rpz.
Top!
ótimo material.
show de bola Rudimar mais uma vez compartilhando conhecimento.