<?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 ipv6 - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/ipv6/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/ipv6</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Tue, 10 Dec 2024 18:00:24 +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 ipv6 - Remontti</title>
	<link>https://blog.remontti.com.br/tag/ipv6</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Guia passo a passo para instalação do phpIPAM, um Software de Gerenciamento de Endereços IP</title>
		<link>https://blog.remontti.com.br/2401</link>
					<comments>https://blog.remontti.com.br/2401#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 12 Jun 2023 15:40:55 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[administração]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[aplicação]]></category>
		<category><![CDATA[Código Aberto]]></category>
		<category><![CDATA[Configuração]]></category>
		<category><![CDATA[configuração de endereços IPs]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[debain]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[documentação]]></category>
		<category><![CDATA[endereços IPs]]></category>
		<category><![CDATA[ferramenta]]></category>
		<category><![CDATA[gerenciamento]]></category>
		<category><![CDATA[gerenciamento de IP]]></category>
		<category><![CDATA[gerenciamento de rede]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[instalaçao]]></category>
		<category><![CDATA[instalação do phpIPAM]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[IPAM]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php7]]></category>
		<category><![CDATA[phpIPAM]]></category>
		<category><![CDATA[rede]]></category>
		<category><![CDATA[servidor de DHCP]]></category>
		<category><![CDATA[servidor dns]]></category>
		<category><![CDATA[Servidor WEB]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[tutorial banco de dados]]></category>
		<category><![CDATA[tutorial de configuração]]></category>
		<category><![CDATA[tutorial de gerenciamento]]></category>
		<category><![CDATA[tutorial de instalação]]></category>
		<category><![CDATA[tutorial Debian]]></category>
		<category><![CDATA[tutorial MariaDB.]]></category>
		<category><![CDATA[tutorial MySQL]]></category>
		<category><![CDATA[tutorial passo a passo]]></category>
		<category><![CDATA[tutorial phpIPAM]]></category>
		<category><![CDATA[tutorial servidor web]]></category>
		<category><![CDATA[tutorial software de gerenciamento]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=2401</guid>

					<description><![CDATA[<p>O phpIPAM é um aplicação de gerenciamento de endereço IPs de código aberto (IPAM). Seu objetivo é fornecer gerenciamento de endereços IP leve, moderno e útil. É uma aplicação baseada em php com backend&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2401">Guia passo a passo para instalação do phpIPAM, um Software de Gerenciamento de Endereços IP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><center><img fetchpriority="high" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-7493" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian-520x245.jpg 520w" sizes="(max-width: 720px) 100vw, 720px" /></center></p>
<p>O phpIPAM é um aplicação de gerenciamento de endereço IPs de código aberto (IPAM). Seu objetivo é fornecer gerenciamento de endereços IP leve, moderno e útil. É uma aplicação baseada em php com backend de banco de dados MySQL/MariaDB, usando bibliotecas jQuery, ajax e recursos HTML5 / CSS3.</p>
<p><strong><font color="red">Recomendado Debian 12 Bookworm:</font></strong><br />
1 &#8211; <a href="https://blog.remontti.com.br/7236" rel="noopener noreferrer" target="_blank">Debian 12 Bookworm / Instalação Limpa</a><br />
2.a &#8211; <a href="https://blog.remontti.com.br/7460" rel="noopener" target="_blank">Servidor WEB NGINX + PHP 8.2 + MariaDB + phpMyAdmin</a><br />
2.b &#8211; <a href="https://blog.remontti.com.br/7496" rel="noopener" target="_blank">Servidor WEB Apache2 + PHP 8.2 + MariaDB + phpMyAdmin</a><br />
<font size="2"><b><em>phpMyAdmin é opcional</em></b></font></p>
<p><strong><font color="red">Recomendado Debian 11 Bullseye:</font></strong><br />
1- <a href="https://blog.remontti.com.br/5792" rel="noopener noreferrer" target="_blank">Debian 11 Bullseye / Instalação Limpa</a><br />
2- <a href="https://blog.remontti.com.br/5893" rel="noopener noreferrer" target="_blank">Servidor WEB Apache2 + PHP7.4 + MariaDB + phpMyAdmin</a><br />
<font size="2"><b><em>phpMyAdmin é opcional</em></b></font></p>
<p><strong><font color="red">Recomendado Debian 10 Stretch:</font></strong><br />
1- <a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10 Stretch / Instalação Limpa</a><br />
2.a &#8211; <a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">Servidor WEB Apache2 + PHP7.3 + MariaDB + phpMyAdmin</a><br />
2.b &#8211; <a href="https://blog.remontti.com.br/5465" rel="noopener" target="_blank">Servidor WEB NGINX + PHP7.3 + MariaDB + phpMyAdmin</a><br />
<font size="2"><b><em>phpMyAdmin é opcional</em></b></font></p>
<p><strong><font color="red">Recomendado Debian 9 Buster:</font></strong><br />
<a href="https://blog.remontti.com.br/1152" rel="noopener noreferrer" target="_blank">Instalação Limpa Debian 9 Buster</a><br />
<a href="https://blog.remontti.com.br/2024" rel="noopener noreferrer" target="_blank">Servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin</a><br />
<font size="2"><b><em>phpMyAdmin é opcional</em></b></font></p>
<p>Após instalação do servidor WEB+MariaDB, vamos criar nossa base de dados para o phpipam</p>
<pre class="remontti-code"># mariadb -p</pre>
<pre class="remontti-code">
CREATE DATABASE phpipam;
GRANT ALL PRIVILEGES ON phpipam.* TO &#039;phpipam&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Download phpIPAM<br />
Instalação estável: (Nesta data é 1.5.2) <a href="https://github.com/phpipam/phpipam/releases" rel="noopener noreferrer" target="_blank">https://github.com/phpipam/phpipam/releases</a> </p>
<pre class="remontti-code"># cd /tmp
# wget https://github.com/phpipam/phpipam/releases/download/v1.5.2/phpipam-v1.5.2.tgz
# tar vxf phpipam-v1.5.2.tgz
# mv phpipam /var/www/html/phpipam
&lt;pre&gt;# cd /var/www/html/phpipam</pre>
<p>Agora precisamos inserir os dados para o phpipam conectar ao banco de dados. Primeiro copie config.dist.php para config.php e insira os detalhes necessários.</p>
<pre class="remontti-code"># cp config.dist.php config.php
# vim config.php</pre>
<p>Encontre a linha <em>$db['pass'] = 'phpipamadmin';</em> e altere para sua senha, caso tenha utilizado outro usuário e nome de base altere também.</p>
<pre class="remontti-code">
...
$db[&#039;host&#039;] = &quot;localhost&quot;;
$db[&#039;user&#039;] = &quot;phpipam&quot;;
$db[&#039;pass&#039;] = &quot;SUA_SENHA&quot;;
$db[&#039;name&#039;] = &quot;phpipam&quot;;
...</pre>
<p>Se estas utilizando debian 12, sua versão do php é a 8.2 que na versão atual 1.5.2 ainda parece não ter sido testado, para resolver entre no diretório do phpipam e adicione <strong>$allow_untested_php_versions=true;</strong> ao final do arquivo:</p>
<pre class="remontti-code"># cd /var/www/html/phpipam
# echo &#039;$allow_untested_php_versions=true;&#039; &gt;&gt; config.php</pre>
<p>Além disso, nós extraímos o diretório do phpipam fora pasta raiz (/var/www/html), será necessário definir isso (<em>define('BASE', "/");</em>) em config.php, se você colocou no diretório raiz ou configurou um <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">domínio virtual (recomendo)</a> para o phpipam não é necessário :</p>
<pre class="remontti-code"># vim config.php</pre>
<p>Altere :</p>
<pre class="remontti-code-plain">define(&#039;BASE&#039;, &quot;/&quot;);</pre>
<p>para:</p>
<pre class="remontti-code-plain">define(&#039;BASE&#039;, &quot;/phpipam/&quot;);</pre>
<p>Instale a extensão gmp do php que é necessária para o funcionamento do phpipam e restarte o apache ou nginx de acordo com seu servidor.</p>
<pre class="remontti-code"># apt install php-gmp -y
# systemctl restart apache2
ou
# systemctl restart nginx</pre>
<p>Agora acesse seu servidor em seu navegado: http://ip-server.ou.dominio/phpipam/</p>
<p>Clique em <strong>[New phpipam installation]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1.png" data-rel="lightbox-gallery-uSpXYhRo" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1.png" alt="" width="1280" height="709" class="alignnone size-full wp-image-7482" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_1-768x425.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Clique em <strong>[Automatic database installation]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2.png" data-rel="lightbox-gallery-uSpXYhRo" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2.png" alt="" width="1280" height="832" class="alignnone size-full wp-image-7483" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2-300x195.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2-1024x666.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_2-768x499.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Entre com seu usuario: phpipam e senha senha de conexão do banco de dados (SUA_SENHA), clique em [Show advanced options], e <strong>DESMARQUE</strong> as opções: <strong>Create new database</strong> e <strong>Set permissions to tables</strong> e após em <strong>[Install phpipam database]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3.png" data-rel="lightbox-gallery-uSpXYhRo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3.png" alt="" width="1280" height="878" class="alignnone size-full wp-image-7484" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3-300x206.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3-1024x702.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_3-768x527.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Uma mensagem "<strong>Database installed successfully!</strong>" será exibida, informado que o banco de dados foi criado com sucesso. Clique em <strong>[Continue]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4.png" data-rel="lightbox-gallery-uSpXYhRo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4.png" alt="" width="1280" height="940" class="alignnone size-full wp-image-7485" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4-300x220.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4-1024x752.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_4-768x564.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a>  </p>
<p>Defina a senha do usuário admin, e clique em <strong>[Save settings]</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5.png" data-rel="lightbox-gallery-uSpXYhRo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5.png" alt="" width="1280" height="709" class="alignnone size-full wp-image-7486" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_5-768x425.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Uma mensagem <strong>"Settings updated, installation complete!"</strong> informado que a instalação foi completada! Clique em [<strong>Procced to login</strong>]<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6.png" data-rel="lightbox-gallery-uSpXYhRo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6.png" alt="" width="1280" height="798" class="alignnone size-full wp-image-7487" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6-300x187.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6-1024x638.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_6-768x479.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Entre com o usuário admin e sua senha:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7.png" data-rel="lightbox-gallery-uSpXYhRo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7.png" alt="" width="1280" height="709" class="alignnone size-full wp-image-7488" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7-300x166.png 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7-1024x567.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_7-768x425.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Prontinho para seu uso!<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8.png" data-rel="lightbox-gallery-uSpXYhRo" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8.png" alt="" width="1280" height="1387" class="alignnone size-full wp-image-7489" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8.png 1280w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8-277x300.png 277w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8-945x1024.png 945w, https://blog.remontti.com.br/wp-content/uploads/2018/05/phpipam_debian_12_8-768x832.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></a></p>
<p>Gostou?</p>
<p><strong>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!</strong></p>
<p><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/2401">Guia passo a passo para instalação do phpIPAM, um Software de Gerenciamento de Endereços IP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2401/feed</wfw:commentRss>
			<slash:comments>40</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação do FRRouting (FRR) &#8211; Roteamento dinâmico no seu linux +Bônus iBGP</title>
		<link>https://blog.remontti.com.br/4771</link>
					<comments>https://blog.remontti.com.br/4771#respond</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sun, 20 Sep 2020 18:20:40 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[babel]]></category>
		<category><![CDATA[bgp]]></category>
		<category><![CDATA[frr]]></category>
		<category><![CDATA[frrouting]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[ospf]]></category>
		<category><![CDATA[ospf6]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[routing]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=4771</guid>

					<description><![CDATA[<p>FRRouting (FRR) é um conjunto de protocolos de roteamento IP para plataformas Linux e Unix que inclui daemons de protocolo para BGP, IS-IS, LDP, OSPF, PIM e RIP. A integração perfeita do FRR com&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/4771">Instalação do FRRouting (FRR) &#8211; Roteamento dinâmico no seu linux +Bônus iBGP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://frrouting.org/" target="_blank" rel="noopener noreferrer">FRRouting</a> (FRR) é um conjunto de protocolos de roteamento IP para plataformas Linux e Unix que inclui daemons de protocolo para BGP, IS-IS, LDP, OSPF, PIM e RIP.</p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-remontti.png" alt="" width="700" height="274" class="alignnone size-full wp-image-5085" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-remontti.png 700w, https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-remontti-300x117.png 300w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>A integração perfeita do FRR com as pilhas de rede IP Linux/Unix nativas o torna aplicável a uma ampla variedade de casos de uso.</p>
<p>FRR tem suas raízes no projeto Quagga (Fork do Quagga). Na verdade, ele foi iniciado por muitos desenvolvedores de Quagga de longa data que combinaram seus esforços para melhorar a base bem estabelecida do Quagga para criar a melhor pilha de protocolo de roteamento disponível.</p>
<p>Uma ótima apresentação foi feita pelo <a href="https://www.linkedin.com/in/jrcorazza/" target="_blank" rel="noopener noreferrer">Junior Corazza</a>. no GTER 46.<br />
<strong><a href="https://www.youtube.com/watch?v=4-77r2PGKB4" target="_blank" rel="noopener noreferrer">BSDRP &#8211; Uma opção de softrouter com FRR</a></strong><br />
<iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/4-77r2PGKB4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="allowfullscreen"></iframe><br />
Apresentação: <a href="ftp://ftp.registro.br/pub/gter/gter46/11-BSDRP.pdf" target="_blank" rel="noopener noreferrer">ftp://ftp.registro.br/pub/gter/gter46/11-BSDRP.pdf</a></p>
<p><strong>Requesitos</strong>:<br />
<a href="https://blog.remontti.com.br/2966" target="_blank" rel="noopener noreferrer">Debian 10 Stretch – Instalação Limpa</a><br />
<a href="https://blog.remontti.com.br/5792" target="_blank" rel="noopener noreferrer">Debian 11 Bullseye – Instalação Limpa</a></p>
<p>Antes de começar não esqueça de virar root da forma correta e atualizar os pacotes, e instalar alguns pacotes que serão necessários.</p>
<pre class="remontti-code"># su -
# apt update
# apt upgrade
# apt install curl apt-transport-https gnupg2 lsb-release tree net-tools</pre>
<h4>Instalação do Free Range Routing</h4>
<p>Pacotes presente do FRR no repositório do Debian 10 estão na versão 6.x.x, e Debian 11 na 7.5.x vou ir além e usar o repositório mais atualizado do FRR disponíveis em <a href="https://deb.frrouting.org" target="_blank" rel="noopener noreferrer">https://deb.frrouting.org</a>, mas fica a seu critério se desejar usar o repositório &#8220;default&#8221;.</p>
<p>Para usar pacotes do <a href="https://deb.frrouting.org/" rel="noopener" target="_blank">repositório FFR</a> faça:</p>
<pre class="remontti-code"># curl -s https://deb.frrouting.org/frr/keys.asc | apt-key add -</pre>
<p>Iremos usar a versão estável oficial mais recente &#8220;<strong>frr-stable</strong>&#8221; na variável &#8220;FRRVER&#8221;, mas é possíveis para também: <strong>frr-6 frr-7 frr-8 frr-stable</strong>.</p>
<pre class="remontti-code"># FRRVER=&quot;frr-stable&quot;
# echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER | tee -a /etc/apt/sources.list.d/frr.list
# apt update</pre>
<p>Podemos entrar agora em nosso respositório varios pacores FRR:</p>
<pre class="remontti-code"># apt search frr</pre>
<p><strong>frr</strong> &#8211; FRRouting suite<br />
<strong>frr-doc</strong> &#8211; Manual<br />
<strong>frr-rpki-rtrlib</strong> &#8211; Suporte BGP RPKI<br />
<strong>frr-rpki-rtrlib-dbgsym</strong> &#8211; Debug do pacote frr-rpki-rtrlib<br />
<strong>frr-snmp </strong>&#8211; Suporte SNMP<br />
<strong>frr-snmp-dbgsym</strong> &#8211; Debug do pacote frr-snmp<br />
<strong>frr-pythontools</strong> &#8211; Python tools</p>
<p>Instalarei alguns mas fique a seu critério/necessidade.</p>
<pre class="remontti-code"># apt install frr frr-doc frr-pythontools frr-rpki-rtrlib frr-snmp</pre>
<p>Após instalação o diretorio /etc/ffr/ será criado juntamente com seus arquivos de configuração. Arquitetura do diretório:</p>
<pre class="remontti-code"># tree /etc/frr/</pre>
<pre class="remontti-code-plain">/etc/frr/
├── daemons
├── frr.conf
├── support_bundle_commands.conf
└── vtysh.conf</pre>
<p>Como de costume vamos fazer um backup dos arquivos originais caso cometermos alguma &#8220;cagada&#8221; <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;" /></p>
<pre class="remontti-code"># mkdir /etc/frr/backups
# cp /etc/frr/daemons /etc/frr/backups/
# cp /etc/frr/frr.conf /etc/frr/backups/
# cp /etc/frr/vtysh.conf /etc/frr/backups/
# cp /etc/frr/support_bundle_commands.conf /etc/frr/backups/</pre>
<p>Antes de mais nada vamos entender um pouco como a aplicação funciona.</p>
<p>No FRR o roteamento é diferente de um roteamento tradicional, ele tem um conjunto de daemons que trabalham juntos para construir a tabela de roteamento.</p>
<p>Cada protocolo principal é implementado em seu próprio daemon, e esses daemons se comunicam com um daemon intermediário (zebra), que é responsável por coordenar as decisões de roteamento.</p>
<p>Esta arquitetura permite alta resiliência, uma vez que um erro, travamento ou exploração em um daemon de protocolo geralmente não afetará os outros. Também é flexível e extensível, uma vez que a modularidade torna mais fácil implementar novos protocolos e vinculá-los ao conjunto. Além disso, cada daemon implementa um sistema de plug-in permitindo que novas funcionalidades sejam carregadas em tempo de execução.</p>
<p>Ilustração da arquitetura em grande escala:</p>
<pre class="remontti-code-plain">+----+  +----+  +-----+  +----+  +----+  +----+  +-----+
|bgpd|  |ripd|  |ospfd|  |ldpd|  |pbrd|  |pimd|  |.....|
+----+  +----+  +-----+  +----+  +----+  +----+  +-----+
     |       |        |       |       |       |        |
+----v-------v--------v-------v-------v-------v--------v
|                                                      |
|                         Zebra                        |
|                                                      |
+------------------------------------------------------+
       |                    |                   |
       |                    |                   |
+------v------+   +---------v--------+   +------v------+
|             |   |                  |   |             |
| *NIX Kernel |   | Remote dataplane |   | ........... |
|             |   |                  |   |             |
+-------------+   +------------------+   +-------------+</pre>
<p>Todos os daemons FRR podem ser gerenciados por meio de um único shell de interface de usuário integrado chamado vtysh. O vtysh se conecta a cada daemon através de um soquete de domínio UNIX e então funciona como um proxy para a entrada do usuário. Além de um front-end unificado, o vtysh também oferece a capacidade de configurar todos os daemons usando um único arquivo de configuração por meio do modo de configuração integrado. Isso evita a sobrecarga de manter um arquivo de configuração separado para cada daemon.</p>
<p>Você encontra mais informações em: <a href="http://docs.frrouting.org/en/latest/overview.html" target="_blank" rel="noopener noreferrer">http://docs.frrouting.org/en/latest/overview.html</a></p>
<h4>Módulos do kernel</h4>
<p>Na <a href="http://docs.frrouting.org/en/latest/installation.html#linux-notes" target="_blank" rel="noopener noreferrer">documentação oficial de instalação</a> é recomendado fazer alguns ajustes nas configurações de sysctl do Linux, caso para sua realidade não seja necessário pule esta parte.</p>
<p>Os itens a seguir são definidos para habilitar o encaminhamento de IP no kernel:</p>
<p><strong>Encaminhamento IPv4 e IPv6</strong></p>
<pre class="remontti-code"># vim /etc/sysctl.conf</pre>
<p>Descomente:</p>
<pre class="remontti-code">net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1</pre>
<p><strong>Encaminhamento MPLS</strong> <em>(Ative se achar necessário)</em><br />
O suporte MPLS básico foi introduzido no kernel na versão 4.1 e recursos adicionais foram introduzidos na 4.3 e 4.5.</p>
<pre class="remontti-code"># vim /etc/modules-load.d/modules.conf</pre>
<p>Adicione</p>
<pre class="remontti-code"># Load MPLS Kernel Modules
mpls_router
mpls_iptunnel</pre>
<p>Veja quais o(s) nome(s) de sua(s) interface(s) e adicione:</p>
<pre class="remontti-code"># ip -br link |grep -v lo |awk &#039;{print $1}&#039;
# vim /etc/sysctl.conf</pre>
<p>Adicione ao final do arquivo (Anteção para o nome das interfaces: net.mpls.conf.[INTERFACE].input)</p>
<pre class="remontti-code"># Habilite o processamento de rótulo MPLS em todas as interfaces
net.mpls.conf.enp0s3.input=1
net.mpls.platform_labels=100000</pre>
<p><strong>Encaminhamento VRF </strong> (Ative se achar necessário)<br />
O seguinte impacta como os soquetes BGP TCP são gerenciados em VRFs:</p>
<pre class="remontti-code">net.ipv4.tcp_l3mdev_accept=0</pre>
<p>Com essa configuração, um soquete BGP TCP é aberto por VRF. Essa configuração garante que outros serviços TCP, como SSH, fornecidos para fins não VRF, sejam bloqueados nas interfaces Linux associadas a VRF.</p>
<pre class="remontti-code">net.ipv4.tcp_l3mdev_accept=1</pre>
<p>Reinicie seu servidor para carregar as novas configurações de kernel.</p>
<pre class="remontti-code"># reboot</pre>
<p>Acesse novamente seu servidor, não esqueça de virar root com o comando &#8220;su -&#8221;</p>
<p>Após instalado o FRR não fará nada. Isso ocorre porque os daemons devem ser ativados e até o momento não temos nenhum, para ativar edite o arquivo /etc/frr/daemons e determine quais daemons serão ativados colocando um <strong>yes</strong> no daemon desejado. No meu exemplo vou ativar o bgpd qual deixarei uma &#8220;brincadeira&#8221; de exemplo ao final.</p>
<pre class="remontti-code"># vim /etc/frr/daemons</pre>
<pre class="remontti-code-plain"># Para habilitar um daemon específico, simplesmente altere o &#039;no&#039; correspondente para &#039;yes&#039;, e será necessário reiniciar o serviço.
bgpd=yes 	# BGP
ospfd=no 	# OSPFD (OSPFv2 - IPv4)
ospf6d=no 	# OSPF6D (OSPFv3 - IPv6)
ripd=no 	# RIPD (RIPv2 - IPv4)
ripngd=no 	# RIPNGD (RIPv3 - IPv6)
isisd=no 	# ISISD (IS-IS - Protocolo igp Cisco)
pimd=no 	# PIMD (PIM - Roteamento Multicast)
ldpd=no 	# LDPD (LDP - Labels MPLS para rotas igp)
nhrpd=no 	# NHRPD (NHRP - roteamento entre tuneis)
eigrpd=no 	# EIGRPD (EIGRP - protocolo igp Cisco)
babeld=no 	# BABELD (BABEL - protocolo igp dual-stack)
sharpd=no 	# SHARPD (SHARP - protocolo exemplo zclient)
pbrd=no 	# PBRD (PBR - gestao de regras para Police Based Routing)
bfdd=no 	# BFDD (BFD - protocolo de adjacencia instantanea)
fabricd=no 	# FABRICD (OpenFabric)
vrrpd=no 	# VRRPD (Virtual Router Redundancy Protocol Deamon)

# Como o nome diz, isso faz com que o VTYSH aplique a configuração ao iniciar aos daemons. 
vtysh_enable=yes 

# O próximo conjunto de linhas controla quais opções são passadas aos daemons quando iniciados. 
zebra_options=&quot;  -A 127.0.0.1 -s 90000000&quot;
bgpd_options=&quot;   -A 127.0.0.1&quot;
ospfd_options=&quot;  -A 127.0.0.1&quot;
ospf6d_options=&quot; -A ::1&quot;
ripd_options=&quot;   -A 127.0.0.1&quot;
ripngd_options=&quot; -A ::1&quot;
isisd_options=&quot;  -A 127.0.0.1&quot;
pimd_options=&quot;   -A 127.0.0.1&quot;
ldpd_options=&quot;   -A 127.0.0.1&quot;
nhrpd_options=&quot;  -A 127.0.0.1&quot;
eigrpd_options=&quot; -A 127.0.0.1&quot;
babeld_options=&quot; -A 127.0.0.1&quot;
sharpd_options=&quot; -A 127.0.0.1&quot;
pbrd_options=&quot;   -A 127.0.0.1&quot;
staticd_options=&quot;-A 127.0.0.1&quot;
bfdd_options=&quot;   -A 127.0.0.1&quot;
fabricd_options=&quot;-A 127.0.0.1&quot;
vrrpd_options=&quot;  -A 127.0.0.1&quot;</pre>
<p>Como este tutorial é um laboratório irei ativar os daemons <strong>OSPFv2, OSPFv3, BABEL e BGP</strong>, (em produção ative somente o necessário) pois em seguida teremos alguns exemplos contribuídos pelo <a href="http://www.patrickbrandao.com/" target="_blank" rel="noopener noreferrer">Patrick Brandão</a>.</p>
<p>Alterações feitas no /etc/frr/daemons vamos reiniciar o FRR</p>
<pre class="remontti-code"># systemctl restart frr</pre>
<p>Verifique se o mesmo está ok</p>
<pre class="remontti-code"># systemctl status frr</pre>
<pre class="remontti-code-plain">● frr.service - FRRouting
   Loaded: loaded (/lib/systemd/system/frr.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-08-11 14:00:29 -03; 41s ago
     Docs: https://frrouting.readthedocs.io/en/latest/setup.html
  Process: 665 ExecStart=/usr/lib/frr/frrinit.sh start (code=exited, status=0/SUCCESS)
   Status: &quot;FRR Operational&quot;
    Tasks: 18 (limit: 1150)
   Memory: 24.2M
   CGroup: /system.slice/frr.service
           ├─674 /usr/lib/frr/watchfrr -d -F traditional zebra bgpd ospfd ospf6d babeld staticd
           ├─699 /usr/lib/frr/zebra -d -F traditional -A 127.0.0.1 -s 90000000
           ├─704 /usr/lib/frr/bgpd -d -F traditional -A 127.0.0.1
           ├─712 /usr/lib/frr/ospfd -d -F traditional -A 127.0.0.1
           ├─716 /usr/lib/frr/ospf6d -d -F traditional -A ::1
           ├─720 /usr/lib/frr/babeld -d -F traditional -A 127.0.0.1
           └─724 /usr/lib/frr/staticd -d -F traditional -A 127.0.0.1

ago 11 14:00:29 frr zebra[699]: client 47 says hello and bids fair to announce only static routes vrf=0
set 23 15:44:11 accel watchfrr[1220]: zebra state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: bgpd state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: ospfd state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: ospf6d state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: staticd state -&gt; up : connect succeeded
set 23 15:44:11 accel watchfrr[1220]: all daemons up, doing startup-complete notify
ago 11 14:00:29 frr frrinit.sh[665]: Started watchfrr.
ago 11 14:00:29 frr systemd[1]: Started FRRouting.</pre>
<p>Pode também conferir se o serviço de cada daemons ativos foi iniciado:</p>
<pre class="remontti-code"># netstat -putan</pre>
<pre class="remontti-code-plain">Proto Recv-Q Send-Q Endereço Local          Endereço Remoto         Estado      PID/Program name    
tcp        0      0 127.0.0.1:2601          0.0.0.0:*               OUÇA       699/zebra           
tcp        0      0 127.0.0.1:2604          0.0.0.0:*               OUÇA       712/ospfd           
tcp        0      0 127.0.0.1:2605          0.0.0.0:*               OUÇA       704/bgpd            
tcp        0      0 127.0.0.1:2616          0.0.0.0:*               OUÇA       724/staticd         
tcp6       0      0 ::1:2606                :::*                    OUÇA       716/ospf6d</pre>
<p>Lista completa das portas:</p>
<pre class="remontti-code-plain">zebrasrv      2600/tcp    # zebra service
zebra         2601/tcp    # zebra vty
ripd          2602/tcp    # RIPd vty
ripngd        2603/tcp    # RIPngd vty
ospfd         2604/tcp    # OSPFd vty
bgpd          2605/tcp    # BGPd vty
ospf6d        2606/tcp    # OSPF6d vty
ospfapi       2607/tcp    # ospfapi
isisd         2608/tcp    # ISISd vty
babeld        2609/tcp    # BABELd vty
nhrpd         2610/tcp    # nhrpd vty
pimd          2611/tcp    # PIMd vty
ldpd          2612/tcp    # LDPd vty
eigprd        2613/tcp    # EIGRPd vty
bfdd          2617/tcp    # bfdd vty
fabricd       2618/tcp    # fabricd vty
vrrpd         2619/tcp    # vrrpd vty</pre>
<h4>Entrado no Shell VTY</h4>
<p>Vtysh fornece um frontend combinado para todos os daemons FRR em uma única sessão combinada.</p>
<pre class="remontti-code"># vtysh</pre>
<pre class="remontti-code-plain">Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

frr# show running-config
Building configuration...

Current configuration:
!
frr version 7.3.1
frr defaults traditional
hostname frr
log syslog informational
service integrated-vtysh-config
!
line vty
!
end
frr# exit</pre>
<p>vtysh tem um arquivo de configuração /etc/frr/vtysh.conf que contém opções que controlam o comportamento da autenticação. Este arquivo também não será escrito por comandos de salvamento de configuração, ele deve ser atualizado manualmente.</p>
<p>Isso também significa que os comandos hostname e (que têm efeito para vtysh) precisam ser atualizados manualmente no vtysh.conf</p>
<p>Todas as configurações salvas (<strong>write</strong>) no terminal do vtysh são escritas no arquivo <strong>frr.conf</strong>. </p>
<p>A documentação também ressalta que é possível salvar os arquivos separados por daemons, para alterar esse comportamento é precisamos editar o /etc/frr/vtysh.conf <em>(Fica a seu critério também, eu particularmente não altero)</em></p>
<pre class="remontti-code"># vim /etc/frr/vtysh.conf</pre>
<p>Estão o que isso faz?<br />
<strong>service integrated-vtysh-config </strong><br />
&#8211; O vtysh sempre salvará no frr.conf.</p>
<p><strong>no service integrated-vtysh-config </strong><br />
&#8211; vtysh nunca vai salvar no frr.conf, em vez disso, ele pedirá aos daemons que escrevam/crie seus arquivos de configuração individuais.</p>
<p>Se fizer a altração reinicie a aplicação</p>
<pre class="remontti-code"># systemctl restart frr</pre>
<p>Mais sobre vtysh: <a href="http://docs.frrouting.org/en/latest/vtysh.html" target="_blank" rel="noopener noreferrer">http://docs.frrouting.org/en/latest/vtysh.html</a></p>
<p>Acessamos o terminal do vtysh e usamos o comando write (salvar).</p>
<pre class="remontti-code"># vtysh</pre>
<pre class="remontti-code-plain">Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

frr# write 
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Warning: /etc/frr/frr.conf.sav unlink failed
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
frr# exit</pre>
<p>Na próxima vez que salvar (write) um &#8220;____.<strong>conf.sav</strong>&#8221; será criado também preservando a configuração posterior.</p>
<p>Você também pode acessar o terminal vtysh (zebra) por telnet, lembra que vimos as porta que cada serviço estava rodando, logo o zebra roda na porta 2601(tcp), porém responde apenas localmente (localhost/127.0.0.1) caso você deseje abrir esse acesso externamente (restringi-lo por firewall o acesso a determinados IPs é uma boa prática) faça e alteração no arquivo daemons.</p>
<pre class="remontti-code"># vim /etc/frr/daemons</pre>
<p>Encontre:</p>
<pre class="remontti-code">zebra_options=&quot;  -A 127.0.0.1 -s 90000000&quot;</pre>
<p>E altere por:</p>
<pre class="remontti-code">zebra_options=&quot;  -A 0.0.0.0 -s 90000000&quot;</pre>
<p>Se você desejar alterar esta porta basta incluir &#8220;-P porta&#8221;</p>
<pre class="remontti-code">zebra_options=&quot;  -A 0.0.0.0 -s 90000000 -P 40023&quot;</pre>
<p>Salve e reinicie o FRR</p>
<pre class="remontti-code"># systemctl restart frr</pre>
<p>Porém se você tentar acessar mesmo que localmente não será possível, pois uma senha não foi definida.</p>
<pre class="remontti-code-plain"># telnet localhost 40023
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is &#039;^]&#039;.
Vty password is not set.
Connection closed by foreign host.</pre>
<p>Para configura as senha de login e de enable:</p>
<pre class="remontti-code"># vtysh</pre>
<pre class="remontti-code"># configure terminal 
# password senha_de_login
# enable password senha_para_enable
# service password-encryption
# line vty 
# login 
# end 
# write
# exit</pre>
<p>Ex.:</p>
<pre class="remontti-code-plain">frr# configure terminal 
frr(config)# password remontti
frr(config)# enable password remontti
frr(config)# service password-encryption
frr(config)# line vty 
frr(config-line)# login 
frr(config-line)# end 
frr# write 
Note: this version of vtysh never writes vtysh.conf
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
frr# exit</pre>
<p>Faça um teste localmente ou externamente caso tenha liberado o acesso:</p>
<pre class="remontti-code"># telnet localhost 40023</pre>
<pre class="remontti-code-plain">Trying 127.0.0.1...
Connected to localhost.
Escape character is &#039;^]&#039;.

Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

User Access Verification

Password: 
frr&gt; enable 
Password: 
frr# exit</pre>
<p>Por mais inseguro que seja o uso do telnet, em alguns casos é comum o acesso de servidores Looking Glass publicamente. Para tornar o acesso telnet público (não vai exigir senha) apenas leitura, basta remove a senha. (Ainda assim é possível ter poderes com em enable+senha)</p>
<p>Removendo senha:</p>
<pre class="remontti-code"># configure terminal
# no password
# line vty
# no login
# end
# write
# exit
</pre>
<pre class="remontti-code-plain">Hello, this is FRRouting (version 7.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

frr# configure terminal
frr(config)# no password
Please be aware that removing the password is a security risk and you should think twice about this command.
frr(config)# line vty
frr(config-line)# no login
frr(config-line)# end
frr# write 
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
frr# exit</pre>
<h4>Zerando as configurações</h4>
<p>Caso você queira começar tudo do zero, basta remover todos os .conf e copiar os arquivos originais que estão na pasta backup, e dar suas devidas permissões!<br />
Ex.:</p>
<pre class="remontti-code"># rm /etc/frr/*.conf
# rm /etc/frr/*.sav
# rm /etc/frr/daemons
# cp /etc/frr/backups/* /etc/frr/
# chown frr. /etc/frr/ -R</pre>
<h3>Modelos de configurações:</h3>
<p>Alguns exemplos de configurações para os daemons podem ser encontrados em:</p>
<pre class="remontti-code-plain"># tree /usr/share/doc/frr/examples/
├── babeld.conf.sample
├── bfdd.conf.sample
├── bgpd.conf.sample
├── bgpd.conf.sample2
├── bgpd.conf.vnc.sample
├── eigrpd.conf.sample
├── isisd.conf.sample
├── ldpd.conf.sample
├── ospf6d.conf.sample
├── ospfd.conf.sample
├── pbrd.conf.sample
├── pimd.conf.sample
├── ripd.conf.sample
├── ripngd.conf.sample
├── staticd.conf.sample
├── vtysh.conf.sample
└── zebra.conf.sample</pre>
<p>Em <a href="http://docs.frrouting.org/en/latest/" rel="noopener noreferrer" target="_blank">http://docs.frrouting.org/en/latest/</a> você encontra uma ampla documentação com muitos exemplos. </p>
<h4>Bônus iBGP</h4>
<p>Vou deixar aqui um modelo simples iBGP entre um servidor Linux vs Mikrotik.<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-bgp-mikrotik-1.png" alt="" width="706" height="261" class="alignnone size-full wp-image-5076" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-bgp-mikrotik-1.png 706w, https://blog.remontti.com.br/wp-content/uploads/2020/09/frr-bgp-mikrotik-1-300x111.png 300w" sizes="auto, (max-width: 706px) 100vw, 706px" /></p>
<p>Exemplo para iBGP para um DNS Anycast distribuído, usando os IPs do DNS Google, <strong>mas não estou incentivando a fazer isso</strong> é apenas um exemplo! </p>
<p><strong>Configuração Linux DNS</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/09/a.png" alt="" width="225" height="121" class="alignnone size-full wp-image-5090" /></p>
<pre class="remontti-code"># vtysh</pre>
<p>Nesta configuração vamos adicionar os IPs de loopbacks em seguida fechar os peers IPv4 e IPv6, e finalizando configurando os filtros para receber rota default (Logo no RouterOS será necessário envia) e ensinar apenas as IPs de lo. Este é apenas um exemplo para você começar a brincar e estudar mais sobre o assunto.</p>
<pre class="remontti-code">configure terminal
!
interface lo
 ip address 8.8.8.8/32
 ipv6 address 2001:4860:4860::8888/128
!
router bgp 65530
 bgp router-id 10.1.0.2
 neighbor 10.1.0.1 remote-as 65530
 neighbor 10.1.0.1 description &quot;iBGP_DNS_IPv4&quot;
 neighbor 2001:db8:1::1 remote-as 65530
 neighbor 2001:db8:1::1 description &quot;iBGP_DNS_IPv6&quot;
 !
 address-family ipv4 unicast
  redistribute kernel
  redistribute connected
  redistribute static
  neighbor 10.1.0.1 prefix-list RR-IPV4-IN in
  neighbor 10.1.0.1 prefix-list RR-IPV4-OUT out
 exit-address-family
 !
 address-family ipv6 unicast
  redistribute kernel
  redistribute connected
  redistribute static
  neighbor 2001:db8:1::1 activate
  neighbor 2001:db8:1::1 prefix-list RR-IPV6-IN in
  neighbor 2001:db8:1::1 prefix-list RR-IPV6-OUT out
 exit-address-family
!
ip prefix-list RR-IPV4-IN seq 5 permit 0.0.0.0/0
ip prefix-list RR-IPV4-OUT seq 5 permit 8.8.8.8/32
!
ipv6 prefix-list RR-IPV6-IN seq 5 permit ::/0
ipv6 prefix-list RR-IPV6-OUT seq 5 permit 2001:4860:4860::8888/128
!
line vty
!
end
write</pre>
<p><strong>Configuração no Mikrotik/RouterOS (Gateway DNS)</strong></p>
<pre class="remontti-code">/routing bgp instance
add client-to-client-reflection=no name=iBGP-DNS router-id=10.1.0.1

/routing bgp peer
add default-originate=always instance=iBGP-DNS name=DNS-FRR-IPv4 remote-address=10.1.0.2 remote-as=65530
add default-originate=always instance=iBGP-DNS name=DNS-FRR-IPv6 remote-address=2001:db8:1::2 remote-as=65530 address-families=ipv6
</pre>
<p><strong>Configuração Linux Accel-PPP</strong><br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/09/b.png" alt="" width="258" height="154" class="alignnone size-full wp-image-5089" /></p>
<pre class="remontti-code"># vtysh</pre>
<p>Nesta configuração vamos fechar os peers IPv4 e IPv6, e configurar os filtros para receber rota default (Logo no RouterOS será necessário envia) e ensinar apenas as IPs possíveis ips dinâmicos desta rede (45.0.0.0/22, 100.64.0.0/10). Lembrando que este é apenas um exemplo simples para você começar a brincar e estudar mais sobre o assunto.</p>
<pre class="remontti-code">configure terminal
!
router bgp 65530
 bgp router-id 10.1.0.2
 neighbor 10.2.0.1 remote-as 65530
 neighbor 10.2.0.1 description &quot;iBGP_ACCEL_IPv4&quot;
 neighbor 2001:db8:2::1 remote-as 65530
 neighbor 2001:db8:2::1 description &quot;iBGP_ACCEL_IPv6&quot;
 !
 address-family ipv4 unicast
  redistribute kernel
  redistribute connected
  redistribute static
  neighbor 10.2.0.1 prefix-list FILTRO-RR-IPV4-IN in
  neighbor 10.2.0.1 prefix-list FILTRO-RR-IPV4-OUT out
 exit-address-family
 !
 address-family ipv6 unicast
  redistribute kernel
  redistribute connected
  redistribute static
  neighbor 2001:db8:2::1 activate
  neighbor 2001:db8:2::1 prefix-list FILTRO-RR-IPV6-IN in
  neighbor 2001:db8:2::1 prefix-list FILTRO-RR-IPV6-OUT out
 exit-address-family
!
ip prefix-list FILTRO-RR-IPV4-IN seq 5 permit 0.0.0.0/0
ip prefix-list FILTRO-RR-IPV4-OUT seq 5 permit 100.64.0.0/10 le 32
ip prefix-list FILTRO-RR-IPV4-OUT seq 10 permit 45.0.0.0/22 le 32
ip prefix-list FILTRO-RR-IPV4-OUT seq 15 permit 10.0.0.0/8 le 32
!
ipv6 prefix-list FILTRO-RR-IPV6-IN seq 5 permit ::/0
ipv6 prefix-list FILTRO-RR-IPV6-OUT seq 10 permit 2001:db8::/32 le 128
!
line vty
!
end
write</pre>
<p><strong>Configuração no Mikrotik/RouterOS (Gateway Accel-PPP)</strong></p>
<pre class="remontti-code">/routing bgp instance
add client-to-client-reflection=no name=iBGP-Accel router-id=10.2.0.2

/routing bgp peer
add default-originate=always instance=iBGP-Accel name=DNS-FRR-IPv4 remote-address=10.2.0.2 remote-as=65530
add default-originate=always instance=iBGP-Accel name=DNS-FRR-IPv6 remote-address=2001:db8:2::2 remote-as=65530 address-families=ipv6
</pre>
<p>Espero que tenha lhe instigado a buscar mais sobre o FRR.</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>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>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>Deixo aqui agradecimento ao Patrick Brandão que está elaborando um belo <a href="http://www.patrickbrandao.com/?p=artigos&#038;a=frr#frr" rel="noopener noreferrer" target="_blank">tutorial com muitos exemplos</a>. </p>
<p>Fontes:<br />
<a href="https://frrouting.org/" rel="noopener noreferrer" target="_blank">https://frrouting.org/</a><br />
<a href="http://docs.frrouting.org/" rel="noopener noreferrer" target="_blank">http://docs.frrouting.org/</a></p>
<p>O post <a href="https://blog.remontti.com.br/4771">Instalação do FRRouting (FRR) &#8211; Roteamento dinâmico no seu linux +Bônus iBGP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/4771/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</title>
		<link>https://blog.remontti.com.br/3931</link>
					<comments>https://blog.remontti.com.br/3931#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 22 Jan 2020 02:28:36 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian 10]]></category>
		<category><![CDATA[Delegated-IPv6-Prefix]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[ppp]]></category>
		<category><![CDATA[pppoe]]></category>
		<category><![CDATA[Prefix-Delegated]]></category>
		<category><![CDATA[routeos]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3931</guid>

					<description><![CDATA[<p>Neste tutorial vamos aprender como entregar IPv6 para clientes finais utilizando RouterOS/Mikrotik (Concentrador PPPoE) e registrar os logs dos prefixos IPv6 entregue na WAN (Remote IPv6 Prefix Pool) e na LAN (DHCPv6 PD Pool).&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3931">Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</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/2020/01/banner_ipv6_log_mk.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-3950" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /><br />
Neste tutorial vamos aprender como entregar IPv6 para clientes finais utilizando RouterOS/Mikrotik (Concentrador PPPoE) e registrar os logs dos prefixos IPv6 entregue na WAN (Remote IPv6 Prefix Pool) e na LAN (DHCPv6 PD Pool).</p>
<p>Ainda hoje encontramos alguns bugs no Mikrotik, e um dos maiores motivos de buscar essa solução foi que freeradius não registra os logs de IPv6 PD (Mikrotik), o IPv6 que vai se configurar na LAN cliente (o mais importante a ser guardado), seria muito mais fácil para muitos sistemas se implementassem o Delegated-IPv6-Prefix, mas já faz 6 anos (jan/2020) que é motivo de discussão lá no <a href="https://forum.mikrotik.com/viewtopic.php?t=89443" rel="noopener noreferrer" target="_blank">forum</a>. E para variar a solução é dar aquele jeitinho&#8230;. (Popular gambiarra) <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>
<p>Para montar esse servidor de logs você precisa apenas de um serviço WEB (Apache/NGINX) PHP7+ e um banco de dados MySQL/MariaDB.</p>
<p><strong>Requisito para montar um servidor do zero</strong>:<br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">&#8211; Debian 10 Stretch / Instalação Limpa</a><br />
<a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">&#8211; Como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”</a></p>
<p>Você precisa ter um pouquinho de conhecimento em IPv6 e saber dividir as subclasses. Recomendo dar uma olhadinha no <a href="http://ipv6.nic.br/" rel="noopener noreferrer" target="_blank">http://ipv6.nic.br/</a> lá irá encontrar cursos do NIC.BR.</p>
<p>Recomendo você instalar uma calculadora de IPv6. Aqui vai uma calculador muito boa que uso no dia a dia.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png" alt="" width="1680" height="1008" class="alignnone size-full wp-image-3933" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png 1680w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-300x180.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-1024x614.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-768x461.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-1536x922.png 1536w" sizes="auto, (max-width: 1680px) 100vw, 1680px" /></a></p>
<pre class="remontti-code"># apt install wget python-ipaddr
# wget https://blog.remontti.com.br/arquivos/Home/ip6calc -O /bin/ip6calc
# chmod +x /bin/ip6calc</pre>
<p>Para fazer o calculo use ex.:</p>
<pre class="remontti-code"># ip6calc 2001:db8:abcd::/48</pre>
<p>Para esse projeto desenvolvi em PHP alguns arquivos onde fica &#8220;ouvido&#8221; os logs que o Mikrotik irá enviar e uma telinha simples para fazer buscas dos IPs nesse banco de dados. Já disponibilizei ele lá no <a href="https://github.com/remontti/LogIPv6RouterOS" rel="noopener noreferrer" target="_blank">github</a>.</p>
<p>Com seu servidor web configurado, <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">seria bacana criar um host no seu dns e configurar nesse seu servdor web um domínio virtual</a> ex.: log6.seudominio.com.br onde você irá jogar os arquivos do projeto. Mas como muitos não tem essa facilidade vou tentar deixar aqui a forma mais simples, que é jogar os arquivos no diretório padrão do apache &#8220;/var/www/html&#8221;, assim qualquer um consegue montar <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>Acessamos o diretório base então</p>
<pre class="remontti-code"># cd /var/www/html
# wget https://github.com/remontti/LogIPv6RouterOS/archive/master.zip
# apt install unzip
# unzip master.zip 
# mv LogIPv6RouterOS-master logs6
# cd logs6</pre>
<p>Por segurança crie/edite um .htaccess para proteger que apenas determinados IPs tenham acesso. (apensar de ter um token)</p>
<pre class="remontti-code"># vim .htaccess</pre>
<p>Altere pelo IPs que você deseja que tenham acesso. (Seus router e seu NOC)</p>
<pre class="remontti-code">Options -Indexes
&lt;RequireAll&gt;
    &lt;RequireAny&gt;
        Require ip 200.200.200.0/24
        Require ip 192.168.0.0/26
        Require ip 2001:db8::/32
    &lt;/RequireAny&gt;
&lt;/RequireAll&gt;</pre>
<p>Precisaremos criar um banco de dados e nossa tabela. Para gerar suas senhas/token recomendo <a href="https://senhasegura.remontti.com.br/" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br/</a> e gerar algo aleatório.</p>
<pre class="remontti-code"># mariadb -p</pre>
<p>Crie o banco de dados, não esqueça de alterar a senha (SUA_SENHA_DA_CONEXAO)</p>
<pre class="remontti-code">CREATE DATABASE logs6;
GRANT ALL PRIVILEGES ON logs6.* TO &#039;logs6&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA_DA_CONEXAO&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Importe a tabela utilizando a senha criada anteriormente</p>
<pre class="remontti-code"># mariadb -u logs6 logs6 &lt; logs6_mikrotik.sql -p</pre>
<p>Agora altere no arquivo <strong>config.php</strong> o <strong>token</strong> para validar seu envio de dados e acessar o interface simples que desenvolvi para buscas, e a senha de conexão com banco (db_password).</p>
<pre class="remontti-code">
?php
/* Your security token  */
$token = &#039;xxxxxxxxxxxxx&#039;;

/* Set langage */
// Portugês Brasil: pt-br
// English:  en
$lang = &#039;pt-br&#039;;

/* Db conect */
$db_host = &#039;localhost&#039;;
$db_user = &#039;logs6&#039;;
$db_password = &#039;SUA_SENHA_DA_CONEXAO&#039;;
$db_name = &#039;logs6&#039;;
</pre>
<p>Agora acesse sua <strong>http(s)://URL/logs6/</strong>. Você deve receber a seguinte tela.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png" alt="" width="965" height="243" class="alignnone size-full wp-image-3971" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png 965w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6-300x76.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6-768x193.png 768w" sizes="auto, (max-width: 965px) 100vw, 965px" /></a></p>
<p>Já pode autenticar com seu token (ainda não terá logs, então não adianta querer fazer buscas rsrsrs)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png" alt="" width="991" height="253" class="alignnone size-full wp-image-3974" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png 991w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search-300x77.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search-768x196.png 768w" sizes="auto, (max-width: 991px) 100vw, 991px" /></a></p>
<p>Se alguém tiver ideias melhores/criticas todas são bem vindas, sinta-se a vontade para criar forks do projeto. </p>
<p>Para entregar IPv6 em seu Mk é claro que  precisa ter conectividade v6 em seu concentrador PPPoE (Não vou entrar em detalhes nessa parte pois entraria na questão roteamento da sua rede, mas se vale de ajuda como dica um iBGP/OSPF resolve fácil)</p>
<p>Servidor preparado para receber os logs vamos ao routerOS/Mikrotik. Você precisará criar duas Pool, uma para <strong>WAN</strong> outra para a <strong>LAN</strong>, como recomendação do nic.br para LAN do cliente devemos enviar um prefixo /56 (mas isso não é uma regra). A calcular pode ajudar muito nessa parte. No meu exemplo vou reservar um <strong>prefixo /48</strong> para entregar <strong>prefixos /64 na WAN</strong> (65.536 prefixos/64), e um <strong>prefixo /45</strong> entregando <strong>prefixos /56</strong> oque daria 2.048 prefixos (clientes).</p>
<p>Ex 2001:db8:1000::/48 (WAN)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png" alt="" width="1568" height="814" class="alignnone size-full wp-image-3939" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png 1568w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-300x156.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-1024x532.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-768x399.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-1536x797.png 1536w" sizes="auto, (max-width: 1568px) 100vw, 1568px" /></a></p>
<p>Ex 2001:db8:2000::/45 (LAN)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png" alt="" width="1571" height="831" class="alignnone size-full wp-image-3940" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png 1571w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-300x159.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-1024x542.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-768x406.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-1536x812.png 1536w" sizes="auto, (max-width: 1571px) 100vw, 1571px" /></a></p>
<p><strong>IPv6 -> Pool</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png" alt="" width="538" height="182" class="alignnone size-full wp-image-3942" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png 538w, https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6-300x101.png 300w" sizes="auto, (max-width: 538px) 100vw, 538px" /></a></p>
<p>Alteramos no profile. Menu PPP aba Profiles.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png" alt="" width="1138" height="658" class="alignnone size-full wp-image-3943" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png 1138w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-300x173.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-1024x592.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-768x444.png 768w" sizes="auto, (max-width: 1138px) 100vw, 1138px" /></a><br />
<strong>Remote IPv6 Prefix Pool</strong> selecione sua <strong>pool_wan</strong> e <strong>DHCPv6 PD Pool </strong>sua <strong>pool_lan</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png" alt="" width="546" height="250" class="alignnone size-full wp-image-3944" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png 546w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2-300x137.png 300w" sizes="auto, (max-width: 546px) 100vw, 546px" /></a><br />
Na abra Protocol, Use IPv6 selecione yes.</p>
<p>Vamos ao pulo do gato na aba <strong>Scripts</strong>. A ideia aqui é toda vez que um  PPPoE conectar ou desconectar ele execute um script. Vai ser necessário que você altere o TOKEN que você configurou lá no <strong>config.php</strong>, informe a URL (URLUP) correta que encontrará seu arquivo log6.php e em <strong>checkconnection</strong> informe o IP do seu servidor (explico o motivo a seguir).</p>
<pre class="remontti-code">:global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
:global URLUP &quot;http://logs6.remontti.com.br/log6.php&quot;;
:global checkconnection &quot;200.200.200.200&quot;;</pre>
<p>A lógica é: Antes de tentar enviar as informações/valores (via post ao log6.php) fazer uma verificação se a conexão exite com o servidor de log, isso foi necessário ao simular uma "queda de energia", as vezes ele pode autenticar antes de conseguir uma conexão (se seu o usuários estiver no routerOS e ai perdemos todos os logs) nesse caso ele fica aguardando por até 5 min na tentativa (ping ao ip checkconnection) antes prosseguir, caso exista uma conexão (checkconnection) então prossegue com o script coletando as informações. </p>
<p>Eu aproveitei coletar IPv4 como <strong>localAddr</strong> (NAS), <strong>remoteAddr</strong> (IPv4 entregue ao cliente) isso vai facilitar também em uma analise se você quiser bater com os dados do freeradius (radacct), já aproveitei também para capturar o <strong>callerId</strong> (MAC), serviço PPP <strong>calledId</strong>. Acredito que com essas informações podem ser uteis para outros fins. Seguindo o script todo o PPPoE que subir ele vai criar um prefixo (WAN) <strong>RemoteIPv6</strong> e em seguida precisei fazer um while que setei 60 seg para que a cada segundo ele tente identificar em <strong>/ipv6 dhcp-server binding</strong> se o cliente solicitou o prefixo que ele vai auto se configurar em sua LAN, passando por esses requisitos ele irai gerar um LOG (<a href="https://blog.remontti.com.br/2674" rel="noopener noreferrer" target="_blank">que você também pode estar salvando em um servidor de log remoto</a>) e finalizando fará um fetch com os dados do binding caso ele consiga ou enviará null para a URL e assim o servidor salva-lo no banco de dados. Você verá dois logs na tela de logs, um azul quando uma conexão subir e um vermelho quando desconectar, se você desejar não ter esses logs é só remover as linha "<em>log warning message=..... / :log error message=.....</em>"</p>
<p>Acesse PPP vá até a aba profile e configure os script do profile. Não esqueça de alterar as variáveis globais.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-300x171.png" alt="" width="300" height="171" class="alignnone size-medium wp-image-3935" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-300x171.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-768x439.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script.png 814w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<strong>On UP</strong></p>
<pre class="remontti-code">{
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
  :global URLUP &quot;http://________________/logs6/log6.php&quot;;
  :global checkconnection &quot;200.200.200.200&quot;;
  :local ii 0;
  :local tt 300; # Aguarda até 5min para tentar 
  while ( $ii &lt; $tt &#038;&#038; ([/ping $checkconnection count=1]=0) ) do={
    :put $ii
    :set $ii ($ii + 1)
    :delay delay-time=1s
    :log error &quot;Awaiting connection ... $checkconnection&quot;;
  }
  :local localAddr $&quot;local-address&quot;
  :local remoteAddr $&quot;remote-address&quot;
  :local callerId $&quot;caller-id&quot;
  :local calledId $&quot;called-id&quot;
  :local interfaceName [/interface get $interface name]
  :local RemoteIPv6 [/ipv6 nd prefix get value-name=prefix [find interface=$interfaceName]]
  :local i 0;
  :local x 1;  
  :local t 60; # Segundos aguardando ipv6 ser configurado no cliente
  while ($i &lt; $t &#038;&#038; [ :len [/ipv6 dhcp-server binding find server=$interfaceName] ] &lt; $x) do={
    :put $i
    :set $i ($i + 1)
    :delay delay-time=1s
  }
  if ($i = $t) do={
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | NULL&quot;
    /tool fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&#038;token=$TOKEN&#038;user=$user&#038;mac=$callerId&#038;nas=$localAddr&#038;service=$calledId&#038;ipv4=$remoteAddr&#038;remoteipv6=$RemoteIPv6&quot; http-method=post
  } else={
    :local DHCPv6PD [/ipv6 dhcp-server binding get value-name=address [find server=$interfaceName]]
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | $DHCPv6PD&quot;
    /tool fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&#038;token=$TOKEN&#038;user=$user&#038;mac=$callerId&#038;nas=$localAddr&#038;service=$calledId&#038;ipv4=$remoteAddr&#038;remoteipv6=$RemoteIPv6&#038;dhcpv6pd=$DHCPv6PD&quot; http-method=post
  }
  file remove log6.php
}</pre>
<p>E ao desconectar vamos enviar ao servidor que o mesmo descontou.<br />
<strong>On Down</strong></p>
<pre class="remontti-code">{
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;
  :global URLDOWN &quot;http://________________/logs6/log6.php&quot;
  :local localAddr $&quot;local-address&quot;
  :local callerId $&quot;caller-id&quot;
  /tool fetch url=&quot;$URLDOWN&quot; http-data=&quot;action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&quot; http-method=post
  :log warning message=&quot;DOWN: $user | $callerId | $localAddr&quot;
  file remove log6.php
}</pre>
<p>Para concluir em IPv6 -> ND<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd.png" alt="" width="668" height="472" class="alignnone size-full wp-image-3957" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd.png 668w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd-300x212.png 300w" sizes="auto, (max-width: 668px) 100vw, 668px" /><br />
Marque todas as opções.</p>
<p>No menu <strong>IP -> DNS </strong>também informe os DNS IPv6. Só assim o cliente irá aprender um DNSv6 (<em>Advertise DNS</em>)</p>
<p>Agora todo PPPoE que autenticar um log será registrado, o legal aqui é que se alguém não utiliza Radius poderá também ter um log <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>No arquivo log6.php que recebe os logs sempre que um usuário conectar ele irá verificar se não existe uma conexão em aberta, pois em casos de quedas de energia não vai existir tempo para ele informar que o pppoe desconectou, então ele fecha a conexão com a hora da nova conexão, logo esse IP pode ter sido utilizado por algum outro usuário, neste caso ele registra a hora que fechou a conexão com "falha" (<strong>failure</strong>), para no caso de uma investigação você observar se o mesmo ip não teve algum outro usuário que usou na horário solicitado.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png" alt="" width="1661" height="398" class="alignnone size-full wp-image-3946" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png 1661w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-300x72.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-1024x245.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-768x184.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-1536x368.png 1536w" sizes="auto, (max-width: 1661px) 100vw, 1661px" /></a></p>
<p>Pelo phpMyAdmin também fica muito fácil de fazer buscas.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-300x178.png" alt="" width="300" height="178" class="alignnone size-medium wp-image-3959" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-300x178.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-1024x607.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-768x455.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6.png 1408w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Para quem deseja bloquear um cliente IPv6, uma solução é no Router criar outra Pool6 com uma classe "invalida" por exemplo 2001:db8:6666::/48, e no freeradius usar o attibute <strong>Mikrotik-Delegated-IPv6-Pool</strong>, pode ser na tabela radreply (dizendo para qual usuário) ou para um  grupo de configurações (radgroupreply) "plano".</p>
<p>Mikrotik:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png" data-rel="lightbox-gallery-CdfMcffP" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png" alt="" width="544" height="292" class="alignnone size-full wp-image-3963" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png 544w, https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6-300x161.png 300w" sizes="auto, (max-width: 544px) 100vw, 544px" /></a></p>
<p>Freeradius<br />
Ex.: <strong>radreply </strong></p>
<pre class="remontti-code">INSERT INTO `radreply` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;nome_user&#039;, &#039;Mikrotik-Delegated-IPv6-Pool&#039;, &#039;=&#039;, &#039;ipv6_drop&#039;);</pre>
<p>Ex.: <strong>radgroupreply</strong></p>
<pre class="remontti-code">INSERT INTO `radgroupreply` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;PLANO_BLOQUEADO&#039;, &#039;Mikrotik-Delegated-IPv6-Pool&#039;, &#039;=&#039;, &#039;ipv6_drop&#039;);</pre>
<p>Desta forma o routerOS interpretará o nome da pool pelo atriburo Mikrotik-Delegated-IPv6-Pool, e assim que o cliente logar ele não pegará do bloco válido. <em>Até poderia usar uma válido e bloquear no firewall (mas isso é coisa de sistema amador #ficadica).</em>  </p>
<p>Se seu freradius é antigo (v2.x) precisará ter o <a href="https://wiki.mikrotik.com/wiki/Manual:RADIUS_Client/vendor_dictionary" rel="noopener noreferrer" target="_blank">dictionary</a> atualizado.</p>
<p>Vou deixar um exemplo de como configurar um pppoe cliente em um mikrotik, já que percebi um bug quando ele precisa renovar seu IPv6.</p>
<pre class="remontti-code">/interface pppoe-client
add add-default-route=yes disabled=no interface=ether1 name=pppoe-out1 password=SENHA use-peer-dns=yes user=SENHA

/ipv6 dhcp-client
add interface=pppoe-out1 pool-name=DHCPv6PD pool-prefix-length=56 request=prefix

/ipv6 address
add advertise=yes from-pool=DHCPv6PD interface=INTERFACE_LAN

/ppp profile
set *0 on-up=&quot;{\r\
    \n  /delay delay-time=5s\r\
    \n  /ipv6 dhcp-client renew numbers=0\r\
    \n  /delay delay-time=2s\r\
    \n  /ipv6 dhcp-client renew numbers=0\r\
    \n}&quot;
/ipv6 firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes \
    protocol=tcp tcp-flags=syn
</pre>
<p>Gambiarazinha no profile para renovar o IP sem dor de cabeça toda vez que ele autenticar (bugs)</p>
<pre class="remontti-code">{
  /delay delay-time=5s
  /ipv6 dhcp-client renew numbers=0
  /delay delay-time=2s
  /ipv6 dhcp-client renew numbers=0
}</pre>
<p>Gostou? Espero que você consiga implementar seu IPv6 e esteja seguro com os logs armazenado! </p>
<p>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<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>
<h3> RouterOS v7</h3>
<p>Descomente os <strong># :log warning "DEBUG>...."</strong> se precisar debugar o script, ou remova para deixar mais enxuto o script.</p>
<p><strong>UP</strong></p>
<pre class="remontti-code-blue">
{
  # :log warning &quot;DEBUG&gt; UP: Iniciando o script logs6&quot;;
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
  :global URLUP &quot;http://logs6.remontti.com.br/log6.php&quot;;
  :global checkconnection &quot;10.0.0.1&quot;;
  :local ii 0;
  :local tt 60;
  while ( $ii &lt; $tt &#038;&#038; ([/ping $checkconnection count=1]=0) ) do={
    :put $ii
    :set $ii ($ii + 1)
    :delay delay-time=1s
    :log error &quot;Aguardando conexao com servidor... $checkconnection&quot;;
  }
  :local localAddr $&quot;local-address&quot;
  # :log warning &quot;DEBUG&gt; localAddr = $localAddr&quot;;
  :local remoteAddr $&quot;remote-address&quot;
  # :log warning &quot;DEBUG&gt; remoteAddr = $remoteAddr&quot;;
  :local callerId $&quot;caller-id&quot;
  # :log warning &quot;DEBUG&gt; callerId = $callerId&quot;;
  :local calledId $&quot;called-id&quot;
  # :log warning &quot;DEBUG&gt; calledId = $calledId&quot;;
  :local userName $&quot;user&quot;
  # :log warning &quot;DEBUG&gt; userName = $userName&quot;;
  :local interfaceID $&quot;interface&quot;
  # :log warning &quot;DEBUG&gt; interfaceID = $interfaceID&quot;;
  :local interfaceName [/interface get $interfaceID name]  
  # :log warning &quot;DEBUG&gt; interfaceName = $interfaceName&quot;;
  :local RemoteIPv6 [/ipv6 nd prefix get value-name=prefix [find interface=$interfaceName]]
  # :log warning &quot;DEBUG&gt; RemoteIPv6 = $RemoteIPv6&quot;;
  :local i 0;
  :local x 1;  
  :local t 60;
  while ($i &lt; $t &#038;&#038; [ :len [/ipv6 dhcp-server binding find server=$interfaceName] ] &lt; $x) do={    
    :put $i    
    :set $i ($i + 1)
    :delay delay-time=1s
    # :log warning &quot;DEBUG&gt; Aguardando IPv6 da LAN de $userName ($i)s&quot;;
  }
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }  
  if ($i = $t) do={
    # :log warning &quot;DEBUG&gt; IPv6 LAN: não descoberto descoberto&quot;;
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | NULL&quot;
    # :log warning &quot;DEBUG&gt; Executando fetch UP: $URLUP http-data=action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6 http-method=post&quot;
    /tool/fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&quot; http-method=post
  } else={    
    :local DHCPv6PD [/ipv6 dhcp-server binding get value-name=address [find server=$interfaceName]]
    # :log warning &quot;DEBUG&gt; IPv6 LAN: Descoberto descoberto $DHCPv6PD&quot;;
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | $DHCPv6PD&quot;
    # :log warning &quot;DEBUG&gt; Executando fetch UP: $URLUP http-data=action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&amp;dhcpv6pd=$DHCPv6PD http-method=post&quot;;
    /tool/fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&amp;dhcpv6pd=$DHCPv6PD&quot; http-method=post
  }
  :delay delay-time=1s
  # :log warning &quot;DEBUG&gt; Removendo arquivo log6.php&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }
  # :log warning &quot;DEBUG&gt; Script concluído.&quot;
}
</pre>
<p><strong>DOWN</strong></p>
<pre class="remontti-code-blue">
{
  # :log warning &quot;DEBUG&gt; DOWN: Iniciando o script logs6&quot;;
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;
  :global URLDOWN &quot;http://logs6.remontti.com.br/log6.php&quot;
  :local localAddr $&quot;local-address&quot;
  # :log warning &quot;DEBUG&gt; localAddr = $localAddr&quot;;
  :local callerId $&quot;caller-id&quot;
  # :log warning &quot;DEBUG&gt; calledId = $calledId&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }  
  # :log warning &quot;DEBUG&gt; Executando fetch DOWN: $URLDOWN http-data=action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr http-method=post&quot;;
  /tool/fetch url=&quot;$URLDOWN&quot; http-data=&quot;action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&quot; http-method=post
  :log warning message=&quot;DOWN: $user | $callerId | $localAddr&quot;
  :delay delay-time=1s
  # :log warning &quot;DEBUG&gt; Removendo arquivo log6.php&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove $file
  }
  # :log warning &quot;DEBUG&gt; Script concluído.&quot;
}
</pre>
<p>O post <a href="https://blog.remontti.com.br/3931">Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3931/feed</wfw:commentRss>
			<slash:comments>42</slash:comments>
		
		
			</item>
		<item>
		<title>Como montar um servidor de e-mail com Postfix, Dovecot, PostfixAdmin, SpamAssassin, Amavis, Clamav,  RoundCube, SPF, DKIM, DMARC, Fail2Ban</title>
		<link>https://blog.remontti.com.br/3744</link>
					<comments>https://blog.remontti.com.br/3744#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Tue, 26 Nov 2019 01:59:55 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[buster]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian10]]></category>
		<category><![CDATA[DKIM]]></category>
		<category><![CDATA[DMARC]]></category>
		<category><![CDATA[Dovecot]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[PostfixAdmin]]></category>
		<category><![CDATA[RoundCube]]></category>
		<category><![CDATA[servidor completo]]></category>
		<category><![CDATA[SpamAssassin]]></category>
		<category><![CDATA[SPF]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3744</guid>

					<description><![CDATA[<p>Neste tutorial vou ensinar como configurar um servidor de e-mail com domínios virtuais com integração dos usuários/domínios no banco de dados MariaDB/MySQL. Nele vamos ter filtros entre varias otimizações. &#8211; Postfix Postfix é um&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3744">Como montar um servidor de e-mail com Postfix, Dovecot, PostfixAdmin, SpamAssassin, Amavis, Clamav,  RoundCube, SPF, DKIM, DMARC, Fail2Ban</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/11/Postfix-Dovecot-PostfixAdmin-SpamAssassin-Amavis-Clamav-RoundCube-SPF-DKIM-DMARC-Fail2Ban.jpg" alt="" width="1000" height="474" class="alignnone size-full wp-image-3800" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/Postfix-Dovecot-PostfixAdmin-SpamAssassin-Amavis-Clamav-RoundCube-SPF-DKIM-DMARC-Fail2Ban.jpg 1000w, https://blog.remontti.com.br/wp-content/uploads/2019/11/Postfix-Dovecot-PostfixAdmin-SpamAssassin-Amavis-Clamav-RoundCube-SPF-DKIM-DMARC-Fail2Ban-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2019/11/Postfix-Dovecot-PostfixAdmin-SpamAssassin-Amavis-Clamav-RoundCube-SPF-DKIM-DMARC-Fail2Ban-768x364.jpg 768w, https://blog.remontti.com.br/wp-content/uploads/2019/11/Postfix-Dovecot-PostfixAdmin-SpamAssassin-Amavis-Clamav-RoundCube-SPF-DKIM-DMARC-Fail2Ban-520x245.jpg 520w, https://blog.remontti.com.br/wp-content/uploads/2019/11/Postfix-Dovecot-PostfixAdmin-SpamAssassin-Amavis-Clamav-RoundCube-SPF-DKIM-DMARC-Fail2Ban-720x340.jpg 720w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></p>
<p>Neste tutorial vou ensinar como configurar um servidor de e-mail com domínios virtuais com integração dos usuários/domínios no banco de dados MariaDB/MySQL. Nele vamos ter filtros entre varias otimizações. </p>
<p>&#8211; <strong><a href="http://www.postfix.org/" rel="noopener noreferrer" target="_blank">Postfix</a></strong> Postfix é um agente de transferência de e-mails livre e de código aberto que encaminha e entrega e-mails, e tem como objetivo ser uma alternativa segura ao Sendmail.<br />
&#8211; <strong><a href="https://www.dovecot.org/" rel="noopener noreferrer" target="_blank">Dovecot</a></strong> é um servidor de IMAP e POP3 open source para sistemas Linux e UNIX, escrito primariamente com segurança em mente.<br />
&#8211; <strong><a href="http://postfixadmin.sourceforge.net/" rel="noopener noreferrer" target="_blank">Postfixadmin</a></strong> Interface web para o gerenciamento de contas de e-mails e domínios.<br />
&#8211; <strong><a href="https://spamassassin.apache.org/" rel="noopener noreferrer" target="_blank">Spamassassin</a></strong> é um programa de computador licenciado através da licença Apache e utilizado como filtro de spam enviado através de mensagem eletrônica. O filtro SpamAssassin funciona dando uma pontuação a cada mensagem que entra, baseado em diferentes &#8220;testes&#8221; que faz analisando todo o conteúdo da mensagem.<br />
&#8211; <strong><a href="https://www.clamav.net/" rel="noopener noreferrer" target="_blank">Clamav</a></strong>  é um antivírus open source gratuito feito especialmente para Linux, mas que conta também com uma versão gratuita para Windows e outra paga para Mac OS.<br />
&#8211; <strong><a href="https://en.wikipedia.org/wiki/Amavis" rel="noopener noreferrer" target="_blank">Amavis</a></strong>  é um filtro de conteúdo de código aberto para correio eletrônico, implementando transferência de mensagens, decodificação, algum processamento e verificação e interface com filtros de conteúdo externos para fornecer proteção contra spam, vírus e outros malwares.<br />
&#8211; <strong><a href="https://roundcube.net/" rel="noopener noreferrer" target="_blank">RoundCube</a></strong> é um cliente de email IMAP baseado na Web (Webmail).<br />
&#8211; <strong><a href="https://antispam.br/admin/spf/" rel="noopener noreferrer" target="_blank">SPF</a></strong> (Sender Policy Framework) é um sistema que identifica para os servidores de email quais hosts têm permissão para enviar email para um determinado domínio. A configuração do SPF ajuda a impedir que seu email seja classificado como spam.<br />
&#8211;<strong><a href="http://www.opendkim.org/" rel="noopener noreferrer" target="_blank">DKIM</a></strong> (DomainKeys Identified Mail) é um sistema que permite que seus servidores de email oficiais adicionem uma assinatura aos cabeçalhos dos emails de saída e identifique a chave pública do seu domínio para que outros servidores de email possam verificar a assinatura. Assim como no SPF, o DKIM ajuda a impedir que seu email seja considerado spam. Também permite que os servidores de correio detectem quando o seu correio foi adulterado em trânsito.<br />
&#8211; <strong><a href="https://dmarc.org/" rel="noopener noreferrer" target="_blank">DMARC</a></strong> (Autenticação, Relatório e Conformidade de Mensagens de Domínio) permite anunciar aos servidores de email quais são as políticas do seu domínio em relação a emails que falham nas validações SPF e / ou DKIM. Além disso, permite solicitar relatórios de mensagens com falha dos servidores de email.<br />
&#8211; <strong><a href="https://www.fail2ban.org" rel="noopener noreferrer" target="_blank">Fail2Ban</a></strong> é uma estrutura de software de prevenção de intrusões que protege os servidores de computadores contra ataques de força bruta.</p>
<h4>REQUISITOS</h4>
<p>0 &#8211; Saber que esse procedimento exige conhecimento <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 />
1 &#8211; Ter configurado <a href="https://blog.remontti.com.br/3086" target="_blank" rel="noopener noreferrer">DNS Autoritativo e Reverso sobre seus IPS</a>.<br />
2 &#8211; Debian 10 Buster <a href="https://blog.remontti.com.br/2966" target="_blank" rel="noopener noreferrer">instalação limpa</a><br />
3 &#8211; Não ter seu endereço IP listado em backlist.</p>
<p>Você pode verificar se seu IP está em uma blacklist nos sites:<br />
<a href="https://mxtoolbox.com/blacklists.aspx" rel="noopener noreferrer" target="_blank">https://mxtoolbox.com/blacklists.aspx   </a><br />
<a href="http://www.anti-abuse.org/multi-rbl-check-results/" rel="noopener noreferrer" target="_blank">http://www.anti-abuse.org/multi-rbl-check-results/</a><br />
<a href="https://viewdns.info/spamdblookup/" rel="noopener noreferrer" target="_blank">https://viewdns.info/spamdblookup/</a></p>
<h4>AJUSTES</h4>
<p>IP ex. do servidor: 45.80.50.6 / 2804:f123:bebe:cafe::6<br />
Sendo que o reverso deste ips apontam para mail.remontti.com.br<br />
Entradas MX, TXT e SPF configuradas.<br />
Ex autoritativo:</p>
<pre class="remontti-code">$TTL 86400      ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2019071900 ; 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.50.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-50-0                      A       45.80.50.0
router-gw                       A       45.80.50.1
                                AAAA    2804:f123:bebe:cafe::1

ns1                             A       45.80.50.2
                                AAAA    2804:f123:bebe:cafe::2
hostmaster                      A       45.80.50.2
                                AAAA    2804:f123:bebe:cafe::2
ns2                             A       45.80.50.3
                                AAAA    2804:f123:bebe:cafe::3

www                             A       45.80.50.4
                                AAAA    2804:f123:bebe:cafe::4
ftp                             A       45.80.50.4
                                AAAA    2804:f123:bebe:cafe::4

zabbix                          A       45.80.50.5
                                AAAA    2804:f123:bebe:cafe::5
phpipam                         A       45.80.50.5
                                AAAA    2804:f123:bebe:cafe::5

mail                            A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6
imap                            A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6
pop                             A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6
smtp                            A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6</pre>
<p>Ex reverso:</p>
<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. (
                    2019071900 ; 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 50.80.45.in-addr.arpa.
0         PTR     45.80.50.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.
 
; ....</pre>
<p>Ajuste o nome do servidor alterando alguns parâmetros do sistema.</p>
<pre class="remontti-code"># vim /etc/hosts</pre>
<pre class="remontti-code">[...]
127.0.0.1         localhost
250.250.250.6     mail.remontti.com.br    mail
[...]</pre>
<pre class="remontti-code"># vim /etc/hostname</pre>
<pre class="remontti-code">mail</pre>
<p>Configure sua interface de rede. Vou deixar um modelo, onde o bloco de IPv4 é um /28 (255.255.255.240) e um /64 para IPv6.</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<pre class="remontti-code">allow-hotplug enp0s3
iface enp0s3 inet static
        address 45.80.50.6/28
        gateway 45.80.50.1
        dns-nameservers 45.80.50.2
        dns-search remontti.com.br

iface enp0s3 inet6 static
        pre-up modprobe ipv6
        address 2804:f123:bebe:cafe::6
        netmask 64
        gateway 2804:f123:bebe:cafe::1</pre>
<p>Reinicie seu servidor</p>
<pre class="remontti-code"> # reboot</pre>
<h4>APACHE2, MARIADB E PHP7</h4>
<pre class="remontti-code"># su -
# apt update; apt upgrade
# apt install apache2 apache2-utils mariadb-server mariadb-client curl\
  libapache2-mod-php php php-mysql php-cli php-pear php-gmp php-gd php-bcmath\
  php-mbstring php-curl php-xml php-zip php-imap php-intl php-ldap php-imagick wget</pre>
<p>Vamos habilitar o mod_rewrite.</p>
<pre class="remontti-code"># a2enmod rewrite</pre>
<p>A página que vimos ao abri o ip do nosso servidor no navegador fica no diretório /var/www/html, isso está sendo informado no arquivo default do apache que fica em /etc/apache2/sites-enabled/000-default.conf, e para que nosso mod_rewrite funcione corretamente será necessário adicionar alguma linhas.</p>
<pre class="remontti-code"># vim /etc/apache2/sites-enabled/000-default.conf</pre>
<p>Adicione abaixo de &#8220;DocumentRoot /var/www/html&#8221; o seguinte:</p>
<pre class="remontti-code">	&lt;Directory /var/www/html/&gt;
    		Options FollowSymLinks
    		AllowOverride All
	&lt;/Directory&gt;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite-300x251.png" alt="" width="300" height="251" class="alignnone size-medium wp-image-3012" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite-300x251.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite-768x642.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache2-deb10-rewrite.png 887w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<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>Agora precisamos restartar o apache2 para que tenha efeito as alterações.</p>
<pre class="remontti-code"># systemctl restart apache2</pre>
<p>http://[SERVER_IP]/<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster-230x300.png" alt="" width="230" height="300" class="alignnone size-medium wp-image-3010" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster-230x300.png 230w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster-768x1003.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster-784x1024.png 784w, https://blog.remontti.com.br/wp-content/uploads/2019/07/apache-debian-10-buster.png 941w" sizes="auto, (max-width: 230px) 100vw, 230px" /></a></p>
<h4>phpMyAdmin `** Opcional **`</h4>
<p>Cade ele do repositório?<br />
O PHPMyAdmin não está mais disponível como pacote .deb no Debian 10. Fazendo um pesquisa o motivo é que o &#8220;pessoal&#8221; que faz empacotamento não tem uma versão estável. <a href="https://security-tracker.debian.org/tracker/CVE-2018-19968" rel="noopener noreferrer" target="_blank">https://security-tracker.debian.org/tracker/CVE-2018-19968</a></p>
<p>Desta forma debian &#8220;obriga&#8221; com que o usuário instale-o a partir da fonte. <a href="https://www.phpmyadmin.net/downloads/" rel="noopener noreferrer" target="_blank">https://www.phpmyadmin.net/downloads/</a></p>
<p>phpMyAdmin 4.9.2 (25/11/2019)</p>
<pre class="remontti-code"># cd /tmp/
# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.tar.gz
# tar -vxzf phpMyAdmin-4.9.2-all-languages.tar.gz -C /usr/share/
# mv /usr/share/phpMyAdmin-4.9.2-all-languages /usr/share/phpmyadmin
# mkdir /etc/phpmyadmin
# touch /etc/phpmyadmin/htpasswd.setup
# mkdir -p /var/lib/phpmyadmin/tmp
# chown -R www-data:www-data /var/lib/phpmyadmin</pre>
<p>Criaremos o arquivo de configuração do Apache.</p>
<pre class="remontti-code"># vim /etc/apache2/conf-available/phpmyadmin.conf</pre>
<pre class="remontti-code"># phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

&lt;Directory /usr/share/phpmyadmin&gt;
 Options FollowSymLinks
 DirectoryIndex index.php

 &lt;IfModule mod_php7.c&gt;
 AddType application/x-httpd-php .php

 php_flag magic_quotes_gpc Off
 php_flag track_vars On
 php_flag register_globals Off
 php_value include_path .
 &lt;/IfModule&gt;

&lt;/Directory&gt;

# Authorize for setup
&lt;Directory /usr/share/phpmyadmin/setup&gt;
 &lt;IfModule mod_authn_file.c&gt;
 AuthType Basic
 AuthName &quot;phpMyAdmin Setup&quot;
 AuthUserFile /etc/phpmyadmin/htpasswd.setup
 &lt;/IfModule&gt;
 Require valid-user
&lt;/Directory&gt;

# Disallow web access to directories that don&#039;t need it
&lt;Directory /usr/share/phpmyadmin/libraries&gt;
 Order Deny,Allow
 Deny from All
&lt;/Directory&gt;
&lt;Directory /usr/share/phpmyadmin/setup/lib&gt;
 Order Deny,Allow
 Deny from All
&lt;/Directory&gt;</pre>
<p>Ative a configuração e reinicie o Apache.</p>
<pre class="remontti-code"># a2enconf phpmyadmin
# systemctl restart apache2
# systemctl status apache2</pre>
<p>Na próxima etapa, vamos configurar o armazenamento de configuração do phpMyadmin (banco de dados).<br />
Faça o login no MariaDB como usuário root:</p>
<pre class="remontti-code"># mariadb</pre>
<p>Criamos um novo banco de dados para o chamado phpmyadmin e um usuario pma (altere para sua senha). Em seguida, concedemos as permissões do banco de dados.<br />
Você pode gerar uma senha acessando <a href="https://senhasegura.remontti.com.br/" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br/</a></p>
<pre class="remontti-code">CREATE DATABASE phpmyadmin;
CREATE USER &#039;pma&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA&#039;;
GRANT ALL PRIVILEGES ON phpmyadmin.* TO &#039;pma&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA&#039; WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;</pre>
<p>Carregue as tabelas do banco de dados: (Informe a senha do root do MariaDB)</p>
<pre class="remontti-code"># mariadb phpmyadmin &lt; /usr/share/phpmyadmin/sql/create_tables.sql</pre>
<p>Agora é necessário ajustar o arquivo de configuração do phpmyadmin.<br />
Definir:<br />
* senha segura (blowfish secret) que deve ter 32 caracteres. Não use o meu exemplo blowfish secreto, defina o seu próprio! Use o gerador <a href="https://senhasegura.remontti.com.br" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br</a><br />
* diretório que o PHPMyAdmin deve usar para armazenar arquivos temporários.<br />
* Descomentar as linhas $cfg['Servers']<br />
- controlhost : localhost<br />
- controlpass : SUA_SENHA</p>
<pre class="remontti-code"># cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
# vim /usr/share/phpmyadmin/config.inc.php</pre>
<pre class="remontti-code">$cfg[&#039;blowfish_secret&#039;] = &#039;dkJhGx83XR3JjuFrDn8kPp9NtXnkLptl&#039;;
/* Adicione esta linha */
$cfg[&#039;TempDir&#039;] = &#039;/var/lib/phpmyadmin/tmp&#039;;

/* User used to manipulate with storage */
$cfg[&#039;Servers&#039;][$i][&#039;controlhost&#039;] = &#039;localhost&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;controlport&#039;] = &#039;&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;controluser&#039;] = &#039;pma&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;controlpass&#039;] = &#039;SUA_SENHA&#039;;

/* Storage database and tables */
$cfg[&#039;Servers&#039;][$i][&#039;pmadb&#039;] = &#039;phpmyadmin&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;bookmarktable&#039;] = &#039;pma__bookmark&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;relation&#039;] = &#039;pma__relation&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;table_info&#039;] = &#039;pma__table_info&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;table_coords&#039;] = &#039;pma__table_coords&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;pdf_pages&#039;] = &#039;pma__pdf_pages&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;column_info&#039;] = &#039;pma__column_info&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;history&#039;] = &#039;pma__history&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;table_uiprefs&#039;] = &#039;pma__table_uiprefs&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;tracking&#039;] = &#039;pma__tracking&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;userconfig&#039;] = &#039;pma__userconfig&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;recent&#039;] = &#039;pma__recent&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;favorite&#039;] = &#039;pma__favorite&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;users&#039;] = &#039;pma__users&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;usergroups&#039;] = &#039;pma__usergroups&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;navigationhiding&#039;] = &#039;pma__navigationhiding&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;savedsearches&#039;] = &#039;pma__savedsearches&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;central_columns&#039;] = &#039;pma__central_columns&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;designer_settings&#039;] = &#039;pma__designer_settings&#039;;
$cfg[&#039;Servers&#039;][$i][&#039;export_templates&#039;] = &#039;pma__export_templates&#039;;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-300x296.png" alt="" width="300" height="296" class="alignnone size-medium wp-image-3021" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-300x296.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster-768x757.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/07/phpmyadmin-debian-10-buster.png 901w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>http://[SERVER_IP]/phpmyadmin/<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/phpmyadmin.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/phpmyadmin-300x199.png" alt="" width="300" height="199" class="alignnone size-medium wp-image-3769" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/phpmyadmin-300x199.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/11/phpmyadmin.png 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h4>POSTFIX / DOVECOTE / DKIM / SPF</h3>
<p>O Postfix é um agente de transferência de emails (MTA = Message Transfer Agent), um software livre para envio e entrega de emails. Rápido e fácil de administrar, muito utilizado em servidores UNIX.<br />
Algumas vantagens:<br />
- Suporte a Ipv6<br />
- Suporte a MIME<br />
- Autenticação SASL<br />
- Canal seguro utilizando TLS<br />
- Suporte a banco de dados(MySQL,PostgreSQL,LDAP,entre outros)<br />
- Verificação a listas RBL<br />
- Extenso suporte a filtros<br />
- Suporte a expressão-regular<br />
- Verificação de cabeçalho<br />
- Verificação no corpo da mensagem<br />
- Suporte a Greylisting e SPF através de plugins.</p>
<p>Dovecot é um servidor de IMAP e POP3 open source para sistemas Linux e UNIX, escrito primariamente com segurança em mente, tem o objetivo primário de ser um servidor de email leve, rápido e de fácil configuração. Dovecot suporta mbox, Maildir e seu próprio formato nativo de alta performance, Dbox. É 100% compatível com clientes de emails acessando as caixas de correio diretamente. Também inclui um agente de entrega de emails com suporte opcional a filtros Sieve, o que acho muito legal!</p>
<p>Vamos a instalação:</p>
<pre class="remontti-code"># apt install postfix postfix-mysql dovecot-core dovecot-mysql dovecot-imapd\
  dovecot-pop3d dovecot-lmtpd dovecot-sieve dovecot-managesieved openssl\
  opendkim opendkim-tools postfix-policyd-spf-python postfix-pcre</pre>
<p>Responda:<br />
<strong>Site da Internet</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix1.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix1-300x154.png" alt="" width="300" height="154" class="alignnone size-medium wp-image-3756" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix1-300x154.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix1-1024x525.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix1-768x394.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix1-1536x788.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix1.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Se seu DNS reverso estiver ok ele virá já com o domínio reverso de seu IP, mas isso não é necessariamente ser o nome do ip rever, mas eu recomendo que tenha confurado o reverso para o seu servidor de e-mail.<br />
<strong>mail.remontti.com.br</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix2.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix2-300x155.png" alt="" width="300" height="155" class="alignnone size-medium wp-image-3757" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix2-300x155.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix2-1024x529.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix2-768x397.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix2-1536x794.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfix2.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Verifique o arquivo /etc/mailname e sertifique-se que seja seu domínio.</p>
<pre class="remontti-code"># vim /etc/mailname</pre>
<pre class="remontti-code">mail.remontti.com.br</pre>
<p>Adicione um e-mail para seu usuário root do Linux</p>
<pre class="remontti-code"># vim /etc/aliases</pre>
<pre class="remontti-code">root: postmaster@remontti.com.br</pre>
<pre class="remontti-code"># newaliases</pre>
<h4>POSTFIXADMIN</h4>
<p>PostfixAdmin gerenciará os domínios e e-mail.</p>
<pre class="remontti-code"># apt install postfixadmin</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin1.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin1-300x159.png" alt="" width="300" height="159" class="alignnone size-medium wp-image-3758" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin1-300x159.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin1-1024x542.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin1-768x407.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin1-1536x813.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin1.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin2.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin2-300x159.png" alt="" width="300" height="159" class="alignnone size-medium wp-image-3759" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin2-300x159.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin2-1024x544.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin2-768x408.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin2-1536x816.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin2.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin3.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin3-300x159.png" alt="" width="300" height="159" class="alignnone size-medium wp-image-3760" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin3-300x159.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin3-1024x542.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin3-768x407.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin3-1536x813.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin3.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Ajuste o tipo do banco para <strong>mysqli</strong></p>
<pre class="remontti-code"># vim /etc/postfixadmin/dbconfig.inc.php</pre>
<pre class="remontti-code">$dbtype=&#039;mysqli&#039;</pre>
<p>Defina o tipo de criptografia para as senhas salvas no BD e o idioma.</p>
<pre class="remontti-code"># vim /etc/postfixadmin/config.inc.php </pre>
<p>Procure pelas seguintes linhas e altere conforme a baixo.</p>
<pre class="remontti-code">$CONF[&#039;encrypt&#039;] = &#039;md5&#039;;
$CONF[&#039;default_language&#039;] = &#039;pt-br&#039;;</pre>
<p>Como existe varias alterações <i>"change-this-to-your.domain.tld"</i> vou usar o comando sed para alterar todas de uma única vez. <strong>Não esqueça de substituir pelo seu dominio.</strong></p>
<pre class="remontti-code"># sed -i &#039;s/change-this-to-your.domain.tld/remontti.com.br/&#039; /etc/postfixadmin/config.inc.php</pre>
<p>Mais alguns ajustes</p>
<pre class="remontti-code"># cp /etc/postfixadmin/config.inc.php  /usr/share/postfixadmin/config.local.php
# mkdir /usr/share/postfixadmin/templates_c/
# chown -R www-data. /usr/share/postfixadmin/templates_c/</pre>
<p>Acesse:<br />
<strong>http://SEU-DOMINO/postfixadmin/public/setup.php</strong></p>
<p>No primeiro acesso suas tabelas já serão criadas no seu bd, você deve ter todas as dependências <strong>OK</strong>.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin5.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin5-288x300.png" alt="" width="288" height="300" class="alignnone size-medium wp-image-3762" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin5-288x300.png 288w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin5-982x1024.png 982w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin5-768x800.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin5-1474x1536.png 1474w, https://blog.remontti.com.br/wp-content/uploads/2019/11/postfixadmin5.png 1680w" sizes="auto, (max-width: 288px) 100vw, 288px" /></a></p>
<p>Bem no final temos: <strong>Change setup password</strong><br />
Preencha os campos Setup password com uma senha e repita (Essa senha será necessária pra criar administradores do PostfixAdmin) e clique em <strong>Generate password hash</strong></p>
<p>Voce vai receber uma mensagem parecida com essa:<br />
<font color="red"><i>If you want to use the password you entered as setup password, edit config.inc.php or config.local.php and set<br />
$CONF['setup_password'] = 'ca06e6cd4df066ac8e7999616a773b00:51508f16ca5ef631a5ed23ccc44160d934375ec5'; </i></font><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710-300x58.png" alt="screenshot_20161017_134710" width="300" height="58" class="alignnone size-medium wp-image-1497" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710-300x58.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710-768x148.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710.png 786w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Esta senha criptografada, será necessários informar no arquivo config.inc.php antes de prosseguir. Então vamos a edição.</p>
<pre class="remontti-code"># vim /etc/postfixadmin/config.inc.php</pre>
<p>Localize:</p>
<pre class="remontti-code">$CONF[&#039;setup_password&#039;] = &#039;changeme&#039;;</pre>
<p>Altere para:</p>
<pre class="remontti-code">$CONF[&#039;setup_password&#039;] = &#039;ca06e6cd4df066ac8e7999616a773b00:51508f16ca5ef631a5ed23ccc44160d934375ec5&#039;;</pre>
<p>Salve se arquivo e volte para seu navegador. Em <strong>Create superadmin account</strong> vamos criar nosso usuário administrador do PostfixAdmin.</p>
<p>Nos campos:<br />
<strong>Setup password</strong> = Informe a senha q você gerou no passo anterior.<br />
<strong>Administrador:</strong> = um endereço email que será o seu login (postmaster@remontti.com.br)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743-300x161.png" alt="screenshot_20161017_134743" width="300" height="161" class="alignnone size-medium wp-image-1498" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743-300x161.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743-768x413.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743.png 779w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Clique em <strong>Criar administrador</strong></p>
<p>Deve retornar a mensagem:</p>
<pre class="remontti-code">
	Administrador criado! (postmaster@remontti.com.br)
	You are done with your basic setup.

	You can now login to PostfixAdmin using the account you just created.
</pre>
<p>Acesse: http://SEU-DOMINO//postfixadmin/public/</p>
<p>Já é possível acessa-lo com nosso usuários administrador, e adicionar seus domínios e contas de e-mails.<br />
Domínios => Criar  Domínio<br />
Virtual => Criar conta de Email</p>
<p>Dando continuidade criaremos nosso usuários vmail que será o "cara" responsável pelo trabalho.</p>
<pre class="remontti-code"># groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /var/vmail
# mkdir /var/vmail
# chown vmail:vmail /var/vmail</pre>
<p>Edite o arquivo /etc/postfix/main.cf</p>
<pre class="remontti-code"># cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
# vim /etc/postfix/main.cf</pre>
<p>Altere e adicione como descrito abaixo.</p>
<pre class="remontti-code">#--------ALTERE--------#
smtpd_banner = $myhostname
myorigin = $myhostname
mydestination = localhost

#--------COMENTE--------#
#relayhost =
#mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
#mailbox_size_limit = 0

#--------ADD AO FINAL--------#

# Authentification
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql_sender_login_maps.cf
broken_sasl_auth_clients = yes

# Virtual mailboxes
local_transport = virtual
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /var/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 104
virtual_transport = dovecot
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
dovecot_destination_recipient_limit = 1
spamassassin_destination_recipient_limit = 1

###### EXTRAS COMENTADO #######
# Tamanho maximo do anexo (21 MB)
# No webmail php deve permitir upar esse tamanho
message_size_limit = 22020096

# Um pouco mais de  protecao contra spam
disable_vrfy_command = yes

# A RFC 821 basicamente exige que os enderecos sejam envelopados ou contidos por &lt;&gt;.
# Seguir esta regra faz com que se use essa notacao na sessao SMTP. Isso ajuda a barrar alguns Mailers.
strict_rfc821_envelopes = yes

# Caixa postal inexistente devolver aosender o erro 500,
# desta forma daqui alguns minutos voce nao precisara processar novamente o mesmo spam.
unknown_local_recipient_reject_code = 500

# E rejeitar com erro 554 enderecos desconhecidos
unknown_address_reject_code = 554

# Tambem com o erro 554 podemos rejeitar as conexoes que venham de hostnames desconhecidos
unknown_hostname_reject_code = 554

# Os cliente desconhecidos tambem rejeitaremos com o mesmo erro
unknown_client_reject_code = 554

# Vamos definir que o servidores remotos podem fazer no maximo 10
# conexõsimultaneas (e um valor que trabalho, editem conforme a necessidade).
# Um spammer faz mais de 20
smtp_destination_recipient_limit = 10

# Vamos definir que a conexao so pode cometer 3 erros de codigos 500
# (erros definitivos), apos isto sera desconectado
smtpd_hard_error_limit = 3

# Para erros de codigo 400 (erros temporarios), podemos desconecta-los na primeira
smtpd_soft_error_limit = 1

# Bom, claro que o spammer tambem pode ser desconectado e depois se reconectar,
# entao vamos nos prevenir destes espertinhos definindo quantas conexoes ele pode fazer por minuto.
smtpd_client_connection_count_limit = 10

# Nestas conexoes vamos limitar quantas mensagens ele pode mandar por minuto,
# no meu caso uso 25. Se algum usuario seu reclamar deste limite,
# classifique-o como ninja ou na pior hipotese, um mail maniaco.
smtpd_client_message_rate_limit = 25

# Deixar um spammer maluco e faze-lo perder tempo. Dificilmente um servidor conectado
# ao seu servidor vai cometer erros, os spammer cometem muitos erros, pois eles ficam tentando.
# Para irrita-los e quem sabe um dia desistirem de mim, eu travo eles dentro do meu servidor a cada erro.
# No meu caso, a cada erro eu os travo por 20 segundos. Ate que diminuiu o numero de spammers no meu servidor,
# devo estar na blacklist deles.rs
smtpd_error_sleep_time = 20

# Para este tipo de problema, os spammers podem resetar os erros deles.
# Para evitar que eles facam isto e sejam desconetados, podemos dizer se eles podem ou nao fazer isto.
# Como colher de cha, vamos deixar fazer isto apenas uma vez (ate porque servidores as vezes usam este comando).
# Permitir a maquina remota dar o comando RSET apenas 1 vez.
smtpd_junk_command_limit = 1


# Defina tambem o numero maximo de destinatarios em uma unica mensagem.
# Utilize o numero que melhor lhe convir, entreviste pessoas chaves se necessarios.
smtpd_recipient_limit = 50

# Os spammers nao se preocupam muito com isto,
# entao uma otima pratica para bloquear spams eh
# tornar a identificacao por HELO/EHLO obrigatoria.
smtpd_helo_required = yes

# Um pouco mais sobre o HELO/EHLO eh definir um tempo
# limite para o servidor fazer a identificacao, um
# servidor serio nao tem porque ficar enrolando.
# Vai diminuindo o tempo e observando os resultados.
# Vamos comecar com 60 segundos
smtp_helo_timeout = 60s

smtpd_client_restrictions =     permit_mynetworks,
                                permit_sasl_authenticated,
                                check_recipient_access hash:/etc/postfix/white-black-list,
                                check_client_access hash:/etc/postfix/white-black-list,
                                reject_unknown_client_hostname,
                                reject_unknown_reverse_client_hostname,
                                sleep 1,
                                reject_unauth_pipelining

smtpd_helo_restrictions =       permit_mynetworks,
                                permit_sasl_authenticated,
                                check_recipient_access hash:/etc/postfix/white-black-list,
                                check_client_access hash:/etc/postfix/white-black-list,
                                check_helo_access hash:/etc/postfix/white-black-list,
                                reject_invalid_helo_hostname,
                                reject_non_fqdn_helo_hostname,
                                reject_unknown_helo_hostname,
                                reject_unauth_pipelining
 
smtpd_sender_restrictions =     reject_non_fqdn_sender,
                                reject_unknown_sender_domain,
                                reject_unlisted_sender,
                                reject_authenticated_sender_login_mismatch,
                                permit_sasl_authenticated,
                                reject_sender_login_mismatch,
                                warn_if_reject,
                                permit_mynetworks
 
smtpd_recipient_restrictions =  check_sender_access hash:/etc/postfix/white-black-list,
                                check_helo_access hash:/etc/postfix/white-black-list,
                                check_recipient_access hash:/etc/postfix/white-black-list,
                                check_client_access hash:/etc/postfix/white-black-list,
                                permit_sasl_authenticated,
                                permit_mynetworks,
                                reject_unauth_destination,
                                check_policy_service unix:private/policyd-spf,
                                reject_unknown_reverse_client_hostname,
                                reject_invalid_hostname,
                                reject_non_fqdn_hostname,
                                reject_non_fqdn_sender,
                                reject_non_fqdn_recipient,
                                reject_unknown_sender_domain,
                                reject_unknown_recipient_domain,
                                reject_unauth_pipelining,
                                reject_rbl_client access.redhawk.org, 
                                reject_rbl_client all.spamrats.com, 
                                reject_rbl_client b.barracudacentral.org, 
                                reject_rbl_client bl.spamcop.net, 
                                reject_rbl_client blackholes.mail-abuse.org, 
                                reject_rbl_client bogons.cymru.com, 
                                reject_rbl_client cbl.abuseat.org, 
                                reject_rbl_client cblless.anti-spam.org.cn, 
                                reject_rbl_client csi.cloudmark.com, 
                                reject_rbl_client db.wpbl.info, 
                                reject_rbl_client dnsbl.dronebl.org, 
                                reject_rbl_client dnsbl.inps.de, 
                                reject_rbl_client dnsbl.sorbs.net, 
                                reject_rbl_client drone.abuse.ch, 
                                reject_rbl_client dsn.rfc-ignorant.org, 
                                reject_rbl_client httpbl.abuse.ch, 
                                reject_rbl_client ix.dnsbl.manitu.net, 
                                reject_rbl_client korea.services.net, 
                                reject_rbl_client multi.surbl.org, 
                                reject_rbl_client netblock.pedantic.org, 
                                reject_rbl_client opm.tornevall.org, 
                                reject_rbl_client pbl.spamhaus.org, 
                                reject_rbl_client psbl.surriel.com, 
                                reject_rbl_client query.senderbase.org, 
                                reject_rbl_client rbl.efnetrbl.org, 
                                reject_rbl_client rbl.interserver.net, 
                                reject_rbl_client rbl.rbldns.ru, 
                                reject_rbl_client rbl.spamlab.com, 
                                reject_rbl_client rbl.suresupport.com, 
                                reject_rbl_client rbl-plus.mail-abuse.org, 
                                reject_rbl_client relays.mail-abuse.org, 
                                reject_rbl_client sbl.spamhaus.org, 
                                reject_rbl_client spamguard.leadmon.net, 
                                reject_rbl_client spamrbl.imp.ch, 
                                reject_rbl_client tor.dan.me.uk, 
                                reject_rbl_client ubl.unsubscore.com, 
                                reject_rbl_client virbl.bit.nl, 
                                reject_rbl_client wormrbl.imp.ch, 
                                reject_rbl_client zen.spamhaus.org, 
                                reject_rbl_client dnsbl-1.uceprotect.net, 
                                reject_rhsbl_sender dbl.spamhaus.org, 
                                reject_rhsbl_helo dbl.spamhaus.org, 
                                reject_rhsbl_client dbl.spamhaus.org, 
                                reject_rhsbl_helo black.uribl.com,
                                reject_rhsbl_sender black.uribl.com,
                                reject_rhsbl_client black.uribl.com,
                                reject_rhsbl_helo multi.surbl.org,
                                reject_rhsbl_sender multi.surbl.org,
                                reject_rhsbl_client multi.surbl.org,
                                reject_rhsbl_helo multi.uribl.com,
                                reject_rhsbl_sender multi.uribl.com,
                                reject_rhsbl_client multi.uribl.com,
                                permit
</pre>
<p><strong>RBL/RHSBL</strong>: Caso não queira utilizar alguma das rbl/sbl ou utilizar outras sinta-se a vontade.</p>
<p>Aproveitamos já iremos criar uma <strong>lista Negra / Branca</strong>, crie um arquivo chamado <strong>white-black-list</strong></p>
<pre class="remontti-code"># vim /etc/postfix/white-black-list</pre>
<p>Nele adicione os dominos/emails com OK que você confia e REJECT para os que deseja descartar, ex.:</p>
<pre class="remontti-code">remontti.com.br OK
gmail.com OK
spamerdoinferno.com.br REJECT
propagandadocapeta.com.br REJECT</pre>
<p>Agora você precisa executar o comando <strong>postmap</strong> no seu arquivo white-black-list ele irá gerar um novo arquivo white-black-list.db</p>
<pre class="remontti-code"># postmap /etc/postfix/white-black-list</pre>
<p>Mais informações você encontra em:<br />
<a href="http://www.postfix.org/VIRTUAL_README.html#virtual_mailbox" rel="noopener noreferrer" target="_blank">http://www.postfix.org/VIRTUAL_README.html#virtual_mailbox</a></p>
<p>Precisamos criar 4 arquivos que farão a conexão com o BD, pra facilitar criamos nossa variável MINHASENHA</p>
<p>Vamos criar uma variável com o valor da senha que foi informada na instalação do postfixadmin, assim ira facilitar.</p>
<pre class="remontti-code"># MINHASENHA=&#039;sua-senha-do-usuario-postfixadmin-do-mysql&#039;</pre>
<p>Não use $ ou # em sua senha</p>
<p><strong>mysql_virtual_alias_maps.cf</strong></p>
<pre class="remontti-code"># echo &quot;
hosts = localhost
user = postfixadmin
password = $MINHASENHA
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address=&#039;%s&#039; AND active = &#039;1&#039;
&quot; &gt;&gt; /etc/postfix/mysql_virtual_alias_maps.cf</pre>
<p><strong>mysql_virtual_mailbox_maps.cf</strong></p>
<pre class="remontti-code"># echo &quot;
hosts = localhost
user = postfixadmin
password = $MINHASENHA
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username=&#039;%s&#039; AND active = &#039;1&#039;
&quot; &gt;&gt; /etc/postfix/mysql_virtual_mailbox_maps.cf</pre>
<p><strong>mysql_sender_login_maps.cf</strong></p>
<pre class="remontti-code"># echo &quot;
hosts = localhost
user = postfixadmin
password = $MINHASENHA
dbname = postfixadmin
query = SELECT username AS allowedUser FROM mailbox WHERE username=&#039;%s&#039; AND active = 1 UNION SELECT goto FROM alias WHERE address=&#039;%s&#039; AND active = &#039;1&#039;
&quot; &gt;&gt; /etc/postfix/mysql_sender_login_maps.cf</pre>
<p><strong>mysql_virtual_domains_maps.cf</strong></p>
<pre class="remontti-code"># echo &quot;
hosts = localhost
user = postfixadmin
password = $MINHASENHA
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain=&#039;%s&#039; AND active = &#039;1&#039;
&quot; &gt;&gt; /etc/postfix/mysql_virtual_domains_maps.cf</pre>
<p>Acesse o diretório de instalação e verifique se os arquivos com as iniciais mysql_* foram criados. Depois altere as permissões e grupos.</p>
<pre class="remontti-code"># cd /etc/postfix
# ls -lh mysql_*
# chmod o-rwx,g+r mysql_*
# chgrp postfix mysql_*</pre>
<p>Vamos as alterações no master.cf.</p>
<p>Faça um backup do arquivo original antes e adicione no final:</p>
<pre class="remontti-code"># cp /etc/postfix/master.cf /etc/postfix/master.cf.orig
# vim /etc/postfix/master.cf</pre>
<p>Adicione ao final:</p>
<pre class="remontti-code"># Dovecot
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}</pre>
<p>Localize as seguintes linhas e descomente-as:</p>
<pre class="remontti-code">submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_sasl_auth_enable=yes

smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes</pre>
<p>Descomente e altere os valores de smtpd_client_restrictions, os originais são diferentes. (veja na imagem abaixo como fica)</p>
<pre class="remontti-code">  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
[...]
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_143502.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_143502-254x300.png" alt="screenshot_20161017_143502" width="254" height="300" class="alignnone size-medium wp-image-1500" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_143502-254x300.png 254w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_143502.png 694w" sizes="auto, (max-width: 254px) 100vw, 254px" /></a></p>
<p><strong>Configurando o Dovecot</strong></p>
<p>Vou usar o comando sed para fazer as alterações necessárias em vez de ficarmos abrindo arquivo e editando.</p>
<pre class="remontti-code"># cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
# sed -i -e &#039;s/#listen/listen/&#039; /etc/dovecot/dovecot.conf

# cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
# sed -i -e &#039;s/#driver =/driver = mysql/&#039; /etc/dovecot/dovecot-sql.conf.ext</pre>
<p>Adicionamos ao final do arquivo /etc/dovecot/dovecot.conf mais algumas conf:</p>
<pre class="remontti-code"># echo &quot; &quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;service stats {&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;    unix_listener stats-reader {&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;        user = vmail&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;        group = vmail&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;        mode = 0660&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;    }&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot; &quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;    unix_listener stats-writer {&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;        user = vmail&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;        group = vmail&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;        mode = 0660&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;    }&quot; &gt;&gt; /etc/dovecot/dovecot.conf
# echo &quot;}&quot; &gt;&gt; /etc/dovecot/dovecot.conf</pre>
<p>Certifique-se que sua senha do postfixadmin ainda esta salva na variável $MINHASENHA.</p>
<pre class="remontti-code"># echo $MINHASENHA

# sed -i -e &quot;s/#connect =/connect = host=localhost dbname=postfixadmin user=postfixadmin password=$MINHASENHA/&quot; /etc/dovecot/dovecot-sql.conf.ext
# sed -i -e &#039;s/#default_pass_scheme/default_pass_scheme/&#039; /etc/dovecot/dovecot-sql.conf.ext</pre>
<p>Vamos inserir algumas linhas ao final de dovecot-sql.conf.ext.</p>
<pre class="remontti-code"># echo &quot;&quot; &gt;&gt; /etc/dovecot/dovecot-sql.conf.ext
# echo &quot;user_query = SELECT concat(&#039;/var/vmail/&#039;, maildir) as home, concat(&#039;maildir:/var/vmail/&#039;, maildir) as mail, 5000 AS uid, 5000 AS gid, concat(&#039;*:bytes=&#039;, (quota)) AS quota_rule FROM mailbox WHERE username = &#039;%u&#039; AND active = &#039;1&#039;;&quot; &gt;&gt; /etc/dovecot/dovecot-sql.conf.ext
# echo &quot;&quot; &gt;&gt; /etc/dovecot/dovecot-sql.conf.ext
# echo &quot;password_query = SELECT username as user, password, concat(&#039;/var/vmail/&#039;, maildir) as userdb_home, concat(&#039;maildir:/var/vmail/&#039;, maildir) as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid, concat(&#039;*:bytes=&#039;, (quota)) AS userdb_quota_rule FROM mailbox WHERE username = &#039;%u&#039; AND active = &#039;1&#039;;&quot; &gt;&gt; /etc/dovecot/dovecot-sql.conf.ext</pre>
<p>Alterações dos arquivos 10-auth.conf / 10-logging.conf / 10-ssl.conf</p>
<pre class="remontti-code"># cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
# sed -i -e &#039;s/#disable_plaintext_auth = yes/disable_plaintext_auth = no/&#039; /etc/dovecot/conf.d/10-auth.conf
# sed -i -e &#039;s/auth_mechanisms = plain/auth_mechanisms = plain login/&#039; /etc/dovecot/conf.d/10-auth.conf
# sed -i -e &#039;s/!include auth-system.conf.ext/#!include auth-system.conf.ext/&#039; /etc/dovecot/conf.d/10-auth.conf
# sed -i -e &#039;s/#!include auth-sql.conf.ext/!include auth-sql.conf.ext/&#039; /etc/dovecot/conf.d/10-auth.conf

# cp /etc/dovecot/conf.d/10-logging.conf /etc/dovecot/conf.d/10-logging.conf.orig
# sed -i -e &#039;s/#log_path/log_path/&#039; /etc/dovecot/conf.d/10-logging.conf
# sed -i -e &#039;s/#log_timestamp = &quot;%b %d %H:%M:%S &quot;/log_timestamp = &quot;%Y-%m-%d %H:%M:%S &quot;/&#039; /etc/dovecot/conf.d/10-logging.conf</pre>
<p>Em 10-master.conf ficou complicado fazer alteração com sed então vamos no braço.</p>
<pre class="remontti-code"># cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
# vim /etc/dovecot/conf.d/10-master.conf</pre>
<p>em :service auth {<br />
COMENTE tudo de unix_listener auth-userdb</p>
<pre class="remontti-code">service auth {

#  unix_listener auth-userdb {
#    #mode = 0666
#    #user = 
#    #group = 
#  }

# Descomente
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
# Adicione
  unix_listener auth-master {
    mode = 0666
  }

# Descomente
  # Auth process is run as this user.
  user = $default_internal_user
}</pre>
<p>Vamos criar um filtro para que todas as mensagens marcada com spam sejam movida para o diretórios SPAM.</p>
<pre class="remontti-code"># mkdir /var/lib/dovecot/sieve/
# cp /etc/dovecot/conf.d/90-sieve.conf /etc/dovecot/conf.d/90-sieve.conf.orig
# sed -i -e &#039;s/sieve = file:~\/sieve;active=~\/.dovecot.sieve/sieve = ~\/dovecot.sieve/&#039; /etc/dovecot/conf.d/90-sieve.conf
# sed -i -e &#039;s/#sieve_default =/sieve_default =/&#039; /etc/dovecot/conf.d/90-sieve.conf

# echo &#039;require [&quot;fileinto&quot;];&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve
# echo &#039;# rule:[Spam]&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve
# echo &#039;if header :contains &quot;X-Spam-Flag&quot; &quot;YES&quot; {&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve
# echo &#039;        fileinto &quot;Junk&quot;;&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve
# echo &#039;}&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve

# sievec /var/lib/dovecot/sieve/default.sieve
# chown -R vmail:vmail /var/lib/dovecot

# cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
# sed -i -e &#039;s/mail_location = mbox:~\/mail:INBOX=\/var\/mail\/%u/mail_location = mbox:~\/mail:INBOX=\/var\/vmail\/%u/&#039; /etc/dovecot/conf.d/10-mail.conf</pre>
<p>!Exatamente nessa ordem!</p>
<pre class="remontti-code"># sed -i -e &#039;s/inbox = yes/inbox = yes\n  /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      special_use = \Junk /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      auto = subscribe /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    mailbox Junk { /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      special_use = \Sent /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      auto = subscribe /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    mailbox Sent { /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      special_use = \Drafts /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      auto = subscribe /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    mailbox Drafts { /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      special_use = \Trash /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      auto = subscribe /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n  mailbox Trash { /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n  /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/#mail_plugins =/mail_plugins = quota/&#039; /etc/dovecot/conf.d/10-mail.conf</pre>
<pre class="remontti-code"># cp /etc/dovecot/conf.d/20-managesieve.conf  /etc/dovecot/conf.d/20-managesieve.conf.orig
# vim /etc/dovecot/conf.d/20-managesieve.conf</pre>
<p>Descomente:</p>
<pre class="remontti-code">protocols = $protocols sieve

service managesieve-login {
  #...
  #...
  #....
}
service managesieve {
  #...
  #...
  #....
}
protocol sieve {
  #...
  #...
  #....
}</pre>
<pre class="remontti-code"># cp /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.orig
# sed -i -e &#039;s/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins sieve quota/&#039; /etc/dovecot/conf.d/15-lda.conf

# cp /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.orig
# sed -i -e &#039;s/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins quota imap_quota/&#039; /etc/dovecot/conf.d/20-imap.conf

# cp /etc/dovecot/conf.d/20-pop3.conf /etc/dovecot/conf.d/20-pop3.conf.orig
# sed -i -e &#039;s/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins quota/&#039; /etc/dovecot/conf.d/20-pop3.conf

# cp /etc/dovecot/conf.d/90-quota.conf /etc/dovecot/conf.d/90-quota.conf.orig
# sed -i -e &#039;s/#quota = maildir/quota = maildir/&#039; /etc/dovecot/conf.d/90-quota.conf
# sed -i -e &#039;s/#quota_rule =/quota_rule =/&#039; /etc/dovecot/conf.d/90-quota.conf
# sed -i -e &#039;s/#quota_rule2 =/quota_rule2 =/&#039; /etc/dovecot/conf.d/90-quota.conf
# sed -i -e &#039;s/#quota_warning/quota_warning/&#039; /etc/dovecot/conf.d/90-quota.conf</pre>
<pre class="remontti-code"># vim /etc/dovecot/conf.d/90-quota.conf</pre>
<p>Descomente e altere user = dovecot para   user = root</p>
<pre class="remontti-code">service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  user = root
  unix_listener quota-warning {
    user = vmail
  }
}</pre>
<pre class="remontti-code"># vim /usr/local/bin/quota-warning.sh</pre>
<pre class="remontti-code">#!/bin/sh
PERCENT=$1
USER=$2
cat &lt;&lt; EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o &quot;plugin/quota=maildir:User quota:noenforcing&quot;
From: postmaster@remontti.com.br
Subject: $USER com  $PERCENT% 
Content-Type: text/plain; charset=&quot;UTF-8&quot;

Sua conta de email: $USER 
está com uso acima de $PERCENT%,

-- 
Rudimar Remontti
  Remontti ME
EOF

# Evine uma cópia para o administrador:
ADM=noc@remontti.com.br
cat &lt;&lt; EOF | /usr/lib/dovecot/dovecot-lda -d $ADM -o &quot;plugin/quota=maildir:User quota:noenforcing&quot;
From: postmaster@remontti.com.br
Subject: $USER com  $PERCENT% 
Content-Type: text/plain; charset=&quot;UTF-8&quot;

Verificar conta de email: $USER 
Caixa acima de  $PERCENT%

-- 
Rudimar Remontti
  Remontti ME
EOF</pre>
<p>Demos permissão e restartamos o serviços.</p>
<pre class="remontti-code"># chmod +x /usr/local/bin/quota-warning.sh
# systemctl restart dovecot postfix
# systemctl status dovecot postfix </pre>
<p>Comando para ver cota</p>
<pre class="remontti-code"># doveadm quota get -u usuario@dominio.com.br</pre>
<h4>WEBMAIL ROUNDCUBE</h4>
<p>Ajuste o <a href="https://www.php.net/manual/pt_BR/timezones.america.php" rel="noopener noreferrer" target="_blank">time zone </a>de acordo com sua localidade.</p>
<pre class="remontti-code"># sed -i -e &quot;s/^;date\.timezone =.*$/date\.timezone = &#039;America\/Sao_Paulo&#039;/&quot; /etc/php/7.3/apache2/php.ini
# systemctl restart apache2</pre>
<p>Acesse e baixe a versão mais recente<br />
<a href="https://roundcube.net/download/" rel="noopener noreferrer" target="_blank">https://roundcube.net/download/</a></p>
<p>Hoje (27/Nov/2019) 1.4.1 Complete </p>
<pre class="remontti-code"># cd /var/www/html
# wget https://github.com/roundcube/roundcubemail/releases/download/1.4.1/roundcubemail-1.4.1-complete.tar.gz
# tar -vxzf roundcubemail*
# mv roundcubemail-1.4.1 webmail
# rm roundcubemail-1.4.1-complete.tar.gz</pre>
<p>Criaremos nosso banco de dados para o roundcubemail.</p>
<pre class="remontti-code"># mariadb</pre>
<p>Será solicitado a senha root do mysql, entre com a senha.</p>
<pre class="remontti-code">CREATE DATABASE roundcubemail;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY &#039;SUA-SENHA-BD-ROUND&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Acesse:<br />
http://SEU-DOMINIO/webmail/installer/</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1-300x248.png" alt="" width="300" height="248" class="alignnone size-medium wp-image-3764" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1-300x248.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1-1024x847.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1-768x635.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1-1536x1270.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1.png 1600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Clique em <strong>Next</strong></p>
<p>Será necessário dar permissão para criação do config.inc.php na pasta config,</p>
<pre class="remontti-code"># chown www-data. /var/www/html/webmail/ -R</pre>
<p>Itens a serem alterados:</p>
<p><strong>== General configuration ==</strong><br />
product_name: Nome do Webmail<br />
Check client IP in session authorization: MARQUE</p>
<p><strong>== Logging & Debugging ==</strong><br />
log_driver: syslog</p>
<p><strong>== Database setup ==</strong><br />
Database type: MYSQL<br />
Database server: localhost<br />
Database name: roundcubemail<br />
Database user name: roundcube<br />
Database password: SUA-SENHA-BD-ROUND<br />
db_prefix:</p>
<p><strong>== IMAP Settings ==</strong><br />
default_host: localhost (se vc usar certificado deixe tls://mail.remontti.com.br)<br />
username_domain: remontti.com.br</p>
<p><strong>== SMTP Settings ==</strong><br />
smtp_server: tls://mail.remontti.com.br (se vc nao for criar certificado deixe localhost)</p>
<p><strong>== Display settings & user prefs ==</strong><br />
language *: pt_BR<br />
Compose HTML formatted messages: always</p>
<p><strong>== Plugins ==</strong><br />
"De acordo com suas necessidades! Porém vou configurar os seguintes.<br />
- emoticons<br />
- managesieve<br />
- markasjunk<br />
- newmail_notifier<br />
- password<br />
- zipdownload</p>
<p>Agora clique em <strong>[CREAT CONFIG]</strong><br />
Vai retornar uma mensagem:<br />
<i>The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation.</i></p>
<p>Isso significa que nosso arquivo de configuração do roundcube foi criado (config/config.inc.php)</p>
<p>Agora clique em: <strong>[CONTINUE]</strong><br />
Agora em: <strong>[Inicialize database]</strong></p>
<p>Irá retornar:<i><br />
Check DB config<br />
DSN (write):  OK<br />
DB Schema:  OK<br />
DB Write:  OK<br />
DB Time:  OK</i></p>
<p>Por seguração deixe as permissões para o root novamente, e para www-data apenas para pasta temp</p>
<pre class="remontti-code"># chown root. /var/www/html/webmail/ -R
# chown www-data. /var/www/html/webmail/temp -R</pre>
<p>Se você já criou uma conta de email você pode testa-la [Check login]</p>
<p>Como recomendações, mova o diretório <strong>installer</strong> para outro nome ou remova.</p>
<p><i>After completing the installation and the final tests please remove the whole installer folder from the document root of the webserver or make sure that enable_installer option in config.inc.php is disabled.</p>
<pre class="remontti-code"># rm installer/ -rf</pre>
<p>Acesse o diretório dos plugins do roundcube.</p>
<pre class="remontti-code"># cd /var/www/html/webmail/plugins/</pre>
<p><strong>== newmail_notifier ==</strong></p>
<pre class="remontti-code"># cd newmail_notifier
# cp config.inc.php.dist config.inc.php
# sed -i -e &#039;s/= false/= true/&#039; config.inc.php</pre>
<p><strong>== zipdownload ==</strong></p>
<pre class="remontti-code"># cd ../zipdownload
# cp config.inc.php.dist config.inc.php</pre>
<p><strong>== markasjunk ==</strong></p>
<pre class="remontti-code"># cd ../markasjunk/
# cp config.inc.php.dist config.inc.php</pre>
<p><strong>= managesieve =</strong><br />
Faz emails identificado com spam cair na pasta spam.</p>
<pre class="remontti-code"># cd ../managesieve
# cp config.inc.php.dist  config.inc.php
# vim config.inc.php</pre>
<p>Altere: (atençao para o caminho)</p>
<pre class="remontti-code">$config[&#039;managesieve_default&#039;] = &#039;/var/www/html/webmail/plugins/managesieve/default.sieve&#039;;
$config[&#039;managesieve_script_name&#039;] = &#039;Filtros&#039;;</pre>
<p>Crie o arquivo default.sieve</p>
<pre class="remontti-code"># vim /var/www/html/webmail/plugins/managesieve/default.sieve</pre>
<pre class="remontti-code">require [&quot;fileinto&quot;];
# rule:[Spam]
if header :contains &quot;X-Spam-Flag&quot; &quot;YES&quot;
{
        fileinto &quot;Junk&quot;;
        stop;
}</pre>
<p><strong>== password ==</strong><br />
Permite usuário alterar sua senha.</p>
<pre class="remontti-code"># cd ../password
# cp config.inc.php.dist  config.inc.php
# vim config.inc.php</pre>
<p>Altere:</p>
<pre class="remontti-code">
//Define o uma quantidade minima de caracteres
$config[&#039;password_minimum_length&#039;] = 8;

$config[&#039;password_minimum_score&#039;] = 4;

$config[&#039;password_db_dsn&#039;] = &#039;mysql://postfixadmin:SENHA-POSTFIX-MYSQL@localhost/postfixadmin&#039;;
$config[&#039;password_query&#039;] = &quot;UPDATE  mailbox SET  password=MD5(%p) WHERE username=%u AND password=MD5(%o)&quot;;
</pre>
<h3><a href="http://plugins.roundcube.net/" rel="noopener noreferrer" target="_blank">Plugins extra</a></h3>
<p><strong>== contextmenu ==</strong><br />
<a href="https://github.com/johndoh/roundcube-contextmenu/releases" rel="noopener noreferrer" target="_blank">Baixe a versão mais recente</a></p>
<pre class="remontti-code"># cd /var/www/html/webmail/plugins/
# wget https://github.com/johndoh/roundcube-contextmenu/archive/3.0.zip
# apt install unzip 
# unzip 3.0.zip
# rm 3.0.zip
# mv roundcube-contextmenu-3.0 contextmenu</pre>
<p><strong>== <a href="https://github.com/remontti/dovecot_ident/releases" rel="noopener noreferrer" target="_blank">dovecot_ident</a> ==</strong><br />
Como webmail é um acesso localhost, nos logs de acesso IMAP não queremos isso e sim o IP do usuário que esta acessando, para isso:</p>
<pre class="remontti-code"># cd /var/www/html/webmail/plugins
# wget https://github.com/remontti/dovecot_ident/archive/3.0.tar.gz
# tar -vxzf 3.0.tar.gz
# rm 3.0.tar.gz
# mv dovecot_ident-3.0 dovecot_ident
# vim /etc/dovecot/dovecot.conf</pre>
<p>Descomente incluindo:</p>
<pre class="remontti-code">login_trusted_networks = 127.0.0.1 ::1</pre>
<p>Restarte os serviços</p>
<pre class="remontti-code"># systemctl restart dovecot postfix
# systemctl status dovecot postfix</pre>
<p>Agora precisamos adicionar nossos plugins extrar nas configurações do Round.</p>
<pre class="remontti-code"># vim /var/www/html/webmail/config/config.inc.php</pre>
<p>Procure por:</p>
<pre class="remontti-code">$config[&#039;plugins&#039;] = array(&#039;emoticons&#039;, &#039;identity_select&#039;, &#039;managesieve&#039;, &#039;markasjunk&#039;, &#039;newmail_notifier&#039;, &#039;password&#039;, &#039;zipdownload&#039;);</pre>
<p>Inclua os plugins contextmenu e contextmenu ficando:</p>
<pre class="remontti-code">$config[&#039;plugins&#039;] = array(&#039;emoticons&#039;, &#039;identity_select&#039;, &#039;managesieve&#039;, &#039;markasjunk&#039;, &#039;newmail_notifier&#039;, &#039;password&#039;, &#039;zipdownload&#039;, &#039;contextmenu&#039;, &#039;dovecot_ident&#039;);</pre>
<p>Adicione também check_all_folders, para verificar novos e-mails em todas as pastas, bom caso você criar algum filtro personalizado, ex todas as mensagems contendo x assunto ou de um domínio/email... assim se cair uma mensagem ela fica uma notificação numérica além da pasta principal.</p>
<pre class="remontti-code">// If true all folders will be checked for recent messages
$config[&#039;check_all_folders&#039;] = true;</pre>
<p>Seu servidor de e-mail já está funcionado, logue em seu webmail, envie algum e-mails.<br />
Acesse: <strong>http://SEU-DOMINIO/webmail/</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1.4.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1.4.png" alt="" width="517" height="444" class="alignnone size-full wp-image-3770" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1.4.png 517w, https://blog.remontti.com.br/wp-content/uploads/2019/11/roundcube1.4-300x258.png 300w" sizes="auto, (max-width: 517px) 100vw, 517px" /></a></p>
<h4>PEGANDO A ULTIMA VEZ QUE USUÁRIO LOGOU E O IP</h4>
<p>Se você é administrador de um servidor de e-mail certamente vai querer isso!<br />
Primeiramente vamos adicionar alguns campos extrar nassa tabela mailbox (last_login_date last_login_ip last_login_proto)</p>
<pre class="remontti-code"># mariadb</pre>
<pre class="remontti-code">use postfixadmin;
ALTER TABLE `mailbox` ADD `last_login_date` DATETIME NULL COMMENT &#039;last login date&#039;,ADD `last_login_ip` VARCHAR( 39 ) NULL COMMENT &#039;last login ip&#039;,ADD `last_login_proto` CHAR( 5 ) NULL ;
quit;</pre>
<p>Vamos ensinar o dovecot a alimentar esses campos.<br />
<strong>10-master.conf</strong></p>
<pre class="remontti-code"># sed -i -e &#039;s/service imap {/service imap {\n  executable = imap imap-postlogin/&#039; /etc/dovecot/conf.d/10-master.conf
# sed -i -e &#039;s/service imap {/service imap {\n  # Post-login action/&#039; /etc/dovecot/conf.d/10-master.conf
# sed -i -e &#039;s/service pop3 {/service pop3 {\n  executable = pop3 pop3-postlogin/&#039; /etc/dovecot/conf.d/10-master.conf
# sed -i -e &#039;s/service pop3 {/service pop3 {\n  # Post-login action/&#039; /etc/dovecot/conf.d/10-master.conf
# echo &#039;&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;# Post login scripting POP3&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;service pop3-postlogin {&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  executable = script-login /usr/local/bin/postlogin-pop.sh&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  user = $default_internal_user&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  unix_listener pop3-postlogin {&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  }&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;}&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;# Post login scripting IMAP&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;service imap-postlogin {&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  executable = script-login /usr/local/bin/postlogin-imap.sh&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  user = $default_internal_user&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  unix_listener imap-postlogin {&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  }&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;}&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf</pre>
<p>Crie o arquivo postlogin-imap.sh</p>
<pre class="remontti-code"># vim /usr/local/bin/postlogin-imap.sh</pre>
<p>Atenção para SENHA.</p>
<pre class="remontti-code">
#!/bin/sh
MYSQL_USER=&#039;postfixadmin&#039;
PASSWD=&#039;SENHA&#039;
DB_NAME=&#039;postfixadmin&#039;
if [ X&quot;${USER}&quot; != X&quot;dump-capability&quot; ]; then
mysql -u${MYSQL_USER} -p${PASSWD} ${DB_NAME} &gt;/dev/null 2&gt;&amp;1 &lt;&lt;EOF
UPDATE mailbox SET \
last_login_ip=&quot;$IP&quot;, \
last_login_date=NOW(), \
last_login_proto=&quot;POP3&quot; \
WHERE username=&quot;$USER&quot;;
EOF
fi
exec &quot;$@&quot;
</pre>
<p>Crie o arquivo postlogin-pop.sh</p>
<pre class="remontti-code"># vim /usr/local/bin/postlogin-pop.sh</pre>
<p>Atenção para SENHA.</p>
<pre class="remontti-code">
#!/bin/sh
MYSQL_USER=&#039;postfixadmin&#039;
PASSWD=&#039;SENHA&#039;
DB_NAME=&#039;postfixadmin&#039;
if [ X&quot;${USER}&quot; != X&quot;dump-capability&quot; ]; then
mysql -u${MYSQL_USER} -p${PASSWD} ${DB_NAME} &gt;/dev/null 2&gt;&amp;1 &lt;&lt;EOF
UPDATE mailbox SET \
last_login_ip=&quot;$IP&quot;, \
last_login_date=NOW(), \
last_login_proto=&quot;POP3&quot; \
WHERE username=&quot;$USER&quot;;
EOF
fi
exec &quot;$@&quot;
</pre>
<pre class="remontti-code"># chmod +x /usr/local/bin/postlogin-*
# systemctl restart dovecot</pre>
<p>Acesse sua conta de e-mail e apos consulte a tabela mailbox (`SELECT * FROM mailbox`)</p>
<p>Até este ponto nosso servidor está 100%, agora falta apenas um Anti-Spam e um Anti-Vírus para ficar perfeito, Então vamos nessa <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>SPAMASSASSIN</h4>
<p>Vamos começar pelo SpamAssassin</p>
<pre class="remontti-code"># apt install spamc spamassassin</pre>
<p>Alguns ajustes</p>
<pre class="remontti-code"># systemctl enable spamassassin
# sed -i -e &#039;s/CRON=0/CRON=1/&#039; /etc/default/spamassassin
# sed -i -e &#039;s/# report_safe 1/report_safe 0/&#039; /etc/spamassassin/local.cf</pre>
<pre class="remontti-code"># vim /etc/postfix/master.cf</pre>
<p>Adicione ==> <strong>-o content_filter=spamassassin</strong></p>
<pre class="remontti-code">smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
   {..}
submission inet n       -       -       -       -       smtpd
  -o content_filter=spamassassin
   {..}
smtps     inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
  {..}
</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/01/Screenshot_20170130_180239.png" data-rel="lightbox-gallery-gG3wTlpy" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/01/Screenshot_20170130_180239-300x242.png" alt="" width="300" height="242" class="alignnone size-medium wp-image-1633" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/01/Screenshot_20170130_180239-300x242.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/01/Screenshot_20170130_180239.png 619w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>E no final do arquivo:</p>
<pre class="remontti-code"># SpamAssassin
spamassassin unix -     n       n       -       -       pipe
  user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}</pre>
<p>Vamos instalar o Razor Pyzor para ajudar no bloquei dos Spam.</p>
<pre class="remontti-code"># apt install razor pyzor</pre>
<pre class="remontti-code"># vim /etc/spamassassin/local.cf</pre>
<p>Inclua antes da ultima linha (endif # Mail::SpamAssassin::Plugin::Shortcircuit)</p>
<pre class="remontti-code"># ...


# razor2
use_razor2 1
score RAZOR2_CHECK 2.500

# pyzor
use_pyzor 1
score PYZOR_CHECK 2.500

endif # Mail::SpamAssassin::Plugin::Shortcircuit</pre>
<pre class="remontti-code"># su - debian-spamd -c &#039;razor-admin -d --create&#039;
# su - debian-spamd -c &#039;razor-admin -register&#039;
# su - debian-spamd -c &#039;razor-admin -discover&#039;</pre>
<h4>ANTIVIRUS AMAVIS / CLAMAV</h4>
<p>Você precisa ter nos repositórios os pacotes <strong>contrib non-free</strong></p>
<pre class="remontti-code"># vim /etc/apt/sources.list</pre>
<p>(exemplo)</p>
<pre class="remontti-code">deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free

deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free

# buster-updates, previously known as &#039;volatile&#039;
deb http://deb.debian.org/debian/ buster-updates main contrib non-free
deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free</pre>
<pre class="remontti-code"># apt update
# apt install amavisd-new clamav clamav-freshclam clamav-daemon p7zip p7zip-full\
  arj bzip2 cabextract nomarch pax rar unrar unrar-free unzip zip lhasa lrzip lz4\
  libmail-dkim-perl libnet-ldap-perl libsnmp-perl libmessage-passing-zeromq-perl\
  lzop p7zip rpm

# adduser clamav amavis
# mkdir /var/run/clamav
# touch /var/run/clamav/clamd.ctl
# chown clamav.  /var/run/clamav/clamd.ctl
# systemctl stop clamav-freshclam
# freshclam
# su - amavis -c &#039;razor-admin -d --create&#039;
# su - amavis -c &#039;razor-admin -register&#039;
# su - amavis -c &#039;razor-admin -discover&#039;</pre>
<pre class="remontti-code"># vim /etc/amavis/conf.d/15-content_filter_mode</pre>
<p>#(Descomente)</p>
<pre class="remontti-code">[...]
@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
[...]</pre>
<pre class="remontti-code"># vim /etc/amavis/conf.d/50-user</pre>
<p>Adicionar !! Atenção para SENHA</p>
<pre class="remontti-code">use strict;
  
#
# Place your configuration directives here.  They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#

@lookup_sql_dsn = (
    [&#039;DBI:mysql:database=postfixadmin;host=127.0.0.1;port=3306&#039;,
     &#039;postfixadmin&#039;,
     &#039;SENHA-BD-POSTFIX&#039;]);
$sql_select_policy = &#039;SELECT &quot;Y&quot; as local FROM alias WHERE address IN (%k)&#039;;

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return</pre>
<pre class="remontti-code"># vim /etc/amavis/conf.d/05-node_id</pre>
<p> Altere: </p>
<pre class="remontti-code">$myhostname = &quot;mail.remontti.com.br&quot;;</pre>
<pre class="remontti-code"># vim /etc/amavis/conf.d/01-debian</pre>
<p>Comente:</p>
<pre class="remontti-code">#$unarj      = [&#039;arj&#039;, &#039;unarj&#039;];</pre>
<p>Descomente:</p>
<pre class="remontti-code">$unrar      = [&#039;rar&#039;, &#039;unrar&#039;]; #disabled (non-free, no security support)</pre>
<h4>Personalização Amavis</h4>
<pre class="remontti-code"># vim /etc/amavis/conf.d/20-debian_defaults</pre>
<p>Eu comento sa_spam_subject_tag, assim as mensagens que forem spam não terão o assunto trocado, pois elas já irão cair na caixa de spam.</p>
<pre class="remontti-code">#$sa_spam_subject_tag = &#039;***SPAM*** &#039;;</pre>
<p>Comente se não desejar receber as menssagens de erro.</p>
<pre class="remontti-code">#$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
#$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA
#$final_spam_destiny       = D_BOUNCE;
$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)</pre>
<p>Não comente final_bad_header_destiny (se não os spam não serão entregues)</p>
<p>Se não quiser que seu email postmaster receba um email com todos os emails q ele discartou, comente:</p>
<pre class="remontti-code">#$virus_admin = &quot;postmaster\@$mydomain&quot;; # due to D_DISCARD default</pre>
<p>Habilitar o amavis no postfix</p>
<pre class="remontti-code"># postconf -e &quot;content_filter = smtp-amavis:[127.0.0.1]:10024&quot;</pre>
<pre class="remontti-code"># vim /etc/postfix/master.cf</pre>
<p>Adicionar ao final</p>
<pre class="remontti-code">#Amavis
smtp-amavis       unix  -       -       -       -       2       smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
  -o disable_dns_lookups=yes
  -o max_use=20
  -o smtp_generic_maps=

127.0.0.1:10025 inet    n       -       -       -       -       smtpd
  -o mynetworks=127.0.0.0/8
  -o content_filter=
  -o local_recipient_maps=
  -o local_header_rewrite_clients=
  -o relay_recipient_maps=
  -o smtpd_restriction_classes=
  -o smtpd_delay_reject=no
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_data_restrictions=reject_unauth_pipelining
  -o smtpd_end_of_data_restrictions=
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o smtpd_client_connection_count_limit=0
  -o smtpd_client_connection_rate_limit=0
  -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
  -o strict_rfc821_envelopes=yes
# SPF
policyd-spf  unix       -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf</pre>
<p>Ajuste o SPF para que execute seus testes.</p>
<pre class="remontti-code"># sed -i &#039;s/HELO_reject = Fail/HELO_reject = False/&#039; /etc/postfix-policyd-spf-python/policyd-spf.conf
# sed -i &#039;s/Mail_From_reject = Fail/Mail_From_reject = False/&#039; /etc/postfix-policyd-spf-python/policyd-spf.conf</pre>
<p>Inclua em main.cf `policyd-spf_time_limit = 3600` para aumentar o tempo limite impedirá o Postfix de interromper o agente se as transações forem um pouco lentas.</p>
<pre class="remontti-code"># postconf -e &quot;policyd-spf_time_limit = 3600&quot;</pre>
<p>Alguns pacotes que o amavis utiliza já não estão mais no debian buster então vamos baixa-los e instala-los.</p>
<pre class="remontti-code"># cd /tmp
# wget http://ftp.br.debian.org/debian/pool/main/r/ripole/ripole_0.2.0+20081101.0215-3_amd64.deb
# apt install ./ripole_0.2.0+20081101.0215-3_amd64.deb
# wget http://ftp.br.debian.org/debian/pool/main/z/zoo/zoo_2.10-28_amd64.deb
# apt install ./zoo_2.10-28_amd64.deb</pre>
<p>Restarte todos os serviços e verifique se tudo esta ok.</p>
<pre class="remontti-code"># systemctl restart clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix
# systemctl status clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix</pre>
<p>Simular o envio de um spam:</p>
<pre class="remontti-code"># cd /tmp
# wget http://spamassassin.apache.org/gtube/gtube.txt
# sendmail seu@email.com.br &lt; gtube.txt</pre>
<p>Não podemos esquecer de definir a senha do usuário root do mariadb/mysql</p>
<pre class="remontti-code"># mariadb</pre>
<pre class="remontti-code">USE mysql;
UPDATE user SET password=PASSWORD(&#039;SENHA_DB_ROOT&#039;) WHERE User=&#039;root&#039;;
UPDATE user SET plugin=&quot;mysql_native_password&quot;;
FLUSH PRIVILEGES;
quit;</pre>
<h4>HTTPS / SSL / CERTIFICADO VÁLIDO</h4>
<p>Sugestão é você configurar seu <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">domínios virtuais</a> (ou mais de um)  e configurar o<a href="https://blog.remontti.com.br/3548" rel="noopener noreferrer" target="_blank"> Let’s Encrypt</a><br />
Leitura recomendada:<br />
- <a href="https://blog.remontti.com.br/3548" rel="noopener noreferrer" target="_blank">Criando certificado grátis com Let’s Encrypt para o Apache no Debian 10</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>Vou fazer um exemplo bem simples editando o 000-default.conf</p>
<pre class="remontti-code"># vim /etc/apache2/sites-enabled/000-default.conf</pre>
<p>Descomente a linha <strong>ServerName</strong> e adicione o domínio do seu servidor </p>
<pre class="remontti-code">&lt;VirtualHost *:80&gt;
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request&#039;s Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        Protocols h2 http/1.1
        ServerName mail.remontti.com.br

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        &lt;Directory /var/www/html/&gt;
                Options FollowSymLinks
                AllowOverride All
        &lt;/Directory&gt;

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with &quot;a2disconf&quot;.
        #Include conf-available/serve-cgi-bin.conf
&lt;/VirtualHost&gt;</pre>
<p>Restarte o apache</p>
<pre class="remontti-code"># a2enmod http2
# systemctl restart apache2</pre>
<p>Instale o letsencrypt e cerbot </p>
<pre class="remontti-code"># apt install letsencrypt python-certbot-apache</pre>
<p>Antes de gerar o certificado para “mail.remontti.com.br” pare o apache</p>
<pre class="remontti-code"># systemctl stop apache2
# letsencrypt --authenticator standalone --installer apache -d mail.remontti.com.br</pre>
<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): noc@remontti.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 mail.remontti.com.br
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-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
Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://mail.remontti.com.br

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=mail.remontti.com.br
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/mail.remontti.com.br/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/mail.remontti.com.br/privkey.pem
   Your cert will expire on 2020-02-18. 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 / Let&#039;s Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le</pre>
<p>Agora já temos uma acesso seguro em "mail.remontti.com.br", interessante que agora temos certificados válidos que podemos usar no nosso serviço de e-mail, então vamos ajustar!</p>
<pre class="remontti-code"># mv /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/certs/ssl-cert-snakeoil.pem.off
# mv /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/private/ssl-cert-snakeoil.key.off
# ln -s /etc/letsencrypt/live/mail.remontti.com.br/fullchain.pem /etc/ssl/certs/ssl-cert-snakeoil.pem
# ln -s /etc/letsencrypt/live/mail.remontti.com.br/privkey.pem /etc/ssl/private/ssl-cert-snakeoil.key</pre>
<p>Adicione smtp_tls_security_level, smtp_tls_CAfile e smtp_tls_loglevel em main.cf</p>
<pre class="remontti-code"># postconf -e &quot;smtp_tls_security_level = may&quot;
# postconf -e &quot;smtp_tls_CAfile = /etc/ssl/certs/ssl-cert-snakeoil.pem&quot;
# postconf -e &quot;smtp_tls_loglevel = 1&quot;</pre>
<p>Restart os serviços</p>
<pre class="remontti-code"># systemctl restart clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix</pre>
<h4>DKIM</h4>
<p>Adicione usuário postfix ao opendkimgrupo para que o Postfix possa acessar o soquete do OpenDKIM quando for necessário.</p>
<pre class="remontti-code"># adduser postfix opendkim</pre>
<pre class="remontti-code"># vim /etc/opendkim.conf</pre>
<p>Altere</p>
<pre class="remontti-code">#Socket                 local:/var/run/opendkim/opendkim.sock
Socket              local:/var/spool/postfix/opendkim/opendkim.sock</pre>
<p>Adicione ao final do arquivo</p>
<pre class="remontti-code">##  Specifies the path to the private key to use when signing.  Ignored if
##  SigningTable and KeyTable are used.  No default; must be specified for 
##  signing if SigningTable/KeyTable are not in use.
KeyTable            /etc/dkimkeys/key.table

##  SigningTable dataset
##      default (none)
##
##  Defines a dataset that will be queried for the message sender&#039;s address
##  to determine which private key(s) (if any) should be used to sign the
##  message.  The sender is determined from the value of the sender
##  header fields as described with SenderHeaders above.  The key for this
##  lookup should be an address or address pattern that matches senders;
##  see the opendkim.conf(5) man page for more information.  The value
##  of the lookup should return the name of a key found in the KeyTable
##  that should be used to sign the message.  If MultipleSignatures
##  is set, all possible lookup keys will be attempted which may result
##  in multiple signatures being applied.
SigningTable        refile:/etc/dkimkeys/signing.table

##  ExternalIgnoreList filename
##
##  Names a file from which a list of externally-trusted hosts is read.
##  These are hosts which are allowed to send mail through you for signing.
##  Automatically contains 127.0.0.1.  See man page for file format.
ExternalIgnoreList  /etc/dkimkeys/trusted.hosts

##  InternalHosts dataset
##      default &quot;127.0.0.1&quot;
##
##  Names a file from which a list of internal hosts is read.  These are
##  hosts from which mail should be signed rather than verified.
##  Automatically contains 127.0.0.1.
InternalHosts       /etc/dkimkeys/trusted.hosts

##  Canonicalization hdrcanon[/bodycanon]
##      default &quot;simple/simple&quot;
##
##  Select canonicalizations to use when signing.  If the &quot;bodycanon&quot; is
##  omitted, &quot;simple&quot; is used.  Valid values for each are &quot;simple&quot; and
##  &quot;relaxed&quot;.
Canonicalization    relaxed/simple

##  AutoRestart { yes | no }
##      default &quot;no&quot;
##
##  Indicate whether or not the filter should arrange to restart automatically
##  if it crashes.
AutoRestart     yes

##  AutoRestartRate n/t[u]
##      default (none)
## 
##  Sets the maximum automatic restart rate.  See the opendkim.conf(5)
##  man page for the format of this parameter.
AutoRestartRate 10/1M

##  DNSTimeout n
##      default 10
##
##  Specify the time in seconds to wait for replies from the nameserver when
##  requesting keys or signing policies.
DNSTimeout      5</pre>
<p>Crie o diretório do soquete OpenDKIM na área de trabalho do Postfix e verifique se ele possui a propriedade correta, em seguida edite o caminho para o soquete é diferente do padrão, porque no Debian 10 o processo Postfix lida com uma prisão chroot e não pode acessar o local normal.</p>
<pre class="remontti-code"># mkdir /var/spool/postfix/opendkim
# chown opendkim:postfix /var/spool/postfix/opendkim
# vim /etc/default/opendkim</pre>
<p>Altere</p>
<pre class="remontti-code">#RUNDIR=/var/run/opendkim
RUNDIR=/var/spool/postfix/opendkim</pre>
<pre class="remontti-code"># vim /etc/dkimkeys/signing.table</pre>
<p>Crie a tabela de assinatura /etc/dkimkeys/signing.table. Ele precisa ter uma linha por domínio para a qual você lida com o email. Cada linha deve ficar assim:</p>
<pre class="remontti-code">*@remontti.com.br   remontti</pre>
<p>Substitua  *@remontti.com.br por seu domínio e remontti por um nome abreviado para o domínio. O primeiro campo é um padrão que corresponde aos endereços de email. O segundo campo é um nome para a entrada da tabela de chaves que deve ser usada para assinar emails desse endereço.</p>
<pre class="remontti-code"># vim /etc/dkimkeys/key.table </pre>
<pre class="remontti-code">remontti     remontti.com.br:201911:/etc/dkimkeys/remontti.private</pre>
<p>Substitua remontti pelo valor que você usou para o domínio na tabela de assinatura. Substitua remontti.com.br por seu nome de domínio e substitua 201911 ano atual de 4 dígitos e mês de 2 dígitos (isso é chamado de seletor). O primeiro campo conecta as tabelas de assinatura e chave.</p>
<p>O segundo campo é dividido em 3 seções separadas por dois pontos.<br />
    1- A primeira seção é o nome de domínio para o qual a chave é usada.<br />
    2- A segunda seção é um seletor usado ao procurar registros importantes no DNS.<br />
    3- A terceira seção nomeia o arquivo que contém a chave de assinatura do domínio.</p>
<p>Crie o arquivo de hosts confiáveis.</p>
<pre class="remontti-code"># vim /etc/dkimkeys/trusted.hosts</pre>
<pre class="remontti-code">127.0.0.1
::1
localhost
mail
remontti.com.br
mail.remontti.com.br</pre>
<p>Ao criar o arquivo, mude "mail" para o nome do seu servidor e substitua remontti.com.br pelo seu próprio nome de domínio. Estamos identificando os hosts pelos quais os usuários enviarão mensagens e devem ter as mensagens enviadas assinadas, que para configurações básicas será o seu próprio servidor de email.</p>
<p>Gere chaves para cada domínio:</p>
<pre class="remontti-code"># cd /etc/dkimkeys
# opendkim-genkey -b 2048 -h rsa-sha256 -r -s 201911 -d remontti.com.br -v</pre>
<p><em>opendkim-genkey: generating private key<br />
opendkim-genkey: private key written to 201911.private<br />
opendkim-genkey: extracting public key<br />
opendkim-genkey: DNS TXT record written to 201911.txt</em></p>
<p>Criamos uma atalho e alteramos as permissões</p>
<pre class="remontti-code"># ln -s 201911.private  remontti.private
# chown -R opendkim. /etc/dkimkeys/
# chmod -R go-rw /etc/dkimkeys/</pre>
<p>Restart e verifique se o OpenDKIM iniciou corretamente.</p>
<pre class="remontti-code"># systemctl restart opendkim
# systemctl status -l opendkim</pre>
<h4>Configurar DKIM no seu DNS</h4>
<p>Como no SPF, o DKIM usa registros TXT para armazenar informações sobre a chave de assinatura de cada domínio.<br />
Usando o AAAAMM como acima, é necessário criar um registro TXT para o host YYYYMM._domainkeyde de cada domínio para o qual você lida com o correio. Seu valor pode ser encontrado no arquivo 201911.txt. Esses arquivos são assim:</p>
<pre class="remontti-code">201911._domainkey       IN      TXT     ( &quot;v=DKIM1; h=rsa-sha256; k=rsa; s=email; &quot;
          &quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3&quot;
          &quot;ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB&quot; )  ; ----- DKIM key 201911 for remontti.com.br</pre>
<p>Remova os parênteses, e as quebras de linhas. E h=rsa-sha256 altere para h=sha256. O resultado ficaria:</p>
<pre class="remontti-code">201911._domainkey       TXT     &quot;v=DKIM1; h=sha256; k=rsa; s=email; &quot; &quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3&quot; &quot;ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB&quot;</pre>
<p>Você pode adicionar uma política <strong>ADSP</strong> ao seu domínio, dizendo que todos os emails do seu domínio devem ser assinados por DKIM. Como de costume, isso é feito com um registro TXT para host <strong>_adsp._domainkeyem</strong> seu domínio com um valor de <strong>dkim=all</strong>. Você não precisa configurar isso, mas isso dificulta a falsificação de emails de seus domínios, porque os servidores de e-mail do destinatário verão a falta de uma assinatura DKIM e rejeitarão a mensagem.</p>
<pre class="remontti-code">_adsp._domainkeyem      TXT     &quot;dkim=all&quot;</pre>
<p>Relatório e conformidade de mensagens de domínio (<strong>DMARC</strong>). O registro DNS do DMARC pode ser adicionado para informar aos servidores de correio o que você acha que eles devem fazer com os e-mails que afirmam pertencer ao seu domínio e que falham na validação com SPF e/ou DKIM. O DMARC também permite solicitar relatórios sobre mensagens que não passam em uma ou mais verificações de validação. O DMARC deve ser configurado apenas se você tiver o SPF e o DKIM configurados e operando com êxito. Se você adicionar o registro DNS DMARC sem o SPF e o DKIM, as mensagens do seu domínio falharão na validação, o que pode fazer com que sejam descartadas ou relegadas a uma pasta de spam.</p>
<p>O registro DMARC é um registro TXT para host <strong>_dmarcem</strong> seu domínio que contém os seguintes valores recomendados:</p>
<pre class="remontti-code">v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r</pre>
<p>Isso solicita que os servidores de correio em quarentena (não descartem, mas separem das mensagens regulares) qualquer email que falhe nas verificações de SPF ou DKIM. Nenhum relatório é solicitado. Pouquíssimos servidores de correio implementam o software para gerar relatórios sobre mensagens com falha; portanto, é desnecessário solicitá-las. Se você deseja solicitar relatórios, o valor seria semelhante a este exemplo, adicionado como uma única sequência:</p>
<pre class="remontti-code">v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r;fo=1;rf=afrf;rua=mailto:seuemail@domino.com.br</pre>
<p>Os registros DMARC têm um número de tags e opções disponíveis. Essas tags são usadas para controlar suas configurações de autenticação:</p>
<p>`v` especifica a versão do protocolo, neste caso DMARC1.<br />
`p` determina a política para o domínio raiz, como "example.com". As opções disponíveis:<br />
   - `quarantine` instrui que, se um email falhar na validação, o destinatário deve separá-lo para processamento.<br />
   - `reject` solicita que o servidor de email receptor rejeite os emails que falham na validação.<br />
   - `none` solicita que o destinatário não tome nenhuma ação se um email não passar na validação.</p>
<p>`sp` determina a política para subdomínios, como "subdomínio.exemplo.com". Ele usa os mesmos argumentos que a `p` tag.</p>
<p>`adkim` especifica o modo de alinhamento para DKIM, que determina com que rigor os registros DKIM são validados. As opções disponíveis são:<br />
   - `r` modo de alinhamento relaxado, a autenticação DKIM é aplicada com menos rigor.<br />
   - `s` modo de alinhamento estrito. Somente uma correspondência exata com a entrada DKIM para o domínio raiz será vista como validada.</p>
<p>`aspf` determina o modo de alinhamento para verificação do SPF. Leva os mesmos argumentos que `adkim`.</p>
<p>Adicione nas configurações do seu arquivo DNS autoritativo e restart seu DNS. Ex (bind):</p>
<pre class="remontti-code">$TTL 86400      ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2019071900 ; 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.50.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-50-0                      A       45.80.50.0
router-gw                       A       45.80.50.1
                                AAAA    2804:f123:bebe:cafe::1
 
ns1                             A       45.80.50.2
                                AAAA    2804:f123:bebe:cafe::2
hostmaster                      A       45.80.50.2
                                AAAA    2804:f123:bebe:cafe::2
ns2                             A       45.80.50.3
                                AAAA    2804:f123:bebe:cafe::3
 
www                             A       45.80.50.4
                                AAAA    2804:f123:bebe:cafe::4
ftp                             A       45.80.50.4
                                AAAA    2804:f123:bebe:cafe::4
 
zabbix                          A       45.80.50.5
                                AAAA    2804:f123:bebe:cafe::5
phpipam                         A       45.80.50.5
                                AAAA    2804:f123:bebe:cafe::5
 
mail                            A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6
imap                            A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6
pop                             A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6
smtp                            A       45.80.50.6
                                AAAA    2804:f123:bebe:cafe::6
$TTL 300 ; 5 min
$ORIGIN remontti.com.br.
201911._domainkey       TXT     &quot;v=DKIM1; h=sha256; k=rsa; s=email; &quot; &quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3&quot; &quot;ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB&quot;
_adsp._domainkeyem      TXT     &quot;dkim=all&quot;
_dmarc                  TXT     &quot;v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r&quot;</pre>
<p>Teste as chaves para a assinatura e verificação corretas usando o opendkim-testkeycomando:</p>
<pre class="remontti-code"># opendkim-testkey -d remontti.com.br -s 201911</pre>
<p>Se tudo estiver correto, você não deverá obter nenhuma saída. Se você quiser ver mais informações, adicione -vvvno final do comando. Isso produz saída de depuração detalhada. A última mensagem deve ser "tecla OK". Pouco antes disso, você poderá ver a mensagem "chave não segura". Isso é normal e não indica um erro, apenas significa que seu domínio ainda não está configurado para DNSSEC.</p>
<p>Adicione </p>
<pre class="remontti-code">vim /etc/postfix/main.cf</pre>
<pre class="remontti-code"># OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = local:opendkim/opendkim.sock</pre>
<pre class="remontti-code"># systemctl restart opendkim postfix
# systemctl status opendkim postfix</pre>
<h4>Rotação da chave DKIM</h4>
<p> <strong>(Não faça isso agora! Leia com atenção)</strong></p>
<p>O motivo pelo qual o formato AAAAMM é usado é que a prática recomendada exige a alteração das chaves de assinatura DKIM de vez em quando (recomenda-se mensalmente, e não mais que a cada 6 meses). Para fazer isso sem interromper as mensagens em trânsito, você gera as novas chaves usando um novo seletor. O processo é:</p>
<p>Gere novas chaves como anteriormente no /etc/dkimkeys/. Use o ano e o mês atuais para o valor do seletor AAAAMM, para que seja diferente do seletor atualmente em uso.</p>
<pre class="remontti-code"># cd /etc/dkimkeys/
# opendkim-genkey -b 2048 -h rsa-sha256 -r -s 202006 -d remontti.com.br -v</pre>
<p>Use o .txt gerado para adicionar as novas chaves ao seu DNS, usando o novo seletor AAAAMM nos nomes de host. <strong>Não remova ou altere os registros DKIM TXT existentes</strong>. Feito isso, verifique os novos dados da chave usando o seguinte comando:</p>
<pre class="remontti-code"># opendkim-testkey -d remontti.com.br -s 202006 -k remontti.private</pre>
<p>Pare o Postfix e o OpenDKIM para que eles não processem e-mails enquanto você estiver trocando as chaves.</p>
<pre class="remontti-code"># systemctl stop postfix opendkim</pre>
<p>Remova o link anterior do "remontti.private" e link ao novo "202006.private" arquivo gerado e defina as permissões corretas:</p>
<pre class="remontti-code"># cd /etc/dkimkeys
# rm remontti.private 
# ln -s 202006.private  remontti.private
# chown -R opendkim. /etc/dkimkeys/
# chmod -R go-rw /etc/dkimkeys/</pre>
<p>Altere o antigo valores de AAAAMM em key.table para o novo seletor e salve o arquivo.</p>
<pre class="remontti-code"># vim /etc/dkimkeys/key.table </pre>
<pre class="remontti-code">remontti     remontti.com.br:202006:/etc/dkimkeys/remontti.private</pre>
<p>Inicie o OpenDKIM e o Postfix</p>
<pre class="remontti-code"># systemctl start opendkim postfix</pre>
<p>Certifique-se de que ambos iniciem sem erros.</p>
<pre class="remontti-code"># systemctl status opendkim postfix</pre>
<p><strong>Espere algumas semanas para remover o antigo registro pois algum servidor pode estar ainda usando a antiga chave.</strong> (Eu normalmente removo apenas quando crio uma nova)</p>
<h4>FAIL2BAN + NFTABLES</h4>
<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 "invasor".</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.conf</pre>
<p>Procure por "banaction = iptables-multiport" e "banaction_allports = iptables-allports" e altere seu valor para "nftables-allports":</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 "drop all".</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 "blocktype = reject" e altere seu valor para "drop".</p>
<pre class="remontti-code">#blocktype = reject
blocktype = drop</pre>
<p>Ativamos alguns filtros. Se desejar ajustar o tempo te banimento altere o valor de bantime, e os numeros de erros/tentativas em maxretry.</p>
<pre class="remontti-code"># vim /etc/fail2ban/jail.d/defaults-debian.conf</pre>
<p>Adicione no arquivo:</p>
<pre class="remontti-code">[sshd]
enabled = true

[postfix-sasl]
enabled = true
bantime  = 1h
maxretry = 5

[dovecot]
enabled = true
bantime  = 1h
maxretry = 5

[sieve]
enabled = true
bantime  = 1h
maxretry = 5</pre>
<p>Ativamos o nftables e restartamos os serviços:</p>
<pre class="remontti-code"># systemctl enable nftables
# systemctl restart nftables fail2ban</pre>
<p>Para visualizar seu firewall use o comando:</p>
<pre class="remontti-code"># nft list ruleset</pre>
<p>Alguns comandos do fail2ban<br />
Status:</p>
<pre class="remontti-code"># fail2ban-client status</pre>
<p>Status do filtro:</p>
<pre class="remontti-code"># fail2ban-client status NOME_FILTRO</pre>
<p>Remover um IP bloqueado de um filtro:</p>
<pre class="remontti-code"># fail2ban-client set NOME_FILTRO unbanip IP_BLOQUEADO</pre>
<p>Ufaaaa acabamos, 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/3744">Como montar um servidor de e-mail com Postfix, Dovecot, PostfixAdmin, SpamAssassin, Amavis, Clamav,  RoundCube, SPF, DKIM, DMARC, Fail2Ban</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3744/feed</wfw:commentRss>
			<slash:comments>46</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-cxyP5HK8" 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-7vL8e4m9" 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-7vL8e4m9" 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-7vL8e4m9" 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-7vL8e4m9" 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-7vL8e4m9" 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-7vL8e4m9" 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>Instalando Accel-PPP (PPTP/L2TP/SSTP/PPPoE/IPoE) no Debian 9</title>
		<link>https://blog.remontti.com.br/2538</link>
					<comments>https://blog.remontti.com.br/2538#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 16 May 2018 01:50:33 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[accel-ppp]]></category>
		<category><![CDATA[ipeo]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[l2tp]]></category>
		<category><![CDATA[pppoe]]></category>
		<category><![CDATA[pptp]]></category>
		<category><![CDATA[radius]]></category>
		<category><![CDATA[vlanmon]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=2538</guid>

					<description><![CDATA[<p>O projeto ACCEL-PPP de código aberto tem como objetivo montar em um único servidor vários serviços VPN &#8220;all-in-one&#8221; com uma ótima performance. Suas características: Arquitetura modular extensível &#8211; Multi-threaded de alto desempenho. &#8211; PPTP,&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/2538">Instalando Accel-PPP (PPTP/L2TP/SSTP/PPPoE/IPoE) no Debian 9</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/2018/05/accel-ppp-remontti.com_.br_.jpg" alt="" width="850" height="381" class="aligncenter size-full wp-image-2547" srcset="https://blog.remontti.com.br/wp-content/uploads/2018/05/accel-ppp-remontti.com_.br_.jpg 850w, https://blog.remontti.com.br/wp-content/uploads/2018/05/accel-ppp-remontti.com_.br_-300x134.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2018/05/accel-ppp-remontti.com_.br_-768x344.jpg 768w" sizes="auto, (max-width: 850px) 100vw, 850px" /><br />
O projeto ACCEL-PPP de código aberto tem como objetivo montar em um único servidor vários serviços VPN &#8220;all-in-one&#8221; com uma ótima performance. </p>
<p>Suas características:<br />
Arquitetura modular extensível<br />
&#8211; Multi-threaded de alto desempenho.<br />
&#8211; PPTP, PPPoE, L2TPv2, SSTP e IPoE (DHCPv4)<br />
&#8211; Autenticação Radius.<br />
&#8211; Tipos de autenticação suportados: PAP, CHAP (md5), extensões do Microsoft CHAP (incluindo versão 2), sem suporte &#8211; EAP<br />
MPPE suportado.<br />
&#8211; Suporte para IPv6 incluindo o Neighborin Discovery e o DHCPv6 integrados.<br />
&#8211; Controle de banda.<br />
-Entre outros.</p>
<p><strong>INSTALAÇÃO</strong><br />
Distribuição linux: Debian 9 (<a href="https://blog.remontti.com.br/1152" rel="noopener noreferrer" target="_blank">Instalação de forma limpa</a>)<br />
<a href="https://blog.remontti.com.br/3494" rel="noopener noreferrer" target="_blank"><strong>Para o Debian 10 use o tutorial mais recente</strong></a></p>
<p>Instale os pacotes necessários para a compilação do accel-ppp.</p>
<pre class="remontti-code"># apt install git build-essential cmake libsnmp-dev linux-headers-amd64 libpcre3-dev libssl-dev liblua5.1-0-dev</pre>
<p>Vamos duas pastas em em /usr/local/src/: A pasta <strong>accel</strong> onde vamos baixar o projeto através do github e dentro dela vamos criar a <strong>build</strong> onde vamos preparar os arquivos para serem compilados.</p>
<pre class="remontti-code"># mkdir -p /usr/local/src/accel/build
# cd /usr/local/src/accel
# git clone https://github.com/xebd/accel-ppp.git
# cd /usr/local/src/accel/build</pre>
<p>Você pode personalizar o projeto para ativar ou desativar alguns recursos. <a href="https://accel-ppp.org/wiki/doku.php?id=compilation" rel="noopener noreferrer" target="_blank">(*)</a> Vamos utilizar os principais, como radius, ipoe, vlanmon Todas essas opções são opcionais.</p>
<pre class="remontti-code"># cmake \
-DCPACK_TYPE=Debian9 \
-DBUILD_IPOE_DRIVER=TRUE \
-DBUILD_VLAN_MON_DRIVER=TRUE \
-DRADIUS=TRUE \
-DNETSNMP=TRUE \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=/usr \
-DKDIR=/usr/src/linux-headers-$(uname -r) \
../accel-ppp</pre>
<p>Vamos a compilação</p>
<pre class="remontti-code"># make</pre>
<p>Copie os módulos do kernel ipoe e vlan_mon e após carregue os mesmo</p>
<pre class="remontti-code"># cp drivers/ipoe/driver/ipoe.ko /lib/modules/$(uname -r)
# cp drivers/vlan_mon/driver/vlan_mon.ko /lib/modules/$(uname -r)
# depmod -a
# modprobe  vlan_mon
# modprobe  ipoe</pre>
<p>Vamos adicionar os módulos para iniciar durante o boot. </p>
<pre class="remontti-code"># echo &quot;vlan_mon&quot; &gt;&gt; /etc/modules
# echo &quot;ipoe&quot; &gt;&gt; /etc/modules</pre>
<p>Agora vamos criar nosso pacote .DEB e instalá-lo</p>
<pre class="remontti-code"># cpack -G DEB
# apt install ./accel-ppp.deb</pre>
<p>Bingo!!! <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;" /> Seu a accel-ppp foi instalado!</p>
<p>Habilitamos o serviço accel-ppp para iniciar com o sistema</p>
<pre class="remontti-code"># systemctl enable accel-ppp</pre>
<p>Um arquivo de modelo do accel-ppp vem como exemplo em /etc/accel-ppp.conf.dist, faça uma copia para /etc/accel-ppp.conf</p>
<pre class="remontti-code"># cp /etc/accel-ppp.conf.dist  /etc/accel-ppp.conf</pre>
<p>Agora edite o a arquivo de configuração /etc/accel-ppp.conf de acordo com suas necessidades.</p>
<p>Lembre-se de restartar o serviço após alteração no arquivo de configuração.</p>
<pre class="remontti-code">/etc/init.d/accel-ppp restart</pre>
<hr />
<p>Criei um script de auto instalação <a href="https://blog.remontti.com.br/scripts/accel-ppp-auto-install-debian9.sh" rel="noopener noreferrer" target="_blank"><strong>accel-ppp-auto-install-debian9.sh</strong></a><br />
Para usar siga os passos abaixo:</p>
<pre class="remontti-code"># wget https://blog.remontti.com.br/scripts/accel-ppp-auto-install-debian9.sh 
# chmod +x accel-ppp-auto-install-debian9.sh
# sh accel-ppp-auto-install-debian9.sh</pre>
<p>Grupo do telegram: <a href="https://t.me/braccelppp" rel="noopener noreferrer" target="_blank">https://t.me/braccelppp</a></p>
<p>FONTE: <a href="https://accel-ppp.org/" rel="noopener noreferrer" target="_blank">https://accel-ppp.org/</a></p>
<p>O post <a href="https://blog.remontti.com.br/2538">Instalando Accel-PPP (PPTP/L2TP/SSTP/PPPoE/IPoE) no Debian 9</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/2538/feed</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Montando um servidor de E-mail Completo com Postfix+Dovecot+PostfixAdmin+SpamAssassin+SPF+RoundCubeMail+IPv4/IPv6 (Desatualizado)</title>
		<link>https://blog.remontti.com.br/1485</link>
					<comments>https://blog.remontti.com.br/1485#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 30 Jan 2017 20:35:21 +0000</pubDate>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[debian jessie]]></category>
		<category><![CDATA[Dovecot]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[PostfixAdmin]]></category>
		<category><![CDATA[Quota]]></category>
		<category><![CDATA[Roudcube Webmail]]></category>
		<category><![CDATA[RoundCubeMail]]></category>
		<category><![CDATA[SpamAssassin]]></category>
		<category><![CDATA[SPF]]></category>
		<guid isPermaLink="false">http://blog.remontti.com.br/?p=1485</guid>

					<description><![CDATA[<p>Um novo tutorial mais atualizado em: https://blog.remontti.com.br/3744 Neste tutorial vou ensinar como configurar um servidor de e-mail com domínios virtuais com integração dos usuários/domínios no banco de dados MySQL. &#8211; Postfix para nosso MTA.&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/1485">Montando um servidor de E-mail Completo com Postfix+Dovecot+PostfixAdmin+SpamAssassin+SPF+RoundCubeMail+IPv4/IPv6 (Desatualizado)</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/2016/10/post-emails-1024x486.jpg" alt="post-emails" width="1024" height="486" class="alignnone size-large wp-image-1487" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/post-emails-1024x486.jpg 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/10/post-emails-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/post-emails-768x364.jpg 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/post-emails.jpg 1054w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<h1><a href="https://blog.remontti.com.br/3744"><font color=red>Um novo tutorial mais atualizado em: https://blog.remontti.com.br/3744</font></a></h1>
<p>Neste tutorial vou ensinar como configurar um servidor de e-mail com domínios virtuais com integração dos usuários/domínios no banco de dados MySQL.<br />
&#8211; Postfix para nosso MTA.<br />
&#8211; Dovecot como servidor Imap e Pop.<br />
&#8211; Postfixadmin para o gerenciamento de contas de Emails e domínios<br />
&#8211; Spamassassin, Clamav e o Amavis para controle de Anti-Spam e Anti-Vírus<br />
&#8211; RoundCubeMail para Webmail</p>
<p>OBS: Não vou entrar em muitos detalhes, pois o tuto já ficou bem longo. E desculpe pelos erros de portuga, mas vou fazendo na corrida.</p>
<h4>CENÁRIOS</h4>
<p>IP: 250.250.0.6 / 2000:fff:250:250:0::6<br />
Reverso sobre os IPS 250.250.0.6 / 2000:fff:250:250:0::6: mail.dominiorev.com.br<br />
Domínios virtuais: remontti.com.br / dominiorev.com.br / você pode ter diversos</p>
<h4>REQUISITOS</h4>
<p>1 &#8211; Ter configurado <a href="https://blog.remontti.com.br/1397" target="_blank" rel="noopener noreferrer">DNS Autoritativo e Reverso sobre seus IPS</a>. (Não necessariamente no mesmo servidor)<br />
2 &#8211; Debian 8 Jessie recomendo uma <a href="https://blog.remontti.com.br/1152" target="_blank" rel="noopener noreferrer">instalação limpa do Debian</a><br />
3 &#8211; <a href="https://blog.remontti.com.br/1296" target="_blank" rel="noopener noreferrer">Serviço Web Rodando</a><br />
4 &#8211; Servidor Atualizado: # apt update &#038;&#038; apt upgrade</p>
<h4>AJUSTES</h4>
<p>Ajuste o nome do servidor alterando alguns parâmetros do sistema.</p>
<pre class="remontti-code"># vim /etc/hosts</pre>
<pre class="remontti-code">
127.0.0.1       localhost
250.250.250.6     mail.dominiorev.com.br    mail
{...}
</pre>
<pre class="remontti-code"># vim /etc/hostname</pre>
<pre class="remontti-code">
mail
</pre>
<p>Configure sua interface de rede. Vou deixar um modelo, onde o bloco de IPv4 é um /28 (255.255.255.240) e um /64 para IPv6. Estou usando IPs com base no cenário apresentado no tutorial [<a href="https://blog.remontti.com.br/1397" target="_blank" rel="noopener noreferrer">Servidor DNS Recursivo, Autoritativo e Reverso com Bind9 (IPv4+IPv6)</a>]</p>
<pre class="remontti-code"># vim /etc/network/interfaces</pre>
<pre class="remontti-code">
auto eth0
iface eth0 inet static
        address 250.250.0.6
        netmask 255.255.255.240
        network 250.250.0.0
        broadcast 250.250.0.15
        gateway 250.250.0.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 250.250.0.2
        dns-search ns1.dominiorev.com.br

#v6
iface eth0 inet6 static
        pre-up modprobe ipv6
        address 2000:fff:250:250:0::6
        netmask 64
        gateway 2000:fff:250:250:0::1
</pre>
<p>Reinicie seu servidor</p>
<pre class="remontti-code"> # reboot</pre>
<p>OBS: Lembrando que a rota default é entregue via route advertise, então se você não estiver entregando desta forma será necessários criar uma rota estática, no Debian você pode adicionar o seguinte parâmetro em /etc/rc.local ( <b>ip -6 route add ::/0 via 2000:fff:250:250:0::1</b> ) assim toda vez que o sistema inicializar sua rota default (gateway) IPv6 é configurada é configurado.</p>
<h4>POSTFIX / DOVECOTE</h4>
<p>O Postfix é um agente de transferência de emails (MTA = Message Transfer Agent), um software livre para envio e entrega de emails. Rápido e fácil de administrar, muito utilizado em servidores UNIX.<br />
Algumas vantagens:<br />
&#8211; Suporte a Ipv6<br />
&#8211; Suporte a MIME<br />
&#8211; Autenticação SASL<br />
&#8211; Canal seguro utilizando TLS<br />
&#8211; Suporte a banco de dados(MySQL,PostgreSQL,LDAP,entre outros)<br />
&#8211; Verificação a listas RBL<br />
&#8211; Extenso suporte a filtros<br />
&#8211; Suporte a expressão-regular<br />
&#8211; Verificação de cabeçalho<br />
&#8211; Verificação no corpo da mensagem<br />
&#8211; Suporte a Greylisting e SPF através de plugins.</p>
<p>Dovecot é um servidor de IMAP e POP3 open source para sistemas Linux e UNIX, escrito primariamente com segurança em mente, tem o objetivo primário de ser um servidor de email leve, rápido e de fácil configuração. Dovecot suporta mbox, Maildir e seu próprio formato nativo de alta performance, Dbox. É 100% compatível com clientes de emails acessando as caixas de correio diretamente. Também inclui um agente de entrega de emails com suporte opcional a filtros Sieve, o que acho muito legal!</p>
<p>Vamos a instalação, não esqueça de antes ter instalado <a href="https://blog.remontti.com.br/1296" target="_blank" rel="noopener noreferrer">Serviço Web</a> </p>
<pre class="remontti-code"># apt update &amp;&amp; apt upgrade
# apt install dovecot-common dovecot-mysql dovecot-imapd dovecot-pop3d dovecot-lmtpd postfix postfix-mysql openssl php5-imap dovecot-sieve dovecot-managesieved</pre>
<p>Responda:<br />
<strong>Site da Internet</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125641.png" data-rel="lightbox-gallery-PktsnA4F" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125641-300x157.png" alt="screenshot_20161017_125641" width="300" height="157" class="alignnone size-medium wp-image-1489" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125641-300x157.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125641-768x403.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125641-1024x537.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125641.png 1190w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Se seu DNS reverso estiver ok ele virá já com o domínio reverso de seu IP, mas isso não é necessariamente ser o nome do ip rever, mas eu recomendo que tenha confurado o reverso para o seu servidor de e-mail.<br />
<strong>mail.dominiorev.com.br</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125730.png" data-rel="lightbox-gallery-PktsnA4F" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125730-300x157.png" alt="screenshot_20161017_125730" width="300" height="157" class="alignnone size-medium wp-image-1490" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125730-300x157.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125730-768x402.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125730-1024x536.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_125730.png 1189w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Verifique o arquivo /etc/mailname e sertifique-se que seja seu domínio.</p>
<pre class="remontti-code"># vim /etc/mailname</pre>
<pre class="remontti-code">mail.dominiorev.com.br</pre>
<p>Restarte o apache pois instalamos o pacote php5-imap</p>
<pre class="remontti-code"># /etc/init.d/apache2 restart</pre>
<p>Adicione um e-mail para seu usuário root do Linux</p>
<pre class="remontti-code"># vim /etc/aliases</pre>
<pre class="remontti-code">root: postmaster@dominiorev.com.br</pre>
<pre class="remontti-code"># newaliases</pre>
<h4>POSTFIXADMIN</h4>
<p>Instalaremos nosso PostfixAdmin para gerenciar nossos dominios e e-mail.<br />
Inicialmente vamos criar nosso banco de dados MySQL.<br />
<strong>Não esqueça de alterar a SENHA.</strong></p>
<pre class="remontti-code"># mysql -uroot -p -e &quot;CREATE DATABASE postfix; GRANT ALL PRIVILEGES ON postfix.* TO &#039;postfix&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;&lt;strong&gt;SENHA&lt;/strong&gt;&#039;;&quot;</pre>
<p>Será solicitado a senha do usuários root do mysql.</p>
<p>Vamos baixar o PostfixAdmin, hoje (Jan 2017) o projeto está em sua versão 3.0 <a href="https://sourceforge.net/projects/postfixadmin/" target="_blank" rel="noopener noreferrer">https://sourceforge.net/projects/postfixadmin/</a>. Vou baixa-lo no diretório padrão do Apache2, faça de acordo com o seu cenário. Após vou extrai-lo, renomeá-lo e setar as permissões necessárias.</p>
<pre class="remontti-code"># cd /var/www/html/
# wget --no-check-certificate --content-disposition http://sourceforge.net/projects/postfixadmin/files/latest/download?source=files
# tar xfvz postfixadmin-*.tar.gz
# mv postfixadmin*/ postfixadmin
# chown www-data:www-data -R postfixadmin
# cd postfixadmin
# cp config.inc.php config.inc.php.orig
</pre>
<p>Editamos o config.inc.php para fazer algumas alterações e conectar com nosso banco de dados.</p>
<pre class="remontti-code"># vim config.inc.php</pre>
<p>Procure pelas seguintes linhas e altere conforme a baixo.</p>
<pre class="remontti-code">
$CONF[&#039;configured&#039;] = true;
$CONF[&#039;default_language&#039;] = &#039;pt-br&#039;;

$CONF[&#039;database_type&#039;] = &#039;mysql&#039;;
$CONF[&#039;database_host&#039;] = &#039;localhost&#039;;
$CONF[&#039;database_user&#039;] = &#039;postfix&#039;;
$CONF[&#039;database_password&#039;] = &#039;SENHA&#039;;
$CONF[&#039;database_name&#039;] = &#039;postfix&#039;;

# Defina o tipo de criptografia para as senhas salvas no BD.
$CONF[&#039;encrypt&#039;] = &#039;md5&#039;;
</pre>
<pre class="remontti-code"># cp config.inc.php config.local.php</pre>
<p>Como existe varias alterações <i>&#8220;change-this-to-your.domain.tld&#8221;</i> vou usar o comando sed para alterar todas de uma única vez. <strong>Não esqueça de substituir pelo seu dominio.</strong></p>
<pre class="remontti-code"># sed -i &#039;s/change-this-to-your.domain.tld/dominiorev.com.br/&#039; config.inc.php</pre>
<p>Acesse:<br />
<strong>http://SEU-DOMINO/postfixadmin/setup.php</strong></p>
<p>No primeiro acesso suas tabelas já serão criadas no seu bd, você deve ter todas as dependências <strong>OK</strong>.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_132809.png" data-rel="lightbox-gallery-PktsnA4F" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_132809-201x300.png" alt="screenshot_20161017_132809" width="201" height="300" class="alignnone size-medium wp-image-1492" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_132809-201x300.png 201w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_132809-768x1147.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_132809-686x1024.png 686w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_132809.png 1100w" sizes="auto, (max-width: 201px) 100vw, 201px" /></a></p>
<p>Se deparar com o erro: <em><font color="blue">&#8220;ERROR: the templates_c directory doesn&#8217;t exist or isn&#8217;t writeable for the webserver&#8221;</em></font> crie o diretório templates_c com <strong># mkdir templates_c &#038;&#038; chown www-data. templates_c</strong></p>
<p>Bem no final temos: <strong>Change setup password</strong><br />
Preencha os campos Setup password com uma senha e repita (Essa senha será necessária pra criar administradores do PostfixAdmin) e clique em <strong>Generate password hash</strong></p>
<p>Voce vai receber uma mensagem parecida com essa:<br />
<font color="red"><i>If you want to use the password you entered as setup password, edit config.inc.php or config.local.php and set<br />
$CONF[&#8216;setup_password&#8217;] = &#8216;ca06e6cd4df066ac8e7999616a773b00:51508f16ca5ef631a5ed23ccc44160d934375ec5&#8217;; </i></font><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710.png" data-rel="lightbox-gallery-PktsnA4F" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710-300x58.png" alt="screenshot_20161017_134710" width="300" height="58" class="alignnone size-medium wp-image-1497" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710-300x58.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710-768x148.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134710.png 786w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Esta senha criptografada, será necessários informar no arquivo config.inc.php antes de prosseguir. Então vamos a edição.</p>
<pre class="remontti-code"># vim  config.inc.php</pre>
<p>Localize:</p>
<pre class="remontti-code">$CONF[&#039;setup_password&#039;] = &#039;changeme&#039;;</pre>
<p>Altere para:</p>
<pre class="remontti-code">$CONF[&#039;setup_password&#039;] = &#039;ca06e6cd4df066ac8e7999616a773b00:51508f16ca5ef631a5ed23ccc44160d934375ec5&#039;;</pre>
<p>Salve se arquivo e volte para seu navegador. Em <strong>Create superadmin account</strong> vamos criar nosso usuário administrador do PostfixAdmin.</p>
<p>Nos campos:<br />
<strong>Setup password</strong> = Informe a senha q você gerou no passo anterior.<br />
<strong>Administrador:</strong> = um endereço email que será o seu login (postmaster@dominiorev.com.br)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743.png" data-rel="lightbox-gallery-PktsnA4F" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743-300x161.png" alt="screenshot_20161017_134743" width="300" height="161" class="alignnone size-medium wp-image-1498" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743-300x161.png 300w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743-768x413.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_134743.png 779w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Clique em <strong>Criar administrador</strong></p>
<p>Deve retornar a mensagem:</p>
<pre class="remontti-code">
	Administrador criado! (postmaster@dominiorev.com.br)
	You are done with your basic setup.

	You can now login to PostfixAdmin using the account you just created.
</pre>
<p>Agora por segurança vamos acessar nosso diretório do postfixadmin (/var/www/html/postfixadmin) e renomear o arquivo setup.php</p>
<pre class="remontti-code"># mv setup.php QLQRNOME_setup.php</pre>
<p>Acesse: http://SEU-DOMINO/postfixadmin/</p>
<p>Já é possível acessa-lo com nosso usuários administrador, e adicionar seus domínios e contas de e-mails.<br />
Domínios => Criar  Domínio<br />
Virtual => Criar conta de Email</p>
<p>Dado continuidade criaremos nosso usuários vmail que será o &#8220;cara&#8221; responsável pelo trabalho.</p>
<pre class="remontti-code"># groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /var/vmail
# mkdir /var/vmail
# chown vmail:vmail /var/vmail</pre>
<p>Edite o arquivo /etc/postfix/main.cf</p>
<pre class="remontti-code"># cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
# vim /etc/postfix/main.cf</pre>
<p>Altere e adicione como descrito abaixo.</p>
<pre class="remontti-code">
#--------ALTERE--------#
smtpd_banner = $myhostname
myorigin = $myhostname
mydestination = localhost

#--------COMENTE--------#
#relayhost =
#mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
#mailbox_size_limit = 0

#--------ADD AO FINAL--------#

# Authentification
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql_sender_login_maps.cf
broken_sasl_auth_clients = yes

# Virtual mailboxes
local_transport = virtual
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /var/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 104
virtual_transport = virtual
#virtual_transport = dovecot ????????/ ql ?
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
dovecot_destination_recipient_limit = 1

###### EXTRAS COMENTADO #######
# Tamanho maximo do anexo (21 MB)
# No webmail php deve permitir upar esse tamanho
message_size_limit = 22020096

# Um pouco mais de  protecao contra spam
disable_vrfy_command = yes

# A RFC 821 basicamente exige que os enderecos sejam envelopados ou contidos por &lt;&gt;.
# Seguir esta regra faz com que se use essa notacao na sessao SMTP. Isso ajuda a barrar alguns Mailers.
strict_rfc821_envelopes = yes

# Caixa postal inexistente devolver aosender o erro 500,
# desta forma daqui alguns minutos voce nao precisara processar novamente o mesmo spam.
unknown_local_recipient_reject_code = 500

# E rejeitar com erro 554 enderecos desconhecidos
unknown_address_reject_code = 554

# Tambem com o erro 554 podemos rejeitar as conexoes que venham de hostnames desconhecidos
unknown_hostname_reject_code = 554

# Os cliente desconhecidos tambem rejeitaremos com o mesmo erro
unknown_client_reject_code = 554

# Vamos definir que o servidores remotos podem fazer no maximo 10
# conexõsimultaneas (e um valor que trabalho, editem conforme a necessidade).
# Um spammer faz mais de 20
smtp_destination_recipient_limit = 10

# Vamos definir que a conexao so pode cometer 3 erros de codigos 500
# (erros definitivos), apos isto sera desconectado
smtpd_hard_error_limit = 3

# Para erros de codigo 400 (erros temporarios), podemos desconecta-los na primeira
smtpd_soft_error_limit = 1

# Bom, claro que o spammer tambem pode ser desconectado e depois se reconectar,
# entao vamos nos prevenir destes espertinhos definindo quantas conexoes ele pode fazer por minuto.
smtpd_client_connection_count_limit = 10

# Nestas conexoes vamos limitar quantas mensagens ele pode mandar por minuto,
# no meu caso uso 25. Se algum usuario seu reclamar deste limite,
# classifique-o como ninja ou na pior hipotese, um mail maniaco.
smtpd_client_message_rate_limit = 25

# Deixar um spammer maluco e faze-lo perder tempo. Dificilmente um servidor conectado
# ao seu servidor vai cometer erros, os spammer cometem muitos erros, pois eles ficam tentando.
# Para irrita-los e quem sabe um dia desistirem de mim, eu travo eles dentro do meu servidor a cada erro.
# No meu caso, a cada erro eu os travo por 20 segundos. Ate que diminuiu o numero de spammers no meu servidor,
# devo estar na blacklist deles.rs
smtpd_error_sleep_time = 20

# Para este tipo de problema, os spammers podem resetar os erros deles.
# Para evitar que eles facam isto e sejam desconetados, podemos dizer se eles podem ou nao fazer isto.
# Como colher de cha, vamos deixar fazer isto apenas uma vez (ate porque servidores as vezes usam este comando).
# Permitir a maquina remota dar o comando RSET apenas 1 vez.
smtpd_junk_command_limit = 1


# Defina tambem o numero maximo de destinatarios em uma unica mensagem.
# Utilize o numero que melhor lhe convir, entreviste pessoas chaves se necessarios.
smtpd_recipient_limit = 50

# Os spammers nao se preocupam muito com isto,
# entao uma otima pratica para bloquear spams eh
# tornar a identificacao por HELO/EHLO obrigatoria.
smtpd_helo_required = yes

# Um pouco mais sobre o HELO/EHLO eh definir um tempo
# limite para o servidor fazer a identificacao, um
# servidor serio nao tem porque ficar enrolando.
# Vai diminuindo o tempo e observando os resultados.
# Vamos comecar com 60 segundos
smtp_helo_timeout = 60s

smtpd_helo_restrictions =	permit_mynetworks,
				permit_sasl_authenticated,
				reject_invalid_helo_hostname,
				reject_non_fqdn_helo_hostname,
				reject_unknown_helo_hostname,
				reject_unauth_pipelining

smtpd_sender_restrictions =	reject_non_fqdn_sender,
				reject_unknown_sender_domain,
				reject_unlisted_sender,
				reject_authenticated_sender_login_mismatch,
				permit_sasl_authenticated,
				permit_mynetworks

smtpd_recipient_restrictions =  permit_sasl_authenticated,
                                permit_mynetworks,
                                reject_unauth_destination,
                                reject_unknown_reverse_client_hostname,
                                reject_invalid_hostname,
                                reject_non_fqdn_hostname,
                                reject_non_fqdn_sender,
                                reject_non_fqdn_recipient,
                                reject_unknown_sender_domain,
                                reject_unknown_recipient_domain,
                                reject_unauth_pipelining,
                                reject_rbl_client zen.spamhaus.org,
                                reject_rbl_client bl.spamcop.net,
                                reject_rbl_client dnsbl.sorbs.net,
                                permit
</pre>
<p><strong>OBS RBLs</strong>: zen.spamhaus.org, bl.spamcop.net, dnsbl.sorbs.net<br />
Caso não queira utilizar remova os campos <i>reject_rbl_client</i> ou se desejar adicionar outras&#8230; </p>
<p>Mais informações você encontra em:<br />
http://www.postfix.org/VIRTUAL_README.html#virtual_mailbox</p>
<p>Precisamos criar 4 arquivos que farão a conexão com o BD, pra facilitar criamos nossa variável MINHASENHA</p>
<p>Vamos criar uma variável com o valor da senha que foi criada para o usuarios postfix do mysql, assim ira facilitar.</p>
<pre class="remontti-code"># MINHASENHA=&#039;sua-senha-do-usuario-postifix-do-mysql&#039;</pre>
<p>Não use $ ou # em sua senha</p>
<p><strong>mysql_virtual_alias_maps.cf</strong></p>
<pre class="remontti-code"># echo &quot;
hosts = localhost
user = postfix
password = $MINHASENHA
dbname = postfix
query = SELECT goto FROM alias WHERE address=&#039;%s&#039; AND active = &#039;1&#039;
&quot; &gt;&gt; /etc/postfix/mysql_virtual_alias_maps.cf</pre>
<p><strong>mysql_virtual_mailbox_maps.cf</strong></p>
<pre class="remontti-code"># echo &quot;
hosts = localhost
user = postfix
password = $MINHASENHA
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username=&#039;%s&#039; AND active = &#039;1&#039;
&quot; &gt;&gt; /etc/postfix/mysql_virtual_mailbox_maps.cf</pre>
<p><strong>mysql_sender_login_maps.cf</strong></p>
<pre class="remontti-code"># echo &quot;
hosts = localhost
user = postfix
password = $MINHASENHA
dbname = postfix
query = SELECT username AS allowedUser FROM mailbox WHERE username=&#039;%s&#039; AND active = 1 UNION SELECT goto FROM alias WHERE address=&#039;%s&#039; AND active = &#039;1&#039;
&quot; &gt;&gt; /etc/postfix/mysql_sender_login_maps.cf</pre>
<p><strong>mysql_virtual_domains_maps.cf</strong></p>
<pre class="remontti-code"># echo &quot;
hosts = localhost
user = postfix
password = $MINHASENHA
dbname = postfix
query = SELECT domain FROM domain WHERE domain=&#039;%s&#039; AND active = &#039;1&#039;
&quot; &gt;&gt; /etc/postfix/mysql_virtual_domains_maps.cf</pre>
<p>Acesse o diretório de instalação e verifique se os arquivos com as iniciais mysql_* foram criados. Depois altere as permissões e grupos.</p>
<pre class="remontti-code"># cd /etc/postfix
# ls -lh mysql_*
# chmod o-rwx,g+r mysql_*
# chgrp postfix mysql_*</pre>
<p>Vamos as alterações no master.cf.</p>
<p>Faça um backup do arquivo original antes e adicione no final:</p>
<pre class="remontti-code"># cp /etc/postfix/master.cf /etc/postfix/master.cf.orig
# vim /etc/postfix/master.cf</pre>
<p>Adicione ao final:</p>
<pre class="remontti-code">
# Dovecot
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
</pre>
<p>Localize as seguintes linhas e descomente-as:</p>
<pre class="remontti-code">
submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_sasl_auth_enable=yes

smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
</pre>
<p>Em altere os valores de smtpd_client_restrictions, os originais são diferentes. (veja na imagem abaixo como fica)</p>
<pre class="remontti-code">
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
[...]
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_143502.png" data-rel="lightbox-gallery-PktsnA4F" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_143502-254x300.png" alt="screenshot_20161017_143502" width="254" height="300" class="alignnone size-medium wp-image-1500" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_143502-254x300.png 254w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_143502.png 694w" sizes="auto, (max-width: 254px) 100vw, 254px" /></a></p>
<p><strong>Configurando o Dovecot</strong></p>
<p>Vou usar o comando sed para fazer as alterações necessárias em vez de ficarmos abrindo arquivo e editando.</p>
<pre class="remontti-code"># cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
# sed -i -e &#039;s/#listen/listen/&#039; /etc/dovecot/dovecot.conf

# cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
# sed -i -e &#039;s/#driver =/driver = mysql/&#039; /etc/dovecot/dovecot-sql.conf.ext</pre>
<p>Se voce ainda não reiniciou a maquina sua variavel $MINHASENHA ainda está carregando sua senha, voce pode executar # echo $MINHASENHA ve se retorna ela. se não repita o comando</p>
<pre class="remontti-code">
# MINHASENHA=&#039;sua-senha-do-usuario-postifix-do-mysql&#039;

# sed -i -e &quot;s/#connect =/connect = host=localhost dbname=postfix user=postfix password=$MINHASENHA/&quot; /etc/dovecot/dovecot-sql.conf.ext
# sed -i -e &#039;s/#default_pass_scheme/default_pass_scheme/&#039; /etc/dovecot/dovecot-sql.conf.ext</pre>
<p>Vamos inserir algumas linhas ao final de dovecot-sql.conf.ext.</p>
<pre class="remontti-code">
# echo &quot;&quot; &gt;&gt; /etc/dovecot/dovecot-sql.conf.ext
# echo &quot;user_query = SELECT concat(&#039;/var/vmail/&#039;, maildir) as home, concat(&#039;maildir:/var/vmail/&#039;, maildir) as mail, 5000 AS uid, 5000 AS gid, concat(&#039;*:bytes=&#039;, (quota)) AS quota_rule FROM mailbox WHERE username = &#039;%u&#039; AND active = &#039;1&#039;;&quot; &gt;&gt; /etc/dovecot/dovecot-sql.conf.ext
# echo &quot;&quot; &gt;&gt; /etc/dovecot/dovecot-sql.conf.ext
# echo &quot;password_query = SELECT username as user, password, concat(&#039;/var/vmail/&#039;, maildir) as userdb_home, concat(&#039;maildir:/var/vmail/&#039;, maildir) as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid, concat(&#039;*:bytes=&#039;, (quota)) AS userdb_quota_rule FROM mailbox WHERE username = &#039;%u&#039; AND active = &#039;1&#039;;&quot; &gt;&gt; /etc/dovecot/dovecot-sql.conf.ext
</pre>
<p>Alterações dos arquivos 10-auth.conf / 10-logging.conf / 10-ssl.conf</p>
<pre class="remontti-code">
# cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
# sed -i -e &#039;s/#disable_plaintext_auth = yes/disable_plaintext_auth = no/&#039; /etc/dovecot/conf.d/10-auth.conf
# sed -i -e &#039;s/#auth_mechanisms = plain/auth_mechanisms = plain login/&#039; /etc/dovecot/conf.d/10-auth.conf
# sed -i -e &#039;s/!include auth-system.conf.ext/#!include auth-system.conf.ext/&#039; /etc/dovecot/conf.d/10-auth.conf
# sed -i -e &#039;s/#!include auth-sql.conf.ext/!include auth-sql.conf.ext/&#039; /etc/dovecot/conf.d/10-auth.conf

# cp /etc/dovecot/conf.d/10-logging.conf /etc/dovecot/conf.d/10-logging.conf.orig
# sed -i -e &#039;s/#log_path/log_path/&#039; /etc/dovecot/conf.d/10-logging.conf
# sed -i -e &#039;s/#log_timestamp = &quot;%b %d %H:%M:%S &quot;/log_timestamp = &quot;%Y-%m-%d %H:%M:%S &quot;/&#039; /etc/dovecot/conf.d/10-logging.conf

# cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
# sed -i -e &#039;s/ssl = no/#ssl = no/&#039; /etc/dovecot/conf.d/10-ssl.conf
# sed -i -e &#039;s/#ssl_cert =/ssl_cert =/&#039; /etc/dovecot/conf.d/10-ssl.conf
# sed -i -e &#039;s/#ssl_key =/ssl_key =/&#039; /etc/dovecot/conf.d/10-ssl.conf</pre>
<p>Criamos os certificados para o dovecot</p>
<pre class="remontti-code"># openssl req -new -x509 -days 3650 -nodes -out &quot;/etc/dovecot/dovecot.pem&quot; -keyout &quot;/etc/dovecot/private/dovecot.pem&quot;</pre>
<p>Em 10-master.conf ficou complicado fazer alteração com sed então vamos no braço.</p>
<pre class="remontti-code"># cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
# vim /etc/dovecot/conf.d/10-master.conf</pre>
<p>em :service auth {<br />
COMENTE tudo de unix_listener auth-userdb</p>
<pre class="remontti-code">
service auth {

#unix_listener auth-userdb {
 #mode = 0666
 #user =
 #group =
#}

#descomente
 unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }

#add
  unix_listener auth-master {
    mode = 0666
  }

  #Descomente
  user = $default_internal_user
}</pre>
<p>Vamos criar um filtro para que todas as mensagens marcada com spam sejam movida para o diretórios SPAM.</p>
<pre class="remontti-code">
# mkdir /var/lib/dovecot/sieve/
# cp /etc/dovecot/conf.d/90-sieve.conf /etc/dovecot/conf.d/90-sieve.conf.orig
# sed -i -e &#039;s/#sieve_default =/sieve_default =/&#039; /etc/dovecot/conf.d/90-sieve.conf
# sed -i -e &#039;s/#sieve_global_dir =/sieve_global_dir = \/var\/lib\/dovecot\/sieve\/ /&#039; /etc/dovecot/conf.d/90-sieve.conf

# echo &#039;require [&quot;fileinto&quot;];&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve
# echo &#039;# rule:[Spam]&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve
# echo &#039;if header :contains &quot;X-Spam-Flag&quot; &quot;YES&quot; {&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve
# echo &#039;        fileinto &quot;Junk&quot;;&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve
# echo &#039;}&#039; &gt;&gt; /var/lib/dovecot/sieve/default.sieve

# sievec /var/lib/dovecot/sieve/default.sieve
# chown -R vmail:vmail /var/lib/dovecot

# cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
# sed -i -e &#039;s/mail_location = mbox:~\/mail:INBOX=\/var\/mail\/%u/mail_location = mbox:~\/mail:INBOX=\/var\/vmail\/%u/&#039; /etc/dovecot/conf.d/10-mail.conf
</pre>
<p>!Exatamente nessa ordem!</p>
<pre class="remontti-code">
# sed -i -e &#039;s/inbox = yes/inbox = yes\n  /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      special_use = \Junk /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      auto = subscribe /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    mailbox Junk { /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      special_use = \Sent /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      auto = subscribe /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    mailbox Sent { /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      special_use = \Drafts /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      auto = subscribe /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    mailbox Drafts { /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      special_use = \Trash /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n      auto = subscribe /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n  mailbox Trash { /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/inbox = yes/inbox = yes\n  /&#039; /etc/dovecot/conf.d/10-mail.conf
# sed -i -e &#039;s/#mail_plugins =/mail_plugins = quota/&#039; /etc/dovecot/conf.d/10-mail.conf
</pre>
<pre class="remontti-code">
# cp /etc/dovecot/conf.d/20-managesieve.conf  /etc/dovecot/conf.d/20-managesieve.conf.orig
# vim /etc/dovecot/conf.d/20-managesieve.conf</pre>
<p>Descomente:</p>
<pre class="remontti-code">
# Uncomment to enable managesieve protocol:
protocols = $protocols sieve

service managesieve-login {
}
service managesieve {
}
protocol sieve {
}</pre>
<pre class="remontti-code"># cp /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.orig</pre>
<p>Altere nos comandos (dominiorev.com.br) para seu domínio</p>
<pre class="remontti-code">
!# sed -i -e &#039;s/#mail_plugins = $mail_plugins/#mail_plugins = $mail_plugins\n  postmaster_address = postmaster@dominiorev.com.br/&#039; /etc/dovecot/conf.d/15-lda.conf
# sed -i -e &#039;s/#mail_plugins = $mail_plugins/#mail_plugins = $mail_plugins\n  auth_socket_path = \/var\/run\/dovecot\/auth-master/&#039; /etc/dovecot/conf.d/15-lda.conf
# sed -i -e &#039;s/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins sieve/&#039; /etc/dovecot/conf.d/15-lda.conf

# cp /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.orig
# sed -i -e &#039;s/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins quota imap_quota/&#039; /etc/dovecot/conf.d/20-imap.conf

# cp /etc/dovecot/conf.d/20-pop3.conf /etc/dovecot/conf.d/20-pop3.conf.orig
# sed -i -e &#039;s/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins quota/&#039; /etc/dovecot/conf.d/20-pop3.conf

# cp /etc/dovecot/conf.d/90-quota.conf /etc/dovecot/conf.d/90-quota.conf.orig
# sed -i -e &#039;s/#quota = maildir/quota = maildir/&#039; /etc/dovecot/conf.d/90-quota.conf
# sed -i -e &#039;s/#quota_rule =/quota_rule =/&#039; /etc/dovecot/conf.d/90-quota.conf
# sed -i -e &#039;s/#quota_rule2 =/quota_rule2 =/&#039; /etc/dovecot/conf.d/90-quota.conf
# sed -i -e &#039;s/#quota_warning/quota_warning/&#039; /etc/dovecot/conf.d/90-quota.conf
</pre>
<pre class="remontti-code"># vim /etc/dovecot/conf.d/90-quota.conf</pre>
<p>Descomente</p>
<pre class="remontti-code">
service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  user = dovecot
  unix_listener quota-warning {
    user = vmail
  }
}</pre>
<pre class="remontti-code"># vim /usr/local/bin/quota-warning.sh</pre>
<pre class="remontti-code">
#!/bin/sh
PERCENT=$1
USER=$2
cat &lt;&lt; EOF | /usr/lib/dovecot/deliver -d $USER -o &quot;plugin/quota=maildir:User quota:noenforcing&quot;
From: postmaster@mail.dominiorev.com.br
Subject: Quota Aviso

AVISO
Usando $PERCENT% do tamanho da caixa postal.

Remontti
(55) 9999-9999
EOF
</pre>
<pre class="remontti-code"># chmod +x /usr/local/bin/quota-warning.sh
# /etc/init.d/dovecot restart
# /etc/init.d/postfix restart </pre>
<p><i>Comando para ver cota</i></p>
<pre class="remontti-code"># doveadm quota get -u usuario@dominio.com.br</pre>
<h4>WEBMAIL ROUNDCUBE</h4>
<pre class="remontti-code"># apt install php5-intl php-pear
# sed -i -e &quot;s/^;date\.timezone =.*$/date\.timezone = &#039;America\/Sao_Paulo&#039;/&quot; /etc/php5/apache2/php.ini
# /etc/init.d/apache2 restart
# cd /var/www/html</pre>
<p>Acesse e baixe a versao mais recente<br />
https://roundcube.net/download/</p>
<p>Hoje 1.2.4 - Complete</p>
<pre class="remontti-code"># wget --no-check-certificate https://github.com/roundcube/roundcubemail/releases/download/1.2.4/roundcubemail-1.2.4-complete.tar.gz

# tar -vxzf roundcubemail*
# mv roundcubemail-1.2.4 webmail
# chown  www-data. -R webmail</pre>
<p>Criaremos nosso banco de dados para o roundcubemail.</p>
<pre class="remontti-code"># mysql -u root -p</pre>
<p>Será solicitado a senha root do mysql, entre com a senha.</p>
<pre class="remontti-code">
CREATE DATABASE roundcubemail;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY &#039;SUA-SENHA-BD-ROUND&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Acesse:<br />
http://SEU-DOMINIO/webmail/installer/</p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_152350.png" data-rel="lightbox-gallery-PktsnA4F" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_152350-227x300.png" alt="screenshot_20161017_152350" width="227" height="300" class="alignnone size-medium wp-image-1503" srcset="https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_152350-227x300.png 227w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_152350-768x1016.png 768w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_152350-774x1024.png 774w, https://blog.remontti.com.br/wp-content/uploads/2016/10/Screenshot_20161017_152350.png 875w" sizes="auto, (max-width: 227px) 100vw, 227px" /></a></p>
<p>Clique em <strong>Next</strong></p>
<p>Principais itens a ser alterado ou de seu gosto o que não citei deixei padrão</p>
<p><strong>== General configuration ==</strong><br />
product_name: Nome do Webmail<br />
Check client IP in session authorization: MARQUE</p>
<p><strong>== Logging & Debugging ==</strong><br />
log_driver: syslog</p>
<p><strong>== Database setup ==</strong><br />
Database type: MYSQL<br />
Database server: localhost<br />
Database name: roundcubemail<br />
Database user name: roundcube<br />
Database password: SUA-SENHA-BD-ROUND<br />
db_prefix:</p>
<p><strong>== IMAP Settings ==</strong><br />
username_domain: mail.dominiorev.com.br</p>
<p><strong>== SMTP Settings ==</strong><br />
smtp_server: tls://mail.dominiorev.com.br<br />
smtp_port: 25</p>
<p><strong>== Display settings & user prefs ==</strong><br />
language *: pt_BR<br />
If preview pane is enabled: Marque<br />
Compose HTML formatted messages: always</p>
<p><strong>== Plugins ==</strong><br />
"De acordo com suas necessidades! Porém vou configurar os seguintes.<br />
- emoticons<br />
- managesieve<br />
- markasjunk<br />
- newmail_notifier<br />
- password<br />
- zipdownload</p>
<p>Agora clique em <strong>[CREAT CONFIG]</strong><br />
Vai retornar uma mensagem:<br />
<i>The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation.</i></p>
<p>Isso significa que nosso arquivo de configuração do roundcube foi criado (config/config.inc.php)</p>
<p>Agora clique em: <strong>[CONTINUE]</strong><br />
Agora em: <strong>[Inicialize database]</strong></p>
<p>Irá retornar:<i><br />
Check DB config<br />
DSN (write):  OK<br />
DB Schema:  OK<br />
DB Write:  OK<br />
DB Time:  OK</i></p>
<p>Se você já criou uma conta de email você pode testa-la [Check login]</p>
<p>Como recomendações, mova o diretório <strong>installer</strong> para outro nome ou remova.</p>
<p><i>After completing the installation and the final tests please remove the whole installer folder from the document root of the webserver or make sure that enable_installer option in config.inc.php is disabled.</p>
<p>Depois de completar a instalação e os testes finais remova toda a pasta de instalação da raiz de documentos do servidor web ou certifique-se de que enable_installer opção no config.inc.php está desativado.</i></p>
<pre class="remontti-code"># mv installer/ installer_XYZ_12345</pre>
<p>Acesse o diretório dos plugins do roundcube.</p>
<pre class="remontti-code"># cd /var/www/html/webmail/plugins/</pre>
<p><strong>== newmail_notifier ==</strong></p>
<pre class="remontti-code"># cd newmail_notifier
# cp config.inc.php.dist config.inc.php
# sed -i -e &#039;s/= false/= true/&#039; config.inc.php</pre>
<p><strong>== zipdownload ==</strong></p>
<pre class="remontti-code"># cd ../zipdownload
# cp config.inc.php.dist config.inc.php
# sed -i -e &#039;s/= false/= true/&#039; config.inc.php</pre>
<p><strong>== markasjunk ==</strong><br />
(Sem configuração)</p>
<p><strong>= managesieve =</strong><br />
Faz emails identificado com spam cair na pasta spam.</p>
<pre class="remontti-code"># cd ../managesieve
# cp config.inc.php.dist  config.inc.php
# vim config.inc.php</pre>
<p>Altere: (atençao para o caminho)</p>
<pre class="remontti-code">
$config[&#039;managesieve_default&#039;] = &#039;/var/www/html/webmail/plugins/managesieve/default.sieve&#039;;
$config[&#039;managesieve_script_name&#039;] = &#039;Filtros&#039;;</pre>
<p>Crie o arquivo default.sieve</p>
<pre class="remontti-code"># vim /var/www/html/webmail/plugins/managesieve/default.sieve</pre>
<pre class="remontti-code">
require [&quot;fileinto&quot;];
# rule:[Spam]
if header :contains &quot;X-Spam-Flag&quot; &quot;YES&quot;
{
        fileinto &quot;Junk&quot;;
        stop;
}</pre>
<p><strong>== password ==</strong><br />
Permite usuário alterar sua senha.</p>
<pre class="remontti-code"># cd ../password
# cp config.inc.php.dist  config.inc.php
# vim config.inc.php</pre>
<p>Altere:</p>
<pre class="remontti-code">
//Define o uma quantidade minima de caracteres
$config[&#039;password_minimum_length&#039;] = 8;

$config[&#039;password_require_nonalpha&#039;] = false;

$config[&#039;password_db_dsn&#039;] = &#039;mysql://postfix:SENHA-POSTFIX-MYSQL@localhost/postfix&#039;;
$config[&#039;password_query&#039;] = &quot;UPDATE  mailbox SET  password=MD5(%p) WHERE username=%u AND password=MD5(%o)&quot;;
</pre>
<p><strong>Plugins extra (http://plugins.roundcube.net/)</strong></p>
<p># cd /var/www/html/webmail/plugins/</p>
<p><strong>== contextmenu ==</strong><br />
Cria menus ao clicar com o direito. (# apt install git)</p>
<pre class="remontti-code"># git clone --recursive https://github.com/JohnDoh/Roundcube-Plugin-Context-Menu.git
# mv Roundcube-Plugin-Context-Menu contextmenu</pre>
<p><strong>== persistent_login ==</strong><br />
Permite deixar salvo a sessão.</p>
<pre class="remontti-code"># git clone --recursive https://github.com/mfreiholz/Roundcube-Persistent-Login-Plugin.git
# mv Roundcube-Persistent-Login-Plugin persistent_login
# cd persistent_login/
# cp config.inc.php.dist  config.inc.php
# sed -i -e &#039;s/= false/= true/&#039; config.inc.php</pre>
<p>Precisa fazer umas alterações em nossas tabelas do bd roundcubemail, para isso use:</p>
<pre class="remontti-code"># mysql -u roundcube -pSENHA-USER-MYSQL-ROUNDCUBE roundcubemail &lt; sql/mysql.sql</pre>
<p>A tradução ao meu ver ficou estranha, e vamos adicionar um aviso. </p>
<pre class="remontti-code"># vim localization/pt_BR.inc</pre>
<p>Altere para:</p>
<pre class="remontti-code">
&lt;?php
$labels[&#039;ifpl_rememberme&#039;] = &#039;Salvar login&#039;;
$labels[&#039;ifpl_rememberme_hint&#039;] = &#039;N&atilde;o salve seu login em computadores p&uacute;blicos por raz&otilde;es de seguran&ccedil;a.&#039;;
?&gt;</pre>
<p><strong>== dovecot_ident ==</strong><br />
Como webmail é um acesso localhost, nos logs de acesso IMAP não queremos isso e sim o IP do usuário que esta acessando, para isso:</p>
<pre class="remontti-code"># cd /var/www/html/webmail/plugins
# git clone --recursive https://github.com/corbosman/dovecot_ident.git
# vim /etc/dovecot/dovecot.conf</pre>
<p>Decomente incluindo o valor (127.0.0.1 ::1)</p>
<pre class="remontti-code">login_trusted_networks = 127.0.0.1 ::1 IP-DO-SEU-SERVIDOR</pre>
<p>ex:</p>
<pre class="remontti-code">login_trusted_networks = 127.0.0.1 ::1 250.250.0.6 2000:fff:250:250:0::6</pre>
<pre class="remontti-code"># /etc/init.d/dovecot  restart
# /etc/init.d/postfix  restart</pre>
<p>Agora precisamos adicionar nossos plugins extrar nas configurações do Round.</p>
<pre class="remontti-code"># vim /var/www/html/webmail/config/config.inc.php</pre>
<p>Procure por:</p>
<pre class="remontti-code">
$config[&#039;plugins&#039;]
Inclua os plugins contextmenu, persistent_login e dovecot_ident ficando:
$config[&#039;plugins&#039;] = array(&#039;emoticons&#039;, &#039;managesieve&#039;, &#039;markasjunk&#039;, &#039;newmail_notifier&#039;, &#039;password&#039;, &#039;zipdownload&#039;,&#039;contextmenu&#039;, &#039;persistent_login&#039;, &#039;dovecot_ident&#039;);

//Eu particularmente gosto de fazer ainda algumas mudanças, se desejar inclua ao final do arquivo:
$config[&#039;show_images&#039;] = 2;
$config[&#039;prefer_html&#039;] = true;
$config[&#039;check_all_folders&#039;] = true;
$config[&#039;message_show_email&#039;] = true;
$config[&#039;draft_autosave&#039;] = 180;
$config[&#039;quota_zero_as_unlimited&#039;] = true;
$config[&#039;list_cols&#039;] = array(&#039;flag&#039;, &#039;status&#039;, &#039;fromto&#039;, &#039;subject&#039;, &#039;date&#039;, &#039;size&#039;, &#039;attachment&#039;, &#039;priority&#039;);
//Se desejar cadastrar um domino qual não precisa informar o @dominio...
$config[&#039;username_domain&#039;] = &#039;dominiorev.com.br&#039;;
</pre>
<pre class="remontti-code"># chown  www-data. -R /var/www/html/webmail/</pre>
<p>Seu servidor de e-mail já está funcionado, logue em seu webmail, envie algum e-mails.<br />
Acesse: http://SEU-DOMINIO/webmail/</p>
<h4>PEGANDO A ULTIMA VEZ QUE USUÁRIO LOGOU E O IP</h4>
<p>Se você é administrador de um servidor de e-mail certamente vai querer isso!<br />
Primeiramente vamos adicionar alguns campos extrar nassa tabela mailbox (last_login_date last_login_ip last_login_proto)</p>
<pre class="remontti-code"># mysql -u root -p</pre>
<pre class="remontti-code">
use postfix;
ALTER TABLE `mailbox` ADD `last_login_date` DATETIME NULL COMMENT &#039;last login date&#039;,ADD `last_login_ip` VARCHAR( 39 ) NULL COMMENT &#039;last login ip&#039;,ADD `last_login_proto` CHAR( 5 ) NULL ;
quit;</pre>
<p>Vamos ensinar o dovecot a alimentar esses campos.<br />
<strong>10-master.conf</strong></p>
<pre class="remontti-code"># sed -i -e &#039;s/service imap {/service imap {\n  executable = imap imap-postlogin/&#039; /etc/dovecot/conf.d/10-master.conf
# sed -i -e &#039;s/service imap {/service imap {\n  # Post-login action/&#039; /etc/dovecot/conf.d/10-master.conf
# sed -i -e &#039;s/service pop3 {/service pop3 {\n  executable = pop3 pop3-postlogin/&#039; /etc/dovecot/conf.d/10-master.conf
# sed -i -e &#039;s/service pop3 {/service pop3 {\n  # Post-login action/&#039; /etc/dovecot/conf.d/10-master.conf
# echo &#039;&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;# Post login scripting POP3&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;service pop3-postlogin {&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  executable = script-login /usr/local/bin/postlogin-pop.sh&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  user = $default_internal_user&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  unix_listener pop3-postlogin {&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  }&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;}&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;# Post login scripting IMAP&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;service imap-postlogin {&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  executable = script-login /usr/local/bin/postlogin-imap.sh&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  user = $default_internal_user&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  unix_listener imap-postlogin {&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;  }&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf
# echo &#039;}&#039;&gt;&gt; /etc/dovecot/conf.d/10-master.conf</pre>
<p>Crie o arquivo postlogin-imap.sh</p>
<pre class="remontti-code"># vim /usr/local/bin/postlogin-imap.sh</pre>
<p>Atenção para SENHA.</p>
<pre class="remontti-code">
#!/bin/sh
MYSQL_USER=&#039;postfix&#039;
PASSWD=&#039;SENHA&#039;
DB_NAME=&#039;postfix&#039;
if [ X&quot;${USER}&quot; != X&quot;dump-capability&quot; ]; then
mysql -u${MYSQL_USER} -p${PASSWD} ${DB_NAME} &gt;/dev/null 2&gt;&amp;1 &lt;&lt;EOF
UPDATE mailbox SET \
last_login_ip=&quot;$IP&quot;, \
last_login_date=NOW(), \
last_login_proto=&quot;IMAP&quot; \
WHERE username=&#039;$USER&#039;;
EOF
fi
exec &quot;$@&quot;</pre>
<p>Crie o arquivo postlogin-pop.sh</p>
<pre class="remontti-code"># vim /usr/local/bin/postlogin-pop.sh</pre>
<p>Atenção para SENHA.</p>
<pre class="remontti-code">
#!/bin/sh
MYSQL_USER=&#039;postfix&#039;
PASSWD=&#039;SENHA&#039;
DB_NAME=&#039;postfix&#039;
if [ X&quot;${USER}&quot; != X&quot;dump-capability&quot; ]; then
mysql -u${MYSQL_USER} -p${PASSWD} ${DB_NAME} &gt;/dev/null 2&gt;&amp;1 &lt;&lt;EOF
UPDATE mailbox SET \
last_login_ip=&quot;$IP&quot;, \
last_login_date=NOW(), \
last_login_proto=&quot;POP3&quot; \
WHERE username=&#039;$USER&#039;;
EOF
fi
exec &quot;$@&quot;</pre>
<pre class="remontti-code"># chmod +x /usr/local/bin/postlogin-*
# /etc/init.d/dovecot  restart</pre>
<p>Acesse sua conta de email e apois consulte a tabela mailbox (SELECT * FROM `mailbox`)</p>
<p>Até este ponto nosso servidor está 100%, agora falta apenas um Anti-Spam e um Anti-Vírus para ficar perfeito, Então vamos nessa <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>SPAMASSASSIN</h4>
<p>Vamos começar pelo SpamAssassin</p>
<pre class="remontti-code"># apt install spamc spamassassin</pre>
<p>Alguns ajustes</p>
<pre class="remontti-code"># sed -i -e &#039;s/ENABLED=0/ENABLED=1/&#039; /etc/default/spamassassin
# sed -i -e &#039;s/CRON=0/CRON=1/&#039; /etc/default/spamassassin
# sed -i -e &#039;s/# report_safe 1/report_safe 0/&#039; /etc/spamassassin/local.cf
????# sed -i -e &#039;s/inbox = yes/inbox = yes\n    } /&#039; /etc/dovecot/conf.d/10-mail.conf
# systemctl enable spamassassin</pre>
<pre class="remontti-code"># vim /etc/postfix/master.cf</pre>
<p>Adicione ==> <strong>-o content_filter=spamassassin</strong></p>
<pre class="remontti-code">
smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
   {..}
submission inet n       -       -       -       -       smtpd
  -o content_filter=spamassassin
   {..}
smtps     inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
  {..}
</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/01/Screenshot_20170130_180239.png" data-rel="lightbox-gallery-PktsnA4F" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/01/Screenshot_20170130_180239-300x242.png" alt="" width="300" height="242" class="alignnone size-medium wp-image-1633" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/01/Screenshot_20170130_180239-300x242.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/01/Screenshot_20170130_180239.png 619w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>E no final do arquivo:</p>
<pre class="remontti-code">
# SpamAssassin
spamassassin unix -     n       n       -       -       pipe
  user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
</pre>
<p>Vamos instalar o Razor Pyzor para ajudar no bloquei dos Spam.</p>
<pre class="remontti-code"># apt install razor pyzor</pre>
<pre class="remontti-code"># vim /etc/spamassassin/local.cf</pre>
<p>Inclua antes da ultima linha (endif # Mail::SpamAssassin::Plugin::Shortcircuit)</p>
<pre class="remontti-code">
# razor2
use_razor2 1
score RAZOR2_CHECK 2.500

# pyzor
use_pyzor 1
score PYZOR_CHECK 2.500
</pre>
<pre class="remontti-code"># su - debian-spamd -c &#039;razor-admin -d --create&#039;
# su - debian-spamd -c &#039;razor-admin -register&#039;
# su - debian-spamd -c &#039;razor-admin -discover&#039;
# su - debian-spamd -c &#039;pyzor discover&#039;</pre>
<h4>ANTIVIRUS AMAVIS / CLAMAV</h4>
<p>Você precisa ter nos repositórios os pacotes <strong>non-free</strong></p>
<pre class="remontti-code"># vim /etc/apt/sources.list</pre>
<p>(exemplo)</p>
<pre class="remontti-code">
deb http://ftp.br.debian.org/debian/ jessie main contrib non-free</pre>
<pre class="remontti-code"># apt update
# apt install amavisd-new clamav clamav-freshclam  clamav-daemon arj bzip2 cabextract nomarch pax rar unrar unzip zip zoo lhasa libmail-dkim-perl libnet-ldap-perl libsnmp-perl libzeromq-perl lzop p7zip rpm
# adduser clamav amavis
# /etc/init.d/clamav-freshclam stop
# freshclam
# su - amavis -c &#039;razor-admin -d --create&#039;
# su - amavis -c &#039;razor-admin -register&#039;
# su - amavis -c &#039;razor-admin -discover&#039;
# su - amavis -c &#039;pyzor discover&#039; </pre>
<pre class="remontti-code"># vim /etc/amavis/conf.d/15-content_filter_mode</pre>
<p>#(Descomente)</p>
<pre class="remontti-code">
@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
</pre>
<pre class="remontti-code"># vim /etc/amavis/conf.d/50-user</pre>
<p>Adicionar !! Atenção para SENHA</p>
<pre class="remontti-code">
#
@lookup_sql_dsn = (
    [&#039;DBI:mysql:database=postfix;host=127.0.0.1;port=3306&#039;,
     &#039;postfix&#039;,
     &#039;SENHA-BD-POSTFIX&#039;]);
$sql_select_policy = &#039;SELECT &quot;Y&quot; as local FROM alias WHERE address IN (%k)&#039;;

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return
</pre>
<pre class="remontti-code"># vim /etc/amavis/conf.d/05-node_id</pre>
<p> Altere: </p>
<pre class="remontti-code">$myhostname = &quot;mail.dominiorev.com.br&quot;;</pre>
<pre class="remontti-code"># vim /etc/amavis/conf.d/01-debian</pre>
<p>Comente:</p>
<pre class="remontti-code">#$unarj      = [&#039;arj&#039;, &#039;unarj&#039;];</pre>
<p>Descomente:</p>
<pre class="remontti-code">$unrar      = [&#039;rar&#039;, &#039;unrar&#039;]; #disabled (non-free, no security support)</pre>
<h4>Personalização Amavis</h4>
<pre class="remontti-code"># vim /etc/amavis/conf.d/20-debian_defaults</pre>
<p>Eu comento sa_spam_subject_tag, assim as mensagens que forem spam não terão o assunto trocado, pois elas já irão cair na caixa de spam.</p>
<pre class="remontti-code">#$sa_spam_subject_tag = &#039;***SPAM*** &#039;;</pre>
<p>Comente se não desejar receber as menssagens de erro.</p>
<pre class="remontti-code">
#$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
#$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA
#$final_spam_destiny       = D_BOUNCE;
$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)</pre>
<p>Não comente final_bad_header_destiny (se não os spam não serão entregues)</p>
<p>Se não quiser que seu email postmaster receba um email com todos os emails q ele discartou, comente:</p>
<pre class="remontti-code">#$virus_admin = &quot;postmaster\@$mydomain&quot;; # due to D_DISCARD default</pre>
<p>Habilitar o amavis no postfix</p>
<pre class="remontti-code"># postconf -e &quot;content_filter = smtp-amavis:[127.0.0.1]:10024&quot;</pre>
<pre class="remontti-code"># vim /etc/postfix/master.cf</pre>
<p>Adicionar ao final</p>
<pre class="remontti-code">
smtp-amavis       unix  -       -       -       -       2       smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
  -o disable_dns_lookups=yes
  -o max_use=20
  -o smtp_generic_maps=

127.0.0.1:10025 inet    n       -       -       -       -       smtpd
  -o mynetworks=127.0.0.0/8
  -o content_filter=
  -o local_recipient_maps=
  -o local_header_rewrite_clients=
  -o relay_recipient_maps=
  -o smtpd_restriction_classes=
  -o smtpd_delay_reject=no
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_data_restrictions=reject_unauth_pipelining
  -o smtpd_end_of_data_restrictions=
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o smtpd_client_connection_count_limit=0
  -o smtpd_client_connection_rate_limit=0
  -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
  -o strict_rfc821_envelopes=yes
</pre>
<p>Restarte todos os serviços</p>
<pre class="remontti-code"># /etc/init.d/clamav-daemon restart
# /etc/init.d/clamav-freshclam restart
# /etc/init.d/spamassassin restart
# /etc/init.d/amavis restart
# /etc/init.d/dovecot restart
# /etc/init.d/postfix restart </pre>
<p>Gostou? Ficou com alguma dúvida?<br />
Deixe seu comentário!</p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/1485">Montando um servidor de E-mail Completo com Postfix+Dovecot+PostfixAdmin+SpamAssassin+SPF+RoundCubeMail+IPv4/IPv6 (Desatualizado)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/1485/feed</wfw:commentRss>
			<slash:comments>40</slash:comments>
		
		
			</item>
	</channel>
</rss>
