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.
# vim /etc/network/interfaces
Ajuste sua interface de rede:
allow-hotplug enp0s3
iface enp0s3 inet static
        address 45.80.50.5/27
        gateway 45.80.50.1
        dns-nameservers 127.0.0.1
        dns-search localhost
iface enp0s3 inet6 static
        pre-up modprobe ipv6
        address 2804:f123:bebe:cafe::5
        netmask 64
        gateway 2804:f123:bebe:cafe::1
Instalando Bind9
# su - # apt install bind9 dnsutils # echo "nameserver 127.0.0.1" > /etc/resolv.conf # cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp # echo > named.conf.options # vim /etc/bind/named.conf.options
acl autorizados {
    127.0.0.1;
    ::1;
    45.80.50.0/23;
    2804:f123::/32;
    192.168.0.0/16;
    172.16.0.0/12;
    100.64.0.0/10;
    10.0.0.0/8;
};
 
options {
    directory "/var/cache/bind";
 
    dnssec-enable yes;
    dnssec-validation auto;
 
    auth-nxdomain no;
 
    listen-on { any; };
    listen-on-v6 { any; };
 
    minimal-responses yes;
 
    allow-recursion { autorizados; };
 
    allow-query-cache { autorizados; };
 
    allow-query { any; };
 
    allow-transfer { none; };
 
    masterfile-format text;
 
    version "RR DNS Server";
};
Instalando Fail2ban
# apt install nftables fail2ban # vim /etc/fail2ban/jail.conf
Altere:
#banaction = iptables-multiport #banaction_allports = iptables-allports banaction = nftables-allports banaction_allports = nftables-allports
# vim /etc/fail2ban/action.d/nftables-allports.conf
Altere:
#nftables_mode = meta l4proto <protocol> nftables_mode =
# vim /etc/fail2ban/action.d/nftables-common.conf
Altere:
#blocktype = reject blocktype = drop
# vim /etc/fail2ban/filter.d/bind9.conf
Crie:
# Fail2Ban filter file for named (bind9.11).
#
 
[Definition]
 
# Daemon name
_daemon=named
 
# Shortcuts for easier comprehension of the failregex
 
__pid_re=(?:\[\d+\])
__daemon_re=\(?%(_daemon)s(?:\(\S+\))?\)?:?
__daemon_combs_re=(?:%(__pid_re)s?:\s+%(__daemon_re)s|%(__daemon_re)s%(__pid_re)s?:)
 
#       hostname       daemon_id         spaces
# this can be optional (for instance if we match named native log files)
__line_prefix=(?:\s\S+ %(__daemon_combs_re)s\s+)?
 
prefregex = ^%(__line_prefix)s( error:)?\s*client( @[0-9a-z]+)? <HOST>#\S+( \([\S.]+\))?: <F-CONTENT>.+</F-CONTENT>$
 
failregex = ^(view (internal|external): )?query(?: \(cache\))? '.*' denied\s*$
            ^zone transfer '\S+/AXFR/\w+' denied\s*$
            ^bad zone transfer request: '\S+/IN': non-authoritative zone \(NOTAUTH\)\s*$
 
ignoreregex =
 
# DEV Notes:
# Author: Rudimar Remontti
# vim /etc/fail2ban/jail.d/bind9.conf
Crie:
[bind9] enabled = true port = domain,953 protocol = tcp logpath = /var/log/named/security.log bantime = 24h maxretry = 1
# vim /etc/bind/named.conf
Adicione:
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the 
// structure of BIND configuration files in Debian, *BEFORE* you customize 
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
 
