Automatizando o bloqueio de sites no Brasil pelo DNS usando a API da anablock.net.br

Neste tutorial, abordaremos a configuração de uma Zona de Política de Resposta DNS (RPZ) com o objetivo de simplificar a resolução de nomes alterados, especialmente quando lidamos com escalas substanciais. Nosso objetivo é bloquear milhares de domínios de forma eficiente, minimizando o consumo de recursos de hardware em nosso servidor.

Não abordarei a instalação do BIND neste momento, pois já disponibilizamos um tutorial completo em nosso blog, que pode ser acessado através do seguinte link:
Servidor DNS Bind9 (Debian 12).

Para configurar sempre que um domínio bloqueado for resolvido pelo seu DNS em um IP da sua rede, você precisará criar um subdomínio no seu servidor DNS autoritativo. No arquivo de configuração dos seus hosts irei criar um subdomínio chamado bloqueadonobrasil, vejamos um exemplo:

1 # vim /var/cache/bind/master-aut/remontti.com.br/remontti.com.br.hosts
Copiar

Exemplo “bloqueadonobrasil“, ou então apontando para os IPs de localhost mesmo 127.0.0.1 e ::1 onde neste caso se o usuário acessar o domínio bloqueado simplesmente não irá abrir nada.

1 //...
2 bloqueadonobrasil       A       x.xx.xxx.x
3                         AAAA    xxxx:xxxx:xxxx::y
4 //...
Copiar

DNS PRIMÁRIO (MASTER)

Agora crie uma zona chamada rpz.zone em seu /etc/bind/named.conf.local. em allow-transfer e also-notify informe os IPs de seus servidores Slaves.

1 # vim /etc/bind/named.conf.local
Copiar
1 zone "rpz.zone" {
2         type master;
3         file "/var/cache/bind/rpz/db.rpz.zone.hosts";
4         allow-query { none; };
5         allow-transfer { 10.51.51.3; };
6         also-notify { 10.51.51.3; };
7 };
Copiar

Vamos criar o diretório “rpz” e os arquivos de hosts que serão bloqueados.

1 # mkdir /var/cache/bind/rpz/
Copiar

Criarei um atalho em /etc/bind para facilitar o acesso da pastar também.

1 # ln -s /var/cache/bind/rpz/ /etc/bind/rpz
Copiar

Entendendo como os domínios são bloqueados. A seguir, apresentamos um exemplo do arquivo que servirá como base para o nosso próximo script a seguir:
Nome do arquivo: /var/cache/bind/rpz/db.rpz.zone.hosts

1 $TTL 1H
2 @       IN      SOA LOCALHOST. bloqueadonobrasil.remontti.com.br. (
3                 2024012201      ; Serial  
4                 1h              ; Refresh
5                 15m             ; Retry
6                 30d             ; Expire 
7                 2h              ; Negative Cache TTL
8         )
9         NS  bloqueadonobrasil.remontti.com.br.
10 ;       ou
11 ;       NS  localhost.
12  
13 sitequeprecisabloquear.com     IN CNAME .
14 *.sitequeprecisabloquear.com   IN CNAME .
15 elesmandamnosfaz.bo.bo         IN CNAME .
16 *.elesmandamnosfaz.bo.bo       IN CNAME .
Copiar

Sendo que para cada domínio que será bloqueado, o mesmo será adicionado:

1 sitequeprecisabloquear.com        IN CNAME .
2 *.sitequeprecisabloquear.com      IN CNAME .
Copiar

Assim qualquer subdomínio (*).domino.com seja traduzido sempre irá ser apontado para seu IP ou localhost.

Antes de criar o script, ajuste o response-policy dentro do seu /etc/bind/named.conf.options

1 # vim /etc/bind/named.conf.options
Copiar

Deve ficar dentro de options { … } adcione:

1 options {
2 //...
3     response-policy {
4       zone "rpz.zone" policy CNAME bloqueadonobrasil.remontti.com.br;
5     };
6 //...
Copiar

Ou se você irá apontar para localhost use:

1 options {
2 //...
3     response-policy {
4       zone "rpz.zone" policy CNAME localhost;
5     };
6 //...
Copiar

Script AnaBlock

Para simplificar nossa tarefa, criaremos um script que utiliza o site https://anablock.net.br, uma plataforma desenvolvida por Patrick Brandão da Nuva. Ele projetou uma página abrangente que oferece todas as informações necessárias para acompanhar os bloqueios de conteúdo regulados pela Anatel e pelas autoridades da República Federativa do Brasil.

Porém ANATEL solicitou a remoção dessa lista:

Para liberação da lista você deve entrar em contato com Patrick Brandão

Crie um diretório onde iremos salvar nosso script:

1 # mkdir /etc/bind/scripts
Copiar

Subi meu script no Github, mas iremos entrar na nossa pasta /etc/bind/scripts e baixar ele direto para nosso servidor.

1 # cd /etc/bind/scripts
2 # wget https://raw.githubusercontent.com/remontti/anablock_bind9/main/anablock_bind9.py
Copiar

Esse scrip ira verificar verificar qual sua versão e sempre que existir uma nova ou se for sua primeira vez ele irá baixar a lista de todos os domínios e cria o arquivo db.rpz.zone.hosts com a lista completa de siste que serão bloqueados pelo seu DNS.

Script foi feito em python3 instale os pacotes necessários para executa-lo.

1 # apt install python3 python3-requests tree
Copiar

Execute o script:

1 # python3 /etc/bind/scripts/anablock_bind9.py bloqueadonobrasil.remontti.com.br
Copiar
1 Arquivo de zona RPZ atualizado.
2 Permissões do diretório alteradas com sucesso.
3 Serviço Bind9 reiniciado com sucesso.
Copiar
1 # tree -h /var/cache/bind/rpz/
Copiar

Seu diretório terá os seguintes arquivos

1 /var/cache/bind/rpz/
2 ├── [159K]  db.rpz.zone.hosts
3 ├── [ 46K]  domain_all
4 └── [  11]  version
Copiar

Se você executar o script novamente nada irá acontecer até que uma nova versão seja lancada.

Para que tenhamos nossa lista sempre atualizada, colocamos o script para ser executado todos os dias a meia noite.

1 # echo '00 00   * * *   root    python3 /etc/bind/scripts/anablock_bind9.py bloqueadonobrasil.remontti.com.br'\ >> /etc/crontab
2 # systemctl restart cron
Copiar

Testes

Agora faça um teste para ver o que seu servidor ira traduzir corretamente:

1 # dig 2filmestorrent.top @localhost
Copiar
1 ; <<>> DiG 9.11.5-P4-5.1+deb10u9-Debian <<>> 2filmestorrent.top @localhost
2 ;; global options: +cmd
3 ;; Got answer:
4 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42124
5 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
6 
7 ;; OPT PSEUDOSECTION:
8 ; EDNS: version: 0, flags:; udp: 4096
9 ; COOKIE: be484fb71dfe219dd9e6544465ae7d4b7e142ef750ed0d80 (good)
10 ;; QUESTION SECTION:
11 ;2filmestorrent.top.		IN	A
12 
13 ;; ANSWER SECTION:
14 2filmestorrent.top.	5	IN	CNAME	bloqueadonobrasil.remontti.com.br.
15 bloqueadonobrasil.remontti.com.br. 10800	IN A	x.x.x.x
16 
17 ;; Query time: 479 msec
18 ;; SERVER: ::1#53(::1)
19 ;; WHEN: seg jan 22 11:35:55 -03 2024
20 ;; MSG SIZE  rcvd: 137
Copiar

DNS SECUNDÁRIO’s (SLAVE’s)

Agora crie uma entrada zona chamada rpz.zone em seu /etc/bind/named.conf.local. em masters e also-notify informe os IPs de seus servidores Master.

1 # vim /etc/bind/named.conf.local
Copiar
1 zone "rpz.zone" {
2     type slave;
3     file "/var/cache/bind/rpz/db.rpz.zone.hosts";
4     masters { 10.51.51.2; };
5     allow-notify { 10.51.51.2; };
6 };
Copiar

Configure o response-policy

1 # vim /etc/bind/named.conf.options
Copiar

Deve ficar dentro de options { … } adcione:

1 options {
2 //...
3     response-policy {
4       zone "rpz.zone" policy CNAME bloqueadonobrasil.remontti.com.br;
5       // ou
6       // zone "rpz.zone" policy CNAME localhost;
7       // 
8     };
9 //...
Copiar

Crie o diretório, de permissão, e reinicie o bind.

1 # mkdir /var/cache/bind/rpz/
2 # chown bind: /var/cache/bind/rpz/ -R
3 # systemctl restart bind9
Copiar

Arquivo db.rpz.zone.hosts será criado dentro de /var/cache/bind/rpz/

1 # tree /var/cache/bind/rpz/
Copiar
1 /var/cache/bind/rpz/
2 └── db.rpz.zone.hosts
Copiar

Configurando uma Página de Bloqueio em Seu Servidor Web

Vou deixar exemplo com fazer isso em um Apache.Crie o diretório onde iremos criar nossa página:

1 # mkdir /var/www/bloqueadonobrasil
Copiar

Apache

Crie o arquivo de configuração do apache.

1 # vim /etc/apache2/sites-available/bloqueadonobrasil.conf
Copiar
1 <virtualhost *:80>
2         Protocols h2 http/1.1
3         ServerName bloqueadonobrasil.remontti.net.br
4         ServerAlias x.xxx.xxx.x
5         ServerAlias [xxxx:xxxx:xxxx:xxxx::x]
6 
7         ServerAdmin [email protected]
8 
9         ErrorDocument 404 /index.php
10  
11         DocumentRoot /var/www/bloqueadonobrasil
12  
13         <Directory /var/www/bloqueadonobrasil/>
14             Options FollowSymLinks
15             AllowOverride All
16             # Restringe o acesso apenas para os IPs do seu ISP
17             Require ip 127.0.0.1 ::1 100.64.0.0/10 x.xx.xxx.x/22 xxxx:xxxx::/32
18         </Directory>
19  
20         LogLevel warn 
21         ErrorLog ${APACHE_LOG_DIR}/error.log
22         CustomLog ${APACHE_LOG_DIR}/access.log combined
23 </virtualhost>
Copiar

Habilite a configuração e reinicie o Apache

1 # a2ensite bloqueadonobrasil.conf
2 # systemctl restart apache2
Copiar

Instale o certbot para gerar um certificado ssl para o domínio

1 # apt install certbot python3-certbot-apache
Copiar

Execute:

1 # certbot
Copiar

Selecione seu domínio, e em sguinda reponda com No redirect

1 Which names would you like to activate HTTPS for?
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 1: remontti.com.br
4 2: bloqueadonobrasil.remontti.com.br
5 
6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
7 Select the appropriate numbers separated by commas and/or spaces, or leave input
8 blank to select all options shown (Enter 'c' to cancel): 2 <<<<<<<<<<<<<<<<<<<<
9 Obtaining a new certificate
10 Performing the following challenges:
11 http-01 challenge for bloqueadonobrasil.remontti.com.br
12 Waiting for verification...
13 Cleaning up challenges
14 Created an SSL vhost at /etc/apache2/sites-available/bloqueadonobrasil-le-ssl.conf
15 Deploying Certificate to VirtualHost /etc/apache2/sites-available/bloqueadonobrasil-le-ssl.conf
16 Enabling available site: /etc/apache2/sites-available/bloqueadonobrasil-le-ssl.conf
17 
18 Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
19 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
20 1: No redirect - Make no further changes to the webserver configuration.
21 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
22 new sites, or if you're confident your site works on HTTPS. You can undo this
23 change by editing your web server's configuration.
24 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
25 Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1 <<<<<
Copiar

Agora vou deixar um exemplo de página para ajudar você:

Automatizando o bloqueio de sites no Brasil pelo DNS usando a API da anablock.net.br

Vamos excluir o diretório que foi criado, já que estou prestes a baixar minha página, que, ao ser descompactada, conterá o mesmo nome.

1 # rm -rf /var/www/bloqueadonobrasil/
2 # cd /var/www/
3 # wget https://github.com/remontti/anablock_bind9/raw/main/bloqueadonobrasil.tar.gz
4 # tar -vxzf bloqueadonobrasil.tar.gz
5 # rm bloqueadonobrasil.tar.gz

Este blog utiliza cookies para garantir uma melhor experiência. Se você continuar assumiremos que você está satisfeito com ele.