<?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 SpamAssassin - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/spamassassin/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/spamassassin</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Sat, 19 Oct 2024 00:56:50 +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 SpamAssassin - Remontti</title>
	<link>https://blog.remontti.com.br/tag/spamassassin</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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="(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-Qycda4uD" data-rl_title="" data-rl_caption="" title=""><img 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="(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-Qycda4uD" data-rl_title="" data-rl_caption="" title=""><img 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="(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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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-Qycda4uD" 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>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-hA8dBUJd" 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-hA8dBUJd" 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-hA8dBUJd" 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-hA8dBUJd" 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-hA8dBUJd" 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-hA8dBUJd" 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-hA8dBUJd" 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-hA8dBUJd" 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>
		<item>
		<title>Dica SpamAssassin</title>
		<link>https://blog.remontti.com.br/299</link>
					<comments>https://blog.remontti.com.br/299#respond</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 01 Jun 2009 18:54:30 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[blacklist_from]]></category>
		<category><![CDATA[Lista Branca]]></category>
		<category><![CDATA[Lista Negra]]></category>
		<category><![CDATA[SpamAssassin]]></category>
		<category><![CDATA[whitelist_from]]></category>
		<guid isPermaLink="false">http://www.remontti.com.br/blog/?p=299</guid>

					<description><![CDATA[<p>Esta semana tive um problema com os e-mails enviados da Caixa Federal, meu anti-spam + clamav-filter tava recusando os e-mail. Então fiz o seguinte crie um lista &#8220;branca&#8221; para alguns domínios, e já aproveitei&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/299">Dica SpamAssassin</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Esta semana tive um problema com os e-mails enviados da Caixa Federal, meu anti-spam + clamav-filter tava recusando os e-mail. Então fiz o seguinte crie um lista <em>&#8220;branca&#8221;</em> para alguns domínios, e  já aproveitei e coloquei um outro domínio no lista<em> &#8220;negra&#8221;</em>.</p>
<p><span id="more-299"></span><span style="color: #ff6600;"># vim /etc/spamassassin/local.cf</span><br />
Adicione as seguintes linhas:</p>
<p><span style="color: #008080;"># Lista Branca (Aceitos)<br />
<span style="color: #008080;">whitelist_from  *@caixa.gov.br</span></span></p>
<p><span style="color: #008080;"># Lista Negra (Negados)<br />
blacklist_from *@casasbaia.com fulano@dominio3.com</span></p>
<p><span style="color: #ff6600;"># /etc/init.d/spamassassin restart</span></p>
<p>Fonte: <a href="http://spamassassin.apache.org/full/3.0.x/dist/doc/Mail_SpamAssassin_Conf.html#whitelist_and_blacklist_options" target="_blank">http://spamassassin.apache.org/</a></p>
<p>O post <a href="https://blog.remontti.com.br/299">Dica SpamAssassin</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/299/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