logging {
 
    channel security_file {
        file "/var/log/named/security.log" versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };
 
    channel file_log {
        file "/var/log/named/named.log" versions 2 size 50k;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
 
    channel errors_syslog {
        syslog daemon;
        severity warning;
    };
 
    category security { security_file; };
    category dnssec { errors_syslog; };
    category default { file_log; };
    category lame-servers { null; };
    category edns-disabled { null; };
    category resolver { null; };
    category unmatched { null; };
 
};
 
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
# mkdir /var/log/named/ # chown bind. /var/log/named/ # mv /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d` # apt install wget # wget https://www.internic.net/domain/named.root -O /usr/share/dns/root.hints --no-check-certificate # # ln -s /usr/share/dns/ /etc/bind/rootservers # systemctl enable nftables # systemctl restart bind9 nftables fail2ban # systemctl status bind9 nftables fail2ban # q
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.
# vim /var/cache/bind/master-aut/SEUDOMINIO.hosts
//...
www                             A       45.80.50.4
                                AAAA    2804:f123:bebe:cafe::4
ftp                             A       45.80.50.4
                                AAAA    2804:f123:bebe:cafe::4
umbrella                        A       45.80.50.5
                                AAAA    2804:f123:bebe:cafe::5
zabbix                          A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6
//...
Voltando para o servidor DNS RPZ
Crie uma zona chamada rpz.zone
# vim /etc/bind/named.conf.local
Adicione:
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "rpz.zone" {
    type master;
    file "/var/cache/bind/rpz/db.rpz.zone";
    allow-query {none;};
};
# vim /etc/bind/named.conf.options
Adicione o response-policy
acl autorizados {
    127.0.0.1;
    ::1;
    45.80.50.0/23;
    2804:f123::/32;
    192.168.0.0/16;
    172.16.0.0/12;
    100.64.0.0/10;
    10.0.0.0/8;
};
 
options {
    directory "/var/cache/bind";
 
    dnssec-enable yes;
    dnssec-validation auto;
 
    auth-nxdomain no;
 
    listen-on { any; };
    listen-on-v6 { any; };
 
    response-policy {
	zone "rpz.zone" policy CNAME umbrella.remontti.net.br;
    };
    minimal-responses yes;
 
    allow-recursion { autorizados; };
 
    allow-query-cache { autorizados; };
 
    allow-query { any; };
 
    allow-transfer { none; };
 
    masterfile-format text;
 
    version "RR DNS Server";
};
Vamos criar o arquivo qual vai ter todos nossos hosts (Domínios) bloqueados.
# mkdir /var/cache/bind/rpz/ # ln -s /var/cache/bind/rpz/ /etc/bind/ # vim /var/cache/bind/rpz/db.rpz.zone
No exemplo vou adicionar alguns sites pornos.
$TTL 1H
@       IN      SOA LOCALHOST. umbrella.remontti.net.br. (
                2019101400      ; Serial  
                1h              ; Refresh
                15m             ; Retry
                30d             ; Expire 
                2h              ; Negative Cache TTL
        )
        NS  umbrella.remontti.net.br.
;; EXEMPLO ;; 
; dominio.com.br	IN 	CNAME .
; *.dominio.com.br  IN  CNAME .
xvideos.com 	IN CNAME .
*.xvideos    	IN CNAME .
redtube.com 	IN CNAME .
*.redtube.com 	IN CNAME .
pornhub.com 	IN CNAME .
*.pornhub.com 	IN CNAME .
# chown bind. /var/cache/bind/rpz/ -R
Reinicie o serviço e verifique se o mesmo está rodando sem nenhum erro.
# systemctl restart bind9 # systemctl status bind9
Vamos fazer um teste para ver se os domínios acima estão sendo direcionado para o nosso IP:
# dig redtube.com @localhost
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> redtube.com @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47325 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 695da3136d14fab5fc6e70b65da4a6c86880192f7d09611f (good) ;; QUESTION SECTION: ;redtube.com. IN A ;; ANSWER SECTION: redtube.com. 5 IN CNAME umbrella.remontti.net.br. umbrella.remontti.net.br. 10769 IN A 45.80.50.5 ;; Query time: 1412 msec ;; SERVER: ::1#53(::1) ;; WHEN: seg out 14 13:48:08 -03 2019 ;; MSG SIZE rcvd: 116
Testado subdomínios:
# dig www.redtube.com @localhost |grep IN www.redtube.com. 5 IN CNAME umbrella.remontti.net.br. umbrella.remontti.net.br. 10567 IN A 45.80.50.5 # dig qualquercoisa.redtube.com @localhost |grep IN qualquercoisa.redtube.com. 5 IN CNAME umbrella.remontti.net.br. umbrella.remontti.net.br. 10557 IN A 45.80.50.5 # ping qualquercoisa.redtube.com PING umbrella.remontti.net.br (45.80.50.5) 56(84) bytes of data. 64 bytes from umbrella.remontti.net.br (45.80.50.5): icmp_seq=1 ttl=64 time=0.031 ms 64 bytes from umbrella.remontti.net.br (45.80.50.5): icmp_seq=2 ttl=64 time=0.025 ms 64 bytes from umbrella.remontti.net.br (45.80.50.5): icmp_seq=3 ttl=64 time=0.015 ms 64 bytes from umbrella.remontti.net.br (45.80.50.5): icmp_seq=4 ttl=64 time=0.066 ms ^C --- umbrella.remontti.net.br ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 10ms rtt min/avg/max/mdev = 0.031/0.062/0.080/0.018 ms
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
# apt install apache2 apache2-utils libapache2-mod-php php
Por segurança recomendo remover a assinatura do servidor:
# sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-available/security.conf # sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf-available/security.conf
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.
# vim /etc/apache2/sites-available/000-default.conf
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:
<virtualhost *:80>
        Protocols h2 http/1.1
        ServerName umbrella.remontti.net.br
        ServerAdmin noc@remontti.com.br
        ErrorDocument 403 http://www.remontti.com.br/
        ErrorDocument 404 /index.php
        DocumentRoot /var/www/html
 
        <Directory /var/www/html/>
            Options FollowSymLinks
            AllowOverride All
            Require ip 127.0.0.1 ::1 192.168.0.0/16 172.16.0.0/12 100.64.0.0/10 10.0.0.0/8 45.80.50.0/23 2804:f123::/32
        </Directory>
 
        LogLevel warn 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</virtualhost>
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:
# vim /etc/apache2/sites-available/000-default-ssl.conf
Adicione:
<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        Protocols h2 http/1.1
        ServerName umbrella.remontti.net.br
        ServerAdmin noc@remontti.com.br
        ErrorDocument 403 http://www.remontti.com.br/
        ErrorDocument 404 /index.php
        DocumentRoot /var/www/html
        <Directory /var/www/html/>
            Options FollowSymLinks
            AllowOverride All
            Require ip 127.0.0.1 ::1 192.168.0.0/16 172.16.0.0/12 100.64.0.0/10 10.0.0.0/8 45.80.50.0/23 2804:f123::/32
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    </VirtualHost>
</IfModule>
# a2ensite 000-default-ssl.conf # a2enmod http2 rewrite ssl # systemctl restart apache2
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
# cd /var/www/ # rm html # wget https://blog.remontti.com.br/wp-content/uploads/2019/10/html.tar.gz # tar -vxzf html.tar.gz # cd html # vim index.php
Altere o nome da empresa/site, substitua também o arquivo do logo.
$empresa = "Remontti"; $site="http://www.remontti.com.br";
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:
├── adv ├── forum ├── movies ├── sex ├── aggressive ├── gamble ├── music ├── shopping ├── alcohol ├── global_usage ├── news ├── socialnet ├── anonvpn ├── government ├── podcasts ├── spyware ├── automobile ├── hacking ├── politics ├── tracker ├── chat ├── hobby ├── porn ├── updatesites ├── costtraps ├── homestyle ├── radiotv ├── urlshortener ├── dating ├── hospitals ├── recreation ├── violence ├── downloads ├── imagehosting ├── redirector ├── warez ├── drugs ├── isp ├── religion ├── weapons ├── dynamic ├── jobsearch ├── remotecontrol ├── webmail ├── education ├── library ├── ringtones ├── webphone ├── finance ├── military ├── science ├── webradio ├── fortunetelling ├── models ├── searchengines └── webtv
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
# mkdir /etc/bind/script-rpz # cd /etc/bind/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.
# vim /etc/bind/script-rpz/rpz.pl
#!/usr/bin/perl -w
#
# Shallalist DNS RPZ 
#
# Ex de uso:
#   perl rpz.pl (no arg, creates NXDOMAIN CNAME ".")
#   perl rpz.pl A 192.168.2.1 (creates "A" redirect)
#   perl rpz.pl CNAME nowhere.local (creates "CNAME" redirect)
#   perl rpz.pl CNAME CATEGORY.local (creates category "CNAME" redirect)
use strict;
use warnings;
my ($urls);
my @categories = ('drugs','hacking','porn','spyware','violence','warez');
for my $c (0 .. (scalar(@categories) - 1)) {
        #open (my $list,'<',"blacklists/$categories[$c]/domains");
        open (my $list,'<',"BL/$categories[$c]/domains");
        chomp(my @domains = <$list>); 
        close($list);
 
        for my $d (0 .. (scalar(@domains) - 1)) {
                $urls->{lc($domains[$d])} = $categories[$c];
        }
}
open (my $db,'>',"./db.rpz.zone");
print $db '$TTL 1H
@       IN      SOA localhost. umbrella.remontti.net.br. (
                        9999999999      ; Serial  
                        1h              ; Refresh
                        15m             ; Retry
                        30d             ; Expire 
                        2h              ; Negative Cache TTL
                )
                NS  umbrella.remontti.net.br.
;; EXEMPLO ;; 
; *.remontti.com.br       CNAME .
; remontti.com.br         CNAME .
;
';
while (my ($key, $value) = each(%$urls) ) {
        my $redirect = 'CNAME .';
        if (defined($ARGV[0]) and defined($ARGV[1])) {
                $redirect = uc($ARGV[0]) . ' ' . $ARGV[1];
                if ($ARGV[1] =~ m/CATEGORY/) {
                        $redirect =~ s/CATEGORY/$value/;
                }
        }
        if (substr($key,0,1) ne '.') {
                print $db $key . ' IN ' . $redirect . "\n";
                print $db '*.' . $key . ' IN ' . $redirect . "\n";
        }
}
close($db);
exit;
__END__
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.
# vim /etc/bind/script-rpz/gera.rpz.sh
#!/bin/sh
sleep 1
echo
echo "Baixando lista shallalist"
wget http://www.shallalist.de/Downloads/shallalist.tar.gz
tar -zxf shallalist.tar.gz
sleep 1
echo 
echo "Preparando Lista: DROGAS"
mv /etc/bind/script-rpz/BL/drugs/domains /etc/bind/script-rpz/BL/drugs/domains.org
cat /etc/bind/script-rpz/BL/drugs/domains.org |grep -Eo "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*" >> /etc/bind/script-rpz/BL/drugs/domains
sleep 1
echo "Preparando Lista: HACKING"
mv /etc/bind/script-rpz/BL/hacking/domains /etc/bind/script-rpz/BL/hacking/domains.org
cat /etc/bind/script-rpz/BL/hacking/domains.org |grep -Eo "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*" >> /etc/bind/script-rpz/BL/hacking/domains
sleep 1
echo "Preparando Lista: PORNOS"
mv /etc/bind/script-rpz/BL/porn/domains /etc/bind/script-rpz/BL/porn/domains.org
cat /etc/bind/script-rpz/BL/porn/domains.org |grep -Eo "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*" >> /etc/bind/script-rpz/BL/porn/domains
sleep 1
echo "Preparando Lista: SPYWARE"
mv /etc/bind/script-rpz/BL/spyware/domains /etc/bind/script-rpz/BL/spyware/domains.org
cat /etc/bind/script-rpz/BL/spyware/domains.org |grep -Eo "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*" >> /etc/bind/script-rpz/BL/spyware/domains
sleep 1
echo "Preparando Lista: VIOLENCIA"
mv /etc/bind/script-rpz/BL/violence/domains /etc/bind/script-rpz/BL/violence/domains.org
cat /etc/bind/script-rpz/BL/violence/domains.org |grep -Eo "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*" >> /etc/bind/script-rpz/BL/violence/domains
sleep 1
echo "Preparando Lista: PIRATARIA ILEGAL E VIRUS"
mv /etc/bind/script-rpz/BL/warez/domains /etc/bind/script-rpz/BL/warez/domains.org
cat /etc/bind/script-rpz/BL/warez/domains.org |grep -Eo "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*" >> /etc/bind/script-rpz/BL/warez/domains
cd /etc/bind/script-rpz/
echo 
echo "Gerando db.rpz.zone" 
perl rpz.pl
echo 
echo "Removendo arquivos desnecessarios"
rm -rf BL/
rm -f shallalist.tar.gz
echo 
echo "Corrigindo enderecos invalidos"
sed -i -e 's/www.battleit.ee\/tpb/battleit.ee/' /etc/bind/script-rpz/db.rpz.zone
sed -i -e 's/battleit.ee"/battleit.ee/' /etc/bind/script-rpz/db.rpz.zone
sed -i -e 's/freebiggals.net./freebiggals.net/' /etc/bind/script-rpz/db.rpz.zone
SEQUENCIAL=`date +%Y%m%d00`
sed -i -e "s/9999999999/$SEQUENCIAL/" /etc/bind/script-rpz/db.rpz.zone
echo
echo "Verificando se tem algum erros no arquivo db.rpz.zone"
named-checkzone localhost /etc/bind/script-rpz/db.rpz.zone
echo 
echo "Caso tenha algum erro do tipo: ignoring out-of-zone edite este script e adicione ele como"
echo "no exemplo dos dominios corrigindos com o comando sed -i -e ......"
echo
echo "Se voce recebeu um OK na verificacao"
echo "Agora basta mover db.rpz.zone  /var/cache/bind/rpz/ e reinicie o bind"
echo
echo "Comandos:"
echo "# mv /var/cache/bind/rpz/db.rpz.zone /var/cache/bind/rpz/db.rpz.zone.`date +%Y%m%d`"
echo "# mv /etc/bind/script-rpz/db.rpz.zone /var/cache/bind/rpz/"
echo "# systemctl restart bind9"
De permissões entre no diretório do nosso script e execute o mesmo, fique atento se der algum erro!
# chmod +x /etc/bind/script-rpz/gera.rpz.sh # cd /etc/bind/script-rpz/ # sh gera.rpz.sh
Vai retornar:
Baixando lista shallalist --2019-10-14 17:52:20-- http://www.shallalist.de/Downloads/shallalist.tar.gz Resolvendo www.shallalist.de (www.shallalist.de)... 2a01:4f8:140:5407::2, 46.4.77.203 Conectando-se a www.shallalist.de (www.shallalist.de)|2a01:4f8:140:5407::2|:80... conectado. A requisição HTTP foi enviada, aguardando resposta... 200 OK Tamanho: 9986607 (9,5M) [application/x-gzip] Salvando em: “shallalist.tar.gz” shallalist.tar.gz 100%[============================================================================>] 9,52M 3,52MB/s em 2,7s 2019-10-14 17:52:23 (3,52 MB/s) - “shallalist.tar.gz” salvo [9986607/9986607] Preparando Lista: DROGAS Preparando Lista: HACKING Preparando Lista: PORNOS Preparando Lista: SPYWARE Preparando Lista: VIOLENCIA Preparando Lista: PIRATARIA ILEGAL E VIRUS Gerando db.rpz.zone Removendo arquivos desnecessarios Corrigindo enderecos invalidos Verificando se tem algum erros no arquivo db.rpz.zone zone localhost/IN: loaded serial 2019101400 OK Caso tenha algum erro do tipo: ignoring out-of-zone edite este script e adicione ele como no exemplo dos dominios corrigindos com o comando sed -i -e ...... Se voce recebeu um OK na verificacao Agora basta mover db.rpz.zone /var/cache/bind/rpz/ e reinicie o bind Comandos: # mv /var/cache/bind/rpz/db.rpz.zone /var/cache/bind/rpz/db.rpz.zone.20191014 # mv /etc/bind/script-rpz/db.rpz.zone /var/cache/bind/rpz/ # systemctl restart bind9
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
# mv /var/cache/bind/rpz/db.rpz.zone /var/cache/bind/rpz/db.rpz.zone.`date +%Y%m%d`
Em seguida mover o novo db.rpz.zone e restartar o bind.
# mv /etc/bind/script-rpz/db.rpz.zone /var/cache/bind/rpz/ # systemctl restart bind9
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!


 
																			 
																			 
																			


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.
pode ser configurado no mesmo servidor master?
“Sim”
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.
Uma ideia é bloquear os ADS. Lista https://github.com/AdAway/AdAway/wiki/HostsSources
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??
Você precisa virar root com
# su -Vlw Rudimar consegui, realmente eu estava querendo usar o comando sem os privilégios de Root
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 !!!