<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos DNS - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/dns/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/dns</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Fri, 21 Jun 2024 21:17:20 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.remontti.com.br/wp-content/uploads/2024/09/icone-rr-80x80.png</url>
	<title>Arquivos DNS - Remontti</title>
	<link>https://blog.remontti.com.br/tag/dns</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Automatizando o bloqueio de sites no Brasil pelo DNS usando a API da anablock.net.br (BIND9+RPZ)</title>
		<link>https://blog.remontti.com.br/7759</link>
					<comments>https://blog.remontti.com.br/7759#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 22 Jan 2024 17:58:23 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Anablock]]></category>
		<category><![CDATA[Anatel]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[Bloqueio de Domínios]]></category>
		<category><![CDATA[Certificado SSL]]></category>
		<category><![CDATA[Configuração de DNS]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Domínios Bloqueados]]></category>
		<category><![CDATA[Página de Bloqueio]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[rpz]]></category>
		<category><![CDATA[servidor dns]]></category>
		<category><![CDATA[Servidor WEB]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Zona de Política de Resposta DNS.]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=7759</guid>

					<description><![CDATA[<p>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&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/7759">Automatizando o bloqueio de sites no Brasil pelo DNS usando a API da anablock.net.br (BIND9+RPZ)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/01/brasil-anatel-bloquei-site-anablock.png" alt="" width="1787" height="1024" class="alignnone size-full wp-image-7770" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/01/brasil-anatel-bloquei-site-anablock.png 1787w, https://blog.remontti.com.br/wp-content/uploads/2024/01/brasil-anatel-bloquei-site-anablock-300x172.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/01/brasil-anatel-bloquei-site-anablock-1024x587.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/01/brasil-anatel-bloquei-site-anablock-768x440.png 768w, https://blog.remontti.com.br/wp-content/uploads/2024/01/brasil-anatel-bloquei-site-anablock-1536x880.png 1536w" sizes="(max-width: 1787px) 100vw, 1787px" /></p>
<p>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.</p>
<p>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:<br />
<a href="https://blog.remontti.com.br/5958" rel="noopener" target="_blank">Servidor DNS Bind9 (Debian 12)</a>. </p>
<p>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: </p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/remontti.com.br/remontti.com.br.hosts</pre>
<p>Exemplo &#8220;<strong>bloqueadonobrasil</strong>&#8220;, 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.</p>
<pre class="remontti-code-plain">//...
bloqueadonobrasil       A       x.xx.xxx.x
                        AAAA    xxxx:xxxx:xxxx::y
//...</pre>
<h4>DNS PRIMÁRIO (MASTER)</h4>
<p>Agora crie uma zona chamada <strong>rpz.zone</strong> em seu /etc/bind/named.conf.local. em <strong>allow-transfer</strong> e <strong>also-notify</strong> informe os IPs de seus servidores Slaves.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;rpz.zone&quot; {
        type master;
        file &quot;/var/cache/bind/rpz/db.rpz.zone.hosts&quot;;
        allow-query { none; };
        allow-transfer { 10.51.51.3; };
        also-notify { 10.51.51.3; };
};
</pre>
<p>Vamos criar o diretório &#8220;rpz&#8221; e os arquivos de hosts que serão bloqueados.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/rpz/</pre>
<p>Criarei um atalho em /etc/bind para facilitar o acesso da pastar também.</p>
<pre class="remontti-code"># ln -s /var/cache/bind/rpz/ /etc/bind/rpz</pre>
<p>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:<br />
Nome do arquivo: <strong>/var/cache/bind/rpz/db.rpz.zone.hosts</strong></p>
<pre class="remontti-code-plain">$TTL 1H
@       IN      SOA LOCALHOST. bloqueadonobrasil.remontti.com.br. (
                2024012201      ; Serial  
                1h              ; Refresh
                15m             ; Retry
                30d             ; Expire 
                2h              ; Negative Cache TTL
        )
        NS  bloqueadonobrasil.remontti.com.br.
;       ou
;       NS  localhost.
 
sitequeprecisabloquear.com     IN CNAME .
*.sitequeprecisabloquear.com   IN CNAME .
elesmandamnosfaz.bo.bo         IN CNAME .
*.elesmandamnosfaz.bo.bo       IN CNAME .</pre>
<p>Sendo que para cada domínio que será bloqueado, o mesmo será adicionado:</p>
<pre class="remontti-code-plain">
sitequeprecisabloquear.com        IN CNAME .
*.sitequeprecisabloquear.com      IN CNAME .</pre>
<p>Assim qualquer subdomínio (*).domino.com seja traduzido sempre irá ser apontado para seu IP ou localhost.</p>
<p>Antes de criar o script, ajuste o response-policy dentro do seu <strong>/etc/bind/named.conf.options</strong></p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Deve ficar dentro de <strong>options { &#8230; }</strong> adcione: </p>
<pre class="remontti-code-plain">options {
//...
    response-policy {
      zone &quot;rpz.zone&quot; policy CNAME bloqueadonobrasil.remontti.com.br;
    };
//...</pre>
<p>Ou se você irá apontar para localhost use:</p>
<pre class="remontti-code-plain">options {
//...
    response-policy {
      zone &quot;rpz.zone&quot; policy CNAME localhost;
    };
//...</pre>
<h4>Script AnaBlock</h4>
<p>Para simplificar nossa tarefa, criaremos um script que utiliza o site <a href="https://anablock.net.br" rel="noopener" target="_blank"><strong>https://anablock.net.br</strong></a>, uma plataforma desenvolvida por <a href="http://www.patrickbrandao.com" rel="noopener" target="_blank"><strong>Patrick Brandão</strong></a> da <a href="https://www.nuva.com.br" rel="noopener" target="_blank"><strong>Nuva</strong></a>. 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.</p>
<p>Porém ANATEL solicitou a remoção dessa lista:<br />
<img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/01/ana.png" alt="" width="903" height="528" class="alignnone size-full wp-image-7983" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/01/ana.png 903w, https://blog.remontti.com.br/wp-content/uploads/2024/01/ana-300x175.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/01/ana-768x449.png 768w" sizes="(max-width: 903px) 100vw, 903px" /></p>
<p>Para liberação da lista você deve entrar em contato com <a href="http://www.patrickbrandao.com/?#contact" rel="noopener" target="_blank"><strong>Patrick Brandão</strong></a></p>
<p>Crie um diretório onde iremos salvar nosso script: </p>
<pre class="remontti-code"># mkdir /etc/bind/scripts</pre>
<p>Subi meu script no <a href="https://github.com/remontti/anablock_bind9" rel="noopener" target="_blank">Github</a>, mas iremos entrar na nossa pasta /etc/bind/scripts e baixar ele direto para nosso servidor.</p>
<pre class="remontti-code"># cd /etc/bind/scripts
# wget https://raw.githubusercontent.com/remontti/anablock_bind9/main/anablock_bind9.py</pre>
<p>Esse scrip ira verificar verificar qual sua <strong><a href="https://api.anablock.net.br/api/version" rel="noopener" target="_blank">versão</a></strong> e sempre que existir uma nova ou se for sua primeira vez ele irá baixar a <strong><a href="https://api.anablock.net.br/api/domain/all" rel="noopener" target="_blank">lista de todos os domínios</a></strong> e cria o arquivo <strong>db.rpz.zone.hosts</strong> com a lista completa de siste que serão bloqueados pelo seu DNS.</p>
<p>Script foi feito em python3 instale os pacotes necessários para executa-lo.</p>
<pre class="remontti-code"># apt install python3 python3-requests tree</pre>
<p>Execute o script:</p>
<pre class="remontti-code"># python3 /etc/bind/scripts/anablock_bind9.py bloqueadonobrasil.remontti.com.br</pre>
<pre class="remontti-code-plain">Arquivo de zona RPZ atualizado.
Permissões do diretório alteradas com sucesso.
Serviço Bind9 reiniciado com sucesso.</pre>
<pre class="remontti-code"># tree -h /var/cache/bind/rpz/</pre>
<p>Seu diretório terá os seguintes arquivos</p>
<pre class="remontti-code-plain">/var/cache/bind/rpz/
├── [159K]  db.rpz.zone.hosts
├── [ 46K]  domain_all
└── [  11]  version</pre>
<p>Se você executar o script novamente nada irá acontecer até que uma nova versão seja lancada.</p>
<p>Para que tenhamos nossa lista sempre atualizada, colocamos o script para ser executado todos os dias a meia noite.</p>
<pre class="remontti-code"># echo &#039;00 00   * * *   root    python3 /etc/bind/scripts/anablock_bind9.py bloqueadonobrasil.remontti.com.br&#039;\ &gt;&gt; /etc/crontab
# systemctl restart cron</pre>
<h3>Testes</h3>
<p>Agora faça um teste para ver o que seu servidor ira traduzir corretamente:</p>
<pre class="remontti-code"># dig 2filmestorrent.top @localhost</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1+deb10u9-Debian &lt;&lt;&gt;&gt; 2filmestorrent.top @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 42124
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: be484fb71dfe219dd9e6544465ae7d4b7e142ef750ed0d80 (good)
;; QUESTION SECTION:
;2filmestorrent.top.		IN	A

;; ANSWER SECTION:
2filmestorrent.top.	5	IN	CNAME	bloqueadonobrasil.remontti.com.br.
bloqueadonobrasil.remontti.com.br. 10800	IN A	x.x.x.x

;; Query time: 479 msec
;; SERVER: ::1#53(::1)
;; WHEN: seg jan 22 11:35:55 -03 2024
;; MSG SIZE  rcvd: 137
</pre>
<h4>DNS SECUNDÁRIO's (SLAVE's)</h4>
<p>Agora crie uma entrada zona chamada <strong>rpz.zone</strong> em seu /etc/bind/named.conf.local. em <strong>masters</strong> e <strong>also-notify</strong> informe os IPs de seus servidores Master.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;rpz.zone&quot; {
    type slave;
    file &quot;/var/cache/bind/rpz/db.rpz.zone.hosts&quot;;
    masters { 10.51.51.2; };
    allow-notify { 10.51.51.2; };
};</pre>
<p>Configure o <strong>response-policy</strong></p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Deve ficar dentro de <strong>options { ... }</strong> adcione: </p>
<pre class="remontti-code-plain">options {
//...
    response-policy {
      zone &quot;rpz.zone&quot; policy CNAME bloqueadonobrasil.remontti.com.br;
      // ou
      // zone &quot;rpz.zone&quot; policy CNAME localhost;
      // 
    };
//...</pre>
<p>Crie o diretório, de permissão, e reinicie o bind.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/rpz/
# chown bind: /var/cache/bind/rpz/ -R
# systemctl restart bind9</pre>
<p>Arquivo db.rpz.zone.hosts será criado dentro de /var/cache/bind/rpz/</p>
<pre class="remontti-code"># tree /var/cache/bind/rpz/</pre>
<pre class="remontti-code-plain">/var/cache/bind/rpz/
└── db.rpz.zone.hosts</pre>
<h3>Configurando uma Página de Bloqueio em Seu Servidor Web</h3>
<p>Vou deixar exemplo com fazer isso em um <strong>Apache</strong>.Crie o diretório onde iremos criar nossa página:</p>
<pre class="remontti-code"># mkdir /var/www/bloqueadonobrasil</pre>
<h4>Apache</h4>
<p>Crie o arquivo de configuração do apache.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/bloqueadonobrasil.conf</pre>
<pre class="remontti-code-plain">&lt;virtualhost *:80&gt;
        Protocols h2 http/1.1
        ServerName bloqueadonobrasil.remontti.net.br
        ServerAlias x.xxx.xxx.x
        ServerAlias [xxxx:xxxx:xxxx:xxxx::x]

        ServerAdmin noc@remontti.com.br

        ErrorDocument 404 /index.php
 
        DocumentRoot /var/www/bloqueadonobrasil
 
        &lt;Directory /var/www/bloqueadonobrasil/&gt;
            Options FollowSymLinks
            AllowOverride All
            # Restringe o acesso apenas para os IPs do seu ISP
            Require ip 127.0.0.1 ::1 100.64.0.0/10 x.xx.xxx.x/22 xxxx:xxxx::/32
        &lt;/Directory&gt;
 
        LogLevel warn 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/virtualhost&gt;</pre>
<p>Habilite a configuração e reinicie o Apache</p>
<pre class="remontti-code"># a2ensite bloqueadonobrasil.conf
# systemctl restart apache2</pre>
<p>Instale o certbot para gerar um certificado ssl para o domínio</p>
<pre class="remontti-code"># apt install certbot python3-certbot-apache</pre>
<p>Execute:</p>
<pre class="remontti-code"># certbot</pre>
<p>Selecione seu domínio, e em sguinda reponda com <strong>No redirect</strong></p>
<pre class="remontti-code-plain">Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: remontti.com.br
2: bloqueadonobrasil.remontti.com.br

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter &#039;c&#039; to cancel): 2 &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for bloqueadonobrasil.remontti.com.br
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/bloqueadonobrasil-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/bloqueadonobrasil-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/bloqueadonobrasil-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you&#039;re confident your site works on HTTPS. You can undo this
change by editing your web server&#039;s configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press &#039;c&#039; to cancel): 1 &lt;&lt;&lt;&lt;&lt;</pre>
<p>Agora vou deixar um exemplo de página para ajudar você:</p>
<p><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2024/01/anablock-page.png" alt="" width="1513" height="744" class="alignnone size-full wp-image-7765" srcset="https://blog.remontti.com.br/wp-content/uploads/2024/01/anablock-page.png 1513w, https://blog.remontti.com.br/wp-content/uploads/2024/01/anablock-page-300x148.png 300w, https://blog.remontti.com.br/wp-content/uploads/2024/01/anablock-page-1024x504.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2024/01/anablock-page-768x378.png 768w" sizes="(max-width: 1513px) 100vw, 1513px" /></p>
<p>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.</p>
<pre class="remontti-code"># rm -rf /var/www/bloqueadonobrasil/
# cd /var/www/
# wget https://github.com/remontti/anablock_bind9/raw/main/bloqueadonobrasil.tar.gz
# tar -vxzf bloqueadonobrasil.tar.gz
# rm bloqueadonobrasil.tar.gz</pre>
<p><strong>Gostou? Se quiser apoiar o blog e fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/7759">Automatizando o bloqueio de sites no Brasil pelo DNS usando a API da anablock.net.br (BIND9+RPZ)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/7759/feed</wfw:commentRss>
			<slash:comments>22</slash:comments>
		
		
			</item>
		<item>
		<title>Rodando servidor proxy-cache DNS com Unbound</title>
		<link>https://blog.remontti.com.br/6506</link>
					<comments>https://blog.remontti.com.br/6506#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 01 Jun 2022 20:21:32 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[proxy-cache]]></category>
		<category><![CDATA[Unbound]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6506</guid>

					<description><![CDATA[<p>Autor: Patrick Brandão Motivação: ao rodar qualquer software no Linux, a resolução de DNS e feita pela libresolv, que faz a leitura do /etc/host.conf e /etc/resolv.conf para obter o IP do servidor DNS. Assim,&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6506">Rodando servidor proxy-cache DNS com Unbound</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/unbound.png" alt="" width="720" height="340" class="alignnone size-full wp-image-6540" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/unbound.png 720w, https://blog.remontti.com.br/wp-content/uploads/2022/06/unbound-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/unbound-520x245.png 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-thumbnail wp-image-6530 alignright" src="https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-150x150.jpg" alt="" width="150" height="150" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-150x150.jpg 150w, https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-300x300.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-80x80.jpg 80w, https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick-320x320.jpg 320w, https://blog.remontti.com.br/wp-content/uploads/2022/06/patrick.jpg 640w" sizes="auto, (max-width: 150px) 100vw, 150px" /><br />
<strong>Autor</strong>:  <a href="https://t.me/patrickbrandao" rel="noopener" target="_blank">Patrick Brandão</a></p>
<p><strong>Motivação</strong>: ao rodar qualquer software no Linux, a resolução de DNS e feita pela <strong>libresolv</strong>, que faz a leitura do /etc/host.conf e /etc/resolv.conf para obter o IP do servidor DNS.</p>
<p>Assim, a resolução de nomes requer envio de pacotes para fora do host e aguarda pela resposta, que pode demorar (latência alta) ou não ser respondida por problemas na rede entre o host e o servidor DNS (remoto)</p>
<p>A <strong>libresolv</strong> não possui suporte a cache, ou seja, se você precisar consultar um domínio (www.google.com) dezenas de vezes em um segundo, todas as vezes ela terá que enviar a pergunta ao servidor DNS para obter a mesma resposta.</p>
<p>Rodando um servidor proxy-cache DNS no host linux você garante que a libresolv envie os pedidos para um software <strong>rodando no mesmo host</strong> mas que ficará por conta de consultar 1 ou mais servidores,<strong> e salvando os resultados obtidos em cache</strong>, economizando banda e tempo nas próximas requisições aos mesmos nomes.</p>
<p>O resultado dessa implementação é uma maior velocidade no inicio das conexões do servidor.</p>
<p><strong>OBS:</strong><br />
<em><font color="red">Você não está criando um servidor recursivo, pare resoluções de nomes para sua rede!</font><br />
<font color="blue">Mas ao final Rudimar Remontti vai explicar como tornar ele recursivo.</font></em></p>
<p><strong>Distribuição utilizada: </strong><br />
Debian 11 (Bullseye) 64 bits <a href="https://blog.remontti.com.br/5792" target="_blank" rel="noopener">instalação mínima</a></p>
<h3>Instalando Unbound</h3>
<pre class="remontti-code"># apt update; apt upgrade
# apt install unbound</pre>
<p><strong>Configurando</strong><br />
A configuração abaixo visa consumir recursos mínimos e atender somente os softwares do próprio host.</p>
<pre class="remontti-code"># cat &gt; /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf &lt;&lt; EOF
server:
    auto-trust-anchor-file: &quot;/var/lib/unbound/root.key&quot;
    verbosity: 1
    statistics-interval: 20
    extended-statistics: yes
    num-threads: 2

    # Caso seja necessário fixar o IP de origem:
    #outgoing-interface: x.x.x.x

    # Abrir a porta apenas nos endereços loopback (!!segurança!!)
    interface: 127.0.0.1
    interface: ::1

    # Permitir todos os IPs pois abrimos a porta apenas para a loopback
    access-control: 127.0.0.1/8 allow
    access-control: ::1 allow

    outgoing-range: 512
    num-queries-per-thread: 128

    msg-cache-size: 2m
    rrset-cache-size: 1m

    msg-cache-slabs: 4
    rrset-cache-slabs: 4

    cache-max-ttl: 1200
    infra-host-ttl: 60
    infra-lame-ttl: 60

    infra-cache-numhosts: 128
    infra-cache-lame-size: 2k

    do-ip4: yes
    do-ip6: yes
    do-udp: yes
    do-tcp: yes
    do-daemonize: yes

    username: &quot;unbound&quot;
    directory: &quot;/etc/unbound&quot;
    logfile: &quot;/var/log/unbound.log&quot;
    use-syslog: yes
    pidfile: &quot;/run/unbound.pid&quot;

    identity: &quot;Unbound-LocalCache&quot;
    version: &quot;1.0&quot;
    hide-identity: yes
    hide-version: yes
    harden-glue: yes
    do-not-query-address: 127.0.0.1/8
    do-not-query-localhost: yes
    module-config: &quot;iterator&quot;

    #zone localhost
    local-zone: &quot;localhost.&quot; static
    local-data: &quot;localhost. 10800 IN NS localhost.&quot;
    local-data: &quot;localhost. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800&quot;
    local-data: &quot;localhost. 10800 IN A 127.0.0.1&quot;

    local-zone: &quot;127.in-addr.arpa.&quot; static
    local-data: &quot;127.in-addr.arpa. 10800 IN NS localhost.&quot;
    local-data: &quot;127.in-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 2 3600 1200 604800 10800&quot;
    local-data: &quot;1.0.0.127.in-addr.arpa. 10800 IN PTR localhost.&quot;

remote-control:
    control-enable: yes
    control-interface: 127.0.0.1
    control-port: 8953
    control-use-cert: &quot;no&quot;


# Operar 100% em modo forward, informe o ip dos servidores DNSs reais:
forward-zone:
    name: &quot;.&quot;
    forward-addr: 8.8.8.8
    forward-addr: 8.8.4.4

# Encaminhar dominio especifico para servidor DNS especifico:
forward-zone:
    name: &quot;slack.com&quot;
    forward-addr: 1.1.1.1
    forward-addr: 1.0.0.1
EOF
</pre>
<p>Acima criamos um forward do domínio slack.com indo para um DNS diferente (1.1.1.1 e 1.0.0.1) do padrão 8.8.8.8 e 8.8.4.4</p>
<p>Reinicie o serviço para carregar as novas configurações</p>
<pre class="remontti-code"># systemctl restart unbound</pre>
<p>Instale o pacote dnsutils para ter ferramentas de testes</p>
<pre class="remontti-code"># apt install dnsutils</pre>
<p>Testando IPv4</p>
<pre class="remontti-code"># host google.com 127.0.0.1</pre>
<pre class="remontti-code-plain">Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 

google.com has address 142.250.218.78
google.com has IPv6 address 2800:3f0:4001:81d::200e
google.com mail is handled by 10 smtp.google.com.</pre>
<pre class="remontti-code"># dig ANY google.com @127.0.0.1</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.27-Debian &lt;&lt;&gt;&gt; ANY google.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 893
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;google.com.			IN	ANY

;; ANSWER SECTION:
google.com.		129	IN	A	142.250.218.78
google.com.		129	IN	AAAA	2800:3f0:4001:81d::200e
google.com.		51	IN	MX	10 smtp.google.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 01 15:59:35 -03 2022
;; MSG SIZE  rcvd: 104</pre>
<p>Testando IPv6</p>
<pre class="remontti-code"># host google.com ::1</pre>
<pre class="remontti-code-plain">Using domain server:
Name: ::1
Address: ::1#53
Aliases: 

google.com has address 142.250.218.78
google.com has IPv6 address 2800:3f0:4001:81d::200e
google.com mail is handled by 10 smtp.google.com.
</pre>
<pre class="remontti-code"># dig ANY google.com @::1</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.27-Debian &lt;&lt;&gt;&gt; ANY google.com @::1
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 56485
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;google.com.			IN	ANY

;; ANSWER SECTION:
google.com.		106	IN	A	142.250.218.78
google.com.		281	IN	AAAA	2800:3f0:4001:81d::200e
google.com.		281	IN	MX	10 smtp.google.com.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Wed Jun 01 16:03:30 -03 2022
;; MSG SIZE  rcvd: 104
</pre>
<p>Configurando o Linux para usar o servidor DNS na loopback como servidor DNS</p>
<pre class="remontti-code"># echo &quot;nameserver 127.0.0.1&quot; &gt; /etc/resolv.conf
# echo &quot;nameserver ::1 &quot; &gt;&gt; /etc/resolv.conf</pre>
<h3>Tornando recursivo</h3>
<p><strong>Contribuição extra por:</strong> <a href="https://t.me/remontti" rel="noopener" target="_blank">Rudimar Remontti</a><br />
Caso deseje tornar recursivo para os demais hosts da sua rede este servidor, primeira coisa que você deve ter em mente que se este servidor conter IPs públicos o mesmo será responsivo para todo o planeta terra e alguns "ali<em>G</em>enigenas". Então o mínimo que você deve ter é um firewall, protegendo a porta 53 tcp/udp para responder apenas para sua rede.</p>
<pre class="remontti-code"># vim /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf</pre>
<p>Abaixo de:</p>
<pre class="remontti-code-plain">
    # abrir a porta apenas nos enderecos loopback (seguranca)
    interface: 127.0.0.1
    interface: ::1</pre>
<p>Adicione</p>
<pre class="remontti-code-plain">
    # abrir a porta para os ips de interface (risco)
    interface: 200.200.200.200
    interface: 2000:bebe:cafe::f07e</pre>
<p>Abaixo de:</p>
<pre class="remontti-code-plain">
    # Permitir todos os IPs pois abrimos a porta apenas para a loopback
    access-control: 127.0.0.1/8 allow
    access-control: ::1 allow</pre>
<p>Adicione os prefixos da sua rede</p>
<pre class="remontti-code-plain">
    access-control: 192.168.0.0/16 allow
    access-control: 172.16.0.0/12 allow
    access-control: 100.64.0.0/10 allow
    access-control: 10.0.0.0/8 allow
    access-control: 200.200.0.0/22 allow
    access-control: 2001:db8::/32 allow</pre>
<p>Desta forma abrindo conexão para os IPs da interface <em>"200.200.200.200" e "2000:bebe:cafe::f07e"</em></p>
<p>Reinicie o serviço para carregar as alterações</p>
<pre class="remontti-code"># systemctl restart unbound</pre>
<p>Pode consultar se as porta estão sendo ouvidas:</p>
<pre class="remontti-code"># ss -putan  | grep LISTEN | grep :53</pre>
<pre class="remontti-code-plain">
tcp   LISTEN 0      256           200.200.200.200:53           0.0.0.0:*     users:((&quot;unbound&quot;,pid=6079,fd=16))                 
tcp   LISTEN 0      256                 127.0.0.1:53           0.0.0.0:*     users:((&quot;unbound&quot;,pid=6079,fd=12))                 
tcp   LISTEN 0      256           200.200.200.200:53           0.0.0.0:*     users:((&quot;unbound&quot;,pid=6079,fd=8))                  
tcp   LISTEN 0      256                 127.0.0.1:53           0.0.0.0:*     users:((&quot;unbound&quot;,pid=6079,fd=4))                  
tcp   LISTEN 0      256                     [::1]:53              [::]:*     users:((&quot;unbound&quot;,pid=6079,fd=6))                  
tcp   LISTEN 0      256    [2000:bebe:cafe::f07e]:53              [::]:*     users:((&quot;unbound&quot;,pid=6079,fd=10))                 
tcp   LISTEN 0      256                     [::1]:53              [::]:*     users:((&quot;unbound&quot;,pid=6079,fd=14))                 
tcp   LISTEN 0      256    [2000:bebe:cafe::f07e]:53              [::]:*     users:((&quot;unbound&quot;,pid=6079,fd=18))</pre>
<p><strong>Firewall</strong><br />
Porém mesmo que você tenha setados seus prefixos em <strong>access-control</strong> a porta 53 estará respondendo para todo o mundo. Para fechar elas use o nfttables que por padrão já vem no Debian 11 no lugar do iptables. Você pode instalar o mesmo com apt se necessário.</p>
<p>Edite o arquivo do nftables</p>
<pre class="remontti-code"># vim /etc/nftables.conf</pre>
<p>Ajuste para ficar assim e em <strong>elements</strong> insira todos seus prefixos autorizados.</p>
<pre class="remontti-code">#!/usr/sbin/nft -f
  
flush ruleset

table inet filter {

    set acesso-dns4 {
        flags interval
        type ipv4_addr
        elements = { 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, 200.200.200.0/22 }
    }
    set acesso-dns6 {
        flags interval
        type ipv6_addr
        elements = { ::1, 2001:db8::/32 }
    }
    chain input {
        type filter hook input priority 0;

        # Permite Acesso DNS na porta 53
        ip saddr  @acesso-dns4 udp dport 53 counter accept
        ip saddr  @acesso-dns4 tcp dport 53 counter accept
        ip6 saddr @acesso-dns6 udp dport 53 counter accept
        ip6 saddr @acesso-dns6 tcp dport 53 counter accept
        udp dport 53 counter drop
        tcp dport 53 counter drop

        type filter hook input priority 0;
    }
    chain forward {
        type filter hook forward priority 0;
    }
    chain output {
        type filter hook output priority 0;
    }
}</pre>
<p>Habilite o mesmo para iniciar com o boot e reinicie.</p>
<pre class="remontti-code"># systemctl enable nftables
# systemctl restart nftables</pre>
<p>Consulte se seu firewall foi carregado com o comando:</p>
<pre class="remontti-code"># nft list ruleset</pre>
<p>Retorno:</p>
<pre class="remontti-code-plain">table inet filter {
	set acesso-dns4 {
		type ipv4_addr
		flags interval
		elements = { 10.0.0.0/8, 100.64.0.0/10,
			     127.0.0.1, 172.16.0.0/12,
			     192.168.0.0/16, 200.200.200.0/22 }
	}

	set acesso-dns6 {
		type ipv6_addr
		flags interval
		elements = { ::1,
			     2001:db8::/32 }
	}

	chain input {
		type filter hook input priority filter; policy accept;
		ip saddr @acesso-dns4 udp dport 53 counter packets 0 bytes 0 accept
		ip saddr @acesso-dns4 tcp dport 53 counter packets 0 bytes 0 accept
		ip6 saddr @acesso-dns6 udp dport 53 counter packets 0 bytes 0 accept
		ip6 saddr @acesso-dns6 tcp dport 53 counter packets 0 bytes 0 accept
		udp dport 53 counter packets 0 bytes 0 drop
		tcp dport 53 counter packets 0 bytes 0 drop
	}

	chain forward {
		type filter hook forward priority filter; policy accept;
	}

	chain output {
		type filter hook output priority filter; policy accept;
	}
}</pre>
<p>Pronto espero que tenha gostado! Agradeço ao meu parceiro Patrick!</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/6506">Rodando servidor proxy-cache DNS com Unbound</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6506/feed</wfw:commentRss>
			<slash:comments>21</slash:comments>
		
		
			</item>
		<item>
		<title>Como bloquear sites pelo DNS (BIND9)  Response Policy Zones</title>
		<link>https://blog.remontti.com.br/6491</link>
					<comments>https://blog.remontti.com.br/6491#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Thu, 28 Apr 2022 18:16:43 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[allandossantos.com]]></category>
		<category><![CDATA[bloquei]]></category>
		<category><![CDATA[brasil]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[governo]]></category>
		<category><![CDATA[rpz]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[stf]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6491</guid>

					<description><![CDATA[<p>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&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6491">Como bloquear sites pelo DNS (BIND9)  Response Policy Zones</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>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.<del datetime="2022-04-28T16:53:23+00:00"> Diga olá a censura!</del>. </p>
<p>Não irei ensinar instalar o bind até porque já tem <a href="https://blog.remontti.com.br/5958" rel="noopener" target="_blank">tutorial explicando aqui no blog</a>. </p>
<p>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:</p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts</pre>
<p>Exemplo &#8220;<strong>umbrella</strong>&#8221; , ou então apontando para os IPs de localhost mesmo 127.0.0.1 e ::1</p>
<pre class="remontti-code-plain">//...
umbrella                A       45.10.20.5
                        AAAA    2804:f123:bebe:cafe::5
//...</pre>
<p>Agora basta criar uma zona chamada <strong>rpz.zone</strong> em seu /etc/bind/named.conf.local.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;rpz.zone&quot; {
    type master;
    file &quot;/var/cache/bind/rpz/db.rpz.zone&quot;;
    allow-query { none; };
};</pre>
<p>Criaremos o diretório rpz, bem como o arquivos de hosts quais serão bloqueados</p>
<pre class="remontti-code"># mkdir /var/cache/bind/rpz/
# ln -s /var/cache/bind/rpz/ /etc/bind/rpz
# vim /var/cache/bind/rpz/db.rpz.zone</pre>
<p>Se você está resolvendo para subdomínio exemplo <strong>umbrella.cursodns.com.br</strong>, crie o arquivo da seguinte forma:</p>
<pre class="remontti-code-plain">$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 .</pre>
<p>Ou se só ta querendo jogar para o infinito e além, aponte para <strong>localhost</strong> mesmo.</p>
<pre class="remontti-code-plain">$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 .</pre>
<p>Sendo que para cada domínio que você deseja bloquear, siga o formato:</p>
<pre class="remontti-code-plain">
alllllandossssantos.com        IN CNAME .
*.alllllandossssantos.com      IN CNAME .</pre>
<p>Assim qualquer subdomínio (*).domino.com seja traduzido sempre irá ser apontado para seu IP ou Localhost.</p>
<p>Agora adicione o response-policy dentro do seu /etc/bind/named.conf.options</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Deve ficar dentro de <strong>options { &#8230; }</strong> adcione: </p>
<pre class="remontti-code-plain">options {
//...
    response-policy {
      zone &quot;rpz.zone&quot; policy CNAME umbrella.cursodns.com.br;
    };
//...</pre>
<p>Se usou os ips de localhost use:</p>
<pre class="remontti-code-plain">options {
//...
    response-policy {
      zone &quot;rpz.zone&quot; policy CNAME localhost;
    };
//...</pre>
<p>Altere as permissões do diretório /var/cache/bind/rpz/ para que o bind consiga ler o mesmo e reinicie o serviço.</p>
<pre class="remontti-code"># chown bind. /var/cache/bind/rpz/ -R
# systemctl restart bind9</pre>
<h3>Testes</h3>
<p>Agora faça um teste para ver o que seu servidor ira traduzir corretamente:</p>
<pre class="remontti-code"># dig @localhost alllllandossssantos.com</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.27-Debian &lt;&lt;&gt;&gt; @localhost alllllandossssantos.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- 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
</pre>
<pre class="remontti-code"># dig sitequeprecisabloquear.com</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.27-Debian &lt;&lt;&gt;&gt; sitequeprecisabloquear.com
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- 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</pre>
<pre class="remontti-code"># host sitequeprecisabloquear.com</pre>
<pre class="remontti-code-plain">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</pre>
<pre class="remontti-code"># ping sitequeprecisabloquear.com</pre>
<pre class="remontti-code-plain">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</pre>
<pre class="remontti-code"># ping -4  sitequeprecisabloquear.com</pre>
<pre class="remontti-code-plain">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</pre>
<p><strong>Gostou? Se quiser apoiar o blog e fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/6491">Como bloquear sites pelo DNS (BIND9)  Response Policy Zones</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6491/feed</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title>Servidor DNS Bind9 &#8211; Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11/12</title>
		<link>https://blog.remontti.com.br/5958</link>
					<comments>https://blog.remontti.com.br/5958#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 26 Oct 2021 21:28:21 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Autoritativo]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[bookworm]]></category>
		<category><![CDATA[Bullseye]]></category>
		<category><![CDATA[debian 11]]></category>
		<category><![CDATA[Debian 12]]></category>
		<category><![CDATA[Debian 12 Bookworm]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[Reverso]]></category>
		<category><![CDATA[rpz]]></category>
		<category><![CDATA[zabbix]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=5958</guid>

					<description><![CDATA[<p>BIND (Berkeley Internet Name Domain ou, como chamado previamente, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix, onde ele pode ser&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/5958">Servidor DNS Bind9 &#8211; Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11/12</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p> <img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/bind9.16_debian_11_bullseye.png" alt="" width="750" height="375" class="alignnone size-full wp-image-5980" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/bind9.16_debian_11_bullseye.png 750w, https://blog.remontti.com.br/wp-content/uploads/2021/10/bind9.16_debian_11_bullseye-300x150.png 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /><br />
<a href="https://pt.wikipedia.org/wiki/BIND" rel="noopener noreferrer" target="_blank">BIND</a> (Berkeley Internet Name Domain ou, como chamado previamente, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix, onde ele pode ser considerado um padrão de fato.</p>
<p>Ante de iniciar a instalação é preciso saber como funciona um DNS:</p>
<p><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/ACGuo26MswI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/epWv0-eqRMw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><strong>DNS Recursivo</strong><br />
O DNS recursivo é responsável pela resolução de nomes, começando sempre com consultas recursivas nos servidores raízes. Para melhorar a eficiência, reduzir o tráfego DNS na Internet e aumentar o desempenho em aplicativos de usuário final, utilizamos o cache de DNS, armazenando resultados das consulta DNS por um período de tempo determinado na configuração (tempo de vida determinado pelo autoritativo do domínio consultado).</p>
<p><strong>DNS Autoritativo</strong><br />
É o serviço DNS que possui autoridade sob um domínio. Assim, como o servidor ns1.remontti.com.br é o DNS autoritativo de meu domínio remontti.com.br, é ele que sempre vai responder qualquer subdomínio ou “hosts” (por exemplo: blog.remontti.com.br).<br />
É nesse servidor que você vai apontar nas configurações de um domínio registrado no registro.br, por exemplo.</p>
<p><strong>DNS Reverso</strong><br />
DNS atua resolvendo o nome do domínio/subdomínio para um endereço IP correspondente. Já o DNS Reverso, como o próprio nome diz, resolve o endereço IP para o nome de domínio associado ao host. Ou seja, quando temos disponível o endereço IP de um host e não sabemos o endereço do domínio (nome dado à máquina ou outro equipamento que acesse uma rede), tentamos resolver o endereço IP através do DNS reverso que procura qual nome de domínio está associado aquele endereço.<br />
Os servidores que utilizam o DNS Reverso conseguem verificar a autenticidade de endereços, verificando se o endereço IP atual corresponde ao endereço IP informado pelo servidor DNS.<br />
Isto evita que alguém utilize um domínio que não lhe pertence para enviar spam, por exemplo (por isso que ele é importante para servidores de e-mail).</p>
<p><strong>Correção dos dados de geolocalização</strong><br />
É muito importante que sua geolocalização estaja correta no maxmind.com, verifique alguns de de seus IPs.<br />
<a href="https://www.maxmind.com/en/geoip-demo" rel="noopener" target="_blank">https://www.maxmind.com/en/geoip-demo </a></p>
<p><strong>Para correção temos dois formulários.</strong><br />
<em>Correct a GeoIP Location</em><br />
<a href="https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-location/" rel="noopener" target="_blank">https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-location/ </a><br />
<em>Correct a GeoIP ISP or Organization</em><br />
<a href="https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-isp-or-organization/" rel="noopener" target="_blank">https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-isp-or-organization/ </a></p>
<h2>Instalação do Debian</h2>
<p><strong>Requesitos:</strong><br />
<strong><a href="https://blog.remontti.com.br/7236" rel="noopener noreferrer" target="_blank">Debian 12 Bookworm &#8211; Instalação Limpa</a></strong> (Recomendado)<br />
<strong><a href="https://blog.remontti.com.br/5792" rel="noopener noreferrer" target="_blank">Debian 11 Bullseye &#8211; Instalação Limpa</a></strong></p>
<p><strong>Leitura obrigatória:</strong><br />
<a href="https://blog.remontti.com.br/5848" rel="noopener" target="_blank"><strong>Configurando interface de rede no Debian</strong></a><br />
<a href="https://blog.remontti.com.br/5867" rel="noopener" target="_blank"><strong>Como melhorar a produtividade no seu Debian após instalação</strong></a></p>
<p>Vire root com o comando correto!</p>
<pre class="remontti-code"># su - </pre>
<p>No <strong>Debian 12 o rsyslog foi abandonado</strong> como sistema de logs e esta usando systemd-journald. Como o bind salva alguns logs em arquivo e o fail2ban lê os mesmo vamos precisar dele, para isso instale o mesmo:</p>
<pre class="remontti-code"># apt install rsyslog</pre>
<h2>Instalação fail2ban e nftables (Master/Slave)</h2>
<p><strong>Fail2Ban</strong> é uma estrutura de software de prevenção de intrusões que protege os servidores contra ataques de força bruta. Ele opera monitorando arquivos de logs, sendo o mais comum seu uso para bloquear endereços IPs que podem pertencer à hosts que estão tentando violar a segurança do seu servidor.<br />
<strong>nftables</strong> é um firewall baseado no iptables que agora no Debian 11 já vem instalado por padrão subistituindo o antigo iptables.</p>
<pre class="remontti-code"># apt install fail2ban</pre>
<p>Entendo o funcionamento do fail2ban:</p>
<pre class="remontti-code"># fail2ban-client status</pre>
<p>Por padrão o filtro de SSH já vem habilitado, então seu SSH (porta 22) já está &#8220;protegida&#8221;, se alguém errar a senha por 5 vezes terá seu IP bloqueado por 10 minutos.</p>
<pre class="remontti-code-plain">Status
|- Number of jail:      1
`- Jail list:   sshd</pre>
<p>Para alterar esses padrões de tempo e número de tentativas edite: (este arquivo é muito bem comentado o que cada variável faz!)</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize as linhas, e ajuste de acordo com suas necessidades</p>
<pre class="remontti-code">bantime  = 10m
findtime  = 10m
maxretry = 5</pre>
<p>Se desejar desativar o filtro de SSH </p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.d/defaults-debian.conf</pre>
<p>Altere para <strong>false</strong></p>
<pre class="remontti-code-plain">[sshd]
enabled = false</pre>
<p>Porém como eu sempre altero a porta do SSH de todo o servidor bem como tempo para digitar a senha, é natural que o fail2ban não ira poteger caso você tenha alterado a mesma. Inclusive recomendo você adotar essa boa pratica.</p>
<pre class="remontti-code"># vim /etc/ssh/sshd_config</pre>
<p>Em <strong>Port</strong> defina a nova porta, e <strong>LoginGraceTime</strong> defina o tempo em segundos para digitar a senha, e nunca seja ignorante de permitir o acesso root direto no SSH em <strong>PermitRootLogin</strong>, a não ser que tenha uma forte motivo para isso (Me conte nos comentários, até hoje não tive motivo para tal!)</p>
<pre class="remontti-code-plain">Port 60002
LoginGraceTime 10
#PermitRootLogin prohibit-password # Nao seja burro de colocar um yes aqui!</pre>
<p>Com a porta alterada do SSH (como no exemplo 60002) vamos ajusta no fail2ban para proteger essa nova porta</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize e adicione 60002:</p>
<pre class="remontti-code-plain">[sshd]
Port = ssh,60002</pre>
<p>Por padrão de segurança do fail2ban usa o iptables e faz o bloquei apenas da porta do serviço que esta sofrendo o &#8220;ataque&#8221;, vamos subistituir o iptables pelo <strong>nftables</strong> ou por <strong>route</strong>. Vou deixar os dois modelos a baixo de exemplo. </p>
<p><strong>nftables:</strong> Em vez de usar o filtro multiport, vou setar allports e modificá-lo para que tentativas de violação crie uma regra de firewall de drop e não reject definitivamente o IP e não apenas fechando a porta do serviço. Para isso edite:</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize <strong>banaction</strong> e <strong>banaction_allports</strong> e altere para <strong>nftables-allports</strong>:</p>
<pre class="remontti-code-plain">banaction = nftables-allports
banaction_allports = nftables-allports</pre>
<p>Para bloquear tudo e não apenas a porta do serviço atacada:</p>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/nftables.conf</pre>
<p>Localize <strong>rule_match-allports</strong> e remova o <strong>meta l4proto \{ <protocol> \}</strong> ficando: </p>
<pre class="remontti-code-plain">rule_match-allports =</pre>
<p>Ainda no altere o <strong>blocktype</strong> de <strong>reject</strong> para <strong>drop</strong></p>
<pre class="remontti-code-plain">blocktype = drop</pre>
<p>Habilite o nftblaes para o boot do sistema, em seguida reinicie os serviços </p>
<pre class="remontti-code"># systemctl enable nftables
# systemctl restart nftables fail2ban</pre>
<p>Verifique se mesmo estão rodando sem nenhum erro:</p>
<pre class="remontti-code"># systemctl status nftables fail2ban</pre>
<p><strong>route:</strong> Com o método route iremos em vezes de criar uma regra de firewall para o IP que esta &#8220;atacando&#8221; vamos coloca-lo em blackhole, assim se você possuir algum roteamento já poderá exportar o IP para sua borda para matar lá já (gosto + dessa).</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize <strong>banaction</strong> e <strong>banaction_allports</strong> e altere para <strong>route</strong>:</p>
<pre class="remontti-code-plain">banaction = route
banaction_allports = route</pre>
<p>Vamos ajustar agora para ação ser blackhole</p>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/route.conf</pre>
<p>Em blocktype altere para blackhole</p>
<pre class="remontti-code-plain">blocktype = blackhole</pre>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<p>Se tiver acesso a outro servidor externo tente fazer uma conexão SSH, e erre varias vezes a senha para ser bloqueado, assim você pode validar seu fail2ban.</p>
<p>Para visualizar seu firewall <strong>nftables</strong> use o comando:</p>
<pre class="remontti-code"># nft list ruleset</pre>
<p>Ou se usou <strong>route</strong> para mostra a tabela de rotas: </p>
<pre class="remontti-code"># ip route list
# ip -6 route list</pre>
<p><strong>Alguns comandos úteis do fail2ban</strong><br />
Visulizar os filtros</p>
<pre class="remontti-code"># fail2ban-client status</pre>
<p>Visualizar detalhe de um filtro</p>
<pre class="remontti-code"># fail2ban-client status NOME_FILTRO
# fail2ban-client status sshd</pre>
<p>Remover um IP de um determinado filtro</p>
<pre class="remontti-code"># fail2ban-client set sshd unbanip IPADDRESS
# fail2ban-client set sshd unbanip 200.200.200.200</pre>
<p>Exemplo de script para remover todos os IPs banidos uma a um.</p>
<pre class="remontti-code-plain">#!/bin/bash
BANIDOS=`fail2ban-client status bind9 | grep &quot;Banned IP list&quot; | awk &#039;{$1=$2=$3=$4=$5=&quot;&quot;; print $0}&#039;`
IPS=$(echo $BANIDOS | tr &quot; &quot; &quot;\n&quot;)
for IP in $IPS
 do
  #echo &quot;Removendo: ${IP}&quot;
  fail2ban-client set bind9 unbanip ${IP} ;
  #ip route del ${IP}
done</pre>
<p>Se desejar adicionar algum prefixo a uma lista branca você pode editar: </p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize <strong>ignoreip</strong>, desomente a linha (remova o # da frete) e adicione os prefixo que deseja ignorar, para não cair bloqueio.</p>
<pre class="remontti-code-plain">ignoreip = 127.0.0.1/8 ::1 200.200.200.0/22 2000:2000::/32</pre>
<p>Reinicie o serviço</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<h2>Instalação do Bind9 (Master/Slave)</h2>
<p>Instalação dos pacotes</p>
<pre class="remontti-code"># apt install bind9 dnsutils</pre>
<p>Arquitetura de arquivos e diretórios do bind9 no Debian 11:</p>
<pre class="remontti-code-plain">/etc/bind/
├── bind.keys
├── db.0
├── db.127
├── db.255
├── db.empty
├── db.local
├── named.conf
├── named.conf.default-zones
├── named.conf.local
├── named.conf.options
├── rndc.key
└── zones.rfc1918
/usr/share/dns/
├── root.ds
├── root.hints
├── root.hints.sig
└── root.key
/var/cache/bind/
├── managed-keys.bind
└── managed-keys.bind.jnl</pre>
<h3>Configuração do Recursivo</h3>
<p>Alteramos o DNS do servidor fazendo com que ele consulte em si próprio, através dos IPs de loopback. Essa alteração deve ser feita no arquivo /etc/resolv.conf.</p>
<pre class="remontti-code"># echo &quot;nameserver 127.0.0.1&quot; &gt; /etc/resolv.conf
# echo &quot;nameserver ::1&quot; &gt;&gt; /etc/resolv.conf</pre>
<p>Para validar se seu servidor conseguer resolver nomes nele próprio, use o comando dig e host. Alguns comandos de Ex:</p>
<pre class="remontti-code"># dig @localhost google.com.br 
# dig @127.0.0.1 google.com.br 
# dig @::1 google.com.br +short
# host google.com.br</pre>
<p>Como identificar o problema com resoluções de nomes, famoso: <em>“Meu DNS não está resolvendo nomes!”</em>. Use o atributo +trace, assim o mesmo mostrará todo o caminho feito para a resolução, assim você ira identificar onde &#8220;parou&#8221; e não obteve a informação necessária. Ex:</p>
<pre class="remontti-code"># dig @localhost google.com.br +trace</pre>
<p>Observe as linhas em destaque.</p>
<pre class="remontti-code">; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; @localhost google.com.br +trace
; (2 servers found)
;; global options: +cmd
.                       517911  IN      NS      b.root-servers.net.
.                       517911  IN      NS      c.root-servers.net.
.                       517911  IN      NS      m.root-servers.net.
.                       517911  IN      NS      a.root-servers.net.
.                       517911  IN      NS      l.root-servers.net.
.                       517911  IN      NS      k.root-servers.net.
.                       517911  IN      NS      e.root-servers.net.
.                       517911  IN      NS      i.root-servers.net.
.                       517911  IN      NS      d.root-servers.net.
.                       517911  IN      NS      f.root-servers.net.
.                       517911  IN      NS      g.root-servers.net.
.                       517911  IN      NS      h.root-servers.net.
.                       517911  IN      NS      j.root-servers.net.
.                       517911  IN      RRSIG   NS 8 0 518400 20211107...
;; Received 1137 bytes from ::1#53(localhost) in 0 ms

br.                     172800  IN      NS      f.dns.br.
br.                     172800  IN      NS      e.dns.br.
br.                     172800  IN      NS      b.dns.br.
br.                     172800  IN      NS      c.dns.br.
br.                     172800  IN      NS      d.dns.br.
br.                     172800  IN      NS      a.dns.br.
br.                     86400   IN      DS      2471 13 2 5E4F35...
br.                     86400   IN      RRSIG   DS 8 1 86400 202...
;; Received 741 bytes from 198.41.0.4#53(a.root-servers.net) in 140 ms

google.com.br.          3600    IN      NS      ns1.google.com.
google.com.br.          3600    IN      NS      ns2.google.com.
google.com.br.          3600    IN      NS      ns3.google.com.
google.com.br.          3600    IN      NS      ns4.google.com.
uh3thc9qu1qbt25pspmqnbuvm420ur2e.com.br. 900 IN NSEC3 1 1 10 A8A465B84D7...
uh3thc9qu1qbt25pspmqnbuvm420ur2e.com.br. 900 IN RRSIG NSEC3 13 3 900 202...
hekajlrgmga91msd4es7bmhol7dbtbbi.com.br. 900 IN NSEC3 1 1 10 A8A465B84D7...
hekajlrgmga91msd4es7bmhol7dbtbbi.com.br. 900 IN RRSIG NSEC3 13 3 900 202...
;; Received 507 bytes from 2001:12f8:a::10#53(c.dns.br) in 140 ms

google.com.br.          300     IN      A       142.250.219.195
;; Received 58 bytes from 2001:4860:4802:38::a#53(ns4.google.com) in 144 ms</pre>
<p>Primeiramente consultamos os root servers, que estão em nosso servidor essa info, logo perceba que ele fez a consulta dos root servers em localhost, em seguida um dos root servers falou para ele que é são os DNS responsáveis do <strong>.br</strong> e no exemplo ele escolheu o a.root-servers.net, que falou para ele quem são os DNS fo google, e o DNS do google, neste cado o c.dns.br falou qual é o IPv4 (A) do google.com.br = 42.250.219.195, o valor 300 é o tempo que seu servidor irá armazenar essa resposta em cache. Eu levaria muito tempo para explicar aqui, então quando tiver um curso meu de DNS não fique de fora <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h4>Configurando Recursivo no DNS Master</h4>
<p>Nesse cenário vou usar os prefixos  45.80.48.0/22 e 2804:f123::/32 (desculpe caso seja de alguém)</p>
<p>Edite:</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>A explicação de todos os campos e variáveis estão nos comentários do arquivo:</p>
<pre class="remontti-code-plain">// ACL &quot;autorizados&quot; essa colocamos os IPs que são autorizados a fazer consultas recursivas neste servidor.
// Neste caso vou incluir os IPs que foram nos delegados bem como de localhost e todos IPs privados.
acl autorizados {
        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;
        2001:db8::/32; 
        fd00::/8; 
        fe80::/10; 
        fc00::/8;        
        45.80.48.0/22;
        2804:f123::/32;
}; 

options {
    // O diretório de trabalho do servidor
    // Quaisquer caminho não informado será tomado como padrão este diretório
    directory &quot;/var/cache/bind&quot;;
 
    //Suporte a DNSSEC
    dnssec-validation auto;
 
    // Conforme RFC1035
    // https://www.ietf.org/rfc/rfc1035.txt
    // Se o servidor deve responder negativamente (NXDOMAIN) para consultas de domínios que não existem.
    auth-nxdomain no;
 
    // Respondendo para IPv4 e IPv6
    // Porta 53 estará aberta para ambos v4 e v6 (pode ser informar apenas os IPs que ficarão ouvindo)
    // ex listen-on { 127.0.0.1; 45.80.48.2; }; 
    // ex listen-on-v6 { ::1; 2804:f123:bebe:cafe::2; };
    // ou any para todos os IPs das interfaces (recomendado, pricipalmente em anycast)
    listen-on { any; };
    listen-on-v6 { any; };
 
    // Serve como uma ferramenta de mitigação para o problema de ataques de amplificação de DNS
    // No momento, a implementação de RRL (Response Rate Limiting)é recomendada apenas para servidores autoritativos
    // Se seu servidor será apenas autoritativo descomente as linhas a baixo. (https://kb.isc.org/docs/aa-00994)
    //rate-limit {
    //    responses-per-second 15;
    //    window 5;
    //};
 
    // Informações adicionais em suas respostas DNS
    // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
    // O padrão BIND é (no) não.
    minimal-responses yes;

    // Reduzir o tráfego da rede e aumentar o desempenho, o servidor armazena respostas negativas.
    // é usado para definir um tempo máximo de retenção para essas respostas no servidor. (segundos)
    // Determina por quanto tempo o servidor irá acreditar nas informações armazenadas em cache de 
    // respostas negativas (NXDOMAIN) antes de buscar novamente informações.
    max-ncache-ttl 300;

    // Desativar recursão. Por padrão já é yes.
    // recursion no;
 
    // Especifica quais hosts estão autorizados a fazer consultas
    // recursivas através deste servidor.
    // Aqui que você vai informar os IPs da sua rede que você irá permitir consultar os DNS.
    allow-recursion { autorizados; };
 
    // Endereço estão autorizados a emitir consultas ao cache local,
    // sem acesso ao cache local as consultas recursivas são inúteis.
    allow-query-cache { autorizados; };
 
    // Especifica quais hosts estão autorizados a “fazer perguntas” ao seu DNS. 
    // Se for apenas recursivo pode informa a ACL “autorizados” 
    // allow-query { autorizados; };
    allow-query { any; };
 
    // Especifica quais hosts estão autorizados a receber transferências de zona a partir do servidor.
    // Seu servidor Secundário, no nosso ex vou deixar então o ips dos dois servidores v4 e v6.
    allow-transfer {
        45.80.48.3;
        2804:f123:bebe:cafe::3;
    };
    also-notify {
        45.80.48.3;
        2804:f123:bebe:cafe::3;
    };
 
    // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
    // mastes deste servidor no formato binário (raw) do arquivo ou texto (text)
    // text será legível por humanos, já raw formato é mais eficiente em termos de desempenho.
    // masterfile-format raw;
    masterfile-format text;

    // Para evitar que vase a versao do Bind, definimos um nome
    // Reza a lenda que deixar RR DNS Server seu servidor nunca sofrerá ataques.
    version &quot;RR DNS Server – Do good&quot;;

    // Define a quant. máxima de memória a ser usada para o cache do servidor (bytes ou porcentagem)
    // Por padrão no debian 10/bind9 ele reserva 90% da memoria física. Então não se apavore com log ex.:
    // Servidor com 2GB: none:106: &#039;max-cache-size 90%&#039; - setting to 1795MB (out of 1994MB)
    // Recomendo não alterar
    // max-cache-size 512M;
    // max-cache-size 50%;

    // Isso define o tempo mínimo para o qual o servidor armazena 
    // em cache as respostas positivas, em segundos.
    // Ex o tiktok.com manda tempo de ttl de 20 segundos, 
    // e você quer ignorar esse valor 20 e setar que o minimo seja 90.
    // que é o máximo permitido.
    min-cache-ttl 90;

    // Não recomendado alterar para menos que 24h.
    // Define o tempo máximo durante o qual o servidor armazena (informado pelo dono do domínio)
    // em cache as respostas positivas, em segundos. O max-cache-ttl padrão é 604800 (uma semana) 
    // max-cache-ttl 86400; // 24h 

};</pre>
<p><strong>Leitura recomendada: </strong><br />
<a href="https://bind9.readthedocs.io/en/latest/reference.html" rel="noopener" target="_blank">https://bind9.readthedocs.io/en/latest/reference.html</a><br />
<a href="https://downloads.isc.org/isc/bind9/9.11.24/doc/arm/Bv9ARM.ch06.html" rel="noopener" target="_blank">https://downloads.isc.org/isc/bind9/9.11.24/doc/arm/Bv9ARM.ch06.html </a></p>
<p>Para verificar se seu arquivo tem algum erro use o comando named-checkconf</p>
<pre class="remontti-code"># named-checkconf /etc/bind/named.conf.options</pre>
<p>Imprime todas as configurações</p>
<pre class="remontti-code"># named-checkconf -p</pre>
<p>Bem útil para você mandar suas conf quando esta com algum problema lá no grupo do telegram <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>Reinicie o bind9 para que as novas configurações sejam carregadas, e verifique se o serviço subiu sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h4>Configurando Recursivo (Slave)</h4>
<p>Não esqueça da parte do fail2ban e nftables.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Já explicado no master, a diferença aqui aqui não temos os campos allow-transfer e also-notify, já que ele é o servidor secundário.</p>
<pre class="remontti-code-plain">acl autorizados {
        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;
        2001:db8::/32; 
        fd00::/8; 
        fe80::/10; 
        fc00::/8;        
        45.80.48.0/22;
        2804:f123::/32;
}; 

options {
    directory &quot;/var/cache/bind&quot;;
    dnssec-validation auto;
    auth-nxdomain no;
    listen-on { any; };
    listen-on-v6 { any; };
    minimal-responses yes;
    max-ncache-ttl 300;
    allow-recursion { autorizados; };
    allow-query-cache { autorizados; };
    //allow-query { autorizados; }; //Se apenas for recursivo
    allow-query { any; };
    allow-transfer { none; };
    masterfile-format text;
    version &quot;RR DNS Server&quot;;
};</pre>
<p>Reinicie o bind9 para que as novas configurações sejam lidas, e verifique se o serviço subiu sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h4>Colocando o fail2ban para protege seu DNS (Master/Slave)</h4>
<p>Ele irá ler os logs do bind com tentativas de consultas negadas (denied), para isso precisamos configurar nosso bind para gerar tal logs.Faça isso no Mastere Slave.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf</pre>
<p>Adicione logging { &#8230; }:</p>
<pre class="remontti-code-plain">// 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 &quot;/var/log/named/security.log&quot; versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };
 
    channel file_log {
        file &quot;/var/log/named/bind.log&quot; versions 3 size 1m;
        severity info;
        #severity debug 3;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
 
    channel dnssec_log {
        file &quot;/var/log/named/dnssec.log&quot; versions 3 size 1m;
        severity warning;
        print-time yes;
    };
 
    category security { security_file; };
    category default { file_log; };
    category dnssec { dnssec_log; };
    category lame-servers { null; };
    category edns-disabled { null; };
    category resolver { null; };
    category unmatched { null; };
 
};

include &quot;/etc/bind/named.conf.options&quot;;
include &quot;/etc/bind/named.conf.local&quot;;
include &quot;/etc/bind/named.conf.default-zones&quot;;</pre>
<p>Crie o diretório onde o bind vai registrar seus logs e dê permissão para que ele possa gravar nesta pasta.</p>
<pre class="remontti-code"># mkdir /var/log/named/
# chown bind: /var/log/named/</pre>
<p>Reinicie o serviço</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Iremos criar um filtro para ler os logs do bind</p>
<pre class="remontti-code"># vim /etc/fail2ban/filter.d/bind9.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain"># Fail2Ban filter file for named (bind9).
# v9.18.x

# This filter blocks attacks against named (bind9) however it requires special
# configuration on bind.
#
# By default, logging is off with bind9 installation.
#
# You will need something like this in your named.conf to provide proper logging.
#
# logging {
#     channel security_file {
#         file &quot;/var/log/named/security.log&quot; versions 3 size 30m;
#         severity dynamic;
#         print-time yes;
#     };
#     category security {
#         security_file;
#     };
# };

[Definition]

# Daemon name
_daemon=named(?:-\w+)?

# 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?:)

_category = (?!error|info)[\w-]+
_category_re = (?:%(_category)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+)?%(_category_re)s

prefregex = ^%(__line_prefix)s(?:(?:error|info):\s*)?client(?: @\S*)? &lt;HOST&gt;#\S+(?: \([\S.]+\))?: &lt;F-CONTENT&gt;.+&lt;/F-CONTENT&gt;\s(?:denied|denied \(allow-query-cache did not match\)|\(NOTAUTH\))\s*$

failregex = ^(?:view (?:internal|external): )?query(?: \(cache\))?
            ^zone transfer
            ^bad zone transfer request: &#039;\S+/IN&#039;: non-authoritative zone

ignoreregex =

# DEV Notes: Debian 12
# Author: Rudimar Remontti</pre>
<p>Ativamos o filtro que criamos, e definimos o tempo de banimento para 12h, se você desejar pode ajustar para mais ou menos se achar necessário. E “maxretry” que é a quantidade de tentativas usaremos 1, limitando a 1 tentativa (não recomendo alterar) apenas para já ser bloqueado.</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.d/bind9.conf</pre>
<pre class="remontti-code-plain">[bind9]
enabled  = true
port     = domain,953
protocol = tcp
logpath  = /var/log/named/security.log
bantime  = 12h
maxretry = 1</pre>
<p>Em seguida ativamos reinciamos os serviços.</p>
<pre class="remontti-code"># systemctl restart fail2ban
# systemctl status fail2ban</pre>
<p>Consulte se o filtro bind9 foi carregado</p>
<pre class="remontti-code"># fail2ban-client status</pre>
<pre class="remontti-code-plain">Status
|- Number of jail:      2
`- Jail list:   bind9, sshd</pre>
<p>Para validar realize um teste de um servidor externo <strong>não autorizado</strong> à resolver nomes em seu servidor com o comando dig, ex:</p>
<pre class="remontti-code"># dig @ip_so_seu_dns google.com.br</pre>
<p>Deixe rodando o comando para visualizar os logs.</p>
<pre class="remontti-code"># tail -f /var/log/named/security.log</pre>
<p>Log como ira aparecer, onde 192.168.254.198 é o IP que tentou resolver nomes e google.com.br foi o dóminio.</p>
<pre class="remontti-code-plain">25-Oct-2021 17:57:09.284 client @0x7f79e80104c8 192.168.254.198#63239 (google.com.br): query (cache) &#039;google.com.br/A/IN&#039; denied</pre>
<p>Verificando agora o fail2ban vamos encontrar o IP 192.168.254.198 em <strong>Banned IP list</strong>.</p>
<pre class="remontti-code"># fail2ban-client status bind9</pre>
<pre class="remontti-code-plain">Status for the jail: bind9
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     1
|  `- File list:        /var/log/named/security.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   192.168.254.198</pre>
<p>Verificando as regras do firewall nftables também iremos encontra-lo.</p>
<pre class="remontti-code"># nft list ruleset</pre>
<pre class="remontti-code-plain">table inet filter {
        chain input {
                type filter hook input priority filter; policy accept;
        }

        chain forward {
                type filter hook forward priority filter; policy accept;
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}
table inet f2b-table {
        set addr-set-bind9 {
                type ipv4_addr
                elements = { 192.168.254.198 }
        }

        chain f2b-chain {
                type filter hook input priority filter - 1; policy accept;
                ip saddr @addr-set-bind9 drop
        }
}</pre>
<p>Para remover o IP basta:</p>
<pre class="remontti-code"># fail2ban-client set bind9 unbanip 192.168.254.198</pre>
<h4>Atualização dos Roots servers</h4>
<p>Não é comum os Roots Servers terem alguma alteração, mas é algo que ao logo desses anos vi acontecer já, então caso um dia precise atualiza-los. Primeiramente renomei o arquivo atual <strong>root.hints</strong></p>
<pre class="remontti-code"># mv /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d`</pre>
<p>Agora vamos baixar a versão mais recente.</p>
<pre class="remontti-code"># apt install wget 
# wget https://www.internic.net/domain/named.root -O /usr/share/dns/root.hints</pre>
<p>Para visualizar se tem alguma diferença entre os arquivos execute o comando:</p>
<pre class="remontti-code"># diff /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d`</pre>
<p>Perceba que o que mudou apenas foi a data em <strong>last update</strong>. Resto do arquivo continua igual.</p>
<pre class="remontti-code-plain">11,13c11,13
&lt; ;
&lt; ;       last update:     October 14, 2021
&lt; ;       related version of root zone:     2021101401
---
&gt; ; 
&gt; ;       last update:     January 11, 2021 
&gt; ;       related version of root zone:     2021011101</pre>
<h4>Desativar IPv6 do bind <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h4>
<p>Se por algum motivo precisar desabilitar faça:</p>
<pre class="remontti-code"># vim /etc/default/named</pre>
<pre class="remontti-code-plain">OPTIONS=&quot;-u bind&quot;</pre>
<p>Para</p>
<pre class="remontti-code-plain">OPTIONS=&quot;-4 -u bind&quot;</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code-plain">listen-on-v6 { any; };</pre>
<p>Para</p>
<pre class="remontti-code-plain">listen-on-v6 { none; };</pre>
<p>Reinicie o serviço</p>
<pre class="remontti-code"># systemctl restart bind</pre>
<h4>Configurando um proxy do DNS recursivo</h4>
<p>Está confiuração deixará de usar os Root Serves e irá fazer as consultar em outros servidores DNS, e armazenar no seu cache local.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Adicione dentro de<strong> options { &#8230;.. } </strong></p>
<pre class="remontti-code-plain">  recursion yes;
  forwarders {
      8.8.8.8;
      1.1.1.1;
      1.0.0.1;
      8.8.4.4;
  };
  forward only;</pre>
<h4>Comando dig</h4>
<p>Algumas coisas que você precisa saber, ex:</p>
<pre class="remontti-code"># dig google.com.br @localhost</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; google.com.br @localhost
; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; google.com.br @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 49083
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 595c2c7eb1d62205010000006177f1e2e08119b0ec4133aa (good)
;; QUESTION SECTION:
;google.com.br.                 IN      A

;; ANSWER SECTION:
google.com.br.          300     IN      A       172.217.173.67

;; AUTHORITY SECTION:
google.com.br.          3599    IN      NS      ns1.google.com.
google.com.br.          3599    IN      NS      ns4.google.com.
google.com.br.          3599    IN      NS      ns3.google.com.
google.com.br.          3599    IN      NS      ns2.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         172800  IN      AAAA    2001:4860:4802:32::a
ns2.google.com.         172800  IN      AAAA    2001:4860:4802:34::a
ns3.google.com.         172800  IN      AAAA    2001:4860:4802:36::a
ns4.google.com.         172800  IN      AAAA    2001:4860:4802:38::a
ns1.google.com.         172800  IN      A       216.239.32.10
ns2.google.com.         172800  IN      A       216.239.34.10
ns3.google.com.         172800  IN      A       216.239.36.10
ns4.google.com.         172800  IN      A       216.239.38.10

;; Query time: 1560 msec
;; SERVER: ::1#53(::1)
;; WHEN: ter out 26 09:17:38 -03 2021
;; MSG SIZE  rcvd: 344
</pre>
<p>O resultado retornará algumas seções, porém como configuramos no named.conf.options <strong>minimal-responses yes</strong>, iremos ter apenas 3. Isso deixa seu DNS mais otimizado, além do mais <strong>yes</strong> é o padrão agora na versão 9.16 do bind, caso queira testar experimente setar em: <strong>no</strong>.</p>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; google.com.br @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 13858
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 38763b6c79757a2a010000006177f255c6a6a6d3e4833e77 (good)
;; QUESTION SECTION:
;google.com.br.                 IN      A

;; ANSWER SECTION:
google.com.br.          300     IN      A       172.217.173.67

;; Query time: 1524 msec
;; SERVER: ::1#53(::1)
;; WHEN: ter out 26 09:19:33 -03 2021
;; MSG SIZE  rcvd: 86</pre>
<p><strong>HEADER</strong>: Ela contém diversas informações a respeito da consulta. </p>
<pre class="remontti-code-plain">;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 49083
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9</pre>
<p>- <strong>status</strong> indica o tratamento de erro nas consultas, sendo eles:<br />
-- <strong>NOERROR</strong>: Nenhum erro encontrado, ou seja, sucesso.<br />
-- <strong>SERVFAIL</strong>: Houve algum problema com o servidor, que não conseguiu processar a query.<br />
-- <strong>NXDOMAIN</strong>: Significa que o domínio pesquisado não existe.<br />
-- <strong>REFUSED</strong>: O servidor rejeitou a solicitação.<br />
-<strong>flags:</strong> indicador das opções de recursividade e de autoridade, em resumo este conjunto de “letrinhas” (aa, rd, ra, etc), indica o estado ligado/desligado <a href="https://www.ietf.org/rfc/rfc1035.txt" rel="noopener" target="_blank">RFC1035</a><br />
-- <strong>qr</strong>: se a mensagem é uma query (0) ou uma resposta (1). Como estamos avaliando somente as respostas, este bit sempre estará ligado (consequentemente, sempre veremos a string “qr” no campo “flags“).<br />
-- <strong>aa</strong>: que o servidor que respondeu à solicitação é autoritativo do domínio.<br />
-- <strong>rd</strong>: que a query é recursiva, que as requisições devem ser encaminhadas a outros servidores até que o servidor autoritativo seja encontrado.<br />
-- <strong>ra</strong>: que o servidor que respondeu à requisição suporta consultas recursivas.<br />
-- <strong>tc</strong>: que a mensagem de resposta está truncada.<br />
-- <strong>z</strong>: reservado para uso futuro.<br />
- <strong>contadores</strong>: na mesma linha das flags, econtramos quantos resultados vieram nas sessões.</p>
<pre class="remontti-code-plain">QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9</pre>
<p><strong>QUESTION </strong><br />
Replica a query que foi enviada para consulta, por padão quando não passa A = IPv4</p>
<pre class="remontti-code-plain">;; QUESTION SECTION:
;google.com.br.                 IN      A</pre>
<p>Outros exemplos:</p>
<pre class="remontti-code"># dig AAAA google.com.br @localhost
# dig MX google.com.br @localhost
# dig NS google.com.br @localhost
# dig TXT google.com.br @localhost
# dig ANY google.com.br @localhost</pre>
<p><strong>ANSWER </strong><br />
Contém a resposta para a consulta que foi enviada.</p>
<pre class="remontti-code-plain">;; ANSWER SECTION:
google.com.br.          86400   IN      CAA     0 issue &quot;pki.goog&quot;
google.com.br.          60      IN      SOA     ns1.google.com. dns-admin.google.com. 405356128 900 900 1800 60
google.com.br.          300     IN      AAAA    2800:3f0:4001:819::2003
google.com.br.          300     IN      A       172.217.173.67
google.com.br.          300     IN      MX      0 smtp.google.com.
google.com.br.          300     IN      TXT     &quot;v=spf1 -all&quot;
google.com.br.          2774    IN      NS      ns4.google.com.
google.com.br.          2774    IN      NS      ns2.google.com.
google.com.br.          2774    IN      NS      ns1.google.com.
google.com.br.          2774    IN      NS      ns3.google.com.</pre>
<p><strong>AUTHORITY</strong><br />
Servidores que respondem com “autoridade” pelo domínio (os NS)</p>
<pre class="remontti-code-plain">;; AUTHORITY SECTION:
google.com.br.          3599    IN      NS      ns1.google.com.
google.com.br.          3599    IN      NS      ns4.google.com.
google.com.br.          3599    IN      NS      ns3.google.com.
google.com.br.          3599    IN      NS      ns2.google.com.</pre>
<p><strong>ADDITIONAL</strong><br />
Informações auxiliares ou adicionais à pesquisa, no exemplo IPs dos servidores DNS</p>
<pre class="remontti-code-plain">;; ADDITIONAL SECTION:
ns1.google.com.         172800  IN      AAAA    2001:4860:4802:32::a
ns2.google.com.         172800  IN      AAAA    2001:4860:4802:34::a
ns3.google.com.         172800  IN      AAAA    2001:4860:4802:36::a
ns4.google.com.         172800  IN      AAAA    2001:4860:4802:38::a
ns1.google.com.         172800  IN      A       216.239.32.10
ns2.google.com.         172800  IN      A       216.239.34.10
ns3.google.com.         172800  IN      A       216.239.36.10
ns4.google.com.         172800  IN      A       216.239.38.10</pre>
<p>E na ultima sessão entrosamos podemos dizer mais 4 sub sessões:</p>
<pre class="remontti-code-plain">;; Query time: 1560 msec
;; SERVER: ::1#53(::1)
;; WHEN: ter out 26 09:17:38 -03 2021
;; MSG SIZE  rcvd: 344</pre>
<p>- <strong>QUERY TIME</strong>: vai informar o tempo que levou para realizar a consulta solicitada, quando esse tempo retora 0 é porque a consulta ele pegou do cache.<br />
- <strong>SERVER</strong>: Qual servidor ele realizou a consulta<br />
- <strong>WHEN</strong>: dara e hora da consulta + UTC<br />
- <strong>MSG SIZE</strong>: tamanho do pacote</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Um pouquinho de dig para vocês!</p>
<p>Seu DNS recursivo já está pronto, se seu intuito é <strong>apenas um DNS recursivo</strong> pode pular a parte do autoritativo/reverso, e eu recomendo que você crie uma regra extra no seu nftables (firewall) para fechar a porta 53 externamente, então vou deixar um modelo dessa configuração:<br />
<strong>ISSO SÓ DEVER SER FEITO SE SEU DNS FOR APENAS RECURSIVO! </strong></p>
<pre class="remontti-code"># vim /etc/nftables.conf</pre>
<p>Em <strong>elements</strong>, altere para os seus IPs que terão permissão, o arquivo é quase que auto explicativo. Eu vou aproveitar e criar uma proteção para o SSH e o Zabbix agent </p>
<pre class="remontti-code-plain">#!/usr/sbin/nft -f
  
flush ruleset

table inet filter {

    set acesso-total4 {
        type ipv4_addr
        flags interval
        elements = { 200.200.200.0/26, 200.200.200.128/29 }
    }
    set acesso-total6 {
        type ipv6_addr
        flags interval
        elements = { 2001:db8:f0da::/48 }
    }
    set acesso-dns4 {
        flags interval
        type ipv4_addr
        elements = { 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, 200.200.200.0/22 }
    }
    set acesso-dns6 {
        flags interval
        type ipv6_addr
        elements = { ::1, 2001:db8::/32 }
    }
    chain input {
        type filter hook input priority 0;

        #ip saddr  @acesso-total4 accept
        #ip6 saddr @acesso-total6 accept

        # Permite acesso SSH na porta 22 (alterada para 60002), a 22 eu fecho só de sacanagem, para aparecer filtrada nos scanners
        ip saddr  @acesso-total4 tcp dport 22 counter accept
        ip6 saddr @acesso-total6 tcp dport 22 counter accept
        ip saddr  @acesso-total4 tcp dport 60002 counter accept
        ip6 saddr @acesso-total6 tcp dport 60002 counter accept
        tcp dport 22 counter drop
        tcp dport 60002 counter drop

        # Permite coleta de dados pelo Zabbix-Agent na porta 10050
        ip saddr  @acesso-total4 tcp dport 10050 counter accept
        ip6 saddr @acesso-total6 tcp dport 10050 counter accept
        tcp dport 10050 counter drop   

        # Permite Acesso DNS na porta 53
        ip saddr  @acesso-dns4 udp dport 53 counter accept
        ip saddr  @acesso-dns4 tcp dport 53 counter accept
        ip6 saddr @acesso-dns6 udp dport 53 counter accept
        ip6 saddr @acesso-dns6 tcp dport 53 counter accept
        udp dport 53 counter drop
        tcp dport 53 counter drop

        type filter hook input priority 0;
    }
    chain forward {
        type filter hook forward priority 0;
    }
    chain output {
        type filter hook output priority 0;
    }
}</pre>
<p>Reinicie os serviços</p>
<pre class="remontti-code"># systemctl restart nftables fail2ban</pre>
<h2>Autoritativo</h2>
<p>Valorize os domínios.br registrados no https://registro.br/ o memos financia todo o projeto NIC.BR, que na internet brasileira tem uma papel fundament</p>
<h4>Configuração do Autoritativo (Master)</h4>
<p>Para ficar organizado criaremos alguns diretórios em /var/cache/bind/. Primeiramente a pasta <strong>master-aut</strong> que se é referencia onde vai ficar nossa configuração do DNS Master autoritativo, e dentro desta pasta uma com o nome do nosso domínio no exemplo <strong>remontti.net.br</strong>, assim se você tiver vários dominios criamos uma pasta para cada ficando bem organizado.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut
# mkdir /var/cache/bind/master-aut/remontti.net.br</pre>
<p>Agora vamos criar um em <strong>/var/cache/bind/master-aut/remontti.net.br/</strong> para que conter toda a configuração do mesmo,  e para ficar objetivo adotei em usar o nome do próprio domínio.hosts ex: <strong>remontti.net.br.hosts</strong></p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts</pre>
<p>É importante que o serial (<strong>2021102601</strong>) seja alterado toda vez que for o aruquivo sofrer qualquer alteração, assim o servidor slave saberá que precisa importar novamente as configurações. Ele segue o padrão <strong>[ano-mes-dia-sequencial]</strong> não que seja uma regra.</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400 ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2023020101 ; serial
                            14400      ; refresh (4 hours)
                            3600       ; retry (1 hour)
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)
                            )
 
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
 
                        A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4

$ORIGIN remontti.net.br.
$TTL 10800   ; 3 hours
 
ns1                     A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2
hostmaster              A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2

ns2                     A       45.80.48.3
                        AAAA    2804:f123:bebe:cafe::3

www                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4</pre>
<p>No exemplo estou confiurando apenas alguns subdomínos básicos, como ns1, ns2, www e apontando ele para seus respectivos endereços IPv4 e IPv6, os ipos mais comuns de registros:<br />
- <strong>A</strong>: Associa um nome a um endereço IPv4.<br />
- <strong>AAAA</strong>: Associa um nome a um endereço IPv6.<br />
- <strong>NS</strong>: Name Server. Define quais servidores são os servidores autoritativos do domínio<br />
- <strong>SOA</strong>: Start-Of-Authority. Detalhes da autoridade do domínio. Descreve o servidor que tem autoridade sobre a zona, além do contato técnico, número serial e outros campos.<br />
- <strong>MX</strong>: Mail eXchanger. Define os servidores de e-mail.<br />
- <strong>PTR</strong>: Pointer. Retorna o nome associado a um endereço IP. (reverso)<br />
- <strong>CNAME</strong>: Canonical NAME. Usados para criar apelidos para o domínio.<br />
- <strong>TXT</strong>: TeXT. Usados para descrições, comentários, observações de um domínio. Também usado para definir configurações de SPF.</p>
<p>Vamos criar um diretório para gerar nossas keys do DNSSEC.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut/remontti.net.br/keys</pre>
<p>Entre no diretório: </p>
<pre class="remontti-code"># cd /var/cache/bind/master-aut/remontti.net.br/keys</pre>
<p>Agora vamos a criação das chaves:</p>
<pre class="remontti-code"># dnssec-keygen -a ECDSAP256SHA256 remontti.net.br</pre>
<pre class="remontti-code-plain">Generating key pair.
Kremontti.net.br.+007+29298</pre>
<pre class="remontti-code"># dnssec-keygen -a ECDSAP256SHA256 -f KSK remontti.net.br</pre>
<pre class="remontti-code-plain">Generating key pair.
Kremontti.net.br.+007+26883</pre>
<p>Os comandos acima irão gerar 4 arquivos com extensões .key e .private</p>
<pre class="remontti-code-plain">├── Kremontti.net.br.+007+26883.key
├── Kremontti.net.br.+007+26883.private
├── Kremontti.net.br.+007+29298.key
└── Kremontti.net.br.+007+29298.private</pre>
<p>Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.</p>
<pre class="remontti-code"># chown bind: /var/cache/bind/master-aut/ -R</pre>
<p>Em <strong>/etc/bind/named.conf.local</strong> "chamaremos" a zona remontti.net.br</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code-plain">zone &quot;remontti.net.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/remontti.net.br/keys/&quot;;
        dnssec-policy default;
        inline-signing yes;
        serial-update-method unixtime;
};</pre>
<p>Para facilitar farei um atalho da pasta /var/cache/bind/master-aut em /etc/bind/master-aut.</p>
<p>Se você é da turma do mimi você pode subistiruir `type master` por `type primary` e `type slave` por `type secondary` bem como nome das pastas. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="remontti-code"># ln -s /var/cache/bind/master-aut /etc/bind/master-aut</pre>
<p>Reinicie o serviço.</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Certifique-se que o bind esta rodando sem erros</p>
<pre class="remontti-code"># systemctl status bind9</pre>
<p>Novos arquivos são gerados em /var/cache/bind/master-aut/remontti.net.br/ .jbk .signed .signed.jnl</p>
<pre class="remontti-code-plain">└── remontti.net.br
    ├── keys
    │   ├── Kremontti.net.br.+007+26883.key
    │   ├── Kremontti.net.br.+007+26883.private
    │   ├── Kremontti.net.br.+007+29298.key
    │   └── Kremontti.net.br.+007+29298.private
    ├── remontti.net.br.hosts
    ├── remontti.net.br.hosts.jbk
    ├── remontti.net.br.hosts.signed
    └── remontti.net.br.hosts.signed.jnl</pre>
<p>Precisaremos descobri nossa keytag e o digest que serão informados no registro.br, para isso rode o comando:</p>
<pre class="remontti-code"># (d=remontti.net.br; dig @127.0.0.1 +norecurse &quot;$d&quot;. DNSKEY | dnssec-dsfromkey -f - &quot;$d&quot; | head -1)</pre>
<pre class="remontti-code-plain">remontti.net.br. IN DS 26883 7 2 F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841</pre>
<p>Sendo, <strong>keytag</strong>:<em>26883</em> e o <strong>digest</strong>: <em>F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841</em></p>
<p>Possíveis bloqueios do fail2ban em caso de configuração errada, ao verificação de um domínios que seu servidor não é autoritativo, ou por um erro na configuração, a consulta será interpretada como recursiva, logo o IP de origem será bloqueado pelo fail2ban, e registrado no arquivo de logs /var/log/named/security.log.</p>
<p>Para evitar fail2ban bloquei seus IPs e pricnipalmente do registro.br, pois muitas pessoas acabam configurando errado seu DNS e na hora de verificar acabam sendo bloqueando. Para evitarmos isso vamos incluir seus IPs bem como os do registrobr na variável ignoreip do fail2ban:</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize <strong>#ignoreip =</strong>, remova o comentário (#) e inclua os prefixo do registrobr <em>200.160.0.0/20 200.219.148.0/24 2001:12f8:6::/47 2001:12ff::/32</em> bem como altere <em>45.80.48.0/22 2804:f123::/32 </em>para IPs do seu AS</p>
<pre class="remontti-code-plain">ignoreip = 127.0.0.1/8 ::1 200.160.0.0/20 200.219.148.0/24 2001:12f8:6::/47 2001:12ff::/32 45.80.48.0/22 2804:f123::/32</pre>
<p>Reinicie o fail2ban</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<h4>Configuração do Autoritativo (Slave)</h4>
<p>A configuração do slave é bem simples, pois ele irá importar do master todas as configurações.<br />
Para organização vamos seguir o mesmo padrão de diretórios do master</p>
<pre class="remontti-code"># mkdir /var/cache/bind/slave-aut
# mkdir /var/cache/bind/slave-aut/remontti.net.br</pre>
<p>Informamos nossa zona do tipo slave e o IP do nosso servidor master.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;remontti.net.br&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-aut/remontti.net.br/remontti.net.br.hosts.signed&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};</pre>
<p>Alteramos a permissão do diretório para que o bind consiga criar os arquivos.</p>
<pre class="remontti-code"># chown  bind: /var/cache/bind/slave-aut -R</pre>
<p>Mais uma vez farei uma atalho dentro de /etc/bind para facilitar.</p>
<pre class="remontti-code"># ln -s /var/cache/bind/slave-aut /etc/bind/slave-aut</pre>
<p>E reiniciamos o serviço</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Agora ao verificar o diretório /var/cache/bind/slave-aut/remontti.net.br/ encontraremos nosso arquivo criado automaticamente importado do servidor master.</p>
<pre class="remontti-code"># ls -lhs /var/cache/bind/slave-aut/remontti.net.br</pre>
<h4>Validando seu autoritativo no registro.br</h4>
<p>Vamos verificar se o servidor responde pelo nosso domínio, acesse: <a href="https://registro.br/tecnologia/ferramentas/verificacao-de-dns/" rel="noopener" target="_blank">https://registro.br/tecnologia/ferramentas/verificacao-de-dns/ </a> e preecha o formulário com o seu domínio "remontti.net.br" e o IP do seu servidor e clique em pesquisar.<br />
<strong>RESULTADO</strong></p>
<pre class="remontti-code-plain">DOMÍNIO           : remontti.net.br
DNS               : 45.80.48.2
STATUS            : Autoridade sobre o domínio
VERSÃ             : O2021102601
TEMPO DE RESPOSTA : 19.422 ms</pre>
<p>Se seu servidor DNS estiver respondedo pelo domínio solicitado uma resposta de sucesso ira apacer: <strong>Autoridade sobre o domínio</strong>. Repita o mesmo no seu servidor Slave<br />
Agora vamos fazer o mesmo para validade nosso DNSSEC, acesse: <a href="https://registro.br/tecnologia/ferramentas/verificacao-de-ds/" rel="noopener" target="_blank">https://registro.br/tecnologia/ferramentas/verificacao-de-ds/</a> e preecha o formulário com o seu domínio "remontti.net.br" e o IP do seu servidor e clique em pesquisar.<br />
<strong>RECORDS DS DAS CHAVES ENCONTRADAS</strong></p>
<pre class="remontti-code-plain">KEY TAG	  ALGORITMO	        DIGEST DS
26883	  RSA-SHA-1-NSEC3	F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841</pre>
<p>Se tudo estiver OK, ira receber o resultado da sua KEYTAG e DISGEST bem como encontrado anteriormente.</p>
<p>Seu domínio já está pronto para ser configurado no registro.br, para isso <a href="https://registro.br/login/" rel="noopener" target="_blank">acesse sua conta</a> clique sobre seu domínio e clique em: ALTERAR SERVIDORES DNS, e preecha o formulário, exemplo:<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/DNS.png" alt="" width="846" height="795" class="alignnone size-full wp-image-5971" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/DNS.png 846w, https://blog.remontti.com.br/wp-content/uploads/2021/10/DNS-300x282.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/DNS-768x722.png 768w" sizes="auto, (max-width: 846px) 100vw, 846px" /></p>
<h5>Posso ter mais de um autoritativo no mesmo servidor?</h5>
<p>Sim, inclusive o reverso é um autoritavio, vamos falar dele em seguida. Não existe um limite, o limite é seu hardware.<br />
Veja mais um exemplo para um segundo domínio:</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut/cursodns.com.br
# vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts</pre>
<p>Adicione:</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400 ; 1 day
cursodns.com.br           IN SOA  ns1.cursodns.com.br. hostmaster.cursodns.com.br. (
                            2023020101 ; serial
                            14400      ; refresh (4 hours)
                            3600       ; retry   (1 hour)
                            2419200    ; expire  (4 weeks)
                            300        ; minimum (5 minutes)
                            )
 
                        NS      ns1.cursodns.com.br.
                        NS      ns2.cursodns.com.br.
 
                        A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
                        MX      10 mail.cursodns.com.br.
                        TXT     &quot;v=spf1 a mx -all&quot;
                        SPF     &quot;v=spf1 a mx -all&quot;

$ORIGIN cursodns.com.br.
_dmarc                  TXT &quot;v=DMARC1; p=none&quot;
_domainkey              TXT &quot;t=y; o=~;&quot;

$ORIGIN _domainkey.cursodns.com.br.
mail                    TXT &quot;v=DKIM1; k=rsa; p=6B4EDqoi5l64qyxnenKx56IOIjPAnj350mq&quot;

$ORIGIN cursodns.com.br.
$TTL 10800   ; 3 hours
 
ns1                     A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2
hostmaster              A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2

ns2                     A       45.80.48.3
                        AAAA    2804:f123:bebe:cafe::3

www                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
ftp                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
imap                    A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
pop                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
smtp                    A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
mail                    A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4</pre>
<p>Vamos criar um diretório para gerar nossas keys do DNSSEC.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut/cursodns.com.br/keys</pre>
<p>Entre no diretório: </p>
<pre class="remontti-code"># cd /var/cache/bind/master-aut/cursodns.com.br/keys</pre>
<p>Agora vamos a criação das chaves:</p>
<pre class="remontti-code"># dnssec-keygen -a ECDSAP256SHA256 cursodns.com.br</pre>
<pre class="remontti-code-plain">Generating key pair.
Kcursodns.com.br.+007+00558</pre>
<pre class="remontti-code"># dnssec-keygen -a ECDSAP256SHA256 -f KSK cursodns.com.br</pre>
<pre class="remontti-code-plain">Generating key pair.
Kcursodns.com.br.+007+46491
</pre>
<p>Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.</p>
<pre class="remontti-code"># chown bind: /var/cache/bind/master-aut/ -R</pre>
<p>Adicione a zona cursodns.com.br em named.conf.local</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code-plain">zone &quot;cursodns.com.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/cursodns.com.br/keys/&quot;;
        dnssec-policy default;
        inline-signing yes;
        serial-update-method unixtime;
};</pre>
<p>Se desejar validar seu arquivo antes de reiniciar o serviço:</p>
<pre class="remontti-code"># cd /var/cache/bind/master-aut/
# named-checkzone cursodns.com.br cursodns.com.br.hosts</pre>
<p>Tudo ok, altere as permissões para não ter erro, e reinicie o bind:</p>
<pre class="remontti-code"># chown  bind: /var/cache/bind/master-aut -R
# systemctl restart bind9</pre>
<p><strong>Para o Slave</strong></p>
<pre class="remontti-code"># mkdir /var/cache/bind/slave-aut/cursodns.com.br
# vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;cursodns.com.br&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-aut/cursodns.com.br/cursodns.com.br.hosts.signed&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};</pre>
<pre class="remontti-code"># chown  bind: /var/cache/bind/slave-aut -R
# systemctl restart bind9</pre>
<p>Posso ter domínios "fakes"?<br />
Sim, basta criar uma zona. Mas juridicamente você pode ter dor de cabeça. Recomendo a leitura do <a href="https://blog.remontti.com.br/3692" rel="noopener" target="_blank">DNS Response Policy Zone (RPZ)</a> para que retornem resultados modificados em grande escala de uma foma mais eficaz. Alguns administradores podem usar o DNS RPZ para impedir acessos indesejados, normalmente é usado em empresas para bloquear por exemplo hosts infectados por malwares, sites pornográficos, entre outros casos, bloqueando a resolução de nomes. Segue um modelo simples e rápido para montar seu RPZ.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts</pre>
<p>Adicione mais uma entrada em para um novo subdominio "umbrella" apontando para um servidor, esse pode está rodando um serviço web qual pode ter uma tela com um aviso.</p>
<pre class="remontti-code-plain">//...
umbrella                        A       45.80.48.5
                                AAAA    2804:f123:bebe:cafe::5
//...</pre>
<p>Adicione uma nova zona chamada <strong>rpz.zone</strong></p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;rpz.zone&quot; {
    type master;
    file &quot;/var/cache/bind/rpz/db.rpz.zone&quot;;
    allow-query { none; };
};</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Dentro de options { ... } adcione: </p>
<pre class="remontti-code-plain">options {
//...
    response-policy {
      zone &quot;rpz.zone&quot; policy CNAME umbrella.cursodns.com.br;
    };
//...</pre>
<p>};<br />
Criaremos o diretório rpz, bem como o arquivos de hosts</p>
<pre class="remontti-code"># mkdir /var/cache/bind/rpz/
# ln -s /var/cache/bind/rpz/ /etc/bind/rpz
# vim /var/cache/bind/rpz/db.rpz.zone</pre>
<pre class="remontti-code-plain">$TTL 1H
@       IN      SOA LOCALHOST. umbrella.cursodns.com.br. (
                2023020101      ; Serial  
                1h              ; Refresh
                15m             ; Retry
                30d             ; Expire 
                2h              ; Negative Cache TTL
        )
        NS  umbrella.cursodns.com.br.
 
xvideos.com     IN CNAME .
*.xvideos       IN CNAME .
redtube.com     IN CNAME .
*.redtube.com   IN CNAME .
pornhub.com     IN CNAME .
*.pornhub.com   IN CNAME .</pre>
<p>Sendo que para cada dominio que você deseja apontar para resolver o mesmo IP do nosso umbrella.cursodns.com.br siga este padrão:</p>
<pre class="remontti-code-plain">
domino.com     IN CNAME .
*.domino.com       IN CNAME .</pre>
<p>Assim qualquer subidominio (*).domino.com seja traduzido sempre para o mesmo IP.</p>
<p>Altere as permissões e reinicie o serviço</p>
<pre class="remontti-code"># chown bind: /var/cache/bind/rpz/ -R
# systemctl restart bind9</pre>
<p>Agora faça um teste para ver o que seu servidor ira traduzir:</p>
<pre class="remontti-code"># dig xvideos.com @localhost</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.16.15-Debian &lt;&lt;&gt;&gt; xvideos.com @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 1040
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: a060f744b32f2a4f01000000617842817ffcfff0a6b99fff (good)
;; QUESTION SECTION:
;xvideos.com.                   IN      A

;; ANSWER SECTION:
xvideos.com.            5       IN      CNAME   umbrella.cursodns.com.br.
umbrella.cursodns.com.br. 10800 IN      A       45.80.48.5

;; ADDITIONAL SECTION:
rpz.zone.               1       IN      SOA     LOCALHOST. umbrella.cursodns.com.br. 2020062400 3600 900 2592000 7200

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: ter out 26 15:01:37 -03 2021
;; MSG SIZE  rcvd: 175</pre>
<pre class="remontti-code"># dig qqrcoisa.xvideos.com @localhost
# dig pornhub.com @localhost
# dig www.pornhub.com @localhost
# dig redtube.com @localhost</pre>
<pre class="remontti-code-plain"></pre>
<p>Uma boa list de hosts você <a href="https://github.com/StevenBlack/hosts" rel="noopener" target="_blank">pode encontrar aqui</a>.<br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Não esquece de mandar meu presente de natal!</p>
<h3>Reverso DNS Master - Para prefixos maiores ou igual a /24.</h3>
<p>Obs: Para fazer a Delegações de DNS reverso do seu bloco, é importante que você já tenha configurado no registro.br seu DNS autoritativo.</p>
<p>Para ficar organizado criaremos a pasta <strong>master-rev</strong> para salvar todos nossos arquivos</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-rev</pre>
<p>Para nosso cenários vou usar os prefixos 45.80.48.0/22 e 2804:f123::/32. O bloco 45.80.48.0/22 será necessário quebrar em 4 arquivos uma para cada prefixo /24 qual teremos nossos 1024 nome de hosts (IPs). </p>
<p>Lembra que anteriormente comentei que o reverso não passa de um domínio autoritativo? Então é isso mesmo, a forma de configuração é a mesma, porem já temos o nosso domínios para IPv4<strong> x.x.x.in-addr.arpa</strong> e <strong>x.x.x.x.x.x.x.x.ip6.arpa</strong> para IPv6.</p>
<p>Primeiro arquivo /24 farei com o nome de <strong>45.80.48.rev</strong>, poderia ser qualquer nome, mas assim fica bem sugestivo.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.48.rev</pre>
<p>Preste atenção em 48.80.45.in-addr.arpa. essa linha ela deve ser alterada com o inverso do seu IP, de trás para frente.<br />
Outra coisa importante é o serial (2021102601) ele está presente em todos os arquivos e deve ser alterado toda vez que for alterado. Ele segue o padrão [ano-mes-dia-sequencial]. É fundamental altera-lo para que o servidor slave copie sempre que tiver uma alteração.</p>
<p>Neste arquivo darei nomes personalizados apenas para o <strong>ns1 e ns2</strong> o resto usarei o GENERATE para gerar de forma automatica todos os mais de mil nomes, sengindo o padrão <strong>45-80-50-x.remontti.net.br.</strong></p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
48.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 48.80.45.in-addr.arpa.
2         PTR     ns1.remontti.net.br.
3         PTR     ns2.remontti.net.br.

$ORIGIN 48.80.45.in-addr.arpa.
$GENERATE 0-1     $  PTR  45-80-48-$.remontti.net.br.
$GENERATE 4-255   $  PTR  45-80-48-$.remontti.net.br.</pre>
<p>Proximo /24</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.rev</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-49-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.50.rev</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
50.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 50.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-50-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.51.rev</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
51.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 51.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-51-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/2804.f123.rev</pre>
<p>Antenção no<strong> 3.2.1.f.4.0.8.2.ip6.arpa </strong> o site <a href="http://rdns6.com/hostRecord" rel="noopener" target="_blank">http://rdns6.com/hostRecord </a>pode ser bem útil para gerar seus PTRs.</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 3600       ; 1 hour
3.2.1.f.4.0.8.2.ip6.arpa IN SOA ns1.remontti.net.br.3.2.1.f.4.0.8.2.ip6.arpa. hostmaster.remontti.net.br.3.2.1.f.4.0.8.2.ip6.arpa. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
            NS      ns1.remontti.net.br.
            NS      ns2.remontti.net.br.

2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa.   PTR     ns1.remontti.net.br.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa.   PTR     ns2.remontti.net.br.</pre>
<p>Ajustamos as permissões: </p>
<pre class="remontti-code"># chown bind: /var/cache/bind/master-rev/ -R</pre>
<p>Criamos uma atalho para facilitar:</p>
<pre class="remontti-code"># ln -s /var/cache/bind/master-rev/ /etc/bind/master-rev</pre>
<p>Agora nós precisamos informar nossas zonas reversas no named.conf.local, como estamos configurando nosso servidor master essas zonas serão do tipo (type) master. </p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code-plain">zone &quot;48.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.48.rev&quot;;
};
 
zone &quot;49.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.49.rev&quot;;
};
 
zone &quot;50.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.50.rev&quot;;
};
 
zone &quot;51.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.51.rev&quot;;
};

zone &quot;3.2.1.f.4.0.8.2.ip6.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/2804.f123.rev&quot;;
};</pre>
<p>Reinicie o serviço e verifique se o mesmo subiu sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<p>Checando se nosso IP reverso está resolvendo os nomes setados, com o comando `dig -x IP @localhost +short`</p>
<pre class="remontti-code"># dig -x 45.80.48.0 @localhost +short
45-80-48-0.remontti.net.br.

# dig -x 45.80.48.255 @localhost +short
45-80-48-255.remontti.net.br.

# dig -x 45.80.48.2 @localhost +short
ns1.remontti.net.br.

# dig -x 45.80.48.3 @localhost +short
ns2.remontti.net.br.

# dig -x 45.80.49.0 @localhost +short
45-80-49-0.remontti.net.br.

# dig -x 45.80.49.255 @localhost +short
45-80-49-255.remontti.net.br.

# dig -x 45.80.50.0 @localhost +short
45-80-50-0.remontti.net.br.

# dig -x 45.80.50.255 @localhost +short
45-80-50-255.remontti.net.br.
 
# dig -x 45.80.51.0 @localhost +short
45-80-51-0.remontti.net.br.

# dig -x 45.80.51.255 @localhost +short
45-80-51-255.remontti.net.br.

# dig -x 2804:f123:bebe:cafe::2 @localhost +short
ns1.remontti.net.br.

# dig -x 2804:f123:bebe:cafe::3 @localhost +short
ns2.remontti.net.br.</pre>
<p>Como criamos nomes aos 1024 hosts/IPs (<em>x-x-x-x.remontti.net.br</em>) será necessário apontar cada nome desses no arquivo de autoritativo do domínio <em>remontti.net.br</em> para cada nome um IP. Para isso vamos voltar as configurações do domínio autoritativo que já configurado. Lembre-se de alterar o serial! </p>
<pre class="remontti-code"># host 45-80-50-0.remontti.net.br.</pre>
<p>Host 45-80-50-0.remontti.net.br. not found: 3(NXDOMAIN)<br />
Só para relembrar: <strong>NXDOMAIN</strong>: Significa que o domínio pesquisado não existe.</p>
<p>Para resolver isso então vamos criar todos nosso nomes.<br />
vamos adicionar ao final do arquivo /var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts</p>
<pre class="remontti-code-plain">$ORIGIN remontti.net.br.
$GENERATE 0-1    45-80-48-$   A   45.80.48.$
$GENERATE 4-255  45-80-48-$   A   45.80.48.$
$GENERATE 0-255  45-80-49-$   A   45.80.49.$
$GENERATE 0-255  45-80-50-$   A   45.80.50.$
$GENERATE 0-255  45-80-51-$   A   45.80.51.$</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts</pre>
<p>Ficando:</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400 ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2023020101 ; serial
                            14400      ; refresh (4 hours)
                            3600       ; retry (1 hour)
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)
                            )
 
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
 
                        A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4

$ORIGIN remontti.net.br.
$TTL 10800   ; 3 hours
 
ns1                     A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2
hostmaster              A       45.80.48.2
                        AAAA    2804:f123:bebe:cafe::2
ns2                     A       45.80.48.3
                        AAAA    2804:f123:bebe:cafe::3
www                     A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4

$ORIGIN remontti.net.br.
$GENERATE 0-1    45-80-48-$   A   45.80.48.$
$GENERATE 4-255  45-80-48-$   A   45.80.48.$
$GENERATE 0-255  45-80-49-$   A   45.80.49.$
$GENERATE 0-255  45-80-50-$   A   45.80.50.$
$GENERATE 0-255  45-80-51-$   A   45.80.51.$</pre>
<p>Autoritativo ajustado, reinicie o serviço e verifique se o mesmo subiu sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<p>Agora ao consultar nosso nomes temos uma resposta dizendo qual nosso endereço ip</p>
<pre class="remontti-code"># host 45-80-48-0.remontti.net.br.
45-80-48-0.remontti.net.br has address 45.80.48.0
 
# host 45-80-49-0.remontti.net.br.
45-80-49-0.remontti.net.br has address 45.80.49.0

# host 45-80-50-0.remontti.net.br.
45-80-50-0.remontti.net.br has address 45.80.50.0

# host 45-80-51-0.remontti.net.br.
45-80-51-0.remontti.net.br has address 45.80.51.0

# host ns1.remontti.net.br.
ns1.remontti.net.br has address 45.80.48.2
ns1.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::2

# host ns2.remontti.net.br.
ns2.remontti.net.br has address 45.80.48.3
ns2.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::3</pre>
<h5>Para o servidor Slave</h5>
<p>Crie o diretório onde irão ficar os arquivos e dê permissão</p>
<pre class="remontti-code"># mkdir /var/cache/bind/slave-rev
# chown bind: /var/cache/bind/slave-rev -R</pre>
<p>Em seguiga crie as zonas no arquivo named.conf.local, que serão do tipo (slave) e apontaremos o IP do DNS Master para que o servidor slave faça a transferência.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final:</p>
<pre class="remontti-code-plain">zone &quot;48.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.48.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};
 
zone &quot;49.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.49.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};
 
zone &quot;50.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.50.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};
 
zone &quot;51.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.51.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};

zone &quot;3.2.1.f.4.0.8.2.ip6.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/2804.f123.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};</pre>
<p>Crio o atalho, reinico o serviço e verifico se o mesmo subiu sem erros, em seguida olho se os arquivos foram criando nas pasta.</p>
<pre class="remontti-code"># ln -s /var/cache/bind/slave-rev /etc/bind/slave-rev
# systemctl restart bind9
# systemctl status bind9
# ls -lh /var/cache/bind/slave-rev/ </pre>
<p><strong>Validando seu reverso no registro.br</strong> <a href="https://registro.br/tecnologia/ferramentas/verificacao-de-dns/" rel="noopener" target="_blank">https://registro.br/tecnologia/ferramentas/verificacao-de-dns/ </a><br />
Vamos verificar pelos domínos .arpa</p>
<pre class="remontti-code-plain">48.80.45.in-addr.arpa
49.80.45.in-addr.arpa
50.80.45.in-addr.arpa
51.80.45.in-addr.arpa
3.2.1.f.4.0.8.2.ip6.arpa</pre>
<p><strong>RESULTADOS</strong></p>
<pre class="remontti-code-plain">DOMÍNIO            : 48.80.45.in-addr.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms

DOMÍNIO            : 49.80.45.in-addr.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms

DOMÍNIO            : 50.80.45.in-addr.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms

DOMÍNIO            : 51.80.45.in-addr.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms

DOMÍNIO            : 3.2.1.f.4.0.8.2.ip6.arpa
DNS                : 45.80.48.2
STATUS             : Autoridade sobre o domínio
VERSÃ              : O2021102602
TEMPO DE RESPOSTA  : 23.990 ms</pre>
<p>Se tudo estiver certo você terá <strong>Autoridade sobre o domínio</strong>, repita o mesmo no seu para o IP do servidor Slave.</p>
<p>Seu reverso está pronto para ser configurado no registro.br, <a href="https://registro.br/login/" rel="noopener" target="_blank">acesse sua conta</a> clique em <strong>NUMERAÇÃO</strong> em seguira sobre seu prefixo exemplo <strong>45.80.48.0/22</strong>, clique no "quadro azul" e clique em <strong>Configurar DNS</strong>, preencha o formulário <strong>Delegação DNS - 45.80.48.0/22</strong>  informado o <strong>Servidor 1</strong>: ns1.remontti.net.br e <strong>Servidor 2</strong>: ns2.remontti.net.br. Lembrando que o DNS do autoritativo "remontti.net.br" deve estar com os subdominios ns1 e ns2 apontando para o IP do seu servidor DNS, e o mesmo já deve ter propagado, se você tem acabou de alterar os DNS do remontti.net.br aguarde um tempo (até 24h) para fazer a configuração do reverso.</p>
<p><strong>Dúvida frequente:</strong><br />
- <em>Posso ter reversos de diferentes blocos usando o mesmo domínio autoritativo?</em><br />
Sim, como também pode para outros domínios, inclusive mesclados. </p>
<p>- É possível configurar o DNSSEC para os reversos? Sim basta seguir o mesmo padrão que usamos no exemplo com nosso propío domínio, lembrado que "não existe reverso" tudo é um dominio autoritativo que já existe chamado de xxxxxxxx.in-addr.arpa e xxxxxxx.ip6.arpa, para configurar no registro br é muito simples, basta você realizar a configuração do DNSSEC em cima de cada /24 seu e ir no painel do registro e clicar em DNSSEC e salvar, ele ira identificar sua configuração. </p>
<p>Um ótimo site para verificar seu DNSSEC é o <a href="https://dnsviz.net/" rel="noopener" target="_blank">https://dnsviz.net/</a></p>
<h4>Como configurar o reverso para prefixos menores que /24</h4>
<p>Vamos supor que você dono de um /22  e vai repassar um prefixo /28 para um provedor sem AS ou uma empresa que é seu cliente, e o mesmo deseja ter seu reverso respondendo em seus servidores DNS (<a href="https://datatracker.ietf.org/doc/html/rfc2317" rel="noopener" target="_blank">RFC2317</a>).</p>
<p>Primeiramente faça a delegação no registro.br do /28 para o CNPJ/Domínios do de seu cliente, <a href="https://registro.br/login/" rel="noopener" target="_blank">acesse sua conta</a> clique em <strong>NUMERAÇÃO</strong> em seguira sobre seu prefixo exemplo <strong>45.80.48.0/22</strong>, clique no "quadro azul" e clique em <strong>Expandir</strong> até chegar no prefixo /28, clieque sobre o quadro do prefixo desejado e em seguida em <strong>Configurar designação</strong> e preecha o formulário com o CNPJ/Domínios do seu cliente, se o mesmo não possuir solicite que faça seu cadastro.</p>
<p>Se ficar em dúvidas recomendo que assista: https://www.youtube.com/watch?v=VIa1dHtmQ4U DNS Reverso (~20min fala sobre isso)<br />
No exemplo vamos supor que o bloco seja o 45.80.49.64/28, como o mesmo fica no arquivo 45.80.49.rev vamos edita-lo.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.rev</pre>
<p>Iremos quebrar nosso GENERETE para pular os IPs finais 64 a 79, e vamos apontar ele para os DNS do cliente, logo é claro que ele precisa ter um domínio já configurado, e nesse DNS ele apontar exemplo ns1 e ns2 para o IP do servidor que ele estará fazendo a configuração. Explico já já como faz o lado dele.</p>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
51.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-63 $ PTR 45-80-51-$.remontti.net.br.

; Cliente delegado
;  &lt;&lt;64-79&gt;&gt; /28
; Aponte para os DNS do Servidor do José 
64/28     NS     ns1.provedordojose.com.br. 
64/28     NS     ns2.provedordojose.com.br. 
; 
64      CNAME    64.45/28.49.80.45.in-addr.arpa. 
65      CNAME    65.45/28.49.80.45.in-addr.arpa. 
66      CNAME    66.45/28.49.80.45.in-addr.arpa. 
67      CNAME    67.45/28.49.80.45.in-addr.arpa. 
68      CNAME    68.45/28.49.80.45.in-addr.arpa. 
69      CNAME    69.45/28.49.80.45.in-addr.arpa. 
70      CNAME    70.45/28.49.80.45.in-addr.arpa. 
71      CNAME    71.45/28.49.80.45.in-addr.arpa. 
72      CNAME    72.45/28.49.80.45.in-addr.arpa. 
73      CNAME    73.45/28.49.80.45.in-addr.arpa. 
74      CNAME    74.45/28.49.80.45.in-addr.arpa. 
75      CNAME    75.45/28.49.80.45.in-addr.arpa. 
76      CNAME    76.45/28.49.80.45.in-addr.arpa. 
77      CNAME    77.45/28.49.80.45.in-addr.arpa. 
78      CNAME    78.45/28.49.80.45.in-addr.arpa. 
79      CNAME    79.45/28.49.80.45.in-addr.arpa.

$ORIGIN 51.80.45.in-addr.arpa.
$GENERATE 80-255 $ PTR 45-80-51-$.remontti.net.br.</pre>
<p>Reinicie o serviço e verifique o mesmo</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h5>Lado do "provedor do Jose"</h5>
<p>Como estamos falando de um outro provedor, é quase certo que ele fará seu DNS: Recursivo, autoritativo e reverso. Então faça a instalação do bind e todos os procedimentos das configurações de recursivo e autoritativo sobre o domínio “provedordojose.com.br”, porém a configuração do reverso irá mudar um pouco, ficando:</p>
<p><strong>Autoritativo</strong></p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/provedordojose.com/provedordojose.com.br.hosts</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400 ; 1 day
provedordojose.com.br        IN SOA  ns1.provedordojose.com.br. hostmaster.provedordojose.com.br. (
                            2023020101 ; serial
                            14400      ; refresh (4 hours)
                            3600       ; retry (1 hour)
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)
                            )

                        NS      ns1.provedordojose.com.br.
                        NS      ns2.provedordojose.com.br.

                        A       45.80.49.67

$ORIGIN provedordojose.com.br.
$TTL 10800   ; 3 hours

ns1                     A       45.80.49.66
hostmaster              A       45.80.49.66

ns2                     A       45.80.49.67

www                     A       45.80.49.67

$ORIGIN provedordojose.com.br.
$GENERATE 64-65  45-80-49-$    A   45.80.49.$

$ORIGIN provedordojose.com.br.
$GENERATE 68-79  45-80-49-$    A   45.80.49.$</pre>
<p><strong>Reverso</strong></p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.64-79.rev</pre>
<pre class="remontti-code-plain">$TTL 1h
@               IN      SOA     ns1.provedordojose.com.br. root.provedordojose.com.br. (
                    2020050101 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )

        IN      NS      ns1.provedordojose.com.br.
        IN      NS      ns2.provedordojose.com.br.

$ORIGIN 64/28.49.80.45.in-addr.arpa.
64      IN      PTR     45-80-49-64.provedordojose.com.br.
65      IN      PTR     45-80-49-65.provedordojose.com.br.
66      IN      PTR     ns1.provedordojose.com.br.
67      IN      PTR     ns2.provedordojose.com.br.
68      IN      PTR     45-80-49-68.provedordojose.com.br.
69      IN      PTR     45-80-49-69.provedordojose.com.br.
70      IN      PTR     45-80-49-70.provedordojose.com.br.
71      IN      PTR     45-80-49-71.provedordojose.com.br.
72      IN      PTR     45-80-49-72.provedordojose.com.br.
73      IN      PTR     45-80-49-73.provedordojose.com.br.
74      IN      PTR     45-80-49-74.provedordojose.com.br.
75      IN      PTR     45-80-49-75.provedordojose.com.br.
76      IN      PTR     45-80-49-76.provedordojose.com.br.
77      IN      PTR     45-80-49-77.provedordojose.com.br.
78      IN      PTR     45-80-49-78.provedordojose.com.br.
79      IN      PTR     45-80-49-79.provedordojose.com.br.</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code-plain">zone &quot;provedordojose.com.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/provedordojose.com.br/provedordojose.com.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/rprovedordojose.com.br/keys/&quot;;
        dnssec-policy default;
        inline-signing yes;
        serial-update-method unixtime;
};

zone &quot;64/28.49.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.49.64-79.rev&quot;;
};</pre>
<p>Reinicie o serviço</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h5>Situação de reverso para cliente final sem ele ter servidor de DNS</h5>
<p>Meu cliente quer que eu aponto os nomes dos IPs reverso para o seu domínio, posso?<br />
Sim, pode! Em muitos casos de clientes corporativos que tem seu próprio servidor de e-mail é possível que o mesmo peça para fazer isso. Ex:</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.rev</pre>
<pre class="remontti-code-plain">$ORIGIN .
$TTL 86400      ; 1 day
49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2023020101 ; serial
                    14400      ; refresh (4 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-63 $ PTR 45-80-49-$.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
64      PTR     45-80-49-64.provedordojose.com.br.
65      PTR     45-80-49-65.provedordojose.com.br.
66      PTR     ns1.provedordojose.com.br.
67      PTR     ns2.provedordojose.com.br.
68      PTR     mail.provedordojose.com.br.
69      PTR     45-80-49-69.provedordojose.com.br.
70      PTR     45-80-49-70.provedordojose.com.br.
71      PTR     45-80-49-71.provedordojose.com.br.
72      PTR     45-80-49-72.provedordojose.com.br.
73      PTR     45-80-49-73.provedordojose.com.br.
74      PTR     45-80-49-74.provedordojose.com.br.
75      PTR     45-80-49-75.provedordojose.com.br.
76      PTR     45-80-49-76.provedordojose.com.br.
77      PTR     45-80-49-77.provedordojose.com.br.
78      PTR     45-80-49-78.provedordojose.com.br.
79      PTR     45-80-49-79.provedordojose.com.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 80-199 $ PTR 45-80-49-$.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
200     PTR     mail.empresa.com.br.
201     PTR     mail.minhaempresa.com.br.
202     PTR     mail.algumaempresa.com.br.
203     PTR     www.algumchato.com.br.
204     PTR     maischatoainda.com.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 205-255 $ PTR 45-80-49-$.remontti.net.br.</pre>
<p>Reinicie os serviços</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<h3>Mais um pouco de DNS!</h3>
<p><strong>Posso configurar DNS reverso de IPs privados?</strong><br />
Sim pode, ajustes no named.conf.default-zones e zones.rfc1918<br />
Remova as linhas dos IPs privados que deseja configurar.</p>
<p><strong>Posso configurar DNS reverso de outro AS?</strong><br />
Sim. Basta configurar! (Conheço provedores pequenos que ambos tem 1 servidor DNS cada e um é o backup do outro)</p>
<h4>Estatísticas do DNS</h4>
<p><strong>Estatística web/http</strong> (statistics-channels)<br />
Para ativar edite o /etc/bind/named.conf</p>
<pre class="remontti-code"># vim /etc/bind/named.conf</pre>
<p>Adicione antes dos <em>include</em>, sendo que 45.80.48.2 é o IP público do DNS e 45.80.48.100 e 45.80.48.101 (Só aceita /32) são os IPs que poderão acessar no navegaro a porta  58053 para visualizar as informações. Porém perceba que também deixou um inet só para o IP de loopback (127.0.0.1 ) a ideiá aqui é que só o zabbix-agente acesse, eu particularmente não deixou o outro inet sendo ouvido, se deseja comente ele com <strong>//</strong> </p>
<pre class="remontti-code-plain">statistics-channels {
       inet 127.0.0.1  port 58053 allow { 127.0.0.1; ::1; };
       inet 45.80.48.2  port 58053 allow { 45.80.48.100; 45.80.48.101; };
};</pre>
<p>Para surtir efeito reinicie o serviço </p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Agora acesse <strong>http://IP_DNS:58053/</strong></p>
<p>Usaremos a seguir este método para coletar informações para o zabbix. </p>
<p>Outra forma é as<strong> estatística em arquivo </strong>(statistics-file), você pode definir um local especifico para gerar seu arquivo com as estatística, caso não especificado o mesmo é gerado em /var/cache/bind/named.stats</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Adicione dentro de options { … }</p>
<pre class="remontti-code-plain">options {
//…
//…
    statistics-file &quot;/var/log/named/named.stats&quot;;
//…
//…
};</pre>
<p>Como sempre, em toda alteração reiniciamos o serviço</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Porém para gere o arquivo de estatísticas é necessário o comando, e toda vez que deseja atualizar precisa executar o comando.</p>
<pre class="remontti-code"># rndc stats</pre>
<p>Exibe os dados do arquivo</p>
<pre class="remontti-code"># cat /var/log/named/named.stats
ou
# cat /var/cache/bind/named.stats</pre>
<p>Caso queira ver oque esta em cache pode usar o comando:</p>
<pre class="remontti-code"># rndc dumpdb -cache</pre>
<p>Ira gerar um arquivo named_dump.db em /var/cache/bind/</p>
<pre class="remontti-code"># cat /var/cache/bind/ | more
# cat /var/cache/bind/ | grep google</pre>
<h4>Criando Backup</h4>
<p>Basta salvar os diretórios  /etc/bind/* /var/cache/bind/* /usr/share/dns/* Gerar um arquivo de backup </p>
<pre class="remontti-code"># tar -czpf ns1.tar.gz /etc/bind/* /var/cache/bind/* /usr/share/dns/*</pre>
<p>Extrair arquivo de backup </p>
<pre class="remontti-code"># tar vxf ns1.tar.gz</pre>
<p>Recomendo a leitura do tutorial: <strong><a href="https://blog.remontti.com.br/4791" rel="noopener" target="_blank">Criando backups de forma simples e enviando para o Telegram ou servidor via SSH</a></strong></p>
<h3>Coletando dados dos bind e fail2ban para Zabbix 6 LTS</h3>
<p>Se você ainda não tem um zabbix server aqui tem um belo tutorial:<br />
<strong><a href="https://blog.remontti.com.br/6350" rel="noopener" target="_blank">Instalação do Zabbix 6 LTS + NGINX + PostgreSQL + Debian 11</a></strong><br />
<strong><a href="https://blog.remontti.com.br/6370" rel="noopener" target="_blank">Instalação do Grafana no Debian 11 Bullseye</a></strong></p>
<p>No nosso servidor DNS vamos precisar apenas do zabbix-agent, vamos adiciona o repositório do zabbix LTS para Debian 11 e em seguina intala-lo.</p>
<pre class="remontti-code"># cd /tmp
# apt install wget
# cd /tmp/
# wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-5+debian12_all.deb
# apt install ./zabbix-release_6.0-5+debian12_all.deb
# apt update; apt upgrade -y
# apt install zabbix-agent
# systemctl enable zabbix-agent</pre>
<p>Em seguida vamos precisar informar o IP do zabbix server:</p>
<pre class="remontti-code"># vim /etc/zabbix/zabbix_agentd.conf</pre>
<p>Localize e altere: </p>
<pre class="remontti-code-plain">Server=45.80.48.10 #IP Zabbix Server
ServerActive=45.80.48.10 #IP Zabbix Server
Hostname=ns1 #Nome exato cadastrado no Zabbix server</pre>
<p>Reinicie o serviço do zabbix agent</p>
<pre class="remontti-code"># systemctl restart zabbix-agent</pre>
<p>Não esqueça de ajustar statistics-channels named.conf:</p>
<pre class="remontti-code-plain">statistics-channels {
  inet 127.0.0.1 port 58053 allow { 127.0.0.1; };
};</pre>
<p>Vou usar o projeto <a href="https://github.com/remontti/Zabbix-Bind9-Statistics-Collection" rel="noopener" target="_blank"><strong>Zabbix-Bind9-Statistics-Collection</strong></a> compartilhado no meu gituhub</p>
<p>Copie o userparameter_rr_bind.conf no diretório (/etc/zabbix/zabbix_agentd.d) de inclusão dos agentes do Zabbix.</p>
<pre class="remontti-code"># cd /etc/zabbix/zabbix_agentd.d/
# wget https://raw.githubusercontent.com/remontti/Zabbix-Bind9-Statistics-Collection/master/userparameter_rr_bind.conf</pre>
<p>Copie o script bind-stats-rr.py para dentro de /etc/zabbix/script/ e ajustaremos os poderes e permissões.</p>
<pre class="remontti-code"># mkdir /etc/zabbix/script
# cd /etc/zabbix/script
# wget https://raw.githubusercontent.com/remontti/Zabbix-Bind9-Statistics-Collection/master/bind-stats-rr.py
# chmod a+x /etc/zabbix/script/bind-stats-rr.py
# chown zabbix: /etc/zabbix/script/ -R
# systemctl restart zabbix-agent</pre>
<p>Você pode receber estatísticas por zona (que serão descobertas automaticamente) adicionando a seguinte cláusula a cada definição de zona no seu named.conf.local: <strong>zone-statistics yes;</strong> Ex.: </p>
<pre class="remontti-code-plain">zone &quot;remontti.net.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/remontti.net.br/keys/&quot;;
        dnssec-policy default;
        inline-signing yes;
        serial-update-method unixtime;
        zone-statistics yes;
};

zone &quot;48.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.48.rev&quot;;
        zone-statistics yes;
};

zone &quot;49.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.49.rev&quot;;
        zone-statistics yes;
};

zone &quot;50.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.50.rev&quot;;
        zone-statistics yes;
};

zone &quot;51.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.51.rev&quot;;
        zone-statistics yes;
};

zone &quot;3.2.1.f.4.0.8.2.ip6.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/2804.f123.rev&quot;;
        zone-statistics yes;
};</pre>
<p>Não esqueça de restartar o serviço se editar o named.local.conf `systemctl restart zabbix-agent`</p>
<p>Baixe o arquivo <strong><a href="https://raw.githubusercontent.com/remontti/Zabbix-Bind9-Statistics-Collection/master/RR%20Bind9.xml" rel="noopener" target="_blank">RR Bind9.xml</a></strong> para seu computador e importe o mesmo para o seu Zabbix Server.<br />
Vamos ter 3 novos templates: </p>
<pre class="remontti-code-plain">- RR Servico Bind9 ==&gt; Irá verificar se os serviço esta UP
- RR Servico Bind9 - Estatisticas ==&gt; Diversas informações
- RR Servico Bind9 - Valida arquivos - Deb11 ==&gt; Notificará sempre que um arquivo named.conf* for modificado</pre>
<h4>Coletando dados das prisões do Fail2ban</h4>
<p>Projeto <a href="https://github.com/remontti/zabbix-fail2ban-discovery" rel="noopener" target="_blank"><strong>zabbix-fail2ban-discovery</strong></a> </p>
<p>Faça o download do arquivo userparameter_fail2ban.conf para o diretório /etc/zabbix/zabbix_agentd.d/</p>
<pre class="remontti-code"># cd /etc/zabbix/zabbix_agentd.d/
# wget https://raw.githubusercontent.com/remontti/zabbix-fail2ban-discovery/master/userparameter_fail2ban.conf</pre>
<p>O Fail2ban funciona apenas com root por padrão. Precisaremos conceder permissão ao Zabbix para acessar o Fail2ban. Não é uma boa ideia conceder permissão de root ao Zabbix em termos de segurança. Em vez disso, permitiremos que o usuário do Zabbix use esse soquete. O agente Zabbix é executado sob o usuário zabbix. Primeiro, precisamos criar um novo grupo chamado fail2ban. Todos os usuários pertencentes a este grupo poderão acessar o Fail2ban.</p>
<p>Criar um grupo:</p>
<pre class="remontti-code"># addgroup --group fail2ban</pre>
<p>Adicionar o usuário zabbix existente ao grupo fail2ban:</p>
<pre class="remontti-code"># usermod -a -G fail2ban zabbix</pre>
<p>Em seguida, devemos alterar o proprietário do grupo do soquete de root para fail2ban:</p>
<pre class="remontti-code"># chown root:fail2ban /var/run/fail2ban/fail2ban.sock</pre>
<p>Por fim, ajuste as permissões no soquete para que os membros do grupo possam acessá-lo:</p>
<pre class="remontti-code"># chmod g+rwx /var/run/fail2ban/fail2ban.sock</pre>
<p>Agora podemos testar que o agente Zabbix pode chamar Fail2ban:</p>
<pre class="remontti-code"># su - zabbix --shell=/bin/bash -c &#039;fail2ban-client status sshd&#039;</pre>
<pre class="remontti-code-plain">Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:</pre>
<p>As instruções de instalação abrangem a alteração das permissões do soquete fail2ban para acesso como um usuário não root; no entanto, essas alterações são perdidas na próxima vez que o soquete é criado.</p>
<p>Para tornar as alterações permanentes em um sistema em que o fail2ban é gerenciado pelo systemd, adicione o seguinte ao arquivo de substituição de serviço fail2ban</p>
<pre class="remontti-code"># systemctl edit fail2ban</pre>
<p>Adicione: </p>
<pre class="remontti-code-plain">[Service]
ExecStartPost=/bin/sh -c &quot;while ! [ -S /run/fail2ban/fail2ban.sock ]; do sleep 1; done&quot;
ExecStartPost=/bin/chgrp fail2ban /run/fail2ban/fail2ban.sock
ExecStartPost=/bin/chmod g+w /run/fail2ban/fail2ban.sock
Restart Zabbix Agent</pre>
<p>Reinicie os serviços </p>
<pre class="remontti-code"># systemctl daemon-reload
# systemctl restart zabbix-agent fail2ban </pre>
<p>Consulte  se o grupo é o fail2ban</p>
<pre class="remontti-code"># ls -lh /var/run/fail2ban/fail2ban.sock</pre>
<pre class="remontti-code-plain">srwxrwx--- 1 root fail2ban 0 jun 18 11:47 /var/run/fail2ban/fail2ban.sock</pre>
<p>Faça download do template <strong><a href="https://raw.githubusercontent.com/remontti/zabbix-fail2ban-discovery/master/RR%20Servico%20Fail2ban%20-%20Monitor%20Filtros.xml" rel="noopener" target="_blank">RR Servico Fail2ban - Monitor Filtros</a></strong> e importe para o Zabbix Server.</p>
<p>Por hoje é "só" pessoal!<br />
Espero ter colaborado com uma pequena parcela em seu conhecimento.<br />
<font color="red">Esse tutorial levei <strong>dois dias</strong> escrevendo então conto com sua ajuda para poder manter o blog!</font></p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a><br />
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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p><strong>Recomendado: </strong><br />
<a href="https://www.isc.org/download/" rel="noopener" target="_blank">https://www.isc.org/download/ </a><br />
<a href="https://downloads.isc.org/isc/bind9/9.16.15/doc/arm/Bv9ARM.pdf" rel="noopener" target="_blank">https://downloads.isc.org/isc/bind9/9.16.15/doc/arm/Bv9ARM.pdf</a><br />
<strong>Extensão para navegador:</strong><br />
<a href="https://chrome.google.com/webstore/detail/ipvfoo/ecanpcehffngcegjmadlcijfolapggal" rel="noopener" target="_blank">https://chrome.google.com/webstore/detail/ipvfoo/ecanpcehffngcegjmadlcijfolapggal</a><br />
<a href="https://addons.mozilla.org/en-US/firefox/addon/ipvfoo-pmarks/" rel="noopener" target="_blank">https://addons.mozilla.org/en-US/firefox/addon/ipvfoo-pmarks/</a></p>
<p><strong>Ferramentas web: </strong><br />
<a href="https://dnschecker.org/" rel="noopener" target="_blank">https://dnschecker.org/</a><br />
<a href="https://zonemaster.net/" rel="noopener" target="_blank">https://zonemaster.net/</a></p>
<p>O post <a href="https://blog.remontti.com.br/5958">Servidor DNS Bind9 &#8211; Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11/12</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/5958/feed</wfw:commentRss>
			<slash:comments>59</slash:comments>
		
		
			</item>
		<item>
		<title>Assinando DNSSEC em seus domínios autoritativos (Bind9)</title>
		<link>https://blog.remontti.com.br/4672</link>
					<comments>https://blog.remontti.com.br/4672#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 30 Jun 2020 17:36:16 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian 10]]></category>
		<category><![CDATA[debian 8]]></category>
		<category><![CDATA[Debian 9]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[dnssec]]></category>
		<category><![CDATA[Segurança]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=4672</guid>

					<description><![CDATA[<p>Nesse tutorial vamos aprender configurar o DNSSEC (Domain Name System SECurity extensions) em seus domínios autoritativos. Usarei um exemplo de configuração seguindo a topologia adotada já em tutoriais do bind9 publicados aqui no blog.&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/4672">Assinando DNSSEC em seus domínios autoritativos (Bind9)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Nesse tutorial vamos aprender configurar o DNSSEC (Domain Name System SECurity extensions) em seus domínios autoritativos.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/06/capa-dnssec.png" alt="" width="720" height="340" class="alignnone size-full wp-image-4701" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/06/capa-dnssec.png 720w, https://blog.remontti.com.br/wp-content/uploads/2020/06/capa-dnssec-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/06/capa-dnssec-520x245.png 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /><br />
Usarei um exemplo de configuração <a href="https://blog.remontti.com.br/3086" rel="noopener noreferrer" target="_blank">seguindo a topologia adotada já em tutoriais do bind9 publicados aqui no blog</a>. Então neste exemplo usarei de modelo o domínios <a href="https://blog.remontti.com.br/curso-bind9">cursodns.com.br</a> (Aproveitando fazer um merchandising do meu curso). </p>
<p>Como de costume gosto de ter os diretórios/arquivos organizados, logo em nosso diretório padrão <strong>/var/cache/bind/</strong> crio sempre um diretório para dizer se é <strong>master</strong> ou <strong>slave</strong> deixando o nome da pasta &#8220;master-aut&#8221; ou &#8220;salve-aut&#8221; <strong>aut</strong> de autoritativo, e como vamos assinar nosso domínio irei criar mais um diretório para o domínio, pois iremos ter vários arquivos para cada domínio e mais ainda, irei criar a pastinha onde ficarão as keys. Não gosto de &#8220;bagunça na casa&#8221;, pelo menos no servidor. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>Antes de mais nada já com o domínio configurado. Segue um exemplo aqui para ilustrar as demais configurações, mas recomendo a leitura do tutorial:  <a href="https://blog.remontti.com.br/3086" rel="noopener noreferrer" target="_blank">Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster</a></p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut/
# mkdir /var/cache/bind/master-aut/cursodns.com.br
# mkdir /var/cache/bind/master-aut/cursodns.com.br/keys
# vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts</pre>
<pre class="remontti-code">$ORIGIN .
$TTL 86400 ; 1 day
cursodns.com.br           IN SOA  ns1.cursodns.com.br. hostmaster.cursodns.com.br. (
                            2020071900 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry   (1 hour)
                            2419200    ; expire  (4 weeks)
                            300        ; minimum (5 minutes)
                            )
 
                        NS      ns1.cursodns.com.br.
                        NS      ns2.cursodns.com.br.
 
                        A       200.200.200.4
                        AAAA    2804:ffff:bebe:cafe::2
                        MX      10 mail.cursodns.com.br.
                        TXT     &quot;v=spf1 a mx -all&quot;
                        SPF     &quot;v=spf1 a mx -all&quot;

$ORIGIN cursodns.com.br.
_dmarc                  TXT &quot;v=DMARC1; p=none&quot;
_domainkey              TXT &quot;t=y; o=~;&quot;

$ORIGIN _domainkey.cursodns.com.br.
mail                    TXT &quot;v=DKIM1; k=rsa; p=1234/1234/abcdf+1234+abcdf+1234+abcfg&quot;

$ORIGIN cursodns.com.br.
$TTL 10800   ; 3 hours
ns1                     A       200.200.200.2
                        AAAA    2804:ffff:bebe:cafe::2
hostmaster              A       200.200.200.2
                        AAAA    2804:ffff:bebe:cafe::2
ns2                     A       200.200.200.3
                        AAAA    2804:ffff:bebe:cafe::3
www                     A       200.200.200.4
                        AAAA    2804:ffff:bebe:cafe::4
ftp                     A       200.200.200.4
                        AAAA    2804:ffff:bebe:cafe::4
imap                    A       200.200.200.4
                        AAAA    2804:ffff:bebe:cafe::4
pop                     A       200.200.200.4
                        AAAA    2804:ffff:bebe:cafe::4
smtp                    A       200.200.200.4
                        AAAA    2804:ffff:bebe:cafe::4
mail                    A       200.200.200.4
                        AAAA    2804:ffff:bebe:cafe::4</pre>
<p>Configurações da zona cursodns.com.br em named.conf.local  </p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code">zone &quot;cursodns.com.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts&quot;;
};</pre>
<p>É extremamente dar permissões ao diretórios para que o bind possa acessar e criar as configurações do DNSSEC.</p>
<pre class="remontti-code"># chown  bind. /var/cache/bind/master-aut -R</pre>
<p>Agora vamos proprimamente para as configurações do DNSSEC:</p>
<p>Ajuste as configurações de DNSSEC em named.conf.options adicionando `dnssec-enable yes;` `dnssec-validation yes;`  e `dnssec-lookaside auto;` dentro de options {&#8230;}.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code">options {
...
  dnssec-enable yes;
  dnssec-validation auto;
...
}</pre>
<p>Reinicie os serviços </p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Até aqui é o que você já teria que ter configurado, ou acabou de configurar. </p>
<p>Agora vamos a criação das chaves:</p>
<pre class="remontti-code"># cd /var/cache/bind/master-aut/cursodns.com.br/keys</pre>
<pre class="remontti-code"># dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE cursodns.com.br</pre>
<pre class="remontti-code-plain">Generating key pair...........+++++ ...................+++++ 
Kcursodns.com.br.+007+00095
</pre>
<pre class="remontti-code"># dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE cursodns.com.br</pre>
<pre class="remontti-code-plain">Generating key pair.......................................................
....................................................................++++ 
.....................................................++++</pre>
<p>Os comandos acima irão gerar 4 arquivos com extensões .key e .private</p>
<pre class="remontti-code-plain">├── cursodns.com.br.hosts
├── Kcursodns.com.br.+007+00095.key
├── Kcursodns.com.br.+007+00095.private
├── Kcursodns.com.br.+007+12531.key
└── Kcursodns.com.br.+007+12531.private</pre>
<p>Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.</p>
<pre class="remontti-code"># chown bind. /var/cache/bind/master-aut/ -R</pre>
<p>Vamos ajustar nossa zona para que o bind crie a assinatura automaticamente, e renove a mesma também. </p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Vamos incluir as variáveis key-directory, auto-dnssec, inline-signing e serial-update-method.</p>
<pre class="remontti-code">zone &quot;cursodns.com.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts&quot;;
        key-directory &quot;/var/cache/bind/master-aut/cursodns.com.br/keys/&quot;;
        auto-dnssec maintain;
        inline-signing yes;
        serial-update-method unixtime;
};</pre>
<p>Reinicie os serviços </p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Novos arquivos são gerados .jbk .signed .signed.jnl</p>
<pre class="remontti-code-plain">├── cursodns.com.br
│   ├── cursodns.com.br.hosts
│   ├── cursodns.com.br.hosts.jbk
│   ├── cursodns.com.br.hosts.signed
│   ├── cursodns.com.br.hosts.signed.jnl
│   └── keys
│       ├── Kcursodns.com.br.+007+04514.key
│       ├── Kcursodns.com.br.+007+04514.private
│       ├── Kcursodns.com.br.+007+14961.key
│       └── Kcursodns.com.br.+007+14961.private
</pre>
<p>Depois de qualquer edição no “cursodns.com.br.hosts” <strong>nunca esqueça de alterar o serial</strong> do mesmo para que ao reiniciar o bind reassine automaticamente. O BIND 9.7.0 introduziu a atualização automática de assinaturas no servidor e a substituição automática de chaves. Se desejar verificar a versão do seu bind use o comando:</p>
<pre class="remontti-code"># bind9-config --version</pre>
<pre class="remontti-code-plain">VERSION=9.11.5-P4-5.1+deb10u1-Debian</pre>
<p>Não podemos esquecer de ajustar as configurações na zona do seu servidor <strong>Slave</strong> incluído um <strong>.signed</strong> que o bind tratará de fazer o resto.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code">zone &quot;cursodns.com.br&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-aut/cursodns.com.br.hosts.signed&quot;;
        masters { 200.200.200.2; };
        allow-notify { 200.200.200.2; };
};</pre>
<p>Visualizando a chave DS que será informada no registro.br </p>
<pre class="remontti-code"># (d=cursodns.com.br; dig @127.0.0.1 +norecurse &quot;$d&quot;. DNSKEY | dnssec-dsfromkey -f - &quot;$d&quot; | head -1)</pre>
<pre class="remontti-code-plain">cursodns.com.br. IN DS 12531 7 1 09436D3E76B37CB6836EF918992279334530ED18</pre>
<p>Sendo &#8220;12531&#8221; sua <strong>keytag</strong> e &#8220;09436D3E76B37CB6836EF918992279334530ED18&#8221; seu <strong>digest</strong></p>
<p>Você deve também validar a mesma utilizando as ferramentas do registro.br<br />
<a href="https://registro.br/tecnologia/ferramentas/verificacao-de-ds/" rel="noopener noreferrer" target="_blank">https://registro.br/tecnologia/ferramentas/verificacao-de-ds/ </a><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_.png" alt="" width="1170" height="836" class="alignnone size-full wp-image-4694" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_.png 1170w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_-300x214.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_-1024x732.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_-768x549.png 768w" sizes="auto, (max-width: 1170px) 100vw, 1170px" /></p>
<p>Tudo certo, acesse sua conta no <a href="https://registro.br/login/" rel="noopener noreferrer" target="_blank">registro.br</a> e <strong>altera os servidores DNS</strong> do seu domínios, em seguida para informar seu DS clique no botão <strong>[ + DNSSEC ]</strong> e informe sua keytag e seu digest. Como no exemplo:</p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_2.png" alt="" width="789" height="651" class="alignnone size-full wp-image-4695" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_2.png 789w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_2-300x248.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_remontti.com_.br_2-768x634.png 768w" sizes="auto, (max-width: 789px) 100vw, 789px" /></p>
<p>Salve as configurações, e aguarde a publicação. </p>
<p>Validando externamente após configurado:<br />
<a href="https://dnsviz.net" rel="noopener noreferrer" target="_blank">https://dnsviz.net</a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste.png" data-rel="lightbox-gallery-fUQIQsXf" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste-150x150.png" alt="" width="150" height="150" class="alignnone size-thumbnail wp-image-4706" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste-150x150.png 150w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste-80x80.png 80w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste-320x320.png 320w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a><br />
<a href="https://dnssec-analyzer.verisignlabs.com/" rel="noopener noreferrer" target="_blank">https://dnssec-analyzer.verisignlabs.com/</a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste2.png" data-rel="lightbox-gallery-fUQIQsXf" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste2-150x150.png" alt="" width="150" height="150" class="alignnone size-thumbnail wp-image-4707" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste2-150x150.png 150w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste2-80x80.png 80w, https://blog.remontti.com.br/wp-content/uploads/2020/06/dnssec_teste2-320x320.png 320w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a></p>
<p>Comandos para verificar</p>
<pre class="remontti-code"># dig DNSKEY cursodns.com.br. @localhost +multiline</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1+deb10u1-Debian &lt;&lt;&gt;&gt; DNSKEY cursodns.com.br. @localhost +multiline
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 49504
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: b580d5ebb228d8ca5aa8e9d75eec2ea4fe508863e452094c (good)
;; QUESTION SECTION:
;cursodns.com.br.       IN DNSKEY

;; ANSWER SECTION:
cursodns.com.br.        86400 IN DNSKEY 257 3 7 (
                                AwEAAcLJ5zXdPByA/kIJBI0Oo8I5K+8fsa3Cd69pMGTr
                                ECIWGIRhIJyqC5qIWEUNKDcfC3OEfo4RFQKz5XsDEIPW
                                7FuY98mL9Bc73ov0iscYW6XSIYWYrSCsGn5/fsuRVM12
                                sR4yTAZ3k01n7uJRUHCaFB9Z2KbevUpU+Hj5CZYfzwOW
                                nP2uPKs/DGzhW415CK8HGeGzmfMen4wQZcqxiI3sy512
                                g0+BToj9DUso2FrWjM659mZAgTqb093WX5vuO4tNDqSm
                                6hx6loisbpWwehpeFch/hEbI8SV+3GjUaHo+S+fcJsU2
                                XLDv28U51PgNQyzRHAD/0qzzPUiQPZNxjTc409CRCQhQ
                                6X7VCreN+LfPNGCnJYwAnqbfMDo6sPoBG+gS3pLht7QQ
                                72wpEJVKuUrdmSzy/qLhDdKwhsaV
                                ) ; KSK; alg = NSEC3RSASHA1 ; key id = 12531
cursodns.com.br.        86400 IN DNSKEY 256 3 7 (
                                AwEAAaYiokjVqvIGsWzU5QSJqiLAFQQEo5kEbqLZ3DC1
                                foiL18m3fd0XMFdI05vRx31BLzhXn2gSf+VCFjVeCd/r
                                fdgJJyrRT4yeNEUlDy8T0s4QyQoxAElel44sN7M=
                                ) ; ZSK; alg = NSEC3RSASHA1 ; key id = 35849

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: sex jun 19 00:19:00 -03 2020
;; MSG SIZE  rcvd: 880</pre>
<pre class="remontti-code"># dig A cursodns.com.br. @localhost +noadditional +dnssec +multiline</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1+deb10u1-Debian &lt;&lt;&gt;&gt; A cursodns.com.br. @localhost +noadditional +dnssec +multiline
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 16455
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
; COOKIE: f992cf3f88f7fbf0db5fb2ce5eec2e873855b0078162adf7 (good)
;; QUESTION SECTION:
;cursodns.com.br.       IN A

;; ANSWER SECTION:
cursodns.com.br.        86400 IN A 168.181.117.178
cursodns.com.br.        86400 IN RRSIG A 7 3 86400 (
                                20200701053116 20200619021212 35849 cursodns.com.br.
                                wmtl/WPY0ukcYnrmZokd8WOV1wAuewKbUpDc6YvXgA0A
                                08FBP7OUvSKA9M+uFZlIQazOLPEHHWFcXBaMc8yI8kcW
                                sMsUL4eCMwjF8tXIRulFxWs/JUXYENHGMQ== )

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: sex jun 19 00:18:31 -03 2020
;; MSG SIZE  rcvd: 391</pre>
<pre class="remontti-code"># dig +trace +noadditional DS cursodns.com.br. @8.8.8.8 | grep DS</pre>
<pre class="remontti-code-plain">; &lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1+deb10u1-Debian &lt;&lt;&gt;&gt; +trace +noadditional DS cursodns.com.br. @8.8.8.8
br.                     86400   IN      DS      2471 13 2 5E4F35998B8F909557FA119C4CBFDCA2D660A26F069EF006B403758A 07D1A2E4
br.                     86400   IN      RRSIG   DS 8 1 86400 20200701170000 20200618160000 48903 . 0ga5/MymkCjtQiVuTxNfsVpg/vKI6ZPpBjSHNtk/59/298cREbeycihL x/dUNLCi1HA9rD548kn9wINWwB7odAd+nZWvSiowehOgPv0vJx+gxBvU t6hANjB1hxEJ3i4dPxsjSrJPunsgJdgCGRxGeNyWEQomtvaIrfhCqAuL fqFxMARv/Nfo28d317dz3xTAMaxsd1gwIGGaItebmUEzrOkc8B+gEFhF nma2wA==
cursodns.com.br.        3600    IN      DS      12531 7 1 09436D3E76B37CB6836EF918992279334530ED18
cursodns.com.br.        3600    IN      RRSIG   DS 13 3 3600 20200702211009 20200618201009 33095 com.br. H7Y04YKIa0i7ZjOr0U2OKej+0RULQWQruA4z9yyCbodMg7bgDyCeRM/b XbxUsEuMG7xP76mmlPLjBR5mg8kaCw==</pre>
<pre class="remontti-code"># whois cursodns.com.br</pre>
<pre class="remontti-code-plain">domain:      cursodns.com.br
owner:       Rudimar Remontti
ownerid:     00.000.000/0000-00
responsible: Rudimar Remontti
country:     BR
owner-c:     NICBR
admin-c:     NICBR
tech-c:      NICBR
billing-c:   NICBR
nserver:     ns1.cursodns.com.br
nsstat:      20200719 AA
nslastaa:    20200719
nserver:     ns2.cursodns.com.br
nsstat:      20200719 AA
nslastaa:    20200719
dsrecord:    12531 RSASHA1-NSEC3-SHA1 09436D3E76B37CB6836EF918992279334530ED18
dsstatus:    20200719 DSOK
dslastok:    20200719
status:      published</pre>
<p>Curtiu o conteúdo? Quer me ajudar? <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Conheça meu curso DNS ao vivo: <a href="https://blog.remontti.com.br/curso-bind9" rel="noopener noreferrer" target="_blank">Curso Bind9</a></p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento! (Esse deu trabalho!)</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Participe do canal no <a href="https://t.me/blogremontti" rel="noopener noreferrer" target="_blank">telegram</a> para ficar atualizado sempre que publicar um novo tutorial. </p>
<p>Abraço!</p>
<p><strong>Referencias</strong>:<br />
<em><a href="https://wiki.debian.org/DNSSEC" rel="noopener noreferrer" target="_blank">https://wiki.debian.org/DNSSEC</a><br />
<a href="https://downloads.isc.org/isc/dnssec-guide/html/dnssec-guide.html" rel="noopener noreferrer" target="_blank">https://downloads.isc.org/isc/dnssec-guide/html/dnssec-guide.html</a><br />
<a href="https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf" rel="noopener noreferrer" target="_blank">https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf</a><br />
<a href="https://registro.br/tecnologia/dnssec/tutoriais/" rel="noopener noreferrer" target="_blank">https://registro.br/tecnologia/dnssec/tutoriais/</a><br />
<a href="https://wiki.debian.org/Bind9" rel="noopener noreferrer" target="_blank">https://wiki.debian.org/Bind9</a></em></p>
<p>O post <a href="https://blog.remontti.com.br/4672">Assinando DNSSEC em seus domínios autoritativos (Bind9)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/4672/feed</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>Como configurar um servidor DNS Response Policy Zone (RPZ) + Shallalist</title>
		<link>https://blog.remontti.com.br/3692</link>
					<comments>https://blog.remontti.com.br/3692#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 15 Oct 2019 00:07:53 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[buster]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian10]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[isc]]></category>
		<category><![CDATA[Policy]]></category>
		<category><![CDATA[Response]]></category>
		<category><![CDATA[Response Policy Zone]]></category>
		<category><![CDATA[rpz]]></category>
		<category><![CDATA[umbrella]]></category>
		<category><![CDATA[Zone]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3692</guid>

					<description><![CDATA[<p>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&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3692">Como configurar um servidor DNS Response Policy Zone (RPZ) + Shallalist</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Neste tutoria vamos aprender a configurar o um servidor DNS com <a href="https://www.isc.org/rpz/" rel="noopener noreferrer" target="_blank">RPZ</a>, 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. </p>
<p>O DNS RPZ é uma tecnologia desenvolvida pelo <a href="https://www.isc.org/bind/" rel="noopener noreferrer" target="_blank">ISC</a> disponível desde a versão 9.8 do Bind.</p>
<p>Muitas pessoas se referem ao DNS RPZ como um &#8220;DNS Firewall&#8221;. ISPs estão testando e implementando isso para fornecer proteção adicional aos seus clientes. Um bom exemplo é o <a href="https://www.opendns.com/home-internet-security/" rel="noopener noreferrer" target="_blank">OpenDNS Family Shield</a> que utiliza deste recurso.</p>
<p>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. </p>
<p>Instalação do servidor DNS será com base no tutorial: <a href="https://blog.remontti.com.br/3086" rel="noopener noreferrer" target="_blank">Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster</a></p>
<p>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 <a href="https://blog.remontti.com.br/3086" rel="noopener noreferrer" target="_blank">citado acima</a>.</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<p>Ajuste sua interface de rede:</p>
<pre class="remontti-code">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</pre>
<p><strong>Instalando Bind9</strong> </p>
<pre class="remontti-code"># su -
# apt install bind9 dnsutils
# echo &quot;nameserver 127.0.0.1&quot; &gt; /etc/resolv.conf 
# cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp
# echo &gt; named.conf.options
# vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code">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 &quot;/var/cache/bind&quot;;
 
    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 &quot;RR DNS Server&quot;;
};</pre>
<p><strong>Instalando Fail2ban</strong></p>
<pre class="remontti-code"># apt install nftables fail2ban
# vim /etc/fail2ban/jail.conf</pre>
<p>Altere:</p>
<pre class="remontti-code">#banaction = iptables-multiport
#banaction_allports = iptables-allports
banaction = nftables-allports
banaction_allports = nftables-allports</pre>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/nftables-allports.conf</pre>
<p>Altere:</p>
<pre class="remontti-code">#nftables_mode = meta l4proto &lt;protocol&gt;
nftables_mode =</pre>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/nftables-common.conf</pre>
<p>Altere:</p>
<pre class="remontti-code">#blocktype = reject
blocktype = drop</pre>
<pre class="remontti-code"># vim /etc/fail2ban/filter.d/bind9.conf</pre>
<p>Crie:</p>
<pre class="remontti-code"># 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]+)? &lt;HOST&gt;#\S+( \([\S.]+\))?: &lt;F-CONTENT&gt;.+&lt;/F-CONTENT&gt;$
 
failregex = ^(view (internal|external): )?query(?: \(cache\))? &#039;.*&#039; denied\s*$
            ^zone transfer &#039;\S+/AXFR/\w+&#039; denied\s*$
            ^bad zone transfer request: &#039;\S+/IN&#039;: non-authoritative zone \(NOTAUTH\)\s*$
 
ignoreregex =
 
# DEV Notes:
# Author: Rudimar Remontti</pre>
<pre class="remontti-code"># vim /etc/fail2ban/jail.d/bind9.conf</pre>
<p>Crie:</p>
<pre class="remontti-code">[bind9]
enabled  = true
port     = domain,953
protocol = tcp
logpath  = /var/log/named/security.log
bantime  = 24h
maxretry = 1</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">// 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 &quot;/var/log/named/security.log&quot; versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };
 
    channel file_log {
        file &quot;/var/log/named/named.log&quot; 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 &quot;/etc/bind/named.conf.options&quot;;
include &quot;/etc/bind/named.conf.local&quot;;
include &quot;/etc/bind/named.conf.default-zones&quot;;</pre>
<pre class="remontti-code"># 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</pre>
<p>DNS configurado e seguro! Vamos as configurações do RPZ.</p>
<h3>RPZ</h3>
<p>Primeiramente vamos supor que o servidor DNS tenha o IP 45.80.50.5 / 2804:f123:bebe:cafe::5, Então <strong>acesse seu servidor DNS MASTER</strong> responsável pelo domínio <strong>autoritativo</strong> e crie um <strong>subdomínios</strong> chamado exemplo &#8220;<strong>umbrella</strong>&#8220;. Também pode alterar o nome no reverso.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/SEUDOMINIO.hosts</pre>
<pre class="remontti-code">
//...
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
//...
</pre>
<p><strong>Voltando para o servidor DNS RPZ</strong></p>
<p>Crie uma zona chamada rpz.zone</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione:</p>
<pre class="remontti-code">//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include &quot;/etc/bind/zones.rfc1918&quot;;

zone &quot;rpz.zone&quot; {
    type master;
    file &quot;/var/cache/bind/rpz/db.rpz.zone&quot;;
    allow-query {none;};
};</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Adicione o response-policy</p>
<pre class="remontti-code">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 &quot;/var/cache/bind&quot;;
 
    dnssec-enable yes;
    dnssec-validation auto;
 
    auth-nxdomain no;
 
    listen-on { any; };
    listen-on-v6 { any; };
 
    response-policy {
	zone &quot;rpz.zone&quot; 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 &quot;RR DNS Server&quot;;
};</pre>
<p>Vamos criar o arquivo qual vai ter todos nossos hosts (Domínios) bloqueados.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/rpz/
# ln -s /var/cache/bind/rpz/ /etc/bind/
# vim /var/cache/bind/rpz/db.rpz.zone</pre>
<p>No exemplo vou adicionar alguns sites pornos.</p>
<pre class="remontti-code">$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 .</pre>
<pre class="remontti-code"># chown  bind. /var/cache/bind/rpz/ -R</pre>
<p>Reinicie o serviço e verifique se o mesmo está rodando sem nenhum erro.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status  bind9</pre>
<p>Vamos fazer um teste para ver se os domínios acima estão sendo direcionado para o nosso IP:</p>
<pre class="remontti-code"># dig redtube.com @localhost</pre>
<pre class="remontti-code">; &lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1-Debian &lt;&lt;&gt;&gt; redtube.com @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- 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</pre>
<p>Testado subdomínios:</p>
<pre class="remontti-code"># 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</pre>
<p>Seu DNS RPZ já está funcional. </p>
<p>Mas seria legal instalarmos um <strong>Serviço Web</strong> 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.</p>
<p>Você pode acessar os tutoriais para saber mais sobre servidor web e domínios virtuais:<br />
– <a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP” </a><br />
– <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">Como ter diversos sub/domínios no mesmo servidor? (Domínios virtuais com Apache2)</a></p>
<p><strong>Instalando o Apache2+PHP</strong></p>
<pre class="remontti-code"># apt install apache2 apache2-utils libapache2-mod-php php</pre>
<p>Por segurança recomendo remover a assinatura do servidor:</p>
<pre class="remontti-code"># sed -i &#039;s/ServerTokens OS/ServerTokens Prod/&#039; /etc/apache2/conf-available/security.conf
# sed -i &#039;s/ServerSignature On/ServerSignature Off/&#039; /etc/apache2/conf-available/security.conf</pre>
<p>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.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/000-default.conf</pre>
<p>Faça as devidas alterações, não esqueça de alterar em<strong> Require ip</strong> alterar para os IPs que você vai autorizar as conexões. Seu arquivo <strong>000-default.conf</strong> vai ficas assim:</p>
<pre class="remontti-code">&lt;virtualhost *:80&gt;
        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
 
        &lt;Directory /var/www/html/&gt;
            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
        &lt;/Directory&gt;
 
        LogLevel warn 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/virtualhost&gt;</pre>
<p>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 <a href="https://blog.remontti.com.br/3548" rel="noopener noreferrer" target="_blank">tutorial usando letsencrypt)</a>, 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:</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/000-default-ssl.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">&lt;IfModule mod_ssl.c&gt;
    &lt;VirtualHost _default_:443&gt;
        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

        &lt;Directory /var/www/html/&gt;
            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
        &lt;/Directory&gt;

        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

    &lt;/VirtualHost&gt;
&lt;/IfModule&gt;</pre>
<pre class="remontti-code"># a2ensite 000-default-ssl.conf 
# a2enmod http2 rewrite ssl
# systemctl restart apache2</pre>
<p>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!<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/10/html.tar.gz">html.tar</a></p>
<pre class="remontti-code"># 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</pre>
<p>Altere o nome da empresa/site, substitua também o arquivo do logo.</p>
<pre class="remontti-code">  $empresa = &quot;Remontti&quot;;
  $site=&quot;http://www.remontti.com.br&quot;;</pre>
<p>Caso você não gostou da página sinta-se livre para criar a sua própria, a ideia é apenas demonstrar como faze-la.</p>
<p>Hora de ver funcionar <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
Altere o DNS do seu computador para o IP do seu servidor RPZ e acesse um site proibido!</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/10/xvideos-rpz-ns.png" data-rel="lightbox-gallery-mTvjvLzx" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/10/xvideos-rpz-ns-1024x503.png" alt="" width="1024" height="503" class="alignnone size-large wp-image-3696" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/10/xvideos-rpz-ns-1024x503.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/10/xvideos-rpz-ns-300x147.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/10/xvideos-rpz-ns-768x377.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/10/xvideos-rpz-ns.png 1112w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p><strong>BINGO! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>
<p>Mas como fazer para saber tantos domínios? Bom existe uma lista chamada <a href="http://www.shallalist.de" rel="noopener noreferrer" target="_blank">shallalist</a> 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 <a href="http://www.shallalist.de/Downloads/shallalist.tar.gz" rel="noopener noreferrer" target="_blank">donwload da lista </a> teremos varias pastas divididas em categorias:</p>
<pre class="remontti-code">├── 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</pre>
<p>Montei um script para ler esses arquivos e montar nosso arquivo <strong>db.rpz.zone</strong> com base na shallalist. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Aceito presente depois dessa!<br />
Para ficar organizado vamos criar uma pasta chamada <strong>script-rpz</strong></p>
<pre class="remontti-code"># mkdir /etc/bind/script-rpz
# cd /etc/bind/script-rpz</pre>
<p>Vamos criar um arquivo <strong>rpz.pl</strong> em linguagem perl para montar nosso arquivo <strong>db.rpz.zone</strong>.</p>
<p>No arquivo ajuste para as listas que desejar, no exemplo vou usar as: <em>drugs, hacking, porn, spyware, violence, warez</em>. Também seu domínios RPZ.</p>
<pre class="remontti-code"># vim /etc/bind/script-rpz/rpz.pl</pre>
<pre class="remontti-code">#!/usr/bin/perl -w
#
# Shallalist DNS RPZ 
#
# Ex de uso:
#   perl rpz.pl (no arg, creates NXDOMAIN CNAME &quot;.&quot;)
#   perl rpz.pl A 192.168.2.1 (creates &quot;A&quot; redirect)
#   perl rpz.pl CNAME nowhere.local (creates &quot;CNAME&quot; redirect)
#   perl rpz.pl CNAME CATEGORY.local (creates category &quot;CNAME&quot; redirect)

use strict;
use warnings;

my ($urls);
my @categories = (&#039;drugs&#039;,&#039;hacking&#039;,&#039;porn&#039;,&#039;spyware&#039;,&#039;violence&#039;,&#039;warez&#039;);

for my $c (0 .. (scalar(@categories) - 1)) {
        #open (my $list,&#039;&lt;&#039;,&quot;blacklists/$categories[$c]/domains&quot;);
        open (my $list,&#039;&lt;&#039;,&quot;BL/$categories[$c]/domains&quot;);
        chomp(my @domains = &lt;$list&gt;); 
        close($list);
 
        for my $d (0 .. (scalar(@domains) - 1)) {
                $urls-&gt;{lc($domains[$d])} = $categories[$c];
        }
}

open (my $db,&#039;&gt;&#039;,&quot;./db.rpz.zone&quot;);
print $db &#039;$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 .
;
&#039;;

while (my ($key, $value) = each(%$urls) ) {
        my $redirect = &#039;CNAME .&#039;;

        if (defined($ARGV[0]) and defined($ARGV[1])) {
                $redirect = uc($ARGV[0]) . &#039; &#039; . $ARGV[1];
                if ($ARGV[1] =~ m/CATEGORY/) {
                        $redirect =~ s/CATEGORY/$value/;
                }
        }

        if (substr($key,0,1) ne &#039;.&#039;) {
                print $db $key . &#039; IN &#039; . $redirect . &quot;\n&quot;;
                print $db &#039;*.&#039; . $key . &#039; IN &#039; . $redirect . &quot;\n&quot;;
        }
}
close($db);

exit;

__END__
</pre>
<p>Próximo passo é criar o um shell script chamado <strong>gera.rpz.sh</strong> 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.</p>
<pre class="remontti-code"># vim /etc/bind/script-rpz/gera.rpz.sh</pre>
<pre class="remontti-code">#!/bin/sh
sleep 1
echo
echo &quot;Baixando lista shallalist&quot;
wget http://www.shallalist.de/Downloads/shallalist.tar.gz
tar -zxf shallalist.tar.gz

sleep 1
echo 
echo &quot;Preparando Lista: DROGAS&quot;
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 &quot;^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*&quot; &gt;&gt; /etc/bind/script-rpz/BL/drugs/domains

sleep 1
echo &quot;Preparando Lista: HACKING&quot;
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 &quot;^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*&quot; &gt;&gt; /etc/bind/script-rpz/BL/hacking/domains

sleep 1
echo &quot;Preparando Lista: PORNOS&quot;
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 &quot;^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*&quot; &gt;&gt; /etc/bind/script-rpz/BL/porn/domains

sleep 1
echo &quot;Preparando Lista: SPYWARE&quot;
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 &quot;^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*&quot; &gt;&gt; /etc/bind/script-rpz/BL/spyware/domains

sleep 1
echo &quot;Preparando Lista: VIOLENCIA&quot;
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 &quot;^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*&quot; &gt;&gt; /etc/bind/script-rpz/BL/violence/domains

sleep 1
echo &quot;Preparando Lista: PIRATARIA ILEGAL E VIRUS&quot;
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 &quot;^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.*&quot; &gt;&gt; /etc/bind/script-rpz/BL/warez/domains

cd /etc/bind/script-rpz/
echo 
echo &quot;Gerando db.rpz.zone&quot; 
perl rpz.pl

echo 
echo &quot;Removendo arquivos desnecessarios&quot;
rm -rf BL/
rm -f shallalist.tar.gz

echo 
echo &quot;Corrigindo enderecos invalidos&quot;
sed -i -e &#039;s/www.battleit.ee\/tpb/battleit.ee/&#039; /etc/bind/script-rpz/db.rpz.zone
sed -i -e &#039;s/battleit.ee&quot;/battleit.ee/&#039; /etc/bind/script-rpz/db.rpz.zone
sed -i -e &#039;s/freebiggals.net./freebiggals.net/&#039; /etc/bind/script-rpz/db.rpz.zone

SEQUENCIAL=`date +%Y%m%d00`

sed -i -e &quot;s/9999999999/$SEQUENCIAL/&quot; /etc/bind/script-rpz/db.rpz.zone

echo
echo &quot;Verificando se tem algum erros no arquivo db.rpz.zone&quot;
named-checkzone localhost /etc/bind/script-rpz/db.rpz.zone
echo 
echo &quot;Caso tenha algum erro do tipo: ignoring out-of-zone edite este script e adicione ele como&quot;
echo &quot;no exemplo dos dominios corrigindos com o comando sed -i -e ......&quot;
echo
echo &quot;Se voce recebeu um OK na verificacao&quot;
echo &quot;Agora basta mover db.rpz.zone  /var/cache/bind/rpz/ e reinicie o bind&quot;
echo
echo &quot;Comandos:&quot;
echo &quot;# mv /var/cache/bind/rpz/db.rpz.zone /var/cache/bind/rpz/db.rpz.zone.`date +%Y%m%d`&quot;
echo &quot;# mv /etc/bind/script-rpz/db.rpz.zone /var/cache/bind/rpz/&quot;
echo &quot;# systemctl restart bind9&quot;</pre>
<p>De permissões entre no diretório do nosso script e execute o mesmo, <strong>fique atento se der algum erro!</strong></p>
<pre class="remontti-code"># chmod +x /etc/bind/script-rpz/gera.rpz.sh
# cd /etc/bind/script-rpz/
# sh gera.rpz.sh</pre>
<p>Vai retornar: </p>
<pre class="remontti-code">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%[============================================================================&gt;]   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</pre>
<p>Note que a linha 28 recebemos um <strong>OK</strong> isso significa que nosso arquivo está apto para ser usado!</p>
<p>Como descrito vamos primeiro gerar um bkp do nosso antigo db.rpz.zone.DATA_HJ</p>
<pre class="remontti-code"># mv /var/cache/bind/rpz/db.rpz.zone /var/cache/bind/rpz/db.rpz.zone.`date +%Y%m%d`</pre>
<p>Em seguida mover o novo db.rpz.zone e restartar o bind.</p>
<pre class="remontti-code"># mv /etc/bind/script-rpz/db.rpz.zone /var/cache/bind/rpz/
# systemctl restart bind9</pre>
<p><strong>Uau agora temos mais de um milhão de domínios em nosso RPZ! </strong></p>
<p>Uma boa fonte de hosts você <a href="https://github.com/StevenBlack/hosts" rel="noopener" target="_blank">pode encontrar aqui</a>.</p>
<p>Espero que tenha gostado! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3692">Como configurar um servidor DNS Response Policy Zone (RPZ) + Shallalist</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3692/feed</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Criando um servido de DNS-over-HTTPS (DoH)</title>
		<link>https://blog.remontti.com.br/3637</link>
					<comments>https://blog.remontti.com.br/3637#respond</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Fri, 04 Oct 2019 20:16:43 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[DNS-over-HTTPS]]></category>
		<category><![CDATA[doh]]></category>
		<category><![CDATA[google-dns]]></category>
		<category><![CDATA[ietf-doh]]></category>
		<category><![CDATA[rfc-8484]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3637</guid>

					<description><![CDATA[<p>Neste tutorial vamos aprender como criar um servidor para consultar o DNS através de HTTPS, usando o Google DNS-over-protocolo HTTPS e IETF DNS-over-HTTPS (RFC 8484). O Google Chrome já a partir da versão 78&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3637">Criando um servido de DNS-over-HTTPS (DoH)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Neste tutorial vamos aprender como criar um servidor para consultar o DNS através de HTTPS, usando o <a href="https://developers.google.com/speed/public-dns/docs/dns-over-https" rel="noopener noreferrer" target="_blank">Google DNS-over-protocolo HTTPS</a> e <a href="https://www.rfc-editor.org/rfc/rfc8484.txt" rel="noopener noreferrer" target="_blank">IETF DNS-over-HTTPS (RFC 8484)</a>.</p>
<p>O <a href="https://www.chromium.org/developers/dns-over-https" rel="noopener noreferrer" target="_blank">Google Chrome</a> já  a partir da versão 78 irá implantar o DNS-over-HTTPS (DoH), criptografando as solicitações de DNS. </p>
<p>Pressupõe que você tenha um servidor DNS em funcionamento (<a href="https://blog.remontti.com.br/3086" rel="noopener noreferrer" target="_blank"><strong>eu uso o bind9</strong></a>).</p>
<p>Estou utilizando Debian 10 (<em><strong><a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Instalação limpa</a></strong></em>) para fazer esta instalação</p>
<p>Também será necessário configurar o seu ambiente <a href="https://golang.org/" rel="noopener noreferrer" target="_blank">Golang</a>, veja <a href="https://blog.remontti.com.br/3623" rel="noopener noreferrer" target="_blank"><strong>aqui como proceder</strong></a></p>
<p>Com o Golang já preparado vamos instalar alguns pacotes necessários para compilação:</p>
<pre class="remontti-code"># apt install curl software-properties-common build-essential wget unzip</pre>
<p>Vamos usar o projeto <a href="https://github.com/m13253/dns-over-https" rel="noopener noreferrer" target="_blank">m13253/DNS-over-HTTPS</a>.</p>
<pre class="remontti-code"># cd /tmp
# wget https://github.com/m13253/dns-over-https/archive/master.zip
# unzip master.zip
# cd dns-over-https-master/
# make
# make install</pre>
<p>Agora vamos configurar o servidor DoH, seu arquivo de configuração fica em /etc/dns-over-https/doh-server.conf<br />
Supondo que você esteja instalando no mesmo servidor de DNS, vamos apenas alterar o upstream para usar as consultar para localhost (127.0.0.1:53).</p>
<pre class="remontti-code"># mv /etc/dns-over-https/doh-server.conf /etc/dns-over-https/doh-server.conf.old
# vim /etc/dns-over-https/doh-server.conf</pre>
<pre class="remontti-code"># HTTP listen port
listen = [
    &quot;127.0.0.1:8053&quot;,
    &quot;[::1]:8053&quot;,

    ## To listen on both 0.0.0.0:8053 and [::]:8053, use the following line
    # &quot;:8053&quot;,
]

# Local address and port for upstream DNS
# If left empty, a local address is automatically chosen.
local_addr = &quot;&quot;

# TLS certification file
# If left empty, plain-text HTTP will be used.
# You are recommended to leave empty and to use a server load balancer (e.g.
# Caddy, Nginx) and set up TLS there, because this program does not do OCSP
# Stapling, which is necessary for client bootstrapping in a network
# environment with completely no traditional DNS service.
cert = &quot;&quot;

# TLS private key file
key = &quot;&quot;

# HTTP path for resolve application
path = &quot;/dns-query&quot;

# Upstream DNS resolver
# If multiple servers are specified, a random one will be chosen each time.
# You can use &quot;udp&quot;, &quot;tcp&quot; or &quot;tcp-tls&quot; for the type prefix.
# For &quot;udp&quot;, UDP will first be used, and switch to TCP when the server asks to
# or the response is too large.
# For &quot;tcp&quot;, only TCP will be used.
# For &quot;tcp-tls&quot;, DNS-over-TLS (RFC 7858) will be used to secure the upstream connection.
upstream = [
    &quot;udp:127.0.0.1:53&quot;,
]

# Upstream timeout
timeout = 10

# Number of tries if upstream DNS fails
tries = 3

# Enable logging
verbose = false

# Enable log IP from HTTPS-reverse proxy header: X-Forwarded-For or X-Real-IP
# Note: http uri/useragent log cannot be controlled by this config
log_guessed_client_ip = false</pre>
<p>Vamos ativa-lo na inicialização do sistema e restartar o serviço.</p>
<pre class="remontti-code"># systemctl enable doh-server 
# systemctl restart doh-server</pre>
<p>Verifique se o serviço esta rodando</p>
<pre class="remontti-code">#  systemctl status doh-server</pre>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/10/DNS-over-HTTPS-Server.png" alt="" width="928" height="275" class="alignnone size-full wp-image-3646" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/10/DNS-over-HTTPS-Server.png 928w, https://blog.remontti.com.br/wp-content/uploads/2019/10/DNS-over-HTTPS-Server-300x89.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/10/DNS-over-HTTPS-Server-768x228.png 768w" sizes="auto, (max-width: 928px) 100vw, 928px" /></p>
<p>Perfeito nosso doh-server já está rodando! </p>
<p>Instalação de configuração do <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank"><strong>Apache2 com um domínio virtual</strong></a>  utilizando o <a href="https://blog.remontti.com.br/3548" rel="noopener noreferrer" target="_blank"><strong>Let’s Encrypt</strong></a> para criptografar nossa conexão HTTPs.</p>
<pre class="remontti-code"># apt install apache2 apache2-utils letsencrypt python-certbot-apache
# a2enmod http2 proxy proxy_http proxy_connect
# systemctl restart apache2</pre>
<p>Vou editar a configuração padrão do servidor web, informado meu real <strong>ServerName</strong>, no exemplo &#8220;<em>doh.remontti.com.br</em>&#8220;, e <strong>ErrorDocument</strong> quando um IP não autorizado acessar ser redirecionado.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/000-default.conf</pre>
<p>Faça as devidas alterações, não esqueça de alterar em <strong>Require ip</strong> para os IPs que você vai autorizar as conexões.</p>
<pre class="remontti-code">&lt;virtualhost *:80&gt;
        Protocols h2 http/1.1
        ServerName doh.remontti.com.br
        ServerAdmin noc@remontti.com.br
        ErrorDocument 403 http://www.remontti.com.br/
 
        DocumentRoot /var/www/html
 
        &lt;Directory /var/www/html/&gt;
                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 250.0.0.0/22 2000:000::/32
        &lt;/Directory&gt;
 
        LogLevel warn 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/virtualhost&gt;</pre>
<p>Por segurança recomendo remover a assinatura do servidor, para isso edite:</p>
<pre class="remontti-code"># sed -i &#039;s/ServerTokens OS/ServerTokens Prod/&#039; /etc/apache2/conf-available/security.conf
# sed -i &#039;s/ServerSignature On/ServerSignature Off/&#039; /etc/apache2/conf-available/security.conf</pre>
<p>Para que quando alguém (autorizado) acessar seu endereço DoH não veja aquela tela Default do Apache2, vamos remover o /var/www/html/index.html e criar uma index mais legal <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="remontti-code"># rm /var/www/html/index.html
# wget https://blog.remontti.com.br/wp-content/uploads/2019/10/doh.jpg -O /var/www/html/doh.jpg
# vim /var/www/html/index.html</pre>
<pre class="remontti-code">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;/&gt;
    &lt;title&gt;Dns Over Https - DoH&lt;/title&gt;
    &lt;!-- Altere para o endereço que você deseja que ele seja direcionado apos 5seg--&gt;
    &lt;meta http-equiv=&quot;refresh&quot; content=&quot;5; URL=&#039;http://www.remontti.com.br/&#039;&quot;/&gt;
    &lt;style type=&quot;text/css&quot;&gt;
      body, html {
        background-color: #fff112;
      }
      img {
        width: 95%;
        height: auto;
      }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;img src=&quot;doh.jpg&quot;&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Geramos o certificado</p>
<pre class="remontti-code"># systemctl stop apache2
# letsencrypt</pre>
<p>Agora já é possível acessar <em>&#8220;doh.remontti.com.br&#8221;</em> com HTTPS, faça um teste se seu domínio esta respondendo corretamente. Teste também seu HTTP2 em <a href="https://tools.keycdn.com/http2-test" rel="noopener noreferrer" target="_blank">https://tools.keycdn.com/http2-test</a> </p>
<p>Para evitar que o certificado expire faça um script e colocando ele no cron para que o mesmo renove automaticamente.</p>
<pre class="remontti-code"># vim  /etc/renovassl.sh</pre>
<p>Adicione</p>
<pre class="remontti-code">#!/bin/bash
/usr/bin/systemctl stop apache2
/usr/bin/certbot -q renew
/usr/bin/systemctl start apache2</pre>
<p>De permissão de execução: </p>
<pre class="remontti-code"># chmod +x /etc//renovassl.sh</pre>
<p>Adicione ao cron e restarte o cron</p>
<pre class="remontti-code"># echo &#039;00 00   * * *   root    /etc/renovassl.sh&#039; &gt;&gt; /etc/crontab
# systemctl restart cron</pre>
<p>Altere algumas configuração no 000-default-le-ssl.conf  criado pelo Let&#8217;s Encrypt para trabalhar como um proxy do nosso DoH</p>
<pre class="remontti-code"># vim /etc/apache2/sites-enabled/000-default-le-ssl.conf</pre>
<p>Adicione as entradas destacadas: </p>
<pre class="remontti-code">&lt;IfModule mod_ssl.c&gt;

SSLProtocol TLSv1.2
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+3DES:!aNULL:!MD5:!DSS:!eNULL:!EXP:!LOW:!MD5
SSLUseStapling on
SSLStaplingCache shmcb:/var/lib/apache2/stapling_cache(512000)

&lt;VirtualHost *:443&gt;

        Protocols h2 http/1.1
        ServerName doh.remontti.com.br
        ServerAdmin noc@remontti.com.br
        ErrorDocument 403 http://www.remontti.com.br/

        ProxyPreserveHost On
        ProxyPass /dns-query http://[::1]:8053/dns-query
        ProxyPassReverse /dns-query http://[::1]:8053/dns-query

        &lt;Proxy &quot;*&quot;&gt;
            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 250.0.0.0/22 2000:000::/32
        &lt;/Proxy&gt;

        DocumentRoot /var/www/html

        &lt;Directory /var/www/html/&gt;
                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 250.0.0.0/22 2000:000::/32
        &lt;/Directory&gt;

  
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLCertificateFile /etc/letsencrypt/live/su-151.speedrs.com.br/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/su-151.speedrs.com.br/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
&lt;/VirtualHost&gt;
&lt;/IfModule&gt;</pre>
<p>Restar o apache</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Configuramos o apache para encaminhar solicitações para nosso servidor DoH. Agora vamos fazer alguns testes.<br />
O servidor DoH retorna em formato JSON, e para testar apenas abra no seu navegador:<br />
<em>https://doh.remontti.com.br/dns-query?name=remontti.com.br&#038;type=A</em><br />
Ou já que você está com o terminal aberto digite:</p>
<pre class="remontti-code"># curl -s &quot;https://doh.remontti.com.br/dns-query?name=google.com.br&amp;type=A&quot; | python -m json.tool</pre>
<p>Vai retornar:</p>
<pre class="remontti-code">{
    &quot;AD&quot;: false,
    &quot;Answer&quot;: [
        {
            &quot;Expires&quot;: &quot;Fri, 04 Oct 2019 16:48:23 UTC&quot;,
            &quot;TTL&quot;: 300,
            &quot;data&quot;: &quot;172.217.29.227&quot;,
            &quot;name&quot;: &quot;google.com.br.&quot;,
            &quot;type&quot;: 1
        }
    ],
    &quot;CD&quot;: false,
    &quot;Question&quot;: [
        {
            &quot;name&quot;: &quot;google.com.br.&quot;,
            &quot;type&quot;: 1
        }
    ],
    &quot;RA&quot;: true,
    &quot;RD&quot;: true,
    &quot;Status&quot;: 0,
    &quot;TC&quot;: false,
    &quot;edns_client_subnet&quot;: &quot;186.250.168.0/0&quot;
}
</pre>
<p>Legal, nosso DoH esta funcionando! </p>
<p><strong>Configure seu navegador</strong><br />
Bem, no Firefox, isso é bem fácil, entre no menu <strong>Preferências</strong>, role até o final e clique em <strong>Configurar Conexão&#8230;</strong> em seguida marque a caixa <strong>Ativar DNS sobre HTTPS</strong> selecione <strong>Personalizado</strong> e informe o endereço do seu servidor DoH <strong>https://doh.exemplo.com.br/dns-query</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox.png" data-rel="lightbox-gallery-b2P8MRsZ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-1024x597.png" alt="" width="1024" height="597" class="alignnone size-large wp-image-3653" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-1024x597.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-300x175.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-768x448.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>No linux a versão que utilizei foi uma beta, pois na estável ainda não aparecia a opção.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-versao.png" data-rel="lightbox-gallery-b2P8MRsZ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-versao-300x142.png" alt="" width="300" height="142" class="alignnone size-medium wp-image-3654" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-versao-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-versao-520x245.png 520w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-versao-720x340.png 720w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-firefox-versao.png 728w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Já no Chrome Versão Dev 79.0.3921.0 no linux não consegui testar, pois a opção aparece como: Not available on your platform.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-chrome-Versão-79.0.3921.0-dev.png" data-rel="lightbox-gallery-b2P8MRsZ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-chrome-Versão-79.0.3921.0-dev-300x175.png" alt="" width="300" height="175" class="alignnone size-medium wp-image-3655" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-chrome-Versão-79.0.3921.0-dev-300x175.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-chrome-Versão-79.0.3921.0-dev-768x448.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-chrome-Versão-79.0.3921.0-dev-1024x597.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-chrome-Versão-79.0.3921.0-dev.png 1680w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Agora basta navegar! E para ter certeza que ele realmente ta fazendo as consulta em seu DoH Server, verifique os logs do seu apache:</p>
<pre class="remontti-code"># tail -f /var/log/apache2/access.log</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-log-apache2.png" data-rel="lightbox-gallery-b2P8MRsZ" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-log-apache2-1024x151.png" alt="" width="1024" height="151" class="alignnone size-large wp-image-3657" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-log-apache2-1024x151.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-log-apache2-300x44.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-log-apache2-768x113.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/10/doh-log-apache2.png 1431w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><br />
Parabéns você concluiu! </p>
<p><strong>O que você vai acontecer quando o DoH estiver ativado?</strong><br />
Quando o DoH está ativado, você não notará nada. O Firefox e o Chrome implementaram extensos mecanismos de fallback para situações em que o DoH pode cair, como um provedor de DNS que não oferece suporte a DoH.</p>
<p><strong>Quais navegadores suportam o DoH?</strong><br />
Por enquanto, os únicos principais navegadores programados para oferecer suporte ao DoH são o Mozilla Firefox e Chrome 78 ou superior (embora, especialmente, o Chrome para iOS e o Chrome para Linux não suportem esse recurso ainda). Resta saber se o Safari da Apple seguirá o exemplo.</p>
<p>Ambos os navegadores se o DoH não funcionar como planejado simplesmente retornará ao método padrão de pesquisa de DNS.</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3637">Criando um servido de DNS-over-HTTPS (DoH)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3637/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Instalando o Golang no Debian, a linguagem de programação criada pela Google</title>
		<link>https://blog.remontti.com.br/3623</link>
					<comments>https://blog.remontti.com.br/3623#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Thu, 03 Oct 2019 19:29:47 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[DNS-over-HTTPS]]></category>
		<category><![CDATA[doh]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[programacao]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3623</guid>

					<description><![CDATA[<p>Go é uma linguagem de programação criada pela Google de código aberto. É uma linguagem compilada e focada em produtividade e programação concorrente, baseada em trabalhos feitos no sistema operacional chamado Inferno. Atualmente, há&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3623">Instalando o Golang no Debian, a linguagem de programação criada pela Google</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/10/Golang.png" alt="" width="500" height="282" class="alignnone size-full wp-image-3633" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/10/Golang.png 500w, https://blog.remontti.com.br/wp-content/uploads/2019/10/Golang-300x169.png 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></p>
<p><a href="https://golang.org/" rel="noopener noreferrer" target="_blank">Go</a> é uma linguagem de programação <a href="https://pt.wikipedia.org/wiki/Go_(linguagem_de_programa%C3%A7%C3%A3o)" rel="noopener noreferrer" target="_blank">criada pela Google</a> de código aberto. É uma linguagem compilada e focada em produtividade e programação concorrente, baseada em trabalhos feitos no sistema operacional chamado Inferno.<br />
Atualmente, há implementações para Windows, Linux, Mac OS X e FreeBSD.</p>
<p><a href="https://golang.org/" rel="noopener noreferrer" target="_blank"><strong>https://golang.org/</strong></a></p>
<p><strong>Distribuição utilizada:</strong><br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10</a></p>
<p><strong>Instalação</strong><br />
Vá até a página de download baixe a versão mais recente.<br />
A versão nada data que em que escrevi este pequeno tutorial estava na versão foi go1.13.<br />
<a href="https://golang.org/dl/" rel="noopener noreferrer" target="_blank">https://golang.org/dl/</a></p>
<pre class="remontti-code"># cd /tmp
# wget https://golang.org/dl/go1.15.linux-amd64.tar.gz
# tar xvfz go1.15.linux-amd64.tar.gz
# mv go /usr/local/go
# ln -s /usr/local/go/bin/go /usr/bin/</pre>
<p>Vamos adicionar algumas variáveis ​​de ambiente no nosso <strong>.bashrc</strong> e ao nosso $PATH. </p>
<pre class="remontti-code"># cat &lt;&lt; EOF &gt;&gt; ~/.bashrc
export GOROOT=/usr/local/go
export GOPATH=$HOME/goProjects
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
EOF</pre>
<p>Em seguida crie o diretório goProjects:</p>
<pre class="remontti-code"># mkdir ~/goProjects</pre>
<p>Recarregamos o ambiente bash.</p>
<pre class="remontti-code"># source ~/.bashrc</pre>
<p>Verificamos nossa versão instalada:</p>
<pre class="remontti-code"># go version</pre>
<pre class="remontti-code">go version go1.13.1 linux/amd64</pre>
<p>Vamos verificar o nosso ambiente de trabalho</p>
<pre class="remontti-code"># go env</pre>
<pre class="remontti-code">GO111MODULE=&quot;&quot;
GOARCH=&quot;amd64&quot;
GOBIN=&quot;&quot;
GOCACHE=&quot;/root/.cache/go-build&quot;
GOENV=&quot;/root/.config/go/env&quot;
GOEXE=&quot;&quot;
GOFLAGS=&quot;&quot;
GOHOSTARCH=&quot;amd64&quot;
GOHOSTOS=&quot;linux&quot;
GONOPROXY=&quot;&quot;
GONOSUMDB=&quot;&quot;
GOOS=&quot;linux&quot;
GOPATH=&quot;/root/goProjects&quot;
GOPRIVATE=&quot;&quot;
GOPROXY=&quot;https://proxy.golang.org,direct&quot;
GOROOT=&quot;/usr/local/go&quot;
GOSUMDB=&quot;sum.golang.org&quot;
GOTMPDIR=&quot;&quot;
GOTOOLDIR=&quot;/usr/local/go/pkg/tool/linux_amd64&quot;
GCCGO=&quot;gccgo&quot;
AR=&quot;ar&quot;
CC=&quot;gcc&quot;
CXX=&quot;g++&quot;
CGO_ENABLED=&quot;1&quot;
GOMOD=&quot;&quot;
CGO_CFLAGS=&quot;-g -O2&quot;
CGO_CPPFLAGS=&quot;&quot;
CGO_CXXFLAGS=&quot;-g -O2&quot;
CGO_FFLAGS=&quot;-g -O2&quot;
CGO_LDFLAGS=&quot;-g -O2&quot;
PKG_CONFIG=&quot;pkg-config&quot;
GOGCCFLAGS=&quot;-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build991948731=/tmp/go-build -gno-record-gcc-switches&quot;</pre>
<p>Parabéns, seu ambiente de trabalho este pronto! </p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3623">Instalando o Golang no Debian, a linguagem de programação criada pela Google</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3623/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Criando certificado grátis com  Let’s Encrypt para o Apache  no Debian 10</title>
		<link>https://blog.remontti.com.br/3548</link>
					<comments>https://blog.remontti.com.br/3548#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 17 Sep 2019 19:19:05 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[certificado]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Domínio]]></category>
		<category><![CDATA[Let’s Encrypt]]></category>
		<category><![CDATA[letsencrypt]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php7]]></category>
		<category><![CDATA[Virtual]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3548</guid>

					<description><![CDATA[<p>Let’s Encrypt entrega certificados digitais que permite HTTPS (SSL/TLS) para sites gratuitamente, de maneira fácil. É um serviço fornecido pelo Internet Security Research Group Requisitos: Debian 10 Stretch / Instalação Limpa (Funciona no Deb9)&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3548">Criando certificado grátis com  Let’s Encrypt para o Apache  no Debian 10</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://letsencrypt.org" rel="noopener noreferrer" target="_blank">Let’s Encrypt</a> entrega certificados digitais que permite HTTPS (SSL/TLS) para sites gratuitamente, de maneira fácil. É um serviço fornecido pelo Internet Security Research Group</p>
<p>Requisitos:<br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10 Stretch / Instalação Limpa</a><br />
<em>(Funciona no Deb9)</em></p>
<p>Let’s Encrypt apresentado, vamos a instalação.</p>
<pre class="remontti-code"># su - 
# apt update
# apt upgrade
# apt install letsencrypt python-certbot-apache</pre>
<p>Para nosso exemplo crie um domínio virtual nas configurações do apache.<br />
Lei mais em: <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">Como ter diversos sub/domínios no mesmo servidor? (Domínios virtuais com Apache2)</a></p>
<p>Lembre de em seu servidor DNS ter configurado do host (no meu ex.: &#8220;blog&#8221;) apontando para o IP de seu servidor.</p>
<p>Criamos o arquivo que vai representar o host blog. Vou utilizar como base o diretório /var/www/blog que vamos criar em seguida.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-available/cloud.conf</pre>
<pre class="remontti-code">&lt;virtualhost *:80&gt;
        ServerName blog.remontti.com.br
        ServerAdmin noc@remontti.com.br
 
        DocumentRoot /var/www/blog 
 
        &lt;directory /var/www/blog/ &gt;
                Options FollowSymLinks
                AllowOverride All
        &lt;/directory&gt; 
 
        LogLevel warn 
        ErrorLog ${APACHE_LOG_DIR}/error_cloud.log
        CustomLog ${APACHE_LOG_DIR}/access_cloud.log combined
&lt;/virtualhost&gt;</pre>
<p>Por segurança recomendo remover a assinatura do servidor, evitando os &#8220;espertinhos&#8221;</p>
<pre class="remontti-code"># sed -i &#039;s/ServerTokens OS/ServerTokens Prod/&#039; /etc/apache2/conf-available/security.conf
# sed -i &#039;s/ServerSignature On/ServerSignature Off/&#039; /etc/apache2/conf-available/security.conf</pre>
<p>Crie o diretório e uma uma index só para representar nosso &#8220;olá mundo&#8221;.</p>
<pre class="remontti-code"># mkdir /var/www/blog/
#  echo &#039;&lt;h1&gt;Hello world!&lt;/h1&gt;&#039; &gt; /var/www/blog/index.html</pre>
<p>Antes de gerar o certificado pare &#8220;blog.remontti.com.br&#8221;.</p>
<pre class="remontti-code"># systemctl stop apache2</pre>
<pre class="remontti-code"># letsencrypt --authenticator standalone --installer apache -d blog.remontti.com.br</pre>
<p>Responda como abaixo:</p>
<pre class="remontti-code">Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter &#039;c&#039; to
cancel): seu@email.com.br
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let&#039;s Encrypt project and the non-profit
organization that develops Certbot? We&#039;d like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for blog.remontti.com.br
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/blog-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/blog-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/blog-le-ssl.conf
 
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you&#039;re confident your site works on HTTPS. You can undo this
change by editing your web server&#039;s configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press &#039;c&#039; to cancel): 2
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://blog.remontti.com.br
 
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=blog.remontti.com.br
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/blog.remontti.com.br/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/blog.remontti.com.br/privkey.pem
   Your cert will expire on 2019-10-24. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the &quot;certonly&quot; option. To non-interactively renew *all* of
   your certificates, run &quot;certbot renew&quot;
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:
 
   Donating to ISRG / Lets Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le</pre>
<p>Já pode acessar no navegador o domínio com HTTPS &#8220;blog.remontti.com.br&#8221;</p>
<p>Dica, se desejar desativar o TLS1.0 e TLS1.1 após criar um certificado um arquivo é criado /etc/letsencrypt/options-ssl-apache.conf, então edite e inclua no SSLProtocol TLSv1 -TLSv1.1</p>
<pre class="remontti-code"># vim /etc/letsencrypt/options-ssl-apache.conf</pre>
<p>Ficando</p>
<pre class="remontti-code">#SSLProtocol            all -SSLv2 -SSLv3
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1</pre>
<p>Reinicie o Apache:</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>Para testar acesse: <a href="https://www.cdn77.com/tls-test/" rel="noopener" target="_blank">https://www.cdn77.com/tls-test/</a><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste.png" data-rel="lightbox-gallery-gYOHsQjM" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-300x182.png" alt="" width="300" height="182" class="alignnone size-medium wp-image-6158" srcset="https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-300x182.png 300w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-1024x620.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste-768x465.png 768w, https://blog.remontti.com.br/wp-content/uploads/2021/10/tls_teste.png 1099w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Para renovar automaticamente crie um script e adicione ao cron.</p>
<pre class="remontti-code"># vim  /etc/renova-cert.sh</pre>
<p>Adicione</p>
<pre class="remontti-code">#!/bin/bash
/usr/bin/systemctl stop apache2
/usr/bin/certbot -q renew
/usr/bin/systemctl start apache2</pre>
<p>Damos permissão para executar</p>
<pre class="remontti-code"># chmod +x /etc/renova-cert.sh</pre>
<p>Adicionamos ao Cron para toda meia noite renovar</p>
<pre class="remontti-code"># echo &#039;00 00   * * *   root    /etc/renova-cert.sh&#039; &gt;&gt; /etc/crontab
# systemctl restart cron</pre>
<p>Agora você já tem seu domínio com certificado! Esse certificado pode ser utilizado para outro serviços.</p>
<p><center><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></center></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3548">Criando certificado grátis com  Let’s Encrypt para o Apache  no Debian 10</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3548/feed</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title>Servidor DNS seguro com Bind9  (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster [Descontinuado]</title>
		<link>https://blog.remontti.com.br/3086</link>
					<comments>https://blog.remontti.com.br/3086#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Thu, 18 Jul 2019 19:17:51 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[allow-transfer]]></category>
		<category><![CDATA[Autoritativo]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[buster]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian 10]]></category>
		<category><![CDATA[debian buster]]></category>
		<category><![CDATA[debian stretch]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[Recursivo]]></category>
		<category><![CDATA[Reverso]]></category>
		<category><![CDATA[seguro]]></category>
		<category><![CDATA[Servidor]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3086</guid>

					<description><![CDATA[<p>Este tutorial foi atualizado: Acesse Servidor DNS Bind9 &#8211; Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11 Bullseye Não utilize este tutorial! Não apaguei o&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3086">Servidor DNS seguro com Bind9  (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster [Descontinuado]</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1><font color="red"><strong>Este tutorial foi atualizado: </strong></font></h1>
<h3>Acesse <a href="https://blog.remontti.com.br/5958">Servidor DNS Bind9 &#8211; Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11 Bullseye</a></h3>
<h4><font color="red"><strong>Não utilize este tutorial! Não apaguei o mesmo para deixa-lo para fins de estudos em cima do Debian 10.</strong></font></h4>
<hr>
<p>(Descontinuado)</p>
<hr>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/bind9-debina-10-buster-nftables-fail2ban.png" alt="" width="720" height="340" class="alignnone size-full wp-image-3206" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/bind9-debina-10-buster-nftables-fail2ban.png 720w, https://blog.remontti.com.br/wp-content/uploads/2019/07/bind9-debina-10-buster-nftables-fail2ban-300x142.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/bind9-debina-10-buster-nftables-fail2ban-520x245.png 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p><a href="https://pt.wikipedia.org/wiki/BIND" rel="noopener noreferrer" target="_blank">BIND</a> (Berkeley Internet Name Domain ou, como chamado previamente, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix, onde ele pode ser considerado um padrão de fato.</p>
<p>Ante de iniciar a instalação é preciso saber como funciona um DNS:</p>
<p><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/ACGuo26MswI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/epWv0-eqRMw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><strong>Requesitos:</strong><br />
<strong><a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10 Stretch &#8211; Instalação Limpa</a></strong></p>
<p><strong>DNS RECURSIVO</strong><br />
O DNS recursivo é responsável pela resolução de nomes, começando sempre com consultar recursivas nos servidores raízes. Para melhorar a eficiência e reduzir o tráfego DNS na Internet e aumentar o desempenho em aplicativos de usuário final, fazendo o cache DNS, armazenando resultados de consulta DNS por um período de tempo determinado na configuração (tempo de vida determinado pelo autoritativo do domínio consultado).</p>
<p><strong>DNS AUTORITIVO</strong><br />
É o serviço DNS que possui autoridade sob um domínio. Assim como servidor ns1.remontti.com.br é o DNS autoritativo de meu domínio remontti.com.br, é ele que sempre vai responder qualquer subdomínio &#8220;hosts&#8221; ex blog.remontti.com.br.<br />
E esse servidor que você vai apontar nas configurações de um domínio, exemplo registrado no registro.br.</p>
<p><strong>DNS REVERSO</strong><br />
DNS atua resolvendo o nome do domínio/subdomínio para um endereço IP correspondente. Já o DNS Reverso ele resolve o endereço IP buscando o nome de domínio associado ao host.<br />
Ou seja, quando temos disponível o endereço IP de um host e não sabemos o endereço do domínio(nome dado à máquina ou outro equipamento que acesse uma rede), tentamos resolver o endereço IP através do DNS reverso que procura qual nome de domínio está associado aquele endereço.<br />
Os servidores que utilizam o DNS Reverso conseguem verificar a autenticidade de endereços, verificando se o endereço IP atual corresponde ao endereço IP informado pelo servidor DNS.<br />
Isto evita que alguém utilize um domínio que não lhe pertence para enviar spam, por exemplo (pois isso que ele é importante para servidores de e-mail).</p>
<p><strong>DICAS</strong><br />
&#8211; Para que o DNS Reverso funcione no registro.br é importante que você já tenha configurado o DNS autoritativo, e aguarde sua publicação antes de fazer a designação. (Normalmente demoram 4 horas)<br />
&#8211; Se você é um provedor, o correto seria você ter dois servidores DNS em sua rede, uma Master e outro Slave. Neste tutoria foi explicar como criar os dois!</p>
<p><strong>PERGUNTAS FREQUENTES:</strong><br />
&#8211; <strong>Preciso montar dois servidores?</strong><br />
  Sim/Não, para a configuração do DNS autoritativo/reverso são necessários apontar dois endereços, no entanto nada impede de configurar dois IPs no mesmo servidor. Em alguns caso vejo as pessoas virtualizar 2 servidores (apenas DNS) na mesma maquina de virtualização, se pensarmos que se o servidor de virtualização para nada adianta ter 2 servidores, neste caso quem sabe seria mais interessante ter alguma outra aplicação rodando com o servido slave (pensando pelo lado aproveitamento de hardware). Então vai da sua realidade.</p>
<p>&#8211; <strong>Preciso separar o recusivo do autoritativo/reverso?</strong><br />
  Não! Ao não ser que você seja um grande data center com centenas de domínios autoritativos não vejo o motivo para separa-los. Na maioria das vezes que vi isso acontecer quem fez isso é porque não sabe como fechar as consultas recursivas para o mundo. E é ai que neste tutorial entra o fail2ban como a cereja do bolo.</p>
<p>Vamos iniciar com a instalação do servidor Master, lembrando que para isso estou usando a Distribuição linux Debian 10, com uma instalação que eu chamo de limpa.</p>
<h3>Ex.: ASN &#8211; CIDR/22 </h3>
<p>Nesse exemplo vou usar um bloco /22, porém mais a baixo vou deixar um exemplo também para você que é dono destes &#8220;/22&#8221; e vai delegar um bloco menor que /24 para outra empresa que queira ter seu próprio servidor DNS resolvendo o reverso desse bloco delegado.</p>
<p><strong>Bloco recebido</strong>:  IPv4 &#8211; 45.80.48.0/22  IPv6 &#8211; 2804:f123::/32<br />
<strong>Domínio autoritativo:</strong>: remontti.net.br</p>
<p>Antes de mais nada o mínimo de conhecimento é saber realizar cálculos de sub-redes.</p>
<p>:: ipcalc ::</p>
<pre class="remontti-code">root@remontti:~#  apt install ipcalc
root@remontti:~# ipcalc 45.80.48.0/22
Address:   45.80.48.0           00101101.01010000.001100 00.00000000
Netmask:   255.255.252.0 = 22   11111111.11111111.111111 00.00000000
Wildcard:  0.0.3.255            00000000.00000000.000000 11.11111111
=&gt;
Network:   45.80.48.0/22        00101101.01010000.001100 00.00000000
HostMin:   45.80.48.1           00101101.01010000.001100 00.00000001
HostMax:   45.80.51.254         00101101.01010000.001100 11.11111110
Broadcast: 45.80.51.255         00101101.01010000.001100 11.11111111
Hosts/Net: 1022                  Class A</pre>
<p>:: ip6calc ::</p>
<pre class="remontti-code">root@remontti:~# apt install python-ipaddr wget
root@remontti:~# wget https://blog.remontti.com.br/arquivos/Home/ip6calc -O /bin/ip6calc
root@remontti:~# chmod +x /bin/ip6calc
root@remontti:~# ip6calc 2804:f123::/32
Address:
  (Compressed)  2804:f123::/32
    (Exploded)  2804:f123:0000:0000:0000:0000:0000:0000/32
      (Binary)  0010100000000100:1111000100100011:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000/32
                ↑          ↑                 ↑  ↑                ↑        ↑       ↑                                                  ↑                ↑
                /1         /12              /29 /32              /48      /56     /64                                                /112             /128
Address type is: global unicast

Netmask:
  (Compressed)  ffff:ffff::
    (Exploded)  ffff:ffff:0000:0000:0000:0000:0000:0000
      (Binary)  1111111111111111:1111111111111111:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000
First address assignable:
  (Compressed)  2804:f123::
    (Exploded)  2804:f123:0000:0000:0000:0000:0000:0000
      (Binary)  0010100000000100:1111000100100011:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000
Last address assignable:
  (Compressed)  2804:f123:ffff:ffff:ffff:ffff:ffff:ffff
    (Exploded)  2804:f123:ffff:ffff:ffff:ffff:ffff:ffff
      (Binary)  0010100000000100:1111000100100011:1111111111111111:1111111111111111:1111111111111111:1111111111111111:1111111111111111:1111111111111111

Total number of addresses: 79228162514264337593543950336 (2^96 or 7.9e+28)

First address assignable (excluding &quot;subnet-router anycast&quot; of RFC 2526):
  (Compressed)  2804:f123::1
    (Exploded)  2804:f123:0000:0000:0000:0000:0000:0001
      (Binary)  0010100000000100:1111000100100011:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000001
Total number of addresses (Excluding &quot;reserved&quot; addresses): 79228162514264337593543950335 (7.9e+28)

This prefix can contain one of the following:
   * 4294967296 (2^32 or 4.3e+09) subnets /64
   * 16777216 (2^24 or 1.7e+07) subnets /56
   * 65536 (2^16 or 6.6e+04) subnets /48</pre>
<p>Para ilustrar &#8220;nossa rede&#8221; conto com os seguintes servidore:</p>
<p>45.80.48.0/22  IPv6 &#8211; 2804:f123::/32</p>
<p><strong>ROUTER GW</strong> -> 45.80.48.1 / 2804:f123:bebe:cafe::1 (cpd)<br />
<strong>SERV DNS MASTER</strong> -> 45.80.48.2 / 2804:f123:bebe:cafe::2 (ns1)<br />
<strong>SERV DNS SLAVE </strong>-> 45.80.48.3 / 2804:f123:bebe:cafe::3 (ns2)<br />
<strong>SERV WEB + FTP</strong> -> 45.80.48.4 / 2804:f123:bebe:cafe::4 (www,ftp)<br />
<strong>SERV ZABBIX + phpIPam</strong> -> 45.80.48.5 / 2804:f123:bebe:cafe::5 (zabbix,phpipam)<br />
<strong>SERV E-MAILS</strong> -> 45.80.48.6 / 2804:f123:bebe:cafe::6 (mail,imap,pop,smtp,mx,dkim)</p>
<p>Dentro da rede ainda conto com alguns blocos de IPs inválidos <strong>192.168.0.0/16,  172.16.0.0/12, 100.64.0.0/10 e 10.0.0.0/8 </strong> utilizando NAT que por ventura também preciso autoriza-los a fazer consultas recursivas no servidores.</p>
<p>Tenha sua interface de rede configurada corretamente.</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<pre class="remontti-code"># This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s3
iface enp0s3 inet static
        address 45.80.48.2/28
        gateway 45.80.48.1
        dns-nameservers 127.0.0.1
        dns-search localhost

iface enp0s3 inet6 static
        pre-up modprobe ipv6
        address 2804:f123:bebe:cafe::2
        netmask 64
        gateway 2804:f123:bebe:cafe::1</pre>
<h3>MASTER (NS1)</h3>
<pre class="remontti-code"> # su -
# apt install bind9 dnsutils</pre>
<p>Pronto! O servidor recursivo já está funcionando, porém ele está aberto, e isso não é nada legal!<br />
Você não vai querer &#8220;qualquer um&#8221; utilizando seu servidor para resolver nomes. Resolveremos isso mais a frente no arquivo named.conf.options.</p>
<p>Alteramos o DNS do servidor fazendo com que ele consulte em si próprio. Essa alteração deve ser feita no arquivo /etc/resolv.conf.</p>
<pre class="remontti-code"># echo &quot;nameserver 127.0.0.1&quot; &gt; /etc/resolv.conf </pre>
<p>Para descobrir se seu servidor esta resolvendo nomes use o comando dig.</p>
<pre class="remontti-code"># dig google.com @localhost</pre>
<p>Retornará algo como:</p>
<pre class="remontti-code">[...]

;; ANSWER SECTION:
google.com.             300     IN      A       172.217.162.110

[...]</pre>
<p>Os arquivos de configuração do bind ficam no diretório <strong>/etc/bind/</strong> e agora no Debian 10 Buster também separando os root servers em <strong>/usr/share/dns/</strong></p>
<pre class="remontti-code"># cd /etc/bind</pre>
<p>Iremos alterar o <strong>named.conf.options</strong>, o próprio nome já se auto descreve o que vamos encontrar nele.<br />
Sempre gosto de preservar o arquivo original, então fizemos um backup antes de modifica-lo.</p>
<pre class="remontti-code"># cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp
# echo &gt; named.conf.options</pre>
<p>Aqui vai uma dica para que usa Windows + Putty, tome cuidado ao colar, principalmente quem usa Windows 10 &#8220;ele copia caracteres imaginários que você não vê!&#8221;.<br />
Recomento usar o <a href="https://www.bitvise.com/ssh-client-download" rel="noopener noreferrer" target="_blank">Bitvise SSH Client</a> que é muito superior</p>
<p>Explicação comentada no arquivo.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code">// ACL &quot;autorizados&quot; vão ficar os ips que são autorizados a fazer
// consultas recursivas neste servidor.
// Neste caso vou incluir os ips que foram nos delegados bem como de localhost e IPs privados
acl autorizados {
        127.0.0.1;
        ::1;
        45.80.48.0/22;
        2804:f123::/32;
        192.168.0.0/16;
        172.16.0.0/12;
        100.64.0.0/10;
        10.0.0.0/8;
};

options {
    // O diretório de trabalho do servidor
    // Quaisquer caminho não informado será tomado como  padrão este diretório
    directory &quot;/var/cache/bind&quot;;

    //Suporte a DNSSEC
    dnssec-enable yes;
    dnssec-validation auto;

    // Conforme RFC1035
    // https://www.ietf.org/rfc/rfc1035.txt
    auth-nxdomain no;

    // Respondendo para IPv4 e IPv6
    // Porta 53 estará aberta para ambos v4 e v6
    listen-on { any; };
    listen-on-v6 { any; };

    // Limitação da taxa de resposta no sistema de nomes de domínio (https://kb.isc.org/docs/aa-00994)
    // Se você esta montando um servido apenas para autoritativo descomente as linhas a baixo.
    //rate-limit {
    //    responses-per-second 15;
    //    window 5;
    //};

    // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
    // O padrão BIND é (no) não.
    minimal-responses yes;

    // Especifica quais hosts estão autorizados a fazer consultas
    // recursivas através deste servidor.
    // Aqui que você vai informar os IPs da sua rede que você irá permitir consultar os DNS.
    allow-recursion {
        autorizados;
    };

    // Endereço estão autorizados a emitir consultas ao cache local,
    // sem acesso ao cache local as consultas recursivas são inúteis.
    allow-query-cache {
        autorizados;
    };

    // Especifica quais hosts estão autorizados a fazer perguntas DNS comuns.
    allow-query { any; };

    // Especifica quais hosts estão autorizados a receber transferências de zona a partir do servidor.
    // Seu servidor Secundário, no nosso ex vou deixar então o ips dos dois servidores v4 e v6.
    allow-transfer {
        45.80.48.3;
        2804:f123:bebe:cafe::3;
    };
    also-notify {
        45.80.48.3;
        2804:f123:bebe:cafe::3;
    };

    // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
    // mastes deste servidor não compile o arquivo, assim no outro servidor o arquivo
    // da zona terá um texto &quot;puro&quot;
    masterfile-format text;

    // Para evitar que vase a versao do Bind, definimos um nome
    // Reza a lenda que deixar RR DNS Server seu servidor nunca sofrerá ataques.
    version &quot;RR DNS Server&quot;;
};</pre>
<p>Legal agora o servidor Recursivo já está funcionando e limitando os IPs que poderão realizar consultas ao mesmo.<br />
Caso você não queria seu servidor sendo recursivo altere na ACL autorizados deixando apenas 127.0.0.1 e ::1.</p>
<p>Se seu servidor não tiver IPv6? (Que triste rsrsrs) Recomendo que desative o ipv6 no bind.</p>
<pre class="remontti-code"># vim /etc/default/bind9</pre>
<p>Adicione um -4 em OPTIONS.</p>
<pre class="remontti-code">OPTIONS=&quot;-u bind&quot;
#para
OPTIONS=&quot;-4 -u bind&quot;</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Altere listen-on-v6 para none.</p>
<pre class="remontti-code">listen-on-v6 { any; };
#para:
listen-on-v6 { none; };</pre>
<p>Toda alteração feita no bind para ter efeito é necessário restartar o serviço.</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Se desejar remover os comentários do named.conf.options execute:</p>
<pre class="remontti-code"># cat /etc/bind/named.conf.options |grep -v &quot;//&quot; &gt; /tmp/named.conf.options ; mv /tmp/named.conf.options /etc/bind/</pre>
<p>Para verificar se seu arquivo tem algum erro use o comando named-checkconf</p>
<pre class="remontti-code"># named-checkconf /etc/bind/named.conf.options</pre>
<p>Se nada retornar é porque não tem nenhum erro.<br />
Vou deixar proposital mente faltando um &#8220;;&#8221; depois do 45.80.48.0/22. Veja o que retornou um altera dizendo que falta ponto virgula antes do  IPv6, ou seja onde esta o IPv4/22.</p>
<pre class="remontti-code">/etc/bind/named.conf.options:5: missing &#039;;&#039; before &#039;2804:f123::&#039;</pre>
<p>Verifique também o status do bind para ver se o mesmo era rodando.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<p>Verifique se está: &#8220;active (running)&#8221;</p>
<pre class="remontti-code">● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-07-19 14:17:09 -03; 4s ago
     Docs: man:named(8)
  Process: 706 ExecStart=/usr/sbin/named $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 707 (named)
    Tasks: 4 (limit: 2359)
   Memory: 11.9M
   CGroup: /system.slice/bind9.service
           └─707 /usr/sbin/named -u bind</pre>
<p>Antes configurar o Autoritativo e Reverso precisamos pensar na segurança do Recursivo.<br />
Para isso utilizaremos o Fail2Ban e fazer algumas alterações para deixa-lo bem &#8220;nervoso&#8221;!</p>
<h3>Fail2Ban + nftables</h3>
<p>Fail2Ban é uma estrutura de software de prevenção de intrusões que protege os servidores de computadores contra ataques de força bruta, que opera monitorando arquivos de logs. Sendo o mais comum usado para bloquear endereços IPs selecionados que podem pertencer a hosts que estão tentando violar a segurança.</p>
<pre class="remontti-code"># apt install nftables fail2ban</pre>
<p>Como o iptables está sendo substituído por nftables começando com o Debian Buster, vamos configurar o Fail2Ban para usar o nftables como padrão.<br />
Mas vou ir além em vez de usar o filtro multiport vou setar allports e modifica-lo para que quando uma tentativa de violação acontecer o Fail2Ban crie uma regra de firewall que dropa definitivamente o IP e não apenas fechando a porta do serviço para &#8220;invasor&#8221;.</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Procure por &#8220;banaction = iptables-multiport&#8221; e &#8220;banaction_allports = iptables-allports&#8221; e altere seu valor para &#8220;nftables-allports&#8221;:</p>
<pre class="remontti-code">#banaction = iptables-multiport
#banaction_allports = iptables-allports
banaction = nftables-allports
banaction_allports = nftables-allports</pre>
<p>Altere o modo de bloqueio em nftables-allports.conf para fazer que ele de um &#8220;drop all&#8221;.</p>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/nftables-allports.conf</pre>
<p>Procure por nftables_mode = meta l4proto <protocol> e altere deixando seu valor vazio:</p>
<pre class="remontti-code">#nftables_mode = meta l4proto &lt;protocol&gt;
nftables_mode =</pre>
<p>Em nftables-common.conf alteraremos o padrão de reject para drop</p>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/nftables-common.conf</pre>
<p>Procure por &#8220;blocktype = reject&#8221; e altere seu valor para &#8220;drop&#8221;.</p>
<pre class="remontti-code">#blocktype = reject
blocktype = drop</pre>
<p>Melhorias feitas, precisamos ativar o filtro para ler os logs do bind, porém ao ativar o filtro named-refused me deparei com seu não funcionamento, e quebrando a cabeça descobri que os logs do bind estão diferente e a expressão regular do filtro está errada. Os desenvolvedores do fail2ban já <a href="https://github.com/fail2ban/fail2ban/commit/5a65d9fa1e7713643059b8969981b5df431c4e8c" rel="noopener noreferrer" target="_blank">fizeram a correção</a>, mas acredito que irá levar um tempo para o pessoal do Debian fazer um novo empacotamento.<br />
A correção pode ser feita editando o arquivo /etc/fail2ban/filter.d/named-refused.conf</p>
<pre class="remontti-code">- prefregex = ^%(__line_prefix)s( error:)?\s*client &lt;HOST&gt;#\S+( \([\S.]+\))?: &lt;F-CONTENT&gt;.+&lt;/F-CONTENT&gt;$
+ prefregex = ^%(__line_prefix)s( error:)?\s*client( @[0-9a-z]+)? &lt;HOST&gt;#\S+( \([\S.]+\))?: &lt;F-CONTENT&gt;.+&lt;/F-CONTENT&gt;$</pre>
<p>Porém como eu vou ser mais &#8220;bruto&#8221; no filtro. Vou criar nosso próprio filtro bind9, vamos lá!</p>
<pre class="remontti-code"># vim /etc/fail2ban/filter.d/bind9.conf</pre>
<p>Adicone no arquivo:</p>
<pre class="remontti-code"># 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]+)? &lt;HOST&gt;#\S+( \([\S.]+\))?: &lt;F-CONTENT&gt;.+&lt;/F-CONTENT&gt;$

failregex = ^(view (internal|external): )?query(?: \(cache\))? &#039;.*&#039; denied\s*$
            ^zone transfer &#039;\S+/AXFR/\w+&#039; denied\s*$
            ^bad zone transfer request: &#039;\S+/IN&#039;: non-authoritative zone \(NOTAUTH\)\s*$

ignoreregex =

# DEV Notes:
# Author: Rudimar Remontti</pre>
<p>Ativamos o filtro que criamos, e definir um tempo de banimento por 24h você pode ajustar para mais se achar necessário. E &#8220;maxretry&#8221; que é a quantidade de tentativas para 1.</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.d/bind9.conf</pre>
<p>Adicione no arquivo:</p>
<pre class="remontti-code">[bind9]
enabled  = true
port     = domain,953
protocol = tcp
logpath  = /var/log/named/security.log
bantime  = 24h
maxretry = 1</pre>
<p>Vale lembrar que o filtro de SSH já vem ativo por padrão em &#8220;/etc/fail2ban/jail.d/defaults-debian.conf&#8221;.</p>
<p>Precisamos fazer o bind gerar os logs com tentativas de consultas negadas (denied), incluído logging {&#8230;} no arquivo named.conf.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf</pre>
<pre class="remontti-code">// 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 &quot;/var/log/named/security.log&quot; versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };

    channel file_log {
        file &quot;/var/log/named/named.log&quot; 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 &quot;/etc/bind/named.conf.options&quot;;
include &quot;/etc/bind/named.conf.local&quot;;
include &quot;/etc/bind/named.conf.default-zones&quot;;</pre>
<p>Crie o diretório onde o bind vai registrar seus logs e de permissão para que possa gravar nesta pasta.</p>
<pre class="remontti-code"># mkdir /var/log/named/
# chown bind. /var/log/named/</pre>
<p>É importante ativar o nftables na inicialização e restartar os serviços para que nossas configurações sejam interpretadas.</p>
<pre class="remontti-code"># systemctl enable nftables
# systemctl restart bind9
# systemctl restart nftables
# systemctl restart fail2ban</pre>
<p>Para visualizar seu firewall use o comando:</p>
<pre class="remontti-code"># nft list ruleset</pre>
<p>Note que ja temos alguns IPs sendo dropado por tentativas de consulta no DNS e SSH.</p>
<pre class="remontti-code">table inet filter {
        set f2b-sshd {
                type ipv4_addr
                elements = { 92.63.194.90, 142.44.130.186,
                             191.54.227.13 }
        }

        set f2b-bind9 {
                type ipv4_addr
                elements = { 71.6.199.23, 185.94.111.1 }
        }

        chain input {
                type filter hook input priority 0; policy accept;
                ip saddr @f2b-bind9 drop
                ip saddr @f2b-sshd drop
        }

        chain forward {
                type filter hook forward priority 0; policy accept;
        }

        chain output {
                type filter hook output priority 0; policy accept;
        }
}</pre>
<p>Alguns comandos legais do fail2ban</p>
<pre class="remontti-code"># fail2ban-client status</pre>
<p>Veja quais filtros estão ativos</p>
<pre class="remontti-code">Status
|- Number of jail:      2
`- Jail list:   bind9, sshd</pre>
<pre class="remontti-code">fail2ban-client status NOME_FILTRO</pre>
<p>Ex:</p>
<pre class="remontti-code"># fail2ban-client status bind9
Status for the jail: bind9
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     2
|  `- File list:        /var/log/named/security.log
`- Actions
   |- Currently banned: 2
   |- Total banned:     2
   `- Banned IP list:   71.6.199.23 185.94.111.1

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 3
   |- Total banned:     3
   `- Banned IP list:   142.44.130.186 191.54.227.13 92.63.194.90</pre>
<p>Para remover um IP que foi bloqueado basta:</p>
<pre class="remontti-code"># fail2ban-client set bind9 unbanip IPADDRESS</pre>
<p>Pronto agora já temos um servidor DNS com um nível de segurança bem elevado!</p>
<h3>Autoritativo (ns1)</h3>
<p>Agora é aquela hora que precisamos ter planejado o que iríamos fazer com nosso IPs recebidos.</p>
<pre class="remontti-code">No meu exemplo vai ficar assim:
- 45.80.48.0/27   - Servidores
- 45.80.48.32/27  - Roteamento
- 45.80.48.64/26  - Clientes com IP Fixo
- 45.80.48.128/25 - CGNAT
- 45.80.49.0/26   - NOC (Gerência)
- 45.80.49.64/26  - Clientes Delegação
- 45.80.49.128/25 - Clientes dinâmico
- 45.80.50.0/24   - Clientes dinâmico
- 45.80.51.0/24   - Clientes dinâmico

# Quebrei meu ex de forma q não fique simples para que possamos dar nomes sugestivos aos IPs, adapte a sua realidade</pre>
<p>Para ficar organizado vou criar a pasta master-aut onde ficará os arquivos de hosts dos domínios autoritativos.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut</pre>
<p>Crie o arquivo remontti.net.br.hosts na pasta master-rev. Ajuste remontti.net.br para seu domínio.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-aut/remontti.net.br.hosts</pre>
<pre class="remontti-code">$ORIGIN .
$TTL 86400      ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2020062300 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)
                            )

                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.

                        A       45.80.48.4
                        AAAA    2804:f123:bebe:cafe::4
                        MX      10 mail.remontti.net.br.
                        TXT     &quot;v=spf1 a mx -all&quot;
                        SPF     &quot;v=spf1 a mx -all&quot;
$ORIGIN remontti.net.br.
$TTL 10800      ; 3 hours

45-80-48-0                      A       45.80.48.0
45-80-48-1                      A       45.80.48.1
                                AAAA    2804:f123:bebe:cafe::1

ns1                             A       45.80.48.2
                                AAAA    2804:f123:bebe:cafe::2
hostmaster                      A       45.80.48.2
                                AAAA    2804:f123:bebe:cafe::2
ns2                             A       45.80.48.3
                                AAAA    2804:f123:bebe:cafe::3

www                             A       45.80.48.4
                                AAAA    2804:f123:bebe:cafe::4
ftp                             A       45.80.48.4
                                AAAA    2804:f123:bebe:cafe::4

zabbix                          A       45.80.48.5
                                AAAA    2804:f123:bebe:cafe::5
phpipam                         A       45.80.48.5
                                AAAA    2804:f123:bebe:cafe::5

mail                            A       45.80.48.6
                                AAAA    2804:f123:bebe:cafe::6
imap                            A       45.80.48.6
                                AAAA    2804:f123:bebe:cafe::6
pop                             A       45.80.48.6
                                AAAA    2804:f123:bebe:cafe::6
smtp                            A       45.80.48.6
                                AAAA    2804:f123:bebe:cafe::6

$ORIGIN remontti.net.br.
$GENERATE 7-31   ns-$         A   45.80.48.$

$ORIGIN remontti.net.br.
$GENERATE 32-255 45-80-48-$   A   45.80.48.$

$ORIGIN remontti.net.br.
$GENERATE 0-255 45-80-49-$    A   45.80.49.$
 
$ORIGIN remontti.net.br.
$GENERATE 0-255 45-80-50-$    A   45.80.50.$
 
$ORIGIN remontti.net.br.
$GENERATE 0-255 45-80-51-$    A   45.80.51.$
</pre>
<p>Chamaremos a zone remontti.net.br em named.conf.local</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code">// Zonas Master
zone &quot;remontti.net.br&quot; {
        type master;
        file &quot;/var/cache/bind/master-aut/remontti.net.br.hosts&quot;;
};</pre>
<p>De permissões ao diretório/arquivo criados</p>
<pre class="remontti-code"># chown  bind. /var/cache/bind/master-aut -R</pre>
<p>Restart o serviço.</p>
<pre class="remontti-code"># systemctl restart bind9</pre>
<p>Testamos agora para ver se está resolvendo nosso domínio.</p>
<pre class="remontti-code"># dig ANY remontti.net.br @localhost</pre>
<pre class="remontti-code">; &lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1-Debian &lt;&lt;&gt;&gt; ANY remontti.net.br @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;HEADER&lt;- opcode: QUERY, status: NOERROR, id: 52255
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 3148faada350a11c7aeaf3835d32238e495995289566b021 (good)
;; QUESTION SECTION:
;remontti.net.br.               IN      ANY

;; ANSWER SECTION:
remontti.net.br.        86400   IN      SOA     ns1.remontti.net.br. hostmaster.remontti.net.br. 2020062300 10800 3600 2419200 300
remontti.net.br.        86400   IN      NS      ns2.remontti.net.br.
remontti.net.br.        86400   IN      NS      ns1.remontti.net.br.
remontti.net.br.        86400   IN      A       45.80.48.4
remontti.net.br.        86400   IN      AAAA    2804:f123:bebe:cafe::4
remontti.net.br.        86400   IN      MX      10 mail.remontti.net.br.
remontti.net.br.        86400   IN      TXT     &quot;v=spf1 a mx -all&quot;

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: sex jul 19 17:09:50 -03 2019
;; MSG SIZE  rcvd: 263</pre>
<p>Testes:</p>
<pre class="remontti-code"># host remontti.net.br
remontti.net.br has address 45.80.48.4
remontti.net.br has IPv6 address 2804:f123:bebe:cafe::4
remontti.net.br mail is handled by 20 mail.remontti.net.br.

# host ns1.remontti.net.br
ns1.remontti.net.br has address 45.80.48.2
ns1.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::2

# host ns2.remontti.net.br
ns2.remontti.net.br has address 45.80.48.3
ns2.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::3

# host mail.remontti.net.br
mail.remontti.net.br has address 45.80.48.6
mail.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::6

# host zabbix.remontti.net.br
zabbix.remontti.net.br has address 45.80.48.5
zabbix.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::5

</pre>
<p>Seu autoritativo já está funcionado, você já é possível registrar seu domínio (claro ainda falta o slave).</p>
<p>Neste momento você pode verificar no registro.br se seu servidor já tem autoridade sobre o domínio que configurou.<br />
Mas antes vamos ajustar o fail2ban para ignorar os ips do Registro.br pois muitas pessoas acabam configurando errado seu DNS e na hora de verificar acabam bloqueando o registro.br (Isso acontece porque quando você for validar se o seu DNS não estiver certo, ele vai achar que o registro.br esta tentando resolver o "dominio qualquer" que você não é autoritativo), para isso faça:</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Localize "<strong>ignoreip =</strong>" e adicione os blocos do registro.br (200.160.0.0/20 200.219.148.0/24 2001:12ff::/32 2001:12f8:6::/47) se desajar pode incluir seu bloco de ips dos servidores, principalmente o ip do servidor Slave para evitar que ele também seja bloqueado (no meu ex. os 45.80.48.3 e 2804:f123:bebe:cafe::3)</p>
<pre class="remontti-code"># &quot;ignoreip&quot; can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
# will not ban a host which matches an address in this list. Several addresses
# can be defined using space (and/or comma) separator.
ignoreip = 127.0.0.1/8 ::1 200.160.0.0/20 200.219.148.0/24 2001:12ff::/32 2001:12f8:6::/47 45.80.48.3 2804:f123:bebe:cafe::3</pre>
<p>Reinicie o fail2ban</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<p>Acessando: <a href="https://registro.br/tecnologia/ferramentas/verificacao-de-dns/" rel="noopener noreferrer" target="_blank">Ferramentas Registro BR</a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/dns-bind9-debian10-buster-registrobr.png" data-rel="lightbox-gallery-xffbTYY8" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/dns-bind9-debian10-buster-registrobr.png" alt="" width="933" height="834" class="alignnone size-full wp-image-3128" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/dns-bind9-debian10-buster-registrobr.png 933w, https://blog.remontti.com.br/wp-content/uploads/2019/07/dns-bind9-debian10-buster-registrobr-300x268.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/dns-bind9-debian10-buster-registrobr-768x687.png 768w" sizes="auto, (max-width: 933px) 100vw, 933px" /></a></p>
<p>Se o <strong>STATUS</strong> for "<strong>Autoridade sobre o domínio</strong>" parabéns suas configurações estão respondendo corretamente.</p>
<h3>Reverso (ns1)</h3>
<p>Obs: Para fazer a Delegações de DNS reverso do seu bloco, é importante que você já tenha configurado no registro.br seu DNS autoritativo.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-rev</pre>
<p>O bloco 45.80.48.0/22 será necessário quebrar em 4 blocos /24 tendo uma configuração para cada /24 Como já planejado no autoritativo vamos ter que dar nomes a todos os IPs. Vale lembrar que todos esses nomes de hosts é permitido apenas um nome por IP, e cada nome desses deve ser configurado no autoritativo.</p>
<p>Primeiro arquivo/24 45.80.48.rev</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.48.rev</pre>
<p>Preste atenção em <strong>48.80.45.in-addr.arpa.</strong> essa linha ela deve ser alterada com o inverso do seu IP.<br />
Outra coisa importante é o serial (2020062300) ele esta presente em todos os arquivos e deve ser alterado toda vez que for alterado. Ele segue o padrão [ano-mes-dia-sequencial]. É fundamental altera-lo para que o servidor slave copie sempre que tiver uma alteração.</p>
<pre class="remontti-code">$ORIGIN .
$TTL 86400      ; 1 day
48.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2020062300 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 48.80.45.in-addr.arpa.
0         PTR     45.80.48.0.remontti.net.br.
1         PTR     cpd.remontti.net.br.
2         PTR     ns1.remontti.net.br.
3         PTR     ns2.remontti.net.br.
4         PTR     www.remontti.net.br.
5         PTR     zabbix.remontti.net.br.
6         PTR     mail.remontti.net.br.

; Servidores não utilizados
$ORIGIN 48.80.45.in-addr.arpa.
$GENERATE 7-31   $ PTR ns-$.remontti.net.br.

$ORIGIN 48.80.45.in-addr.arpa.
$GENERATE 32-255 $ PTR 45-80-48-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.49.rev</pre>
<pre class="remontti-code">$ORIGIN .
$TTL 86400      ; 1 day
49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2020062300 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-49-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.50.rev</pre>
<pre class="remontti-code">$ORIGIN .
$TTL 86400      ; 1 day
50.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2020062300 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

; Clientes dinâmicos
$ORIGIN 50.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-50-$.remontti.net.br.</pre>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/45.80.51.rev</pre>
<pre class="remontti-code">$ORIGIN .
$TTL 86400      ; 1 day
51.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2020062300 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

; Clientes dinâmicos
$ORIGIN 51.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-51-$.remontti.net.br.</pre>
<p>Não  podemos esquecer nosso reverso do IPv6! Antes que alguém pergunte (novamente) posso configurar o reverso de todos os IPv6? Bom você precisa saber que precisa resolver 79.228.162.514.264.337.593.543.950.336 (2^96) endereços IPv6, e isso é algo quase impossível! Informaremos apenas os nomes a ipv6 fixos.</p>
<pre class="remontti-code"># vim /var/cache/bind/master-rev/2000.f123.rev</pre>
<pre class="remontti-code">$ORIGIN .
$TTL 3600       ; 1 hour
3.2.1.f.4.0.8.2.ip6.arpa IN SOA ns1.remontti.net.br.3.2.1.f.4.0.8.2.ip6.arpa. hostmaster.remontti.net.br.3.2.1.f.4.0.8.2.ip6.arpa. (
                                2020062300 ; serial
                                3600       ; refresh (1 hour)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.


1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. IN PTR cpd.remontti.net.br.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. IN PTR ns1.remontti.net.br.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. IN PTR ns2.remontti.net.br.
4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. IN PTR www.remontti.net.br.
5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. IN PTR zabbix.remontti.net.br.
6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. IN PTR mail.remontti.net.br.</pre>
<p>Este site <a href="http://rdns6.com/hostRecord">http://rdns6.com/hostRecord</a> pode ser bem útil para gerar seus PTRs.<br />
Para finalizar acertando as permissões.</p>
<pre class="remontti-code"># chown  bind. /var/cache/bind/master-rev  -R</pre>
<p>Precisamos informar nossas zonas reversas no named.conf.local, como estamos configurando nosso servidor master essas zonas serão do tipo (type) master e para informar o arquivo onde está a configuração da zone usamos o parâmetro file /caminho-completo/arquivo</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code">
// Reverso IPv4

zone &quot;48.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.48.rev&quot;;
};

zone &quot;49.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.49.rev&quot;;
};

zone &quot;50.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.50.rev&quot;;
};

zone &quot;51.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.51.rev&quot;;
};

// Reverso IPv6

zone &quot;3.2.1.f.4.0.8.2.ip6.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/2804.f123.rev&quot;;
};
</pre>
<p>Para ficar fácil acesso criamos uma atalhos das nossas pastas master-* dentro de /etc/bind</p>
<pre class="remontti-code"># ln -s /var/cache/bind/master-aut /etc/bind/master-aut
# ln -s /var/cache/bind/master-rev /etc/bind/master-rev</pre>
<p>Restart o serviço e veja se esta rodando sem erros.</p>
<pre class="remontti-code"># systemctl restart bind9
# systemctl status bind9</pre>
<p>Vamos ver se ele já está resolvendo nosso IP então?</p>
<pre class="remontti-code"># dig -x 45.80.48.2 @localhost
; &lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1-Debian &lt;&lt;&gt;&gt; -x 45.80.48.2 @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;HEADER&lt;- opcode: QUERY, status: NOERROR, id: 59398
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: cc1f5b76ca8135b2f442ab295d35a916dcb3bf8066886af9 (good)
;; QUESTION SECTION:
;2.48.80.45.in-addr.arpa.       IN      PTR

;; ANSWER SECTION:
2.48.80.45.in-addr.arpa. 86400  IN      PTR     ns1.remontti.net.br.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: seg jul 22 09:16:22 -03 2019
;; MSG SIZE  rcvd: 113

# dig -x 2804:f123:bebe:cafe::2 @localhost
&lt;&lt;&gt;&gt; DiG 9.11.5-P4-5.1-Debian &lt;&lt;&gt;&gt; -x 2804:f123:bebe:cafe::2 @localhost
;; global options: +cmd
;; Got answer:
;; -&gt;HEADER&lt;- opcode: QUERY, status: NOERROR, id: 5580
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: ec8e4c0bfbec98025b39d4965d35a90be152e9b837af0575 (good)
;; QUESTION SECTION:
;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. IN PTR

;; ANSWER SECTION:
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. 3600 IN PTR ns1.remontti.net.br.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: seg jul 22 09:16:11 -03 2019
;; MSG SIZE  rcvd: 162

# host 45.80.48.2
2.48.80.45.in-addr.arpa domain name pointer ns1.remontti.net.br.

# host 2804:f123:bebe:cafe::2
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa domain name pointer ns1.remontti.net.br.

# host 2804:f123:bebe:cafe::1
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa domain name pointer cpd.remontti.net.br.

# host 45.80.48.3
3.48.80.45.in-addr.arpa domain name pointer ns2.remontti.net.br.

# host 45.80.48.10
10.48.80.45.in-addr.arpa domain name pointer serv-10.remontti.net.br.

# host 45.80.48.100
100.48.80.45.in-addr.arpa domain name pointer fixo-100.remontti.net.br.

# host 45.80.48.200
200.48.80.45.in-addr.arpa domain name pointer cgnat-200.remontti.net.br.

# host 45.80.49.0
0.49.80.45.in-addr.arpa domain name pointer noc-0.remontti.net.br.

# host 45.80.49.2
2.49.80.45.in-addr.arpa domain name pointer noc-2.remontti.net.br.

# host 45.80.49.20
20.49.80.45.in-addr.arpa domain name pointer noc-20.remontti.net.br.

# host 45.80.49.64
64.49.80.45.in-addr.arpa domain name pointer dd-64.remontti.net.br.

# host 45.80.49.128
128.49.80.45.in-addr.arpa domain name pointer 45-80-49-128.remontti.net.br.

# host 45.80.49.129
129.49.80.45.in-addr.arpa domain name pointer 45-80-49-129.remontti.net.br.

# host 45.80.50.50
50.50.80.45.in-addr.arpa domain name pointer 45-80-50-50.remontti.net.br.

# host 45.80.51.50
50.51.80.45.in-addr.arpa domain name pointer 45-80-51-50.remontti.net.br.</pre>
<p>Como pode ver todos os endereços estão resolvendo seus nomes.</p>
<p>Reverso pronto!</p>
<h3>Atualizando ROOT SERVERS</h3>
<p>Para finalizar o master vamos fazer uma atualização no root server que na versão do debian 10 buster passou a ser /usr/share/dns/root.hints. A vesão instalada é de 13/03/2019 <em>"last update: March 13, 2019"</em></p>
<p>Para obter uma versão mais recente, iremos mover nosso arquivo root.hints e baixar um novo.</p>
<pre class="remontti-code">mv /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d`
wget https://www.internic.net/domain/named.root -O /usr/share/dns/root.hints --no-check-certificate</pre>
<p>Pode editar o arquivo /usr/share/dns/root.hints e verificar qual é a ultima atualização, (hoje 19/07/2019) ele esta: "last update: July 03, 2019". Reinicie o serviço para ter efeito.</p>
<pre class="remontti-code">systemctl restart bind9
systemctl status bind9</pre>
<p>Parabéns! Seu servidor master está pronto!</p>
<h3>SLAVE (ns2)</h3>
<p>Praticamente o processo se repete, com algumas alterações sendo necessário apenas configurar:<br />
  named.conf (Gerar log)<br />
  named.conf.local (Incluir as zonas)<br />
  named.conf.options (Setar nossas opções)</p>
<pre class="remontti-code"># apt install bind9 dnsutils</pre>
<p>Alterar o DNS do servidor:</p>
<pre class="remontti-code"># # echo &quot;nameserver 127.0.0.1&quot; &gt; /etc/resolv.conf </pre>
<pre class="remontti-code"># cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp</pre>
<p>No named.conf.options unica coisa em relação ao master é que vai alterar allow-transfer para none e remover o also-notify.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code">acl autorizados {
        127.0.0.1;
        ::1;
        45.80.48.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 &quot;/var/cache/bind&quot;;

    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 &quot;RR DNS Server&quot;;
};</pre>
<p>Para organizar criamos duas pastas slave-rev e slave-aut é importante dar <b>permissões para o usuário bind, pois ele precisa importar as configurações do master e vai escrever nelas.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/slave-aut
# mkdir /var/cache/bind/slave-rev
# chown  bind. -R /var/cache/bind/slave-*</pre>
<p>Não é mais necessário criar os arquivos, esses serão transferidos do servidor master. Basta informarmos em nossas zonas do arquivo named.conf.local, que serão do tipo (slave) e apontaremos o IP do <strong>master</strong> para que nosso servidor slave faça a transferência do master.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code">// Reverso IPv4

zone &quot;48.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.48.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};

zone &quot;49.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.49.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};

zone &quot;50.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.50.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};

zone &quot;51.80.45.in-addr.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/45.80.51.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};

// Reverso IPv6

zone &quot;3.2.1.f.4.0.8.2.ip6.arpa&quot; {
        type slave;
        file &quot;/var/cache/bind/slave-rev/2804.f123.rev&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};

// Zonas Slave

zone &quot;remontti.net.br&quot; IN {
        type slave;
        file &quot;/var/cache/bind/slave-aut/remontti.net.br.hosts&quot;;
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};</pre>
<p>Restart o serviço verifique se não teve nenhum erro e verifique dentro dos diretórios slave-aut/slave-rev se os arquivos foram criados.</p>
<pre class="remontti-code"># systemctl  restart bind9
# systemctl  status bind9
# ls -lh /var/cache/bind/slave-*</pre>
<p>Para ficar fácil acesso criamos uma atalhos das nossas pastas slave-* dentro de /etc/bind</p>
<pre class="remontti-code"># ln -s /var/cache/bind/slave-aut /etc/bind/slave-aut
# ln -s /var/cache/bind/slave-rev /etc/bind/slave-rev</pre>
<p>Se os mesmo foram criados seu DNS já está praticamente pronto!</p>
<p>Volte o tutorial e refaça a parte:<br />
  -<strong> Fail2Ban + nftables</strong><br />
  -<strong> Atualizando ROOT SERVERS</strong><br />
Isso é primordial para segurança do servidor!</p>
<p>Gostou? </p>
<p>Se você tiver interesse no Curso de DNS <a href="https://blog.remontti.com.br/curso-bind9" rel="noopener noreferrer" target="_blank">clique aqui</a>, quem sabe você de sorte de ter uma turma aberta. </p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Ahhh não terminei, ainda falta a configuração do nosso /28.</p>
<h3>Reverso de blocos menores que /24 - Ex.: CIDR/28 </h3>
<p>Antes de mais nada você deve ler ao menos como foi configurado o /22, pois será necessários que você compreenda e faça também o procedimentos:<br />
  -<strong> Fail2Ban + nftables</strong><br />
  -<strong> Atualizando ROOT SERVERS</strong></p>
<p>Vamos supor que você recebeu um /28 e queira ter seu reverso respondendo sobre esses bloco.<br />
A primeira coisa que você precisa saber que isso só será possivel se o dono do ASN fizer a configurações em seu servidor DNS (rfc2317), não basta ele simplismente ir la no registro.br e delegar esse /28 para você, e é claro que ele também precisa fazer isso!<br />
Se ficar em dúvidas recomendo ver que assista: <a href="https://www.youtube.com/watch?v=VIa1dHtmQ4U" rel="noopener noreferrer" target="_blank">DNS e DNS Reverso</a> (~20min fala sobre isso)</p>
<p>Então se você é o responsável pelo ASN você deve fazer o seguinte na configuração no seu arquivo reverso. No exemplo anterior deixamos já o 45.80.49.64/26 para esses casos, e no exemplo vamos delegar um /28 para o "Provedor do José".</p>
<pre class="remontti-code">$ ipcalc  45.80.49.64/28
Address:   45.80.49.64          00101101.01010000.00110011.0100 0000
Netmask:   255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
Wildcard:  0.0.0.15             00000000.00000000.00000000.0000 1111
=&gt;
Network:   45.80.49.64/28       00101101.01010000.00110011.0100 0000
HostMin:   45.80.49.65          00101101.01010000.00110011.0100 0001
HostMax:   45.80.49.78          00101101.01010000.00110011.0100 1110
Broadcast: 45.80.49.79          00101101.01010000.00110011.0100 1111
Hosts/Net: 14                    Class A</pre>
<pre class="remontti-code">vim /var/cache/bind/master-rev/45.80.49.rev</pre>
<pre class="remontti-code">$ORIGIN .
$TTL 86400      ; 1 day
49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2020062300 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

; NOC (Gerência)
$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-63 $ PTR noc-$.remontti.net.br.

; Clientes delegação

;  &lt;&lt;64-79&gt;&gt; /28
; Aponte para os DNS do Servidor
64/28          NS      ns1.provedordojose.com.br
64/28          NS      ns2.provedordojose.com.br
;
64             CNAME   64.45/28.49.80.45.in-addr.arpa.
65             CNAME   65.45/28.49.80.45.in-addr.arpa.
66             CNAME   66.45/28.49.80.45.in-addr.arpa.
67             CNAME   67.45/28.49.80.45.in-addr.arpa.
68             CNAME   68.45/28.49.80.45.in-addr.arpa.
69             CNAME   69.45/28.49.80.45.in-addr.arpa.
70             CNAME   70.45/28.49.80.45.in-addr.arpa.
71             CNAME   71.45/28.49.80.45.in-addr.arpa.
72             CNAME   72.45/28.49.80.45.in-addr.arpa.
73             CNAME   73.45/28.49.80.45.in-addr.arpa.
74             CNAME   74.45/28.49.80.45.in-addr.arpa.
75             CNAME   75.45/28.49.80.45.in-addr.arpa.
76             CNAME   76.45/28.49.80.45.in-addr.arpa.
77             CNAME   77.45/28.49.80.45.in-addr.arpa.
78             CNAME   78.45/28.49.80.45.in-addr.arpa.
79             CNAME   79.45/28.49.80.45.in-addr.arpa.

; Clientes delegação (reservado)
$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 80-127 $ PTR dd-$.remontti.net.br.

; Clientes dinâmicos
$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 128-255 $ PTR 45-80-49-$.remontti.net.br.</pre>
<p>Configuração feita pelo o dono do ASN, vamos as configurações do José que recebeu o bloco /28, e quer seus DNS respondendo por eles. Vamos supor que 45.80.49.66 e 45.80.49.67 sejam seu servidores DNS Master/Slave.</p>
<pre class="remontti-code"># mkdir /var/cache/bind/master-aut
# mkdir /var/cache/bind/master-rev</pre>
<p><strong>:: Autoritativo ::</strong></p>
<pre class="remontti-code">vim /var/cache/bind/master-aut/provedordojose.com.br.hosts</pre>
<pre class="remontti-code">$ORIGIN .
$TTL 86400      ; 1 day
provedordojose.com.br        IN SOA  ns1.provedordojose.com.br. root.provedordojose.com.br. (
                2020062300 ; serial
                10800      ; refresh (3 hours)
                3600       ; retry (1 hour)
                2419200    ; expire (4 weeks)
                300        ; minimum (5 minutes)
                )

            NS      ns1.provedordojose.com.br.
            NS      ns2.provedordojose.com.br.

            A       45.80.49.68
            MX      10 mail.provedordojose.com.br.
      TXT     &quot;v=spf1 a mx ip4:45.80.49.68?all&quot;

$ORIGIN provedordojose.com.br.
$TTL 10800      ; 3 hours

45-80-49-64     A       45.80.49.64
cpd         A       45.80.49.65
ns1         A       45.80.49.66
ns2         A       45.80.49.67
mail        A       45.80.49.68
zabbix        A       45.80.49.69
45-80-49-70     A       45.80.49.70
45-80-49-71     A       45.80.49.71
45-80-49-72     A       45.80.49.72
45-80-49-73     A       45.80.49.73
45-80-49-74     A       45.80.49.74
45-80-49-75     A       45.80.49.75
45-80-49-76     A       45.80.49.76
45-80-49-77     A       45.80.49.77
45-80-49-78     A       45.80.49.78
45-80-49-79     A       45.80.49.79</pre>
<p><strong>:: Reverso ::</strong></p>
<pre class="remontti-code">vim /var/cache/bind/master-rev/45.80.49.64-79.rev</pre>
<pre class="remontti-code">; 45.80.49.64/28
$TTL 1h
@               IN      SOA     ns1.provedordojose.com.br. root.provedordojose.com.br. (
                        2020062300 ; serial
                        2h         ; refresh
                        15m        ; update retry
                        2w         ; expiry
                        3h         ; nx = nxdomain ttl
                        )

        IN      NS      ns1.provedordojose.com.br.
        IN      NS      ns2.provedordojose.com.br.

$ORIGIN 64/28.49.80.45.in-addr.arpa.
64      IN      PTR     45-80-49-64.provedordojose.com.br.
65      IN      PTR     cpd.provedordojose.com.br.
66      IN      PTR     ns1.provedordojose.com.br.
67      IN      PTR     ns2.provedordojose.com.br.
68      IN      PTR     mail.provedordojose.com.br.
69      IN      PTR     zabbix.provedordojose.com.br.
70      IN      PTR     45-80-49-70.provedordojose.com.br.
71      IN      PTR     45-80-49-71.provedordojose.com.br.
72      IN      PTR     45-80-49-72.provedordojose.com.br.
73      IN      PTR     45-80-49-73.provedordojose.com.br.
74      IN      PTR     45-80-49-74.provedordojose.com.br.
75      IN      PTR     45-80-49-75.provedordojose.com.br.
76      IN      PTR     45-80-49-76.provedordojose.com.br.
77      IN      PTR     45-80-49-77.provedordojose.com.br.
78      IN      PTR     45-80-49-78.provedordojose.com.br.
79      IN      PTR     45-80-49-79.provedordojose.com.br.
</pre>
<p><strong>:: Zonas ::</strong></p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code">zone &quot;provedordojose.com.br&quot; {
  type master;
  file &quot;/var/cache/bind/master-aut/provedordojose.com.br.hosts&quot;;
};

zone &quot;64/28.49.80.45.in-addr.arpa&quot; {
        type master;
        file &quot;/var/cache/bind/master-rev/45.80.49.64-79.rev&quot;;
};</pre>
<pre class="remontti-code"># systemctl  restart bind9
# systemctl  status bind9</pre>
<h4>Dica extra - Ativando um proxy DNS</h4>
<p>Vamos supor que você deseja fazer as consultar DNS em um DNS como o 8.8.8.8 entre outros em vezes de ir direto aos roots como seria?</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code">acl autorizados {
        127.0.0.1;
        ::1;
        45.80.48.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 &quot;/var/cache/bind&quot;;
 
    dnssec-enable yes;
    dnssec-validation auto;
 
    auth-nxdomain no;
 
    listen-on { any; };
    listen-on-v6 { any; };
 
    // DNS PROXY
    // Em vez de ir pedir aos roots servers irá buscar de outros DNS.
    recursion yes;
    forwarders {
        8.8.8.8;
        1.1.1.1;
        1.0.0.1;
        8.8.4.4;
    };
    forward only;

    minimal-responses yes;
 
    allow-recursion {
        autorizados;
    };
 
    allow-query-cache {
        autorizados;
    };
 
    allow-query { any; };
 
    allow-transfer { none; };
 
    masterfile-format text;
 
    version &quot;RR DNS Server&quot;;
};</pre>
<p>Gostou?</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>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 <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3086">Servidor DNS seguro com Bind9  (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster [Descontinuado]</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3086/feed</wfw:commentRss>
			<slash:comments>102</slash:comments>
		
		
			</item>
		<item>
		<title>Servidor DNS Recursivo, Autoritativo e Reverso com Bind9 (IPv4+IPv6) + Fail2ban (Debian8/9)  [Descontinuado]</title>
		<link>https://blog.remontti.com.br/1397</link>
					<comments>https://blog.remontti.com.br/1397#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 25 Sep 2018 02:00:11 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[allow-transfer]]></category>
		<category><![CDATA[Autoritativo]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[debian stretch]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[Recursivo]]></category>
		<category><![CDATA[Reverso]]></category>
		<category><![CDATA[seguro]]></category>
		<category><![CDATA[Servidor]]></category>
		<guid isPermaLink="false">http://blog.remontti.com.br/?p=1397</guid>

					<description><![CDATA[<p>Este tutorial foi atualizado: Acesse Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster Não utilize este tutorial! Não apaguei o mesmo para deixa-lo para fins&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/1397">Servidor DNS Recursivo, Autoritativo e Reverso com Bind9 (IPv4+IPv6) + Fail2ban (Debian8/9)  [Descontinuado]</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1><font color="red"><strong>Este tutorial foi atualizado: </strong></font></h1>
<h3>Acesse <a href="https://blog.remontti.com.br/3086">Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster</a></h3>
<h4><font color="red"><strong>Não utilize este tutorial! Não apaguei o mesmo para deixa-lo para fins de estudos.</strong></font></h4>
<hr>
<p>(Descontinuado)</p>
<hr>
<p>Distribuição utilizada: <strong>Debian 8 Jessie / Debian 9 Stretch &#8211; Instalação Limpa</strong> <a href="https://blog.remontti.com.br/1152" target="_blank" rel="noopener noreferrer">(Tutorial de instalação aqui)</a></p>
<p><strong>DNS RECURSIVO</strong><br />
O DNS recursivo é responsável por procurar os endereços IPs de servidor que você solicitou acesso. Exemplo o DNS que esta configurado na sua máquina. </p>
<p><strong>DNS AUTORITIVO</strong><br />
É o que possui autoridade sobre um nome de domínio, assim como ns1.remontti.net.br é o DNS autoritativo de seu domínio remontti.net.br.<br />
O DNS autoritativo dita qual será o apontamento da tabela de DNS do seu site. Ele vai responder por o domínio que você configurou nele.</p>
<p><strong>DNS REVERSO</strong><br />
Normalmente o DNS atua resolvendo o nome do domínio de um host para um endereço IP correspondente. Já o DNS Reverso resolve o endereço IP, buscando o nome de domínio associado ao host. Ou seja, quando temos disponível o endereço IP de um host e não sabemos o endereço do domínio(nome dado à máquina ou outro equipamento que acesse uma rede), tentamos resolver o endereço IP através do DNS reverso que procura qual nome de domínio está associado aquele endereço. Os servidores que utilizam o DNS Reverso conseguem verificar a autenticidade de endereços, verificando se o endereço IP atual corresponde ao endereço IP informado pelo servidor DNS. Isto evita que alguém utilize um domínio que não lhe pertence para enviar spam, por exemplo.</p>
<p>Para que o DNS Reverso funcione que no registro.br você designa seu bloco apontando para o(os) seu(s) servidor(es) DNS. Se você for um provedor o correto seria você ter ao menos dois servidores DNS em sua rede, uma Master e outro Slave. Neste tutoria foi explicar como criar os dois! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Vamos iniciar com a instalação do nosso servidor Master, lembrando que para isso estou usando a Distribuição linux Debian 8, com uma instalação que eu chamo de limpa, ou seja no processo de instalação foi instalado apenas o sistema básico. </p>
<p><strong>Cenário para nosso exemplo</strong></p>
<p>Domínio: <strong>remontti.net.br</strong><br />
Blocos que serei responsável <strong>IPv4 250.250.0.0/23 (255.255.254.0)</strong> / <strong>IPv6 2000:FFF::/32</strong> minha rede ainda conta com alguns blocos de IPs inválidos bem como <strong>192.168.0.0/16,  172.16.0.0/12 e 10.0.0.0/8</strong> que por ventura também irei autorizar consultas recursivas.</p>
<p>Tenho ainda meus servidores, quais ficarão configurado com os seguintes IPs IPv4/IPv6:<br />
<strong>ROUTER GW</strong> -> 250.250.0.1 / 2000:fff:250:250:0::1<br />
<strong>SERV DNS MASTER</strong> -> 250.250.0.2 / 2000:fff:250:250:0::2 (ns1)<br />
<strong>SERV DNS SLAVE </strong>-> 250.250.0.3 / 2000:fff:250:250:0::3 (ns2)<br />
<strong>SERV <a href="https://blog.remontti.com.br/1296" target="_blank" rel="noopener noreferrer">WEB</a> + <a href="https://blog.remontti.com.br/136" target="_blank" rel="noopener noreferrer">FTP</a></strong> -> 250.250.0.4 / 2000:fff:250:250:0::4 (www,ftp)<br />
<strong>SERV <a href="https://blog.remontti.com.br/1227" target="_blank" rel="noopener noreferrer">ZABBIX</a> </strong> -> 250.250.0.5 / 2000:fff:250:250:0::5 (zabbix)<br />
<strong>SERV <a href="https://blog.remontti.com.br/1485" target="_blank" rel="noopener noreferrer">E-MAILS</a> </strong> -> 250.250.0.6 / 2000:fff:250:250:0::6 (mail,imap,pop,smtp)<br />
<strong>SERV HOSPEDAGEM</a>  *</strong> -> 250.250.0.7 / 2000:fff:250:250:0::7 (ns3)</p>
<p><i>* Inclui outros servidor para demonstrar como irei apontar para eles alguns nos domínios que seremos autoritarivo, lá na frente você vai compreender melhor.</i></p>
<p><strong>INSTALAÇÃO SERVIDOR DNS MASTER (NS1)</strong></p>
<pre class="remontti-code"># apt install bind9 dnsutils</pre>
<p>Pronto! Nosso servidor recursivo já está funcionando, porém ele está aberto, e isso não é nada legal! Você não vai querer qualquer um utilizando seu servidor para resolver nomes. Vamos resolver isso bem simples. </p>
<p>Antes de mais nada vamos alterar o DNS do nosso servidor fazendo com que ele consulte em si próprio. Essa alteração deve ser feita no arquivo /etc/resolv.conf, eu irei utilizar o editor vim, mas fique a vontade de usar o seu preferido.</p>
<pre class="remontti-code"># vim  /etc/resolv.conf </pre>
<p>Altere para:</p>
<pre class="remontti-code">nameserver 127.0.0.1
search localhost</pre>
<p>Feito isso você pode fazer um ping para um domínio e ver se ele resolveu o host.<br />
Agora &#8220;mão na massa&#8221;! Vamos começar acessando nosso diretório de instalação do Bind que fica em /etc/bind/ </p>
<pre class="remontti-code"># cd /etc/bind</pre>
<p>As configurações principal é armazenado nos seguintes arquivos:<br />
<i>named.conf<br />
named.conf.local<br />
named.conf.options</i></p>
<p>Iremos alterar o <strong>named.conf.options</strong>, o próprio nome já se auto descreve o que vamos encontrar nele.<br />
Sempre gosto de preservar o arquivo original, então vamos fazer um backup antes de modifica-lo.</p>
<pre class="remontti-code"># cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp</pre>
<p>Agora vamos as alterações, vou deixar explicado como comentários dentro no nosso arquivo.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code">
//ACLs (Access Control Lists)

// ACL &quot;permite-recursiva&quot; vão ficar os hosts estão autorizados a fazer 
// consultas recursivas através deste servidor.
acl permite-recursiva {
        127.0.0.1;
        ::1;
        250.250.0.0/23;
        2000:fff::/32;
        192.168.0.0/16;
        172.16.0.0/12;
        10.0.0.0/8;
};

options {
    // O diretório de trabalho do servidor
    // Quaisquer caminho não informado será tomado como  padrão este directório
    directory &quot;/var/cache/bind&quot;;

    //Suporte a DNSSEC
    dnssec-enable yes;
    dnssec-validation auto;

    // Conforme RFC1035
    // https://www.ietf.org/rfc/rfc1035.txt
    auth-nxdomain no;

    // Respondendo para IPv4 e IPv6
    // Porta 53 estará aberta para ambos v4 e v6
    listen-on { any; };
    listen-on-v6 { any; };

    // Limitação da taxa de resposta no sistema de nomes de domínio (DNS RRL)
    rate-limit {
        responses-per-second 15;
        window 5;
    };

    // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
    // O padrão BIND é (no) não.
    minimal-responses yes;

    // Especifica quais hosts estão autorizados a fazer consultas 
    // recursivas através deste servidor.
    // Aqui que você vai informar os IPs da sua rede que você irá permitir consultar os DNS.
    allow-recursion {
        permite-recursiva;
    };

    // Endereço estão autorizados a emitir consultas ao cache local,
    // sem acesso ao cache local as consultas recursivas são inúteis.
    allow-query-cache {
        permite-recursiva;
    };

    // Especifica quais hosts estão autorizados a fazer perguntas DNS comuns.
    allow-query { any; };

    // Especifica quais hosts estão autorizados a receber transferências de zona a partir do servidor.
    // Seu servidor Secundário, no nosso caso vou deixar então o ips dos dois servidores v4 e v6.
    allow-transfer {
        250.250.0.3;
        2000:fff:250:250:0::3;
    };
    also-notify {
        250.250.0.3;
        2000:fff:250:250:0::3;
    };

    // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
    // mastes deste servidor nao compile o arquivo, assim no outro servidor o arquivo 
    // da zona terá um texto &quot;puro&quot;
    masterfile-format text;

    // Para evitar que vase a versao do Bind, definimos um nome
    version &quot;RR DNS Server&quot;;
};
</pre>
<p>Pronto nosso servidor Recursivo já está funcionando! Caso você não queria seu servidor sendo recursivo apenas altere allow-recursion e allow-query-cache para apenas localhost. Esta também será feita no servidor Slave (ns2).</p>
<p>Agora precisamos apenas dar um restart no bind para que as opções tenham efeito.</p>
<pre class="remontti-code"># /etc/init.d/bind9 restart</pre>
<p><strong>IP REVERSO (NS1 Master)</strong><br />
Vamos a configuração do nosso reverso. Particularmente gosto de dentro da pasta /etc/bind/ criar alguns diretórios quais separo as configurações.</p>
<pre class="remontti-code"># mkdir /etc/bind/reverse</pre>
<p>Somos &#8220;donos&#8221; do bloco 250.250.0.0/23 que representam dois blocos /24 (250.250.0.0/24 + 250.250.1.0/24). Para facilitar vou fazer a configuração em dois arquivos separando cada bloco /24. É possível colocar tudo em um mesmo arquivo? Sim, mais eu particularmente não gosto <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
Vamos ter que dar nomes a todos nossos 512 IPs representado pelo nosso /23, no exemplo não vou criar todos, vou por um [&#8230;] q representa que você deve completar com os demais ips, também vou usar como parado o nome para os IP o próprio endereço IP porém com um abreviação &#8220;rev-250-250-X-Y&#8221; com exceção nossos servidor já conhecido, ns1, ns2, mail &#8230; Vale lembrar que todos esses nomes de hosts serão configurado exatamente posterior na configuração sobre o domínio. Para que quando vc consulte o nome de um IP ele resolva em um nome e ao você consultar este nome ele resolva em um IP, por isso o nome de reverso!<br />
Primeiro arquivo 250.250.0.rev</p>
<pre class="remontti-code"># vim /etc/bind/reverse/250.250.0.rev</pre>
<p>Preste atenção em <strong>0.250.250.in-addr.arpa.</strong> essa linha (são duas no arquivo a baixo)  ela deve ser alterada com o inverso do seu IP, se seu bloco fosse ex.: 100.200.300.0/24 ficaria 300.200.100.in-addr.arpa. fica ligado <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
Outra coisa importante é o serial (2017010100) ele esta presente em todos os arquivos e deve ser alterado toda vez que for alterado. Ele segue o padrão [ano-mes-dia-sequencial].</p>
<pre class="remontti-code">
$ORIGIN .
$TTL 86400      ; 1 day
0.250.250.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                    NS      ns1.remontti.net.br.
                    NS      ns2.remontti.net.br.
                       
$ORIGIN 0.250.250.in-addr.arpa.
0         PTR     250-250-0-000.remontti.net.br.
1         PTR     router-gw.remontti.net.br.
2         PTR     ns1.remontti.net.br.
3         PTR     ns2.remontti.net.br.
4         PTR     www.remontti.net.br.
5         PTR     zabbix.remontti.net.br.
6         PTR     mail.remontti.net.br.
7         PTR     ns3.remontti.net.br.
8         PTR     250-250-0-8.remontti.net.br.
9         PTR     250-250-0-9.remontti.net.br.
10        PTR     250-250-0-10.remontti.net.br.
11        PTR     250-250-0-11.remontti.net.br.
;
; [...] complete com todos os IPs/Nomes
;
254       PTR     250-250-0-254.remontti.net.br.
255       PTR     250-250-0-255.remontti.net.br.
; fim
</pre>
<p>Segundo arquivo 250.250.1.rev <em>(observe 1.250.250.in-addr.arpa)</em></p>
<pre class="remontti-code"># vim /etc/bind/reverse/250.250.1.rev</pre>
<pre class="remontti-code">
$ORIGIN .
$TTL 86400      ; 1 day
1.250.250.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                    NS      ns1.remontti.net.br.
                    NS      ns2.remontti.net.br.
                       
$ORIGIN 1.250.250.in-addr.arpa.
0         PTR     250-250-1-0.remontti.net.br.
1         PTR     250-250-1-1.remontti.net.br.
2         PTR     250-250-1-2.remontti.net.br.
3         PTR     250-250-1-3.remontti.net.br.
4         PTR     250-250-1-4.remontti.net.br.
5         PTR     250-250-1-5.remontti.net.br.
6         PTR     250-250-1-6.remontti.net.br.
7         PTR     250-250-1-7.remontti.net.br.
8         PTR     250-250-1-8.remontti.net.br.
9         PTR     250-250-1-9.remontti.net.br.
10        PTR     250-250-1-10.remontti.net.br.
;
; [...] complete com todos os IPs/Nomes
;
253       PTR     250-250-1-253.remontti.net.br.
254       PTR     250-250-1-254.remontti.net.br.
255       PTR     250-250-1-255.remontti.net.br.
; fim
</pre>
<p>Se possui bloco maiores e diferente, e com um padrão de nomes iguais o modo GENERATE ajuda muito, ficando da seguinte forma:</p>
<pre class="remontti-code">
;;;;;;;;;;;;;;;;;;;;;;;
;;;; 250.250.0.rev ;;;; 
;;;;;;;;;;;;;;;;;;;;;;;

$ORIGIN .
$TTL 86400      ; 1 day
0.250.250.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                    NS      ns1.remontti.net.br.
                    NS      ns2.remontti.net.br.
                       
$ORIGIN 0.250.250.in-addr.arpa.
0         PTR     250-250-0-000.remontti.net.br.
1         PTR     router-gw.remontti.net.br.
2         PTR     ns1.remontti.net.br.
3         PTR     ns2.remontti.net.br.
4         PTR     www.remontti.net.br.
5         PTR     zabbix.remontti.net.br.
6         PTR     mail.remontti.net.br.
7         PTR     ns3.remontti.net.br.

; Os gerados auto
$ORIGIN 0.250.250.in-addr.arpa.
$GENERATE 8-255 $ PTR 250-250-0-$.remontti.net.br.

;;;;;;;;;;;;;;;;;;;;;;;
;;;; 250.250.1.rev ;;;; 
;;;;;;;;;;;;;;;;;;;;;;;

$ORIGIN .
$TTL 86400      ; 1 day
1.250.250.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                    NS      ns1.remontti.net.br.
                    NS      ns2.remontti.net.br.
                       

$ORIGIN 1.250.250.in-addr.arpa.
$GENERATE 0-255 $ PTR 250-250-1-$.remontti.net.br.</pre>
<p>Barabada não!? <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><strong>Não  podemos esquecer nosso reverso do IPv6! </strong></p>
<p>Terceiro arquivo 2000.fff.rev</p>
<pre class="remontti-code"># vim /etc/bind/reverse/2000.fff.rev</pre>
<pre class="remontti-code">
$TTL 86400      ; 1 day
@       IN      SOA     ns1.remontti.net.br. hostmaster.remontti.net.br. (
                                2017010100 ; serial
                                10800      ; refresh (3 hours)
                                3600       ; retry (1 hour)                        
                                2419200    ; expire (4 weeks)
                                300        ; minimum (5 minutes)     
                                )
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR router-gw.remontti.net.br.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR ns1.remontti.net.br.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR ns2.remontti.net.br.
4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR www.remontti.net.br.
5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR zabbix.remontti.net.br.
6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR mail.remontti.net.br.
7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR ns3.remontti.net.br.

;
; OU Mais compacto.
;

;$ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa.
;1	PTR 	router-gw.remontti.net.br.
;2   	PTR 	ns1.remontti.net.br.
;3   	PTR 	ns2.remontti.net.br.
;4   	PTR 	www.remontti.net.br.
;5   	PTR 	zabbix.remontti.net.br.
;6   	PTR	mail.remontti.net.br.
;7   	PTR 	ns3.remontti.net.br.

</pre>
<p>Este site <a href="http://rdns6.com/hostRecord">http://rdns6.com/hostRecord</a> pode ser bem útil para gerar seus PTRs.<br />
Para finalizar acertando as permissões. </p>
<pre class="remontti-code"># chown  bind. -R /etc/bind/reverse</pre>
<p>Precisamos informar nossas zones &#8220;lincar nossos arquivos&#8221; para serem interpretado pelo bind, esse arquivo é o named.conf.local, como estamos configurando nosso servidor master essas zonas serão do tipo (type) master e para informar o arquivo onde está a configuração da zone usamos o parâmetro file /caminho-completo/arquivo</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione nele:</p>
<pre class="remontti-code">
// Reverso IPv4

zone &quot;0.250.250.in-addr.arpa&quot; {
        type master;
        file &quot;/etc/bind/reverse/250.250.0.rev&quot;;
};

zone &quot;1.250.250.in-addr.arpa&quot; {
        type master;
        file &quot;/etc/bind/reverse/250.250.1.rev&quot;;
};

// Reverso IPv6

zone &quot;f.f.f.0.0.0.0.2.ip6.arpa&quot; {
        type master;
        file &quot;/etc/bind/reverse/2000.fff.rev&quot;;
};
</pre>
<p>Restart o serviço.</p>
<pre class="remontti-code"># /etc/init.d/bind9 restart</pre>
<p>Vamos ver se ele já está resolvendo nosso IP então!</p>
<pre class="remontti-code"># dig -x 250.250.0.2 @localhost
# dig -x 2000:fff:250:250:0::2 @localhost
</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_151657.png" data-rel="lightbox-gallery-JEERYZdO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_151657-300x197.png" alt="screenshot_20161001_151657" width="300" height="197" class="alignnone size-medium wp-image-1461" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_151657-300x197.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_151657-768x504.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_151657-1024x672.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_151657.png 1148w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Vamos configurar agora nosso domínio autoritativo remontti.net.br.<br />
Para ficar organizado vou criar a pasta master também.</p>
<pre class="remontti-code"># mkdir /etc/bind/master
# chown  bind. -R /etc/bind/master</pre>
<p>Criamos então nosso arquivo remontti.net.br.hosts na pasta master.</p>
<pre class="remontti-code"># vim /etc/bind/master/remontti.net.br.hosts</pre>
<pre class="remontti-code">
$ORIGIN .
$TTL 86400      ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (                                
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                        
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
                        
                        A       250.250.0.4
                        AAAA    2000:fff:250:250:0::4
                        MX      20 mail.remontti.net.br.                        
                        
                        TXT     &quot;v=spf1 a mx -all&quot;                        
                        SPF     &quot;v=spf1 a mx -all&quot;

$ORIGIN remontti.net.br.
$TTL 10800      ; 3 hours

rev-250-250-0-000      A       250.250.0.0
router-gw              A       250.250.0.1
                       AAAA    2000:fff:250:250:0::1
ns1                    A       250.250.0.2
                       AAAA    2000:fff:250:250:0::2
hostmaster             A       250.250.0.2
                       AAAA    2000:fff:250:250:0::2
ns2                    A       250.250.0.3
                       AAAA    2000:fff:250:250:0::3
www                    A       250.250.0.4
                       AAAA    2000:fff:250:250:0::4
ipv6                   AAAA    2000:fff:250:250:0::4
ftp                    A       250.250.0.4
                       AAAA    2000:fff:250:250:0::4
zabbix                 A       250.250.0.5
                       AAAA    2000:fff:250:250:0::5
mail                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
imap                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
pop                    A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
smtp                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
ns3                    A       250.250.0.7
                       AAAA    2000:fff:250:250:0::7
250-250-0-8      	A       250.250.0.8
250-250-0-9      	A       250.250.0.9
250-250-0-10      	A       250.250.0.10
;[...]
;[...]
; complete com toda a faixa do seu bloco 
; no nosso exemplo 250.250.0.0/23
;[...]
;[...]
250-250-0-254      	A       250.250.0.254
250-250-0-255      	A       250.250.0.255
250-250-1-0      	A       250.250.1.0
250-250-1-1      	A       250.250.1.1
;[...]
;[...]
250-250-1-254      	A       250.250.1.254
250-250-1-255      	A       250.250.1.255
; final
</pre>
<p><em><em>Usando GENERATE:</em> </em></p>
<pre class="remontti-code">$ORIGIN .
$TTL 86400      ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (                                
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                        
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
                        
                        A       250.250.0.4
                        AAAA    2000:fff:250:250:0::4
                        MX      20 mail.remontti.net.br.                        
                        
                        TXT     &quot;v=spf1 a mx -all&quot;                        
                        SPF     &quot;v=spf1 a mx -all&quot;

$ORIGIN remontti.net.br.
$TTL 10800      ; 3 hours

250-250-0-0            A       250.250.0.0
router-gw              A       250.250.0.1
                       AAAA    2000:fff:250:250:0::1
ns1                    A       250.250.0.2
                       AAAA    2000:fff:250:250:0::2
hostmaster             A       250.250.0.2
                       AAAA    2000:fff:250:250:0::2
ns2                    A       250.250.0.3
                       AAAA    2000:fff:250:250:0::3
www                    A       250.250.0.4
                       AAAA    2000:fff:250:250:0::4
ipv6                   AAAA    2000:fff:250:250:0::4
ftp                    A       250.250.0.4
                       AAAA    2000:fff:250:250:0::4
zabbix                 A       250.250.0.5
                       AAAA    2000:fff:250:250:0::5
mail                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
imap                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
pop                    A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
smtp                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
ns3                    A       250.250.0.7
                       AAAA    2000:fff:250:250:0::7

; Os gerados auto
$ORIGIN remontti.net.br.
$GENERATE 8-255 250-250-0-$ A 250.250.0.$

; Os gerados auto
$ORIGIN remontti.net.br.
$GENERATE 8-255 250-250-1-$ A 250.250.1.$</pre>
<p>Criamos uma zone para nosso dominio remontti.net.br em named.conf.local</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione ao final do arquivo:</p>
<pre class="remontti-code">
// Zonas Master

zone &quot;remontti.net.br&quot; IN {
        type master;
        file &quot;/etc/bind/master/remontti.net.br.hosts&quot;;
};
</pre>
<p>Restart o serviço.</p>
<pre class="remontti-code"># /etc/init.d/bind9 restart</pre>
<p>Testamos agora para ver se está resolvendo nosso nomes</p>
<pre class="remontti-code"># dig ANY ns1.remontti.net.br @localhost
# host remontti.net.br
</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_152458.png" data-rel="lightbox-gallery-JEERYZdO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_152458-300x197.png" alt="screenshot_20161001_152458" width="300" height="197" class="alignnone size-medium wp-image-1463" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_152458-300x197.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_152458-768x504.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_152458-1024x672.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_152458.png 1148w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Parabéns! Seu servidor master está pronto!</p>
<p><strong>INSTALAÇÃO SERVIDOR DNS SLAVE (NS2)</strong></p>
<p>Praticamente o processo se repete, com algumas alterações.</p>
<pre class="remontti-code"># apt install bind9 dnsutils</pre>
<p>Alterar o DNS do servidor:</p>
<pre class="remontti-code"># vim  /etc/resolv.conf </pre>
<p>Altere para:</p>
<pre class="remontti-code">nameserver 127.0.0.1
search localhost</pre>
<p>Criamos um backup do named.conf.options</p>
<pre class="remontti-code"># cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp</pre>
<p>No named.conf.options unica coisa que vai alterar é em allow-transfer, como esse servidor é slave, ele não não tem a necessidade de informar o IP de outro(s) servidores que slaves. Como dito antes, se você não quiser que seu servidor seja recursivo apenas altere allow-recursion e allow-query-cache para localhost.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<pre class="remontti-code">
//ACLs (Access Control Lists)

// ACL &quot;permite-recursiva&quot; vão ficar os hosts estão autorizados a fazer consultas 
// recursivas através deste servidor.
acl permite-recursiva {
        127.0.0.1;
        ::1;
        250.250.0.0/23;
        2000:fff::/32;
        192.168.0.0/16;
        172.16.0.0/12;
        10.0.0.0/8;
};

options {
    // O diretório de trabalho do servidor
    // Quaisquer caminho não informado será tomado como  padrão este directório
    directory &quot;/var/cache/bind&quot;;

    //Suporte a DNSSEC
    dnssec-enable yes;
    dnssec-validation auto;

    // Conforme RFC1035
    // https://www.ietf.org/rfc/rfc1035.txt
    auth-nxdomain no;

    // Respondendo para IPv4 e IPv6
    // Porta 53 estará aberta para ambos v4 e v6
    listen-on { any; };
    listen-on-v6 { any; };

    // Limitação da taxa de resposta no sistema de nomes de domínio (DNS RRL)
    rate-limit {
        responses-per-second 15;
        window 5;
    };

    // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
    // O padrão BIND é (no) não.
    minimal-responses yes;

    // Especifica quais hosts estão autorizados a fazer consultas recursivas através deste servidor.
    // Aqui que você vai informar os IPs da sua rede que você irá permitir consultar os DNS.
    allow-recursion {
        permite-recursiva;
    };

    // Endereço estão autorizados a emitir consultas ao cache local,
    // sem acesso ao cache local as consultas recursivas são inúteis.
    allow-query-cache {
        permite-recursiva;
    };

    // Especifica quais hosts estão autorizados a fazer perguntas DNS comuns.
    allow-query { any; };

    // Especifica quais hosts estão autorizados a receber transferências de zona a partir do servidor. 
    // Como esse já é o secundário, vamos deixar como none.
    allow-transfer { none; };

    // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
    // mastes deste servidor nao compile o arquivo, assim no outro servidor o 
    // arquivo da zona tera um texto &quot;puro&quot;
    masterfile-format text;

    // Para evitar que vase a versao do Bind, definimos um nome
    version &quot;RR DNS Server&quot;;
};
</pre>
<p><strong>IP REVERSO (SLAVE)</strong></p>
<p>Para organizar criamos duas pastas slave-rev para nossos reveros e slave para nossos dominios slave e alteramos as <b>permissões para nosso user bind poder escrever nelas</b>.</p>
<pre class="remontti-code"># mkdir /etc/bind/slave-rev
# mkdir /etc/bind/slave
# chown  bind. -R /etc/bind/slave*</pre>
<p>Não é mais necessário criar os arquivos pois esses serão transferidos do nosso servidor master. Basta informarmos em nossas zonas do arquivo named.conf.local, que serão do tipo (slave) e apontaremos o IP do <strong>master</strong> para que nosso servidor slave faça a transferência do master.</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<p>Adicione nele:</p>
<pre class="remontti-code">
// Reverso IPv4

zone &quot;0.250.250.in-addr.arpa&quot; {
        type slave;
        file &quot;/etc/bind/slave-rev/250.250.0.rev&quot;;
        masters { 250.250.0.2; };
        allow-notify { 250.250.0.2; };

};

zone &quot;1.250.250.in-addr.arpa&quot; {
        type slave;
        file &quot;/etc/bind/slave-rev/250.250.1.rev&quot;;
        masters { 250.250.0.2; };
        allow-notify { 250.250.0.2; };
};

// Reverso IPv6

zone &quot;f.f.f.0.0.0.0.2.ip6.arpa&quot; {
        type slave;
        file &quot;/etc/bind/slave-rev/2000.fff.rev&quot;;
        masters { 2000:fff:250:250:0::2; };
        allow-notify { 2000:fff:250:250:0::2; };
};

// Zonas Slave

zone &quot;remontti.net.br&quot; IN {
        type slave;
        file &quot;/etc/bind/slave/remontti.net.br.hosts&quot;;
        masters { 250.250.0.2; };
        allow-notify { 250.250.0.2; };
};
</pre>
<p>Restart o serviço e veja se dentro dos diretórios slave e slave-rev os arquivos foram criados. </p>
<pre class="remontti-code"># /etc/init.d/bind9 restart
# ls -lh slave*
</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_154900.png" data-rel="lightbox-gallery-JEERYZdO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_154900.png" alt="screenshot_20161001_154900" width="702" height="178" class="alignnone size-full wp-image-1470" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_154900.png 702w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_154900-300x76.png 300w" sizes="auto, (max-width: 702px) 100vw, 702px" /></a></p>
<p>Vamos aos testes.</p>
<pre class="remontti-code"># dig -x 250.250.0.4 @localhost
# dig ANY ns1.remontti.net.br @localhost</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_155323.png" data-rel="lightbox-gallery-JEERYZdO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_155323-300x185.png" alt="screenshot_20161001_155323" width="300" height="185" class="alignnone size-medium wp-image-1471" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_155323-300x185.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_155323-768x473.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_155323-1024x630.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161001_155323.png 1079w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>No nosso cenário temos um servidor de hospedagem nesse terei dois domínios, então também quero que meu servidor slave responda por eles. Para isso basta nos adicionar no nosso arquivo named.conf.local:</p>
<pre class="remontti-code"># vim /etc/bind/named.conf.local</pre>
<pre class="remontti-code">
// Zonas Slave do servidor de Hospedagem 

zone &quot;meudominio1.net.br&quot; {
        type slave;
        file &quot;/etc/bind/slave/meudominio1.com.br.hosts&quot;;
        masters { 250.250.0.7; };
        allow-notify { 250.250.0.7; };
};

zone &quot;meudominio2.net.br&quot; {
        type slave;
        file &quot;/etc/bind/slave/meudominio2.com.br.hosts&quot;;
        masters { 250.250.0.7; };
        allow-notify { 250.250.0.7; };
};
</pre>
<p>Restarte o bind e não esqueça que é necessário que seu servidor de hospedagem tenha o IP do seu servidor slave para poder fazer os allow-transfer.</p>
<p>Não esqueça também de alterar nas configurações da sua placa de rede dos seus servidores (dns-nameservers e dns-search).</p>
<pre class="remontti-code">
#
# /etc/network/interfaces
#
auto eth0
iface eth0 inet static
        address 186.250.168.14
        netmask 255.255.255.224
        network 186.250.168.0
        broadcast 186.250.168.31
        gateway 186.250.168.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 127.0.0.1
        dns-search localhost

iface eth0 inet6 static
        pre-up modprobe ipv6
        address 2000:fff:250:250:0::2
        netmask 64
        gateway 2000:fff:250:250:0::1
</pre>
<p><strong>DICA DE SEGURANÇA:</strong></p>
<p>As consultas recursivas são fechada para outros IPs que não esteja na sua ACL permetidos, porém esses IPs tem resposta com negação. Para visualizar esses logs faça o seguinte:</p>
<pre class="remontti-code"># vim /etc/bind/named.conf</pre>
<pre class="remontti-code">// 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 &quot;/var/log/named/security.log&quot; versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };
    category security {
        security_file;
    };
};

include &quot;/etc/bind/named.conf.options&quot;;
include &quot;/etc/bind/named.conf.local&quot;;
include &quot;/etc/bind/named.conf.default-zones&quot;;
</pre>
<p>Agora crie o diretório que ficarão os logs e de permissão:</p>
<pre class="remontti-code"># mkdir /var/log/named/
# chown bind. /var/log/named/
# /etc/init.d/bind9 restart</pre>
<p>Agora quando alguem não autorizado tentar usar seu DNS sera gerado um log.</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20170914_142429.png" data-rel="lightbox-gallery-JEERYZdO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20170914_142429-300x48.png" alt="" width="300" height="48" class="alignnone size-medium wp-image-2211" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20170914_142429-300x48.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20170914_142429-768x122.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20170914_142429-1024x163.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20170914_142429.png 1143w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Agora vamos a instalação do fail2ban para coloca ordem na casa. </p>
<pre class="remontti-code"># apt install fail2ban</pre>
<p>Vamos habilitar o modulo para começar a proteção, vale lembrar que o modulo SSH já vem ativo por padrão. </p>
<p><strong>Debian 9</strong></p>
<pre class="remontti-code">#vim /etc/fail2ban/jail.d/defaults-debian.conf</pre>
<pre class="remontti-code">
	[sshd]
	enabled = true

	[named-refused]
	enabled = true</pre>
<p>Para debian 8 altere as linhas no arquivo <em>/etc/fail2ban/jail.conf</em>.</p>
<p>Se você gosta da coisa &#8220;violenta&#8221; como eu mude o padrão para DROP!</p>
<pre class="remontti-code"># vim /etc/fail2ban/action.d/iptables-multiport.conf</pre>
<p>Procure:</p>
<pre class="remontti-code">
actionban = &lt;iptables&gt; -I f2b-&lt;name&gt; 1 -s &lt;ip&gt; -j &lt;blocktype&gt;
# Altere para:
actionban = iptables -A INPUT -s &lt;ip&gt; -j DROP

actionunban = &lt;iptables&gt; -D f2b-&lt;name&gt; -s &lt;ip&gt; -j &lt;blocktype&gt;
# Altere para:
actionunban = iptables -D INPUT -s &lt;ip&gt; -j DROP
</pre>
<p>Agora reinicie o serviço</p>
<pre class="remontti-code"># /etc/init.d/fail2ban restart</pre>
<p>Os IPs que tiverem tentando usar seu DNS serão avisado 5x depois irão tomar um DROP <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
Para ver as regras do iptables use:</p>
<pre class="remontti-code"># iptables -nL</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/fail2ban.png" data-rel="lightbox-gallery-JEERYZdO" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/fail2ban-300x156.png" alt="" width="300" height="156" class="alignnone size-medium wp-image-2219" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/fail2ban-300x156.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/fail2ban-768x398.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/fail2ban-1024x531.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/10/fail2ban.png 1118w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><strong>DICA <a href="https://www.iana.org/domains/root/servers" rel="noopener noreferrer" target="_blank">ROOT SERVERS</a> E <a href="https://tools.ietf.org/html/rfc5011" rel="noopener noreferrer" target="_blank">KEYs</a> ATUALIZADO:</strong><br />
Atualize os root servers ele é a alma do seu servidor. Faça isso tanto nos Master quanto no Slave.</p>
<pre class="remontti-code"># mv /etc/bind/db.root /etc/bind/db.root.`date +%Y%m%d`
# wget https://www.internic.net/domain/named.root -O /etc/bind/db.root --no-check-certificate
# mv /etc/bind/bind.keys /etc/bind/bind.keys.`date +%Y%m%d`
# wget https://ftp.isc.org/isc/bind9/keys/9.11/bind.keys.v9_11 -O /etc/bind/bind.keys --no-check-certificate
# /etc/init.d/bind9 restart</pre>
<p>Dica de leitura:<br />
<em><a href="https://pt.wikipedia.org/wiki/Servidor-raiz" rel="noopener noreferrer" target="_blank">https://pt.wikipedia.org/wiki/Servidor-raiz</a></em></p>
<p><strong>NÃO TEM IPv6 CONFIGURADO?:</strong><br />
Se seu servidor não tiver IPv6 configurado recomendo que desative o ipv6 no bind (o que é triste) mas se não tem&#8230; </p>
<pre class="remontti-code"># vim /etc/default/bind9</pre>
<p>em <strong>OPTIONS=&#8221;-u bind&#8221;</strong> adicione um -4 <strong>OPTIONS=&#8221;<font color=red>-4</font> -u bind&#8221;</strong></p>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>listen-on-v6 { any; };<br />
#para:<br />
listen-on-v6 { none; };</p>
<p><strong>FIM! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>
<p>Gostou? Deixe seu comentário ficarei feliz em saber que lhe ajudei, e se tiver qualquer pergunta deixe-a também, se preferir acesse o menu <a href="https://blog.remontti.com.br/meucontato">Consultoria</a> lá você encontra meios de falar comigo!</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong><br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Abraço!</p>
<p>Fonte: <a href="https://ftp.isc.org/isc/bind/9.9.5/doc/arm/">https://ftp.isc.org/isc/bind/9.9.5/doc/arm/</a><br />
<a href="http://www.zytrax.com/books/dns/ch7/statements.html" rel="noopener noreferrer" target="_blank">http://www.zytrax.com/books/dns/ch7/statements.html</a></p>
<p><strong>EXEMPLOS EXTRAS:</strong><br />
Delegando um bloco menor ex /26 para outros servidor.</p>
<p>Entenda melhor. Assista: https://www.youtube.com/watch?v=VIa1dHtmQ4U (~20min)</p>
<p>Base: rfc2317:</p>
<pre class="remontti-code">
$ORIGIN 2.0.192.in-addr.arpa.
@       IN      SOA     my-ns.my.domain. hostmaster.my.domain. (...)
;...
;  &lt;&lt;0-127&gt;&gt; /25
0/25            NS      ns.A.domain.
0/25            NS      some.other.name.server.
;
1               CNAME   1.0/25.2.0.192.in-addr.arpa.
2               CNAME   2.0/25.2.0.192.in-addr.arpa.
3               CNAME   3.0/25.2.0.192.in-addr.arpa.
;
;  &lt;&lt;128-191&gt;&gt; /26
128/26          NS      ns.B.domain.
128/26          NS      some.other.name.server.too.
;
129             CNAME   129.128/26.2.0.192.in-addr.arpa.
130             CNAME   130.128/26.2.0.192.in-addr.arpa.
131             CNAME   131.128/26.2.0.192.in-addr.arpa.
;
;  &lt;&lt;192-255&gt;&gt; /26
192/26          NS      ns.C.domain.
192/26          NS      some.other.third.name.server.
;
193             CNAME   193.192/26.2.0.192.in-addr.arpa.
194             CNAME   194.192/26.2.0.192.in-addr.arpa.
195             CNAME   195.192/26.2.0.192.in-addr.arpa.

$ORIGIN 0/25.2.0.192.in-addr.arpa.
@       IN      SOA     ns.A.domain. hostmaster.A.domain. (...)
@               NS      ns.A.domain.
@               NS      some.other.name.server.
;
1               PTR     host1.A.domain.
2               PTR     host2.A.domain.
3               PTR     host3.A.domain.
</pre>
<p>O post <a href="https://blog.remontti.com.br/1397">Servidor DNS Recursivo, Autoritativo e Reverso com Bind9 (IPv4+IPv6) + Fail2ban (Debian8/9)  [Descontinuado]</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/1397/feed</wfw:commentRss>
			<slash:comments>160</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do No-IP no Debian</title>
		<link>https://blog.remontti.com.br/2358</link>
					<comments>https://blog.remontti.com.br/2358#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Thu, 15 Feb 2018 20:17:17 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ddns]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian9]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[no-ip]]></category>
		<category><![CDATA[noip]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=2358</guid>

					<description><![CDATA[<p>Crie um nome de host fácil para não precisar lembrar ou estar anotando seu endereço IP(Dinâmico/ou Não) e nunca perca sua conexão novamente. O que é? No-IP pega o seu endereço IP dinâmico e&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2358">Instalação do No-IP no Debian</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Crie um nome de host fácil para não precisar lembrar ou estar anotando seu endereço IP(Dinâmico/ou Não) e nunca perca sua conexão novamente.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/noip.png" alt="" width="900" height="428" class="aligncenter size-full wp-image-2361" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/noip.png 900w, https://blog.remontti.com.br/wp-content/uploads/2018/02/noip-300x143.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/noip-768x365.png 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></p>
<p><strong>O que é?</strong><br />
No-IP pega o seu endereço IP dinâmico e aponta para um nome de host estático ou subdomínio. Com o nosso Cliente de Atualização Dinâmica Gratuito instalado no local, o No-IP verifica por mudanças no endereço IP regularmente. Quando o seu endereço IP muda, nós atualizamos o seu nome de host com o endereço IP correto. Sem a necessidade de inatividade.</p>
<p>Primeiramente acesse o <a href="https://www.noip.com" rel="noopener" target="_blank">https://www.noip.com</a> para fazer seu cadastro.<br />
<div id="attachment_2367" style="width: 310px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-1.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2367" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-1-300x160.png" alt="" width="300" height="160" class="size-medium wp-image-2367" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-1-300x160.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-1-768x408.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-1-1024x544.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-1.png 1326w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-2367" class="wp-caption-text">Inscrever-se</p></div><br />
<div id="attachment_2368" style="width: 310px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-2.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2368" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-2-300x160.png" alt="" width="300" height="160" class="size-medium wp-image-2368" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-2-300x160.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-2-768x408.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-2-1024x544.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-2.png 1326w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-2368" class="wp-caption-text">Crie Sua Conta No-IP</p></div></p>
<p>Depois de criar a conta acesse o sua conta <a href="https://my.noip.com" rel="noopener" target="_blank">https://my.noip.com</a><br />
<div id="attachment_2370" style="width: 310px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-5.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2370" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-5-300x160.png" alt="" width="300" height="160" class="size-medium wp-image-2370" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-5-300x160.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-5-768x409.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-5-1024x545.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-5.png 1326w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-2370" class="wp-caption-text">Create Hostname</p></div></p>
<p>De um nome para seu host e escolha um domínio para o mesmo, selecione tipo de Registro DNS Host (A) e clique em Create Hostname<br />
<div id="attachment_2371" style="width: 310px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-6.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2371" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-6-300x186.png" alt="" width="300" height="186" class="size-medium wp-image-2371" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-6-300x186.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-6-768x475.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-6-1024x634.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-6.png 1325w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-2371" class="wp-caption-text">Nome de Host + Domínio</p></div></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-7.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-7-300x186.png" alt="" width="300" height="186" class="alignnone size-medium wp-image-2372" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-7-300x186.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-7-768x475.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-7-1024x634.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-7.png 1325w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Cadastro feito, host+dominio criado vamos ao nosso servidor.</p>
<pre class="remontti-code"># cd /tmp/
# wget https://www.noip.com/client/linux/noip-duc-linux.tar.gz
# tar xf noip-duc-linux.tar.gz
# cd noip-2*
# make install</pre>
<p>Informe seus dados:</p>
<p>Please enter the login/email string for no-ip.com  <strong>seuemail@gmail.com</strong><br />
Please enter the password for user &#8216;seuemail@gmail.com&#8217;  <strong>**********</strong></p>
<p>Only one host [<strong>remontti.ddns.net</strong>] is registered to this account.<br />
It will be used.<br />
Please enter an update interval:[30]  <strong>15</strong><br />
Do you wish to run something at successful update?[N] (y/N)  <strong>N</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-8.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-8-300x172.png" alt="" width="300" height="172" class="alignnone size-medium wp-image-2362" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-8-300x172.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-8-768x441.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-8-1024x588.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-8.png 1078w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<pre class="remontti-code"># noip2</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-9.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-9-300x48.png" alt="" width="300" height="48" class="alignnone size-medium wp-image-2363" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-9-300x48.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-9-768x122.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-9.png 787w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>o Debian 9 o arquivo rc.local usado para adicionar comandos na inicialização está desativado por padrão. Vamos precisar cria-lo.</p>
<pre class="remontti-code"># vim /etc/rc.local</pre>
<pre class="remontti-code">
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will &quot;exit 0&quot; on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Carrega No-IP
/usr/local/bin/noip2

exit 0</pre>
<pre class="remontti-code"># chmod +x /etc/rc.local</pre>
<pre class="remontti-code"># reboot</pre>
<p>No meu caso ip do meu servidor é válido, é bem provável que vocês esteja usando no-ip devido a um NAT, mas queria apenas demonstrar que eles se atualizou ao painel do sistema com o IP.</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-10.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-10-300x111.png" alt="" width="300" height="111" class="alignnone size-medium wp-image-2364" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-10-300x111.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-10-768x284.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-10.png 999w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-11.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-11-300x186.png" alt="" width="300" height="186" class="alignnone size-medium wp-image-2365" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-11-300x186.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-11-768x475.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-11-1024x634.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-11.png 1325w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Prontinho, agora você pode acessar seu servidor com um nome. </p>
<p>Exemplo no meu servidor tem o apache rodando ao remontti.ddns.net<br />
<div id="attachment_2374" style="width: 1034px" class="wp-caption alignnone"><a href="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-12.png" data-rel="lightbox-gallery-1L0zZOxC" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2374" src="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-12-1024x464.png" alt="" width="1024" height="464" class="size-large wp-image-2374" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-12-1024x464.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-12-300x136.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-12-768x348.png 768w, https://blog.remontti.com.br/wp-content/uploads/2018/02/no-ip-linux-debian-12.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><p id="caption-attachment-2374" class="wp-caption-text">remontti.ddns.net</p></div></p>
<p>O post <a href="https://blog.remontti.com.br/2358">Instalação do No-IP no Debian</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2358/feed</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
	</channel>
</rss>
