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!

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 *