Como montar um servidor de e-mail com Postfix, Dovecot, PostfixAdmin, SpamAssassin, Amavis, Clamav, RoundCube, SPF, DKIM, DMARC, Fail2Ban

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.

Postfix 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.
Dovecot é um servidor de IMAP e POP3 open source para sistemas Linux e UNIX, escrito primariamente com segurança em mente.
Postfixadmin Interface web para o gerenciamento de contas de e-mails e domínios.
Spamassassin é 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 “testes” que faz analisando todo o conteúdo da mensagem.
Clamav é 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.
Amavis é 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.
RoundCube é um cliente de email IMAP baseado na Web (Webmail).
SPF (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.
DKIM (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.
DMARC (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.
Fail2Ban é uma estrutura de software de prevenção de intrusões que protege os servidores de computadores contra ataques de força bruta.

REQUISITOS

0 – Saber que esse procedimento exige conhecimento 🙂
1 – Ter configurado DNS Autoritativo e Reverso sobre seus IPS.
2 – Debian 10 Buster instalação limpa
3 – Não ter seu endereço IP listado em backlist.

Você pode verificar se seu IP está em uma blacklist nos sites:
https://mxtoolbox.com/blacklists.aspx
http://www.anti-abuse.org/multi-rbl-check-results/
https://viewdns.info/spamdblookup/

AJUSTES

IP ex. do servidor: 45.80.50.6 / 2804:f123:bebe:cafe::6
Sendo que o reverso deste ips apontam para mail.remontti.com.br
Entradas MX, TXT e SPF configuradas.
Ex autoritativo:

1 $TTL 86400      ; 1 day
2 remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
3                             2019071900 ; serial
4                             10800      ; refresh (3 hours)
5                             3600       ; retry (1 hour)
6                             2419200    ; expire (4 weeks)
7                             300        ; minimum (5 minutes)
8                             )
9 
10                         NS      ns1.remontti.net.br.
11                         NS      ns2.remontti.net.br.
12 
13                         A       45.80.50.4
14                         AAAA    2804:f123:bebe:cafe::4
15                         MX      10 mail.remontti.net.br.
16                         TXT     "v=spf1 a mx -all"
17                         SPF     "v=spf1 a mx -all"
18 $ORIGIN remontti.net.br.
19 $TTL 10800      ; 3 hours
20 
21 45-80-50-0                      A       45.80.50.0
22 router-gw                       A       45.80.50.1
23                                 AAAA    2804:f123:bebe:cafe::1
24 
25 ns1                             A       45.80.50.2
26                                 AAAA    2804:f123:bebe:cafe::2
27 hostmaster                      A       45.80.50.2
28                                 AAAA    2804:f123:bebe:cafe::2
29 ns2                             A       45.80.50.3
30                                 AAAA    2804:f123:bebe:cafe::3
31 
32 www                             A       45.80.50.4
33                                 AAAA    2804:f123:bebe:cafe::4
34 ftp                             A       45.80.50.4
35                                 AAAA    2804:f123:bebe:cafe::4
36 
37 zabbix                          A       45.80.50.5
38                                 AAAA    2804:f123:bebe:cafe::5
39 phpipam                         A       45.80.50.5
40                                 AAAA    2804:f123:bebe:cafe::5
41 
42 mail                            A       45.80.50.6
43                                 AAAA    2804:f123:bebe:cafe::6
44 imap                            A       45.80.50.6
45                                 AAAA    2804:f123:bebe:cafe::6
46 pop                             A       45.80.50.6
47                                 AAAA    2804:f123:bebe:cafe::6
48 smtp                            A       45.80.50.6
49                                 AAAA    2804:f123:bebe:cafe::6

Ex reverso:

1 $ORIGIN .
2 $TTL 86400      ; 1 day
3 50.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
4                     2019071900 ; serial
5                     10800      ; refresh (3 hours)
6                     3600       ; retry (1 hour)
7                     2419200    ; expire (4 weeks)
8                     300        ; minimum (5 minutes)
9                     )
10                 NS      ns1.remontti.net.br.
11                 NS      ns2.remontti.net.br.
12  
13 $ORIGIN 50.80.45.in-addr.arpa.
14 0         PTR     45.80.50.0.remontti.net.br.
15 1         PTR     cpd.remontti.net.br.
16 2         PTR     ns1.remontti.net.br.
17 3         PTR     ns2.remontti.net.br.
18 4         PTR     www.remontti.net.br.
19 5         PTR     zabbix.remontti.net.br.
20 6         PTR     mail.remontti.net.br.
21  
22 ; ....

Ajuste o nome do servidor alterando alguns parâmetros do sistema.

1 # vim /etc/hosts
1 [...]
2 127.0.0.1         localhost
3 250.250.250.6     mail.remontti.com.br    mail
4 [...]
1 # vim /etc/hostname
1 mail

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.

1 # vim /etc/network/interfaces
1 allow-hotplug enp0s3
2 iface enp0s3 inet static
3         address 45.80.50.6/28
4         gateway 45.80.50.1
5         dns-nameservers 45.80.50.2
6         dns-search remontti.com.br
7 
8 iface enp0s3 inet6 static
9         pre-up modprobe ipv6
10         address 2804:f123:bebe:cafe::6
11         netmask 64
12         gateway 2804:f123:bebe:cafe::1

Reinicie seu servidor

1  # reboot

APACHE2, MARIADB E PHP7

1 # 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

Vamos habilitar o mod_rewrite.

1 # a2enmod rewrite

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.

1 # vim /etc/apache2/sites-enabled/000-default.conf

Adicione abaixo de “DocumentRoot /var/www/html” o seguinte:

1 	<Directory /var/www/html/>
2     		Options FollowSymLinks
3     		AllowOverride All
4 	</Directory>

Por segurança recomendo remover a assinatura do servidor, para isso edite:

1 # sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-available/security.conf
2 # sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf-available/security.conf

Agora precisamos restartar o apache2 para que tenha efeito as alterações.

1 # systemctl restart apache2

http://[SERVER_IP]/

phpMyAdmin `** Opcional **`

Cade ele do repositório?
O PHPMyAdmin não está mais disponível como pacote .deb no Debian 10. Fazendo um pesquisa o motivo é que o “pessoal” que faz empacotamento não tem uma versão estável. https://security-tracker.debian.org/tracker/CVE-2018-19968

Desta forma debian “obriga” com que o usuário instale-o a partir da fonte. https://www.phpmyadmin.net/downloads/

phpMyAdmin 4.9.2 (25/11/2019)

1 # cd /tmp/
2 # wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.tar.gz
3 # tar -vxzf phpMyAdmin-4.9.2-all-languages.tar.gz -C /usr/share/
4 # mv /usr/share/phpMyAdmin-4.9.2-all-languages /usr/share/phpmyadmin
5 # mkdir /etc/phpmyadmin
6 # touch /etc/phpmyadmin/htpasswd.setup
7 # mkdir -p /var/lib/phpmyadmin/tmp
8 # chown -R www-data:www-data /var/lib/phpmyadmin

Criaremos o arquivo de configuração do Apache.

1 # vim /etc/apache2/conf-available/phpmyadmin.conf
1 # phpMyAdmin default Apache configuration
2 
3 Alias /phpmyadmin /usr/share/phpmyadmin
4 
5 <Directory /usr/share/phpmyadmin>
6  Options FollowSymLinks
7  DirectoryIndex index.php
8 
9  <IfModule mod_php7.c>
10  AddType application/x-httpd-php .php
11 
12  php_flag magic_quotes_gpc Off
13  php_flag track_vars On
14  php_flag register_globals Off
15  php_value include_path .
16  </IfModule>
17 
18 </Directory>
19 
20 # Authorize for setup
21 <Directory /usr/share/phpmyadmin/setup>
22  <IfModule mod_authn_file.c>
23  AuthType Basic
24  AuthName "phpMyAdmin Setup"
25  AuthUserFile /etc/phpmyadmin/htpasswd.setup
26  </IfModule>
27  Require valid-user
28 </Directory>
29 
30 # Disallow web access to directories that don't need it
31 <Directory /usr/share/phpmyadmin/libraries>
32  Order Deny,Allow
33  Deny from All
34 </Directory>
35 <Directory /usr/share/phpmyadmin/setup/lib>
36  Order Deny,Allow
37  Deny from All
38 </Directory>

Ative a configuração e reinicie o Apache.

1 # a2enconf phpmyadmin
2 # systemctl restart apache2
3 # systemctl status apache2

Na próxima etapa, vamos configurar o armazenamento de configuração do phpMyadmin (banco de dados).
Faça o login no MariaDB como usuário root:

1 # mariadb

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.
Você pode gerar uma senha acessando https://senhasegura.remontti.com.br/

1 CREATE DATABASE phpmyadmin;
2 CREATE USER 'pma'@'localhost' IDENTIFIED BY 'SUA_SENHA';
3 GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'SUA_SENHA' WITH GRANT OPTION;
4 FLUSH PRIVILEGES;
5 EXIT;

Carregue as tabelas do banco de dados: (Informe a senha do root do MariaDB)

1 # mariadb phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql

Agora é necessário ajustar o arquivo de configuração do phpmyadmin.
Definir:
* 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 https://senhasegura.remontti.com.br
* diretório que o PHPMyAdmin deve usar para armazenar arquivos temporários.
* Descomentar as linhas $cfg['Servers']
- controlhost : localhost
- controlpass : SUA_SENHA

1 # cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
2 # vim /usr/share/phpmyadmin/config.inc.php
1 $cfg['blowfish_secret'] = 'dkJhGx83XR3JjuFrDn8kPp9NtXnkLptl';
2 /* Adicione esta linha */
3 $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
4 
5 /* User used to manipulate with storage */
6 $cfg['Servers'][$i]['controlhost'] = 'localhost';
7 $cfg['Servers'][$i]['controlport'] = '';
8 $cfg['Servers'][$i]['controluser'] = 'pma';
9 $cfg['Servers'][$i]['controlpass'] = 'SUA_SENHA';
10 
11 /* Storage database and tables */
12 $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
13 $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
14 $cfg['Servers'][$i]['relation'] = 'pma__relation';
15 $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
16 $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
17 $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
18 $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
19 $cfg['Servers'][$i]['history'] = 'pma__history';
20 $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
21 $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
22 $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
23 $cfg['Servers'][$i]['recent'] = 'pma__recent';
24 $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
25 $cfg['Servers'][$i]['users'] = 'pma__users';
26 $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
27 $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
28 $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
29 $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
30 $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
31 $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';

http://[SERVER_IP]/phpmyadmin/

POSTFIX / DOVECOTE / DKIM / SPF

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.
Algumas vantagens:
- Suporte a Ipv6
- Suporte a MIME
- Autenticação SASL
- Canal seguro utilizando TLS
- Suporte a banco de dados(MySQL,PostgreSQL,LDAP,entre outros)
- Verificação a listas RBL
- Extenso suporte a filtros
- Suporte a expressão-regular
- Verificação de cabeçalho
- Verificação no corpo da mensagem
- Suporte a Greylisting e SPF através de plugins.

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!

Vamos a instalação:

1 # 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

Responda:
Site da Internet

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.
mail.remontti.com.br

Verifique o arquivo /etc/mailname e sertifique-se que seja seu domínio.

1 # vim /etc/mailname
1 mail.remontti.com.br

Adicione um e-mail para seu usuário root do Linux

1 # vim /etc/aliases
1 root: postmaster@remontti.com.br
1 # newaliases

POSTFIXADMIN

PostfixAdmin gerenciará os domínios e e-mail.

1 # apt install postfixadmin

Ajuste o tipo do banco para mysqli

1 # vim /etc/postfixadmin/dbconfig.inc.php
1 $dbtype='mysqli'

Defina o tipo de criptografia para as senhas salvas no BD e o idioma.

1 # vim /etc/postfixadmin/config.inc.php 

Procure pelas seguintes linhas e altere conforme a baixo.

1 $CONF['encrypt'] = 'md5';
2 $CONF['default_language'] = 'pt-br';

Como existe varias alterações "change-this-to-your.domain.tld" vou usar o comando sed para alterar todas de uma única vez. Não esqueça de substituir pelo seu dominio.

1 # sed -i 's/change-this-to-your.domain.tld/remontti.com.br/' /etc/postfixadmin/config.inc.php

Mais alguns ajustes

1 # cp /etc/postfixadmin/config.inc.php  /usr/share/postfixadmin/config.local.php
2 # mkdir /usr/share/postfixadmin/templates_c/
3 # chown -R www-data. /usr/share/postfixadmin/templates_c/

Acesse:
http://SEU-DOMINO/postfixadmin/public/setup.php

No primeiro acesso suas tabelas já serão criadas no seu bd, você deve ter todas as dependências OK.

Bem no final temos: Change setup password
Preencha os campos Setup password com uma senha e repita (Essa senha será necessária pra criar administradores do PostfixAdmin) e clique em Generate password hash

Voce vai receber uma mensagem parecida com essa:
If you want to use the password you entered as setup password, edit config.inc.php or config.local.php and set
$CONF['setup_password'] = 'ca06e6cd4df066ac8e7999616a773b00:51508f16ca5ef631a5ed23ccc44160d934375ec5';

screenshot_20161017_134710

Esta senha criptografada, será necessários informar no arquivo config.inc.php antes de prosseguir. Então vamos a edição.

1 # vim /etc/postfixadmin/config.inc.php

Localize:

1 $CONF['setup_password'] = 'changeme';

Altere para:

1 $CONF['setup_password'] = 'ca06e6cd4df066ac8e7999616a773b00:51508f16ca5ef631a5ed23ccc44160d934375ec5';

Salve se arquivo e volte para seu navegador. Em Create superadmin account vamos criar nosso usuário administrador do PostfixAdmin.

Nos campos:
Setup password = Informe a senha q você gerou no passo anterior.
Administrador: = um endereço email que será o seu login (postmaster@remontti.com.br)
screenshot_20161017_134743
Clique em Criar administrador

Deve retornar a mensagem:

1 	Administrador criado! (postmaster@remontti.com.br)
2 	You are done with your basic setup.
3 
4 	You can now login to PostfixAdmin using the account you just created.

Acesse: http://SEU-DOMINO//postfixadmin/public/

Já é possível acessa-lo com nosso usuários administrador, e adicionar seus domínios e contas de e-mails.
Domínios => Criar Domínio
Virtual => Criar conta de Email

Dando continuidade criaremos nosso usuários vmail que será o "cara" responsável pelo trabalho.

1 # groupadd -g 5000 vmail
2 # useradd -g vmail -u 5000 vmail -d /var/vmail
3 # mkdir /var/vmail
4 # chown vmail:vmail /var/vmail

Edite o arquivo /etc/postfix/main.cf

1 # cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
2 # vim /etc/postfix/main.cf

Altere e adicione como descrito abaixo.

1 #--------ALTERE--------#
2 smtpd_banner = $myhostname
3 myorigin = $myhostname
4 mydestination = localhost
5 #--------COMENTE--------#
6 #relayhost =
7 #mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
8 #mailbox_size_limit = 0
9 #--------ADD AO FINAL--------#
10 # Authentification
11 smtpd_sasl_type=dovecot
12 smtpd_sasl_path=private/auth
13 smtpd_sasl_auth_enable = yes
14 smtpd_sasl_authenticated_header = yes
15 smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql_sender_login_maps.cf
16 broken_sasl_auth_clients = yes
17 # Virtual mailboxes
18 local_transport = virtual
19 virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
20 virtual_mailbox_base = /var/vmail/
21 virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
22 virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
23 virtual_minimum_uid = 104
24 virtual_transport = dovecot
25 virtual_uid_maps = static:5000
26 virtual_gid_maps = static:5000
27 dovecot_destination_recipient_limit = 1
28 spamassassin_destination_recipient_limit = 1
29 ###### EXTRAS COMENTADO #######
30 # Tamanho maximo do anexo (21 MB)
31 # No webmail php deve permitir upar esse tamanho
32 message_size_limit = 22020096
33 # Um pouco mais de  protecao contra spam
34 disable_vrfy_command = yes
35 # A RFC 821 basicamente exige que os enderecos sejam envelopados ou contidos por <>.
36 # Seguir esta regra faz com que se use essa notacao na sessao SMTP. Isso ajuda a barrar alguns Mailers.
37 strict_rfc821_envelopes = yes
38 # Caixa postal inexistente devolver aosender o erro 500,
39 # desta forma daqui alguns minutos voce nao precisara processar novamente o mesmo spam.
40 unknown_local_recipient_reject_code = 500
41 # E rejeitar com erro 554 enderecos desconhecidos
42 unknown_address_reject_code = 554
43 # Tambem com o erro 554 podemos rejeitar as conexoes que venham de hostnames desconhecidos
44 unknown_hostname_reject_code = 554
45 # Os cliente desconhecidos tambem rejeitaremos com o mesmo erro
46 unknown_client_reject_code = 554
47 # Vamos definir que o servidores remotos podem fazer no maximo 10
48 # conexõsimultaneas (e um valor que trabalho, editem conforme a necessidade).
49 # Um spammer faz mais de 20
50 smtp_destination_recipient_limit = 10
51 # Vamos definir que a conexao so pode cometer 3 erros de codigos 500
52 # (erros definitivos), apos isto sera desconectado
53 smtpd_hard_error_limit = 3
54 # Para erros de codigo 400 (erros temporarios), podemos desconecta-los na primeira
55 smtpd_soft_error_limit = 1
56 # Bom, claro que o spammer tambem pode ser desconectado e depois se reconectar,
57 # entao vamos nos prevenir destes espertinhos definindo quantas conexoes ele pode fazer por minuto.
58 smtpd_client_connection_count_limit = 10
59 # Nestas conexoes vamos limitar quantas mensagens ele pode mandar por minuto,
60 # no meu caso uso 25. Se algum usuario seu reclamar deste limite,
61 # classifique-o como ninja ou na pior hipotese, um mail maniaco.
62 smtpd_client_message_rate_limit = 25
63 # Deixar um spammer maluco e faze-lo perder tempo. Dificilmente um servidor conectado
64 # ao seu servidor vai cometer erros, os spammer cometem muitos erros, pois eles ficam tentando.
65 # Para irrita-los e quem sabe um dia desistirem de mim, eu travo eles dentro do meu servidor a cada erro.
66 # No meu caso, a cada erro eu os travo por 20 segundos. Ate que diminuiu o numero de spammers no meu servidor,
67 # devo estar na blacklist deles.rs
68 smtpd_error_sleep_time = 20
69 # Para este tipo de problema, os spammers podem resetar os erros deles.
70 # Para evitar que eles facam isto e sejam desconetados, podemos dizer se eles podem ou nao fazer isto.
71 # Como colher de cha, vamos deixar fazer isto apenas uma vez (ate porque servidores as vezes usam este comando).
72 # Permitir a maquina remota dar o comando RSET apenas 1 vez.
73 smtpd_junk_command_limit = 1
74 # Defina tambem o numero maximo de destinatarios em uma unica mensagem.
75 # Utilize o numero que melhor lhe convir, entreviste pessoas chaves se necessarios.
76 smtpd_recipient_limit = 50
77 # Os spammers nao se preocupam muito com isto,
78 # entao uma otima pratica para bloquear spams eh
79 # tornar a identificacao por HELO/EHLO obrigatoria.
80 smtpd_helo_required = yes
81 # Um pouco mais sobre o HELO/EHLO eh definir um tempo
82 # limite para o servidor fazer a identificacao, um
83 # servidor serio nao tem porque ficar enrolando.
84 # Vai diminuindo o tempo e observando os resultados.
85 # Vamos comecar com 60 segundos
86 smtp_helo_timeout = 60s
87 smtpd_client_restrictions =     permit_mynetworks,
88 permit_sasl_authenticated,
89 check_recipient_access hash:/etc/postfix/white-black-list,
90 check_client_access hash:/etc/postfix/white-black-list,
91 reject_unknown_client_hostname,
92 reject_unknown_reverse_client_hostname,
93 sleep 1,
94 reject_unauth_pipelining
95 smtpd_helo_restrictions =       permit_mynetworks,
96 permit_sasl_authenticated,
97 check_recipient_access hash:/etc/postfix/white-black-list,
98 check_client_access hash:/etc/postfix/white-black-list,
99 check_helo_access hash:/etc/postfix/white-black-list,
100 reject_invalid_helo_hostname,
101 reject_non_fqdn_helo_hostname,
102 reject_unknown_helo_hostname,
103 reject_unauth_pipelining
104 smtpd_sender_restrictions =     reject_non_fqdn_sender,
105 reject_unknown_sender_domain,
106 reject_unlisted_sender,
107 reject_authenticated_sender_login_mismatch,
108 permit_sasl_authenticated,
109 reject_sender_login_mismatch,
110 warn_if_reject,
111 permit_mynetworks
112 smtpd_recipient_restrictions =  check_sender_access hash:/etc/postfix/white-black-list,
113 check_helo_access hash:/etc/postfix/white-black-list,
114 check_recipient_access hash:/etc/postfix/white-black-list,
115 check_client_access hash:/etc/postfix/white-black-list,
116 permit_sasl_authenticated,
117 permit_mynetworks,
118 reject_unauth_destination,
119 check_policy_service unix:private/policyd-spf,
120 reject_unknown_reverse_client_hostname,
121 reject_invalid_hostname,
122 reject_non_fqdn_hostname,
123 reject_non_fqdn_sender,
124 reject_non_fqdn_recipient,
125 reject_unknown_sender_domain,
126 reject_unknown_recipient_domain,
127 reject_unauth_pipelining,
128 reject_rbl_client access.redhawk.org, 
129 reject_rbl_client all.spamrats.com, 
130 reject_rbl_client b.barracudacentral.org, 
131 reject_rbl_client bl.spamcop.net, 
132 reject_rbl_client blackholes.mail-abuse.org, 
133 reject_rbl_client bogons.cymru.com, 
134 reject_rbl_client cbl.abuseat.org, 
135 reject_rbl_client cblless.anti-spam.org.cn, 
136 reject_rbl_client csi.cloudmark.com, 
137 reject_rbl_client db.wpbl.info, 
138 reject_rbl_client dnsbl.dronebl.org, 
139 reject_rbl_client dnsbl.inps.de, 
140 reject_rbl_client dnsbl.sorbs.net, 
141 reject_rbl_client drone.abuse.ch, 
142 reject_rbl_client dsn.rfc-ignorant.org, 
143 reject_rbl_client httpbl.abuse.ch, 
144 reject_rbl_client ix.dnsbl.manitu.net, 
145 reject_rbl_client korea.services.net, 
146 reject_rbl_client multi.surbl.org, 
147 reject_rbl_client netblock.pedantic.org, 
148 reject_rbl_client opm.tornevall.org, 
149 reject_rbl_client pbl.spamhaus.org, 
150 reject_rbl_client psbl.surriel.com, 
151 reject_rbl_client query.senderbase.org, 
152 reject_rbl_client rbl.efnetrbl.org, 
153 reject_rbl_client rbl.interserver.net, 
154 reject_rbl_client rbl.rbldns.ru, 
155 reject_rbl_client rbl.spamlab.com, 
156 reject_rbl_client rbl.suresupport.com, 
157 reject_rbl_client rbl-plus.mail-abuse.org, 
158 reject_rbl_client relays.mail-abuse.org, 
159 reject_rbl_client sbl.spamhaus.org, 
160 reject_rbl_client spamguard.leadmon.net, 
161 reject_rbl_client spamrbl.imp.ch, 
162 reject_rbl_client tor.dan.me.uk, 
163 reject_rbl_client ubl.unsubscore.com, 
164 reject_rbl_client virbl.bit.nl, 
165 reject_rbl_client wormrbl.imp.ch, 
166 reject_rbl_client zen.spamhaus.org, 
167 reject_rbl_client dnsbl-1.uceprotect.net, 
168 reject_rhsbl_sender dbl.spamhaus.org, 
169 reject_rhsbl_helo dbl.spamhaus.org, 
170 reject_rhsbl_client dbl.spamhaus.org, 
171 reject_rhsbl_helo black.uribl.com,
172 reject_rhsbl_sender black.uribl.com,
173 reject_rhsbl_client black.uribl.com,
174 reject_rhsbl_helo multi.surbl.org,
175 reject_rhsbl_sender multi.surbl.org,
176 reject_rhsbl_client multi.surbl.org,
177 reject_rhsbl_helo multi.uribl.com,
178 reject_rhsbl_sender multi.uribl.com,
179 reject_rhsbl_client multi.uribl.com,
180 permit

RBL/RHSBL: Caso não queira utilizar alguma das rbl/sbl ou utilizar outras sinta-se a vontade.

Aproveitamos já iremos criar uma lista Negra / Branca, crie um arquivo chamado white-black-list

1 # vim /etc/postfix/white-black-list

Nele adicione os dominos/emails com OK que você confia e REJECT para os que deseja descartar, ex.:

1 remontti.com.br OK
2 gmail.com OK
3 spamerdoinferno.com.br REJECT
4 propagandadocapeta.com.br REJECT

Agora você precisa executar o comando postmap no seu arquivo white-black-list ele irá gerar um novo arquivo white-black-list.db

1 # postmap /etc/postfix/white-black-list

Mais informações você encontra em:
http://www.postfix.org/VIRTUAL_README.html#virtual_mailbox

Precisamos criar 4 arquivos que farão a conexão com o BD, pra facilitar criamos nossa variável MINHASENHA

Vamos criar uma variável com o valor da senha que foi informada na instalação do postfixadmin, assim ira facilitar.

1 # MINHASENHA='sua-senha-do-usuario-postfixadmin-do-mysql'

Não use $ ou # em sua senha

mysql_virtual_alias_maps.cf

1 # echo "
2 hosts = localhost
3 user = postfixadmin
4 password = $MINHASENHA
5 dbname = postfixadmin
6 query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
7 " >> /etc/postfix/mysql_virtual_alias_maps.cf

mysql_virtual_mailbox_maps.cf

1 # echo "
2 hosts = localhost
3 user = postfixadmin
4 password = $MINHASENHA
5 dbname = postfixadmin
6 query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
7 " >> /etc/postfix/mysql_virtual_mailbox_maps.cf

mysql_sender_login_maps.cf

1 # echo "
2 hosts = localhost
3 user = postfixadmin
4 password = $MINHASENHA
5 dbname = postfixadmin
6 query = SELECT username AS allowedUser FROM mailbox WHERE username='%s' AND active = 1 UNION SELECT goto FROM alias WHERE address='%s' AND active = '1'
7 " >> /etc/postfix/mysql_sender_login_maps.cf

mysql_virtual_domains_maps.cf

1 # echo "
2 hosts = localhost
3 user = postfixadmin
4 password = $MINHASENHA
5 dbname = postfixadmin
6 query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
7 " >> /etc/postfix/mysql_virtual_domains_maps.cf

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.

1 # cd /etc/postfix
2 # ls -lh mysql_*
3 # chmod o-rwx,g+r mysql_*
4 # chgrp postfix mysql_*

Vamos as alterações no master.cf.

Faça um backup do arquivo original antes e adicione no final:

1 # cp /etc/postfix/master.cf /etc/postfix/master.cf.orig
2 # vim /etc/postfix/master.cf

Adicione ao final:

1 # Dovecot
2 dovecot   unix  -       n       n       -       -       pipe
3 flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

Localize as seguintes linhas e descomente-as:

1 submission inet n       -       -       -       -       smtpd
2 -o syslog_name=postfix/submission
3 -o smtpd_sasl_auth_enable=yes
4 smtps     inet  n       -       -       -       -       smtpd
5 -o smtpd_tls_wrappermode=yes

Descomente e altere os valores de smtpd_client_restrictions, os originais são diferentes. (veja na imagem abaixo como fica)

1   -o smtpd_client_restrictions=permit_sasl_authenticated,reject
2 [...]
3 -o smtpd_client_restrictions=permit_sasl_authenticated,reject

screenshot_20161017_143502

Configurando o Dovecot

Vou usar o comando sed para fazer as alterações necessárias em vez de ficarmos abrindo arquivo e editando.

1 # cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
2 # sed -i -e 's/#listen/listen/' /etc/dovecot/dovecot.conf
3 # cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
4 # sed -i -e 's/#driver =/driver = mysql/' /etc/dovecot/dovecot-sql.conf.ext

Adicionamos ao final do arquivo /etc/dovecot/dovecot.conf mais algumas conf:

1 # echo " " >> /etc/dovecot/dovecot.conf
2 # echo "service stats {" >> /etc/dovecot/dovecot.conf
3 # echo "    unix_listener stats-reader {" >> /etc/dovecot/dovecot.conf
4 # echo "        user = vmail" >> /etc/dovecot/dovecot.conf
5 # echo "        group = vmail" >> /etc/dovecot/dovecot.conf
6 # echo "        mode = 0660" >> /etc/dovecot/dovecot.conf
7 # echo "    }" >> /etc/dovecot/dovecot.conf
8 # echo " " >> /etc/dovecot/dovecot.conf
9 # echo "    unix_listener stats-writer {" >> /etc/dovecot/dovecot.conf
10 # echo "        user = vmail" >> /etc/dovecot/dovecot.conf
11 # echo "        group = vmail" >> /etc/dovecot/dovecot.conf
12 # echo "        mode = 0660" >> /etc/dovecot/dovecot.conf
13 # echo "    }" >> /etc/dovecot/dovecot.conf
14 # echo "}" >> /etc/dovecot/dovecot.conf

Certifique-se que sua senha do postfixadmin ainda esta salva na variável $MINHASENHA.

1 # echo $MINHASENHA
2 # sed -i -e "s/#connect =/connect = host=localhost dbname=postfixadmin user=postfixadmin password=$MINHASENHA/" /etc/dovecot/dovecot-sql.conf.ext
3 # sed -i -e 's/#default_pass_scheme/default_pass_scheme/' /etc/dovecot/dovecot-sql.conf.ext

Vamos inserir algumas linhas ao final de dovecot-sql.conf.ext.

1 # echo "" >> /etc/dovecot/dovecot-sql.conf.ext
2 # echo "user_query = SELECT concat('/var/vmail/', maildir) as home, concat('maildir:/var/vmail/', maildir) as mail, 5000 AS uid, 5000 AS gid, concat('*:bytes=', (quota)) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1';" >> /etc/dovecot/dovecot-sql.conf.ext
3 # echo "" >> /etc/dovecot/dovecot-sql.conf.ext
4 # echo "password_query = SELECT username as user, password, concat('/var/vmail/', maildir) as userdb_home, concat('maildir:/var/vmail/', maildir) as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid, concat('*:bytes=', (quota)) AS userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1';" >> /etc/dovecot/dovecot-sql.conf.ext

Alterações dos arquivos 10-auth.conf / 10-logging.conf / 10-ssl.conf

1 # cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
2 # sed -i -e 's/#disable_plaintext_auth = yes/disable_plaintext_auth = no/' /etc/dovecot/conf.d/10-auth.conf
3 # sed -i -e 's/auth_mechanisms = plain/auth_mechanisms = plain login/' /etc/dovecot/conf.d/10-auth.conf
4 # sed -i -e 's/!include auth-system.conf.ext/#!include auth-system.conf.ext/' /etc/dovecot/conf.d/10-auth.conf
5 # sed -i -e 's/#!include auth-sql.conf.ext/!include auth-sql.conf.ext/' /etc/dovecot/conf.d/10-auth.conf
6 # cp /etc/dovecot/conf.d/10-logging.conf /etc/dovecot/conf.d/10-logging.conf.orig
7 # sed -i -e 's/#log_path/log_path/' /etc/dovecot/conf.d/10-logging.conf
8 # sed -i -e 's/#log_timestamp = "%b %d %H:%M:%S "/log_timestamp = "%Y-%m-%d %H:%M:%S "/' /etc/dovecot/conf.d/10-logging.conf

Em 10-master.conf ficou complicado fazer alteração com sed então vamos no braço.

1 # cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
2 # vim /etc/dovecot/conf.d/10-master.conf

em :service auth {
COMENTE tudo de unix_listener auth-userdb

1 service auth {
2 #  unix_listener auth-userdb {
3 #    #mode = 0666
4 #    #user = 
5 #    #group = 
6 #  }
7 # Descomente
8 # Postfix smtp-auth
9 unix_listener /var/spool/postfix/private/auth {
10 mode = 0666
11 }
12 # Adicione
13 unix_listener auth-master {
14 mode = 0666
15 }
16 # Descomente
17 # Auth process is run as this user.
18 user = $default_internal_user
19 }

Vamos criar um filtro para que todas as mensagens marcada com spam sejam movida para o diretórios SPAM.

1 # mkdir /var/lib/dovecot/sieve/
2 # cp /etc/dovecot/conf.d/90-sieve.conf /etc/dovecot/conf.d/90-sieve.conf.orig
3 # sed -i -e 's/sieve = file:~\/sieve;active=~\/.dovecot.sieve/sieve = ~\/dovecot.sieve/' /etc/dovecot/conf.d/90-sieve.conf
4 # sed -i -e 's/#sieve_default =/sieve_default =/' /etc/dovecot/conf.d/90-sieve.conf
5 # echo 'require ["fileinto"];' >> /var/lib/dovecot/sieve/default.sieve
6 # echo '# rule:[Spam]' >> /var/lib/dovecot/sieve/default.sieve
7 # echo 'if header :contains "X-Spam-Flag" "YES" {' >> /var/lib/dovecot/sieve/default.sieve
8 # echo '        fileinto "Junk";' >> /var/lib/dovecot/sieve/default.sieve
9 # echo '}' >> /var/lib/dovecot/sieve/default.sieve
10 # sievec /var/lib/dovecot/sieve/default.sieve
11 # chown -R vmail:vmail /var/lib/dovecot
12 # cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
13 # sed -i -e 's/mail_location = mbox:~\/mail:INBOX=\/var\/mail\/%u/mail_location = mbox:~\/mail:INBOX=\/var\/vmail\/%u/' /etc/dovecot/conf.d/10-mail.conf

!Exatamente nessa ordem!

1 # sed -i -e 's/inbox = yes/inbox = yes\n  /' /etc/dovecot/conf.d/10-mail.conf
2 # sed -i -e 's/inbox = yes/inbox = yes\n    } /' /etc/dovecot/conf.d/10-mail.conf
3 # sed -i -e 's/inbox = yes/inbox = yes\n      special_use = \Junk /' /etc/dovecot/conf.d/10-mail.conf
4 # sed -i -e 's/inbox = yes/inbox = yes\n      auto = subscribe /' /etc/dovecot/conf.d/10-mail.conf
5 # sed -i -e 's/inbox = yes/inbox = yes\n    mailbox Junk { /' /etc/dovecot/conf.d/10-mail.conf
6 # sed -i -e 's/inbox = yes/inbox = yes\n    } /' /etc/dovecot/conf.d/10-mail.conf
7 # sed -i -e 's/inbox = yes/inbox = yes\n      special_use = \Sent /' /etc/dovecot/conf.d/10-mail.conf
8 # sed -i -e 's/inbox = yes/inbox = yes\n      auto = subscribe /' /etc/dovecot/conf.d/10-mail.conf
9 # sed -i -e 's/inbox = yes/inbox = yes\n    mailbox Sent { /' /etc/dovecot/conf.d/10-mail.conf
10 # sed -i -e 's/inbox = yes/inbox = yes\n    } /' /etc/dovecot/conf.d/10-mail.conf
11 # sed -i -e 's/inbox = yes/inbox = yes\n      special_use = \Drafts /' /etc/dovecot/conf.d/10-mail.conf
12 # sed -i -e 's/inbox = yes/inbox = yes\n      auto = subscribe /' /etc/dovecot/conf.d/10-mail.conf
13 # sed -i -e 's/inbox = yes/inbox = yes\n    mailbox Drafts { /' /etc/dovecot/conf.d/10-mail.conf
14 # sed -i -e 's/inbox = yes/inbox = yes\n    } /' /etc/dovecot/conf.d/10-mail.conf
15 # sed -i -e 's/inbox = yes/inbox = yes\n      special_use = \Trash /' /etc/dovecot/conf.d/10-mail.conf
16 # sed -i -e 's/inbox = yes/inbox = yes\n      auto = subscribe /' /etc/dovecot/conf.d/10-mail.conf
17 # sed -i -e 's/inbox = yes/inbox = yes\n  mailbox Trash { /' /etc/dovecot/conf.d/10-mail.conf
18 # sed -i -e 's/inbox = yes/inbox = yes\n  /' /etc/dovecot/conf.d/10-mail.conf
19 # sed -i -e 's/#mail_plugins =/mail_plugins = quota/' /etc/dovecot/conf.d/10-mail.conf
1 # cp /etc/dovecot/conf.d/20-managesieve.conf  /etc/dovecot/conf.d/20-managesieve.conf.orig
2 # vim /etc/dovecot/conf.d/20-managesieve.conf

Descomente:

1 protocols = $protocols sieve
2 service managesieve-login {
3 #...
4 #...
5 #....
6 }
7 service managesieve {
8 #...
9 #...
10 #....
11 }
12 protocol sieve {
13 #...
14 #...
15 #....
16 }
1 # cp /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.orig
2 # sed -i -e 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins sieve quota/' /etc/dovecot/conf.d/15-lda.conf
3 # cp /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.orig
4 # sed -i -e 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins quota imap_quota/' /etc/dovecot/conf.d/20-imap.conf
5 # cp /etc/dovecot/conf.d/20-pop3.conf /etc/dovecot/conf.d/20-pop3.conf.orig
6 # sed -i -e 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins quota/' /etc/dovecot/conf.d/20-pop3.conf
7 # cp /etc/dovecot/conf.d/90-quota.conf /etc/dovecot/conf.d/90-quota.conf.orig
8 # sed -i -e 's/#quota = maildir/quota = maildir/' /etc/dovecot/conf.d/90-quota.conf
9 # sed -i -e 's/#quota_rule =/quota_rule =/' /etc/dovecot/conf.d/90-quota.conf
10 # sed -i -e 's/#quota_rule2 =/quota_rule2 =/' /etc/dovecot/conf.d/90-quota.conf
11 # sed -i -e 's/#quota_warning/quota_warning/' /etc/dovecot/conf.d/90-quota.conf
1 # vim /etc/dovecot/conf.d/90-quota.conf

Descomente e altere user = dovecot para user = root

1 service quota-warning {
2 executable = script /usr/local/bin/quota-warning.sh
3 user = root
4 unix_listener quota-warning {
5 user = vmail
6 }
7 }
1 # vim /usr/local/bin/quota-warning.sh
1 #!/bin/sh
2 PERCENT=$1
3 USER=$2
4 cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
5 From: postmaster@remontti.com.br
6 Subject: $USER com  $PERCENT% 
7 Content-Type: text/plain; charset="UTF-8"
8 Sua conta de email: $USER 
9 está com uso acima de $PERCENT%,
10 -- 
11 Rudimar Remontti
12 Remontti ME
13 EOF
14 # Evine uma cópia para o administrador:
15 ADM=noc@remontti.com.br
16 cat << EOF | /usr/lib/dovecot/dovecot-lda -d $ADM -o "plugin/quota=maildir:User quota:noenforcing"
17 From: postmaster@remontti.com.br
18 Subject: $USER com  $PERCENT% 
19 Content-Type: text/plain; charset="UTF-8"
20 Verificar conta de email: $USER 
21 Caixa acima de  $PERCENT%
22 -- 
23 Rudimar Remontti
24 Remontti ME
25 EOF

Demos permissão e restartamos o serviços.

1 # chmod +x /usr/local/bin/quota-warning.sh
2 # systemctl restart dovecot postfix
3 # systemctl status dovecot postfix 

Comando para ver cota

1 # doveadm quota get -u usuario@dominio.com.br

WEBMAIL ROUNDCUBE

Ajuste o time zone de acordo com sua localidade.

1 # sed -i -e "s/^;date\.timezone =.*$/date\.timezone = 'America\/Sao_Paulo'/" /etc/php/7.3/apache2/php.ini
2 # systemctl restart apache2

Acesse e baixe a versão mais recente
https://roundcube.net/download/

Hoje (27/Nov/2019) 1.4.1 Complete

1 # cd /var/www/html
2 # wget https://github.com/roundcube/roundcubemail/releases/download/1.4.1/roundcubemail-1.4.1-complete.tar.gz
3 # tar -vxzf roundcubemail*
4 # mv roundcubemail-1.4.1 webmail
5 # rm roundcubemail-1.4.1-complete.tar.gz

Criaremos nosso banco de dados para o roundcubemail.

1 # mariadb

Será solicitado a senha root do mysql, entre com a senha.

1 CREATE DATABASE roundcubemail;
2 GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'SUA-SENHA-BD-ROUND';
3 FLUSH PRIVILEGES;
4 quit;

Acesse:
http://SEU-DOMINIO/webmail/installer/

Clique em Next

Será necessário dar permissão para criação do config.inc.php na pasta config,

1 # chown www-data. /var/www/html/webmail/ -R

Itens a serem alterados:

== General configuration ==
product_name: Nome do Webmail
Check client IP in session authorization: MARQUE

== Logging & Debugging ==
log_driver: syslog

== Database setup ==
Database type: MYSQL
Database server: localhost
Database name: roundcubemail
Database user name: roundcube
Database password: SUA-SENHA-BD-ROUND
db_prefix:

== IMAP Settings ==
default_host: localhost (se vc usar certificado deixe tls://mail.remontti.com.br)
username_domain: remontti.com.br

== SMTP Settings ==
smtp_server: tls://mail.remontti.com.br (se vc nao for criar certificado deixe localhost)

== Display settings & user prefs ==
language *: pt_BR
Compose HTML formatted messages: always

== Plugins ==
"De acordo com suas necessidades! Porém vou configurar os seguintes.
- emoticons
- managesieve
- markasjunk
- newmail_notifier
- password
- zipdownload

Agora clique em [CREAT CONFIG]
Vai retornar uma mensagem:
The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation.

Isso significa que nosso arquivo de configuração do roundcube foi criado (config/config.inc.php)

Agora clique em: [CONTINUE]
Agora em: [Inicialize database]

Irá retornar:
Check DB config
DSN (write): OK
DB Schema: OK
DB Write: OK
DB Time: OK

Por seguração deixe as permissões para o root novamente, e para www-data apenas para pasta temp

1 # chown root. /var/www/html/webmail/ -R
2 # chown www-data. /var/www/html/webmail/temp -R

Se você já criou uma conta de email você pode testa-la [Check login]

Como recomendações, mova o diretório installer para outro nome ou remova.

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.

1 # rm installer/ -rf

Acesse o diretório dos plugins do roundcube.

1 # cd /var/www/html/webmail/plugins/

== newmail_notifier ==

1 # cd newmail_notifier
2 # cp config.inc.php.dist config.inc.php
3 # sed -i -e 's/= false/= true/' config.inc.php

== zipdownload ==

1 # cd ../zipdownload
2 # cp config.inc.php.dist config.inc.php

== markasjunk ==

1 # cd ../markasjunk/
2 # cp config.inc.php.dist config.inc.php

= managesieve =
Faz emails identificado com spam cair na pasta spam.

1 # cd ../managesieve
2 # cp config.inc.php.dist  config.inc.php
3 # vim config.inc.php

Altere: (atençao para o caminho)

1 $config['managesieve_default'] = '/var/www/html/webmail/plugins/managesieve/default.sieve';
2 $config['managesieve_script_name'] = 'Filtros';

Crie o arquivo default.sieve

1 # vim /var/www/html/webmail/plugins/managesieve/default.sieve
1 require ["fileinto"];
2 # rule:[Spam]
3 if header :contains "X-Spam-Flag" "YES"
4 {
5 fileinto "Junk";
6 stop;
7 }

== password ==
Permite usuário alterar sua senha.

1 # cd ../password
2 # cp config.inc.php.dist  config.inc.php
3 # vim config.inc.php

Altere:

1 //Define o uma quantidade minima de caracteres
2 $config['password_minimum_length'] = 8;
3 $config['password_minimum_score'] = 4;
4 $config['password_db_dsn'] = 'mysql://postfixadmin:SENHA-POSTFIX-MYSQL@localhost/postfixadmin';
5 $config['password_query'] = "UPDATE  mailbox SET  password=MD5(%p) WHERE username=%u AND password=MD5(%o)";

Plugins extra

== contextmenu ==
Baixe a versão mais recente

1 # cd /var/www/html/webmail/plugins/
2 # wget https://github.com/johndoh/roundcube-contextmenu/archive/3.0.zip
3 # apt install unzip 
4 # unzip 3.0.zip
5 # rm 3.0.zip
6 # mv roundcube-contextmenu-3.0 contextmenu

== dovecot_ident ==
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:

1 # cd /var/www/html/webmail/plugins
2 # wget https://github.com/remontti/dovecot_ident/archive/3.0.tar.gz
3 # tar -vxzf 3.0.tar.gz
4 # rm 3.0.tar.gz
5 # mv dovecot_ident-3.0 dovecot_ident
6 # vim /etc/dovecot/dovecot.conf

Descomente incluindo:

1 login_trusted_networks = 127.0.0.1 ::1

Restarte os serviços

1 # systemctl restart dovecot postfix
2 # systemctl status dovecot postfix

Agora precisamos adicionar nossos plugins extrar nas configurações do Round.

1 # vim /var/www/html/webmail/config/config.inc.php

Procure por:

1 $config['plugins'] = array('emoticons', 'identity_select', 'managesieve', 'markasjunk', 'newmail_notifier', 'password', 'zipdownload');

Inclua os plugins contextmenu e contextmenu ficando:

1 $config['plugins'] = array('emoticons', 'identity_select', 'managesieve', 'markasjunk', 'newmail_notifier', 'password', 'zipdownload', 'contextmenu', 'dovecot_ident');

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.

1 // If true all folders will be checked for recent messages
2 $config['check_all_folders'] = true;

Seu servidor de e-mail já está funcionado, logue em seu webmail, envie algum e-mails.
Acesse: http://SEU-DOMINIO/webmail/

PEGANDO A ULTIMA VEZ QUE USUÁRIO LOGOU E O IP

Se você é administrador de um servidor de e-mail certamente vai querer isso!
Primeiramente vamos adicionar alguns campos extrar nassa tabela mailbox (last_login_date last_login_ip last_login_proto)

1 # mariadb
1 use postfixadmin;
2 ALTER TABLE `mailbox` ADD `last_login_date` DATETIME NULL COMMENT 'last login date',ADD `last_login_ip` VARCHAR( 39 ) NULL COMMENT 'last login ip',ADD `last_login_proto` CHAR( 5 ) NULL ;
3 quit;

Vamos ensinar o dovecot a alimentar esses campos.
10-master.conf

1 # sed -i -e 's/service imap {/service imap {\n  executable = imap imap-postlogin/' /etc/dovecot/conf.d/10-master.conf
2 # sed -i -e 's/service imap {/service imap {\n  # Post-login action/' /etc/dovecot/conf.d/10-master.conf
3 # sed -i -e 's/service pop3 {/service pop3 {\n  executable = pop3 pop3-postlogin/' /etc/dovecot/conf.d/10-master.conf
4 # sed -i -e 's/service pop3 {/service pop3 {\n  # Post-login action/' /etc/dovecot/conf.d/10-master.conf
5 # echo ''>> /etc/dovecot/conf.d/10-master.conf
6 # echo '# Post login scripting POP3'>> /etc/dovecot/conf.d/10-master.conf
7 # echo 'service pop3-postlogin {'>> /etc/dovecot/conf.d/10-master.conf
8 # echo '  executable = script-login /usr/local/bin/postlogin-pop.sh'>> /etc/dovecot/conf.d/10-master.conf
9 # echo '  user = $default_internal_user'>> /etc/dovecot/conf.d/10-master.conf
10 # echo '  unix_listener pop3-postlogin {'>> /etc/dovecot/conf.d/10-master.conf
11 # echo '  }'>> /etc/dovecot/conf.d/10-master.conf
12 # echo '}'>> /etc/dovecot/conf.d/10-master.conf
13 # echo ''>> /etc/dovecot/conf.d/10-master.conf
14 # echo '# Post login scripting IMAP'>> /etc/dovecot/conf.d/10-master.conf
15 # echo 'service imap-postlogin {'>> /etc/dovecot/conf.d/10-master.conf
16 # echo '  executable = script-login /usr/local/bin/postlogin-imap.sh'>> /etc/dovecot/conf.d/10-master.conf
17 # echo '  user = $default_internal_user'>> /etc/dovecot/conf.d/10-master.conf
18 # echo '  unix_listener imap-postlogin {'>> /etc/dovecot/conf.d/10-master.conf
19 # echo '  }'>> /etc/dovecot/conf.d/10-master.conf
20 # echo '}'>> /etc/dovecot/conf.d/10-master.conf

Crie o arquivo postlogin-imap.sh

1 # vim /usr/local/bin/postlogin-imap.sh

Atenção para SENHA.

1 #!/bin/sh
MYSQL_USER='postfixadmin'
PASSWD='SENHA'
DB_NAME='postfixadmin'
if [ X"${USER}" != X"dump-capability" ]; then
mysql -u${MYSQL_USER} -p${PASSWD} ${DB_NAME} >/dev/null 2>&1 <<EOF
UPDATE mailbox SET \
last_login_ip="$IP", \
last_login_date=NOW(), \
last_login_proto="POP3" \
WHERE username="$USER";
EOF
fi
exec "$@"

Crie o arquivo postlogin-pop.sh

1 # vim /usr/local/bin/postlogin-pop.sh

Atenção para SENHA.

1 #!/bin/sh
MYSQL_USER='postfixadmin'
PASSWD='SENHA'
DB_NAME='postfixadmin'
if [ X"${USER}" != X"dump-capability" ]; then
mysql -u${MYSQL_USER} -p${PASSWD} ${DB_NAME} >/dev/null 2>&1 <<EOF
UPDATE mailbox SET \
last_login_ip="$IP", \
last_login_date=NOW(), \
last_login_proto="POP3" \
WHERE username="$USER";
EOF
fi
exec "$@"
1 # chmod +x /usr/local/bin/postlogin-*
2 # systemctl restart dovecot

Acesse sua conta de e-mail e apos consulte a tabela mailbox (`SELECT * FROM mailbox`)

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 🙂

SPAMASSASSIN

Vamos começar pelo SpamAssassin

1 # apt install spamc spamassassin

Alguns ajustes

1 # systemctl enable spamassassin
2 # sed -i -e 's/CRON=0/CRON=1/' /etc/default/spamassassin
3 # sed -i -e 's/# report_safe 1/report_safe 0/' /etc/spamassassin/local.cf
1 # vim /etc/postfix/master.cf

Adicione ==> -o content_filter=spamassassin

1 smtp      inet  n       -       -       -       -       smtpd
2 -o content_filter=spamassassin
3 {..}
4 submission inet n       -       -       -       -       smtpd
5 -o content_filter=spamassassin
6 {..}
7 smtps     inet  n       -       -       -       -       smtpd
8 -o content_filter=spamassassin
9 {..}

E no final do arquivo:

1 # SpamAssassin
2 spamassassin unix -     n       n       -       -       pipe
3 user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Vamos instalar o Razor Pyzor para ajudar no bloquei dos Spam.

1 # apt install razor pyzor
1 # vim /etc/spamassassin/local.cf

Inclua antes da ultima linha (endif # Mail::SpamAssassin::Plugin::Shortcircuit)

1 # ...
2 # razor2
3 use_razor2 1
4 score RAZOR2_CHECK 2.500
5 # pyzor
6 use_pyzor 1
7 score PYZOR_CHECK 2.500
8 endif # Mail::SpamAssassin::Plugin::Shortcircuit
1 # su - debian-spamd -c 'razor-admin -d --create'
2 # su - debian-spamd -c 'razor-admin -register'
3 # su - debian-spamd -c 'razor-admin -discover'

ANTIVIRUS AMAVIS / CLAMAV

Você precisa ter nos repositórios os pacotes contrib non-free

1 # vim /etc/apt/sources.list

(exemplo)

1 deb http://deb.debian.org/debian/ buster main contrib non-free
2 deb-src http://deb.debian.org/debian/ buster main contrib non-free
3 deb http://security.debian.org/debian-security buster/updates main contrib non-free
4 deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
5 # buster-updates, previously known as 'volatile'
6 deb http://deb.debian.org/debian/ buster-updates main contrib non-free
7 deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
1 # 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 'razor-admin -d --create'
# su - amavis -c 'razor-admin -register'
# su - amavis -c 'razor-admin -discover'
1 # vim /etc/amavis/conf.d/15-content_filter_mode

#(Descomente)

1 [...]
2 @bypass_virus_checks_maps = (
3 \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
4 @bypass_spam_checks_maps = (
5 \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
6 [...]
1 # vim /etc/amavis/conf.d/50-user

Adicionar !! Atenção para SENHA

1 use strict;
2 #
3 # Place your configuration directives here.  They will override those in
4 # earlier files.
5 #
6 # See /usr/share/doc/amavisd-new/ for documentation and examples of
7 # the directives you can use in this file
8 #
9 @lookup_sql_dsn = (
10 ['DBI:mysql:database=postfixadmin;host=127.0.0.1;port=3306',
11 'postfixadmin',
12 'SENHA-BD-POSTFIX']);
13 $sql_select_policy = 'SELECT "Y" as local FROM alias WHERE address IN (%k)';
14 #------------ Do not modify anything below this line -------------
15 1;  # ensure a defined return
1 # vim /etc/amavis/conf.d/05-node_id

Altere:

1 $myhostname = "mail.remontti.com.br";
1 # vim /etc/amavis/conf.d/01-debian

Comente:

1 #$unarj      = ['arj', 'unarj'];

Descomente:

1 $unrar      = ['rar', 'unrar']; #disabled (non-free, no security support)

Personalização Amavis

1 # vim /etc/amavis/conf.d/20-debian_defaults

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.

1 #$sa_spam_subject_tag = '***SPAM*** ';

Comente se não desejar receber as menssagens de erro.

1 #$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
2 #$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA
3 #$final_spam_destiny       = D_BOUNCE;
4 $final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)

Não comente final_bad_header_destiny (se não os spam não serão entregues)

Se não quiser que seu email postmaster receba um email com todos os emails q ele discartou, comente:

1 #$virus_admin = "postmaster\@$mydomain"; # due to D_DISCARD default

Habilitar o amavis no postfix

1 # postconf -e "content_filter = smtp-amavis:[127.0.0.1]:10024"
1 # vim /etc/postfix/master.cf

Adicionar ao final

1 #Amavis
2 smtp-amavis       unix  -       -       -       -       2       smtp
3 -o smtp_data_done_timeout=1200
4 -o smtp_send_xforward_command=yes
5 -o disable_dns_lookups=yes
6 -o max_use=20
7 -o smtp_generic_maps=
8 127.0.0.1:10025 inet    n       -       -       -       -       smtpd
9 -o mynetworks=127.0.0.0/8
10 -o content_filter=
11 -o local_recipient_maps=
12 -o local_header_rewrite_clients=
13 -o relay_recipient_maps=
14 -o smtpd_restriction_classes=
15 -o smtpd_delay_reject=no
16 -o smtpd_client_restrictions=permit_mynetworks,reject
17 -o smtpd_helo_restrictions=
18 -o smtpd_sender_restrictions=
19 -o smtpd_recipient_restrictions=permit_mynetworks,reject
20 -o smtpd_data_restrictions=reject_unauth_pipelining
21 -o smtpd_end_of_data_restrictions=
22 -o smtpd_error_sleep_time=0
23 -o smtpd_soft_error_limit=1001
24 -o smtpd_hard_error_limit=1000
25 -o smtpd_client_connection_count_limit=0
26 -o smtpd_client_connection_rate_limit=0
27 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
28 -o strict_rfc821_envelopes=yes
29 # SPF
30 policyd-spf  unix       -       n       n       -       0       spawn
31 user=policyd-spf argv=/usr/bin/policyd-spf

Ajuste o SPF para que execute seus testes.

1 # sed -i 's/HELO_reject = Fail/HELO_reject = False/' /etc/postfix-policyd-spf-python/policyd-spf.conf
2 # sed -i 's/Mail_From_reject = Fail/Mail_From_reject = False/' /etc/postfix-policyd-spf-python/policyd-spf.conf

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.

1 # postconf -e "policyd-spf_time_limit = 3600"

Alguns pacotes que o amavis utiliza já não estão mais no debian buster então vamos baixa-los e instala-los.

1 # cd /tmp
2 # wget http://ftp.br.debian.org/debian/pool/main/r/ripole/ripole_0.2.0+20081101.0215-3_amd64.deb
3 # apt install ./ripole_0.2.0+20081101.0215-3_amd64.deb
4 # wget http://ftp.br.debian.org/debian/pool/main/z/zoo/zoo_2.10-28_amd64.deb
5 # apt install ./zoo_2.10-28_amd64.deb

Restarte todos os serviços e verifique se tudo esta ok.

1 # systemctl restart clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix
2 # systemctl status clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix

Simular o envio de um spam:

1 # cd /tmp
2 # wget http://spamassassin.apache.org/gtube/gtube.txt
3 # sendmail seu@email.com.br < gtube.txt

Não podemos esquecer de definir a senha do usuário root do mariadb/mysql

1 # mariadb
1 USE mysql;
2 UPDATE user SET password=PASSWORD('SENHA_DB_ROOT') WHERE User='root';
3 UPDATE user SET plugin="mysql_native_password";
4 FLUSH PRIVILEGES;
5 quit;

HTTPS / SSL / CERTIFICADO VÁLIDO

Sugestão é você configurar seu domínios virtuais (ou mais de um) e configurar o Let’s Encrypt
Leitura recomendada:
- Criando certificado grátis com Let’s Encrypt para o Apache no Debian 10
- Como ter diversos sub/domínios no mesmo servidor? (Domínios virtuais com Apache2)

Vou fazer um exemplo bem simples editando o 000-default.conf

1 # vim /etc/apache2/sites-enabled/000-default.conf

Descomente a linha ServerName e adicione o domínio do seu servidor

1 <VirtualHost *:80>
2 # The ServerName directive sets the request scheme, hostname and port that
3 # the server uses to identify itself. This is used when creating
4 # redirection URLs. In the context of virtual hosts, the ServerName
5 # specifies what hostname must appear in the request's Host: header to
6 # match this virtual host. For the default virtual host (this file) this
7 # value is not decisive as it is used as a last resort host regardless.
8 # However, you must set it for any further virtual host explicitly.
9 Protocols h2 http/1.1
10 ServerName mail.remontti.com.br
11 ServerAdmin webmaster@localhost
12 DocumentRoot /var/www/html
13 <Directory /var/www/html/>
14 Options FollowSymLinks
15 AllowOverride All
16 </Directory>
17 # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
18 # error, crit, alert, emerg.
19 # It is also possible to configure the loglevel for particular
20 # modules, e.g.
21 #LogLevel info ssl:warn
22 ErrorLog ${APACHE_LOG_DIR}/error.log
23 CustomLog ${APACHE_LOG_DIR}/access.log combined
24 # For most configuration files from conf-available/, which are
25 # enabled or disabled at a global level, it is possible to
26 # include a line for only one particular virtual host. For example the
27 # following line enables the CGI configuration for this host only
28 # after it has been globally disabled with "a2disconf".
29 #Include conf-available/serve-cgi-bin.conf
30 </VirtualHost>

Restarte o apache

1 # a2enmod http2
2 # systemctl restart apache2

Instale o letsencrypt e cerbot

1 # apt install letsencrypt python-certbot-apache

Antes de gerar o certificado para “mail.remontti.com.br” pare o apache

1 # systemctl stop apache2
2 # letsencrypt --authenticator standalone --installer apache -d mail.remontti.com.br
1 Saving debug log to /var/log/letsencrypt/letsencrypt.log
2 Plugins selected: Authenticator standalone, Installer apache
3 Enter email address (used for urgent renewal and security notices) (Enter 'c' to
4 cancel): noc@remontti.com.br
5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6 Please read the Terms of Service at
7 https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
8 agree in order to register with the ACME server at
9 https://acme-v02.api.letsencrypt.org/directory
10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
11 (A)gree/(C)ancel: A
12 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
13 Would you be willing to share your email address with the Electronic Frontier
14 Foundation, a founding partner of the Let's Encrypt project and the non-profit
15 organization that develops Certbot? We'd like to send you email about our work
16 encrypting the web, EFF news, campaigns, and ways to support digital freedom.
17 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
18 (Y)es/(N)o: N
19 Obtaining a new certificate
20 Performing the following challenges:
21 http-01 challenge for mail.remontti.com.br
22 Waiting for verification...
23 Cleaning up challenges
24 Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
25 Enabled Apache socache_shmcb module
26 Enabled Apache ssl module
27 Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
28 Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf
29 Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
30 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
31 1: No redirect - Make no further changes to the webserver configuration.
32 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
33 new sites, or if you're confident your site works on HTTPS. You can undo this
34 change by editing your web server's configuration.
35 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
36 Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
37 Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf
38 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
39 Congratulations! You have successfully enabled https://mail.remontti.com.br
40 You should test your configuration at:
41 https://www.ssllabs.com/ssltest/analyze.html?d=mail.remontti.com.br
42 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
43 IMPORTANT NOTES:
44 - Congratulations! Your certificate and chain have been saved at:
45 /etc/letsencrypt/live/mail.remontti.com.br/fullchain.pem
46 Your key file has been saved at:
47 /etc/letsencrypt/live/mail.remontti.com.br/privkey.pem
48 Your cert will expire on 2020-02-18. To obtain a new or tweaked
49 version of this certificate in the future, simply run certbot again
50 with the "certonly" option. To non-interactively renew *all* of
51 your certificates, run "certbot renew"
52 - Your account credentials have been saved in your Certbot
53 configuration directory at /etc/letsencrypt. You should make a
54 secure backup of this folder now. This configuration directory will
55 also contain certificates and private keys obtained by Certbot so
56 making regular backups of this folder is ideal.
57 - If you like Certbot, please consider supporting our work by:
58 Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
59 Donating to EFF:                    https://eff.org/donate-le

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!

1 # mv /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/certs/ssl-cert-snakeoil.pem.off
2 # mv /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/private/ssl-cert-snakeoil.key.off
3 # ln -s /etc/letsencrypt/live/mail.remontti.com.br/fullchain.pem /etc/ssl/certs/ssl-cert-snakeoil.pem
4 # ln -s /etc/letsencrypt/live/mail.remontti.com.br/privkey.pem /etc/ssl/private/ssl-cert-snakeoil.key

Adicione smtp_tls_security_level, smtp_tls_CAfile e smtp_tls_loglevel em main.cf

1 # postconf -e "smtp_tls_security_level = may"
2 # postconf -e "smtp_tls_CAfile = /etc/ssl/certs/ssl-cert-snakeoil.pem"
3 # postconf -e "smtp_tls_loglevel = 1"

Restart os serviços

1 # systemctl restart clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix

DKIM

Adicione usuário postfix ao opendkimgrupo para que o Postfix possa acessar o soquete do OpenDKIM quando for necessário.

1 # adduser postfix opendkim
1 # vim /etc/opendkim.conf

Altere

1 #Socket                 local:/var/run/opendkim/opendkim.sock
2 Socket              local:/var/spool/postfix/opendkim/opendkim.sock

Adicione ao final do arquivo

1 ##  Specifies the path to the private key to use when signing.  Ignored if
2 ##  SigningTable and KeyTable are used.  No default; must be specified for 
3 ##  signing if SigningTable/KeyTable are not in use.
4 KeyTable            /etc/dkimkeys/key.table
5 ##  SigningTable dataset
6 ##      default (none)
7 ##
8 ##  Defines a dataset that will be queried for the message sender's address
9 ##  to determine which private key(s) (if any) should be used to sign the
10 ##  message.  The sender is determined from the value of the sender
11 ##  header fields as described with SenderHeaders above.  The key for this
12 ##  lookup should be an address or address pattern that matches senders;
13 ##  see the opendkim.conf(5) man page for more information.  The value
14 ##  of the lookup should return the name of a key found in the KeyTable
15 ##  that should be used to sign the message.  If MultipleSignatures
16 ##  is set, all possible lookup keys will be attempted which may result
17 ##  in multiple signatures being applied.
18 SigningTable        refile:/etc/dkimkeys/signing.table
19 ##  ExternalIgnoreList filename
20 ##
21 ##  Names a file from which a list of externally-trusted hosts is read.
22 ##  These are hosts which are allowed to send mail through you for signing.
23 ##  Automatically contains 127.0.0.1.  See man page for file format.
24 ExternalIgnoreList  /etc/dkimkeys/trusted.hosts
25 ##  InternalHosts dataset
26 ##      default "127.0.0.1"
27 ##
28 ##  Names a file from which a list of internal hosts is read.  These are
29 ##  hosts from which mail should be signed rather than verified.
30 ##  Automatically contains 127.0.0.1.
31 InternalHosts       /etc/dkimkeys/trusted.hosts
32 ##  Canonicalization hdrcanon[/bodycanon]
33 ##      default "simple/simple"
34 ##
35 ##  Select canonicalizations to use when signing.  If the "bodycanon" is
36 ##  omitted, "simple" is used.  Valid values for each are "simple" and
37 ##  "relaxed".
38 Canonicalization    relaxed/simple
39 ##  AutoRestart { yes | no }
40 ##      default "no"
41 ##
42 ##  Indicate whether or not the filter should arrange to restart automatically
43 ##  if it crashes.
44 AutoRestart     yes
45 ##  AutoRestartRate n/t[u]
46 ##      default (none)
47 ## 
48 ##  Sets the maximum automatic restart rate.  See the opendkim.conf(5)
49 ##  man page for the format of this parameter.
50 AutoRestartRate 10/1M
51 ##  DNSTimeout n
52 ##      default 10
53 ##
54 ##  Specify the time in seconds to wait for replies from the nameserver when
55 ##  requesting keys or signing policies.
56 DNSTimeout      5

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.

1 # mkdir /var/spool/postfix/opendkim
2 # chown opendkim:postfix /var/spool/postfix/opendkim
3 # vim /etc/default/opendkim

Altere

1 #RUNDIR=/var/run/opendkim
2 RUNDIR=/var/spool/postfix/opendkim
1 # vim /etc/dkimkeys/signing.table

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:

1 *@remontti.com.br   remontti

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.

1 # vim /etc/dkimkeys/key.table 
1 remontti     remontti.com.br:201911:/etc/dkimkeys/remontti.private

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.

O segundo campo é dividido em 3 seções separadas por dois pontos.
1- A primeira seção é o nome de domínio para o qual a chave é usada.
2- A segunda seção é um seletor usado ao procurar registros importantes no DNS.
3- A terceira seção nomeia o arquivo que contém a chave de assinatura do domínio.

Crie o arquivo de hosts confiáveis.

1 # vim /etc/dkimkeys/trusted.hosts
1 127.0.0.1
2 ::1
3 localhost
4 mail
5 remontti.com.br
6 mail.remontti.com.br

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.

Gere chaves para cada domínio:

1 # cd /etc/dkimkeys
2 # opendkim-genkey -b 2048 -h rsa-sha256 -r -s 201911 -d remontti.com.br -v

opendkim-genkey: generating private key
opendkim-genkey: private key written to 201911.private
opendkim-genkey: extracting public key
opendkim-genkey: DNS TXT record written to 201911.txt

Criamos uma atalho e alteramos as permissões

1 # ln -s 201911.private  remontti.private
2 # chown -R opendkim. /etc/dkimkeys/
3 # chmod -R go-rw /etc/dkimkeys/

Restart e verifique se o OpenDKIM iniciou corretamente.

1 # systemctl restart opendkim
2 # systemctl status -l opendkim

Configurar DKIM no seu DNS

Como no SPF, o DKIM usa registros TXT para armazenar informações sobre a chave de assinatura de cada domínio.
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:

1 201911._domainkey       IN      TXT     ( "v=DKIM1; h=rsa-sha256; k=rsa; s=email; "
2 "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3"
3 "ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB" )  ; ----- DKIM key 201911 for remontti.com.br

Remova os parênteses, e as quebras de linhas. E h=rsa-sha256 altere para h=sha256. O resultado ficaria:

1 201911._domainkey       TXT     "v=DKIM1; h=sha256; k=rsa; s=email; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3" "ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB"

Você pode adicionar uma política ADSP 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 _adsp._domainkeyem seu domínio com um valor de dkim=all. 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.

1 _adsp._domainkeyem      TXT     "dkim=all"

Relatório e conformidade de mensagens de domínio (DMARC). 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.

O registro DMARC é um registro TXT para host _dmarcem seu domínio que contém os seguintes valores recomendados:

1 v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r

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:

1 v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r;fo=1;rf=afrf;rua=mailto:seuemail@domino.com.br

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:

`v` especifica a versão do protocolo, neste caso DMARC1.
`p` determina a política para o domínio raiz, como "example.com". As opções disponíveis:
- `quarantine` instrui que, se um email falhar na validação, o destinatário deve separá-lo para processamento.
- `reject` solicita que o servidor de email receptor rejeite os emails que falham na validação.
- `none` solicita que o destinatário não tome nenhuma ação se um email não passar na validação.

`sp` determina a política para subdomínios, como "subdomínio.exemplo.com". Ele usa os mesmos argumentos que a `p` tag.

`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:
- `r` modo de alinhamento relaxado, a autenticação DKIM é aplicada com menos rigor.
- `s` modo de alinhamento estrito. Somente uma correspondência exata com a entrada DKIM para o domínio raiz será vista como validada.

`aspf` determina o modo de alinhamento para verificação do SPF. Leva os mesmos argumentos que `adkim`.

Adicione nas configurações do seu arquivo DNS autoritativo e restart seu DNS. Ex (bind):

1 $TTL 86400      ; 1 day
2 remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
3 2019071900 ; serial
4 10800      ; refresh (3 hours)
5 3600       ; retry (1 hour)
6 2419200    ; expire (4 weeks)
7 300        ; minimum (5 minutes)
8 )
9 NS      ns1.remontti.net.br.
10 NS      ns2.remontti.net.br.
11 A       45.80.50.4
12 AAAA    2804:f123:bebe:cafe::4
13 MX      10 mail.remontti.net.br.
14 TXT     "v=spf1 a mx -all"
15 SPF     "v=spf1 a mx -all"
16 $ORIGIN remontti.net.br.
17 $TTL 10800      ; 3 hours
18 45-80-50-0                      A       45.80.50.0
19 router-gw                       A       45.80.50.1
20 AAAA    2804:f123:bebe:cafe::1
21 ns1                             A       45.80.50.2
22 AAAA    2804:f123:bebe:cafe::2
23 hostmaster                      A       45.80.50.2
24 AAAA    2804:f123:bebe:cafe::2
25 ns2                             A       45.80.50.3
26 AAAA    2804:f123:bebe:cafe::3
27 www                             A       45.80.50.4
28 AAAA    2804:f123:bebe:cafe::4
29 ftp                             A       45.80.50.4
30 AAAA    2804:f123:bebe:cafe::4
31 zabbix                          A       45.80.50.5
32 AAAA    2804:f123:bebe:cafe::5
33 phpipam                         A       45.80.50.5
34 AAAA    2804:f123:bebe:cafe::5
35 mail                            A       45.80.50.6
36 AAAA    2804:f123:bebe:cafe::6
37 imap                            A       45.80.50.6
38 AAAA    2804:f123:bebe:cafe::6
39 pop                             A       45.80.50.6
40 AAAA    2804:f123:bebe:cafe::6
41 smtp                            A       45.80.50.6
42 AAAA    2804:f123:bebe:cafe::6
43 $TTL 300 ; 5 min
44 $ORIGIN remontti.com.br.
45 201911._domainkey       TXT     "v=DKIM1; h=sha256; k=rsa; s=email; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3" "ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB"
46 _adsp._domainkeyem      TXT     "dkim=all"
47 _dmarc                  TXT     "v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r"

Teste as chaves para a assinatura e verificação corretas usando o opendkim-testkeycomando:

1 # opendkim-testkey -d remontti.com.br -s 201911

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.

Adicione

1 vim /etc/postfix/main.cf
1 # OpenDKIM
2 milter_default_action = accept
3 milter_protocol = 6
4 smtpd_milters = local:opendkim/opendkim.sock
5 non_smtpd_milters = local:opendkim/opendkim.sock
1 # systemctl restart opendkim postfix
2 # systemctl status opendkim postfix

Rotação da chave DKIM

(Não faça isso agora! Leia com atenção)

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 é:

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.

1 # cd /etc/dkimkeys/
2 # opendkim-genkey -b 2048 -h rsa-sha256 -r -s 202006 -d remontti.com.br -v

Use o .txt gerado para adicionar as novas chaves ao seu DNS, usando o novo seletor AAAAMM nos nomes de host. Não remova ou altere os registros DKIM TXT existentes. Feito isso, verifique os novos dados da chave usando o seguinte comando:

1 # opendkim-testkey -d remontti.com.br -s 202006 -k remontti.private

Pare o Postfix e o OpenDKIM para que eles não processem e-mails enquanto você estiver trocando as chaves.

1 # systemctl stop postfix opendkim

Remova o link anterior do "remontti.private" e link ao novo "202006.private" arquivo gerado e defina as permissões corretas:

1 # cd /etc/dkimkeys
2 # rm remontti.private 
3 # ln -s 202006.private  remontti.private
4 # chown -R opendkim. /etc/dkimkeys/
5 # chmod -R go-rw /etc/dkimkeys/

Altere o antigo valores de AAAAMM em key.table para o novo seletor e salve o arquivo.

1 # vim /etc/dkimkeys/key.table 
1 remontti     remontti.com.br:202006:/etc/dkimkeys/remontti.private

Inicie o OpenDKIM e o Postfix

1 # systemctl start opendkim postfix

Certifique-se de que ambos iniciem sem erros.

1 # systemctl status opendkim postfix

Espere algumas semanas para remover o antigo registro pois algum servidor pode estar ainda usando a antiga chave. (Eu normalmente removo apenas quando crio uma nova)

FAIL2BAN + NFTABLES

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.

1 # apt install nftables fail2ban

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.
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".

1 # vim /etc/fail2ban/jail.conf

Procure por "banaction = iptables-multiport" e "banaction_allports = iptables-allports" e altere seu valor para "nftables-allports":

1 #banaction = iptables-multiport
2 #banaction_allports = iptables-allports
3 banaction = nftables-allports
4 banaction_allports = nftables-allports

Altere o modo de bloqueio em nftables-allports.conf para fazer que ele de um "drop all".

1 # vim /etc/fail2ban/action.d/nftables-allports.conf

Procure por nftables_mode = meta l4proto e altere deixando seu valor vazio:

1 #nftables_mode = meta l4proto <protocol>
2 nftables_mode =

Em nftables-common.conf alteraremos o padrão de reject para drop

1 # vim /etc/fail2ban/action.d/nftables-common.conf

Procure por "blocktype = reject" e altere seu valor para "drop".

1 #blocktype = reject
2 blocktype = drop

Ativamos alguns filtros. Se desejar ajustar o tempo te banimento altere o valor de bantime, e os numeros de erros/tentativas em maxretry.

1 # vim /etc/fail2ban/jail.d/defaults-debian.conf

Adicione no arquivo:

1 [sshd]
2 enabled = true
3 [postfix-sasl]
4 enabled = true
5 bantime  = 1h
6 maxretry = 5
7 [dovecot]
8 enabled = true
9 bantime  = 1h
10 maxretry = 5
11 [sieve]
12 enabled = true
13 bantime  = 1h
14 maxretry = 5

Ativamos o nftables e restartamos os serviços:

1 # systemctl enable nftables
2 # systemctl restart nftables fail2ban

Para visualizar seu firewall use o comando:

1 # nft list ruleset

Alguns comandos do fail2ban
Status:

1 # fail2ban-client status

Status do filtro:

1 # fail2ban-client status NOME_FILTRO

Remover um IP bloqueado de um filtro:

1 # fail2ban-client set NOME_FILTRO unbanip IP_BLOQUEADO

Ufaaaa acabamos, espero que tenha gostado! 🙂

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

46 Resultados

  1. Frands Franco disse:

    Meu bindo apresenta syntax error na linha da chave TXT do DKIM, ja tentei de tudo e não aceita.

  2. Raildson Felipe da Silva disse:

    Parabéns pelo lab, funcionou perfeitamente.

  3. Vicente Filho disse:

    Boa noite, vim aqui colaborar com os demais com problema de PHP
    Pra quem teve problema com o PHP 7.2 e precisa da Versão 8.2 em diante, só alterar antes de:
    “APACHE2, MARIADB E PHP7”
    —————————

    #1. Add the Sury PPA Repository
    apt update
    apt install lsb-release apt-transport-https ca-certificates software-properties-common -y

    #Following this, import the repository GPG key:
    wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

    #Append the repository to the sources list:
    sh -c ‘echo “deb https://packages.sury.org/php/ $(lsb_release -sc) main” > /etc/apt/sources.list.d/php.list’

    #To make sure it is working correctly:
    apt update; apt upgrade

    # depois de instalar o PHP 8.2, então sim vá pro proximo passo:
    # detalhes: eu troquei: “libapache2-mod-php” para “libapache2-mod-php8.2”
    #APACHE2, MARIADB E PHP7
    apt install apache2-utils mariadb-server mariadb-client curl\
    libapache2-mod-php8.2 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

    • Vicente Filho disse:

      CORRIGINDO:
      # 1 – Adicionando o Repositório “Sury PPA Repository”
      apt update
      apt install lsb-release apt-transport-https ca-certificates software-properties-common -y

      #2 – importando o repositorio “GPG key”:
      wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

      #3 – Adicionando o repositorio para o “sources list”: (removido as duas aspas e ajustado para aspa simples inicio e fim)
      sh -c ‘echo deb https://packages.sury.org/php/ $(lsb_release -sc) main > /etc/apt/sources.list.d/php.list’

      #4 – execute o comando abaixo para funcionar corretamente:
      apt update; apt upgrade

      #5 – Instalando o PHP 8.2 e os modulos já corrigido:
      apt install apache2 apache2-utils mariadb-server mariadb-client curl\
      libapache2-mod-php8.2 php8.2 php8.2-mysql php8.2-cli php8.2-fpm php-pear php8.2-gmp php8.2-gd php8.2-bcmath\
      php8.2-mbstring php8.2-common php8.2-opcache php8.2-curl php8.2-xml php8.2-zip php8.2-readline php8.2-imap php8.2-intl php8.2-ldap php8.2-imagick

      #6 – PRONTO, só continuar o Tutorial daqui em diante

  4. Daniel Lemes disse:

    Nos meus testes, o dovecot_ident registra no banco de dados o ip do proprio servidor, e não o ip da maquina que eu estou usando pra acessar o email. Tô fazendo algo errado? E algum bug? Tem alguma correção?

  5. Jean disse:

    Boa tarde, qual porta o servidor usa para enviar emails?

  6. Parabéns pelo tutorial!
    Queria muito ter esse tutorial em PDF, para servir de base/consulta posterior.
    Grato.

  7. Anderson Carlos disse:

    Olá pessoal,
    Estou com duvida se isso mesmo o esperado no DKIM:
    Comando: opendkim-testkey -d mydomian.com.br -s 202206 -k mydomian.private -vvv
    opendkim-testkey: using default configfile /etc/opendkim.conf
    opendkim-testkey: key loaded from mydomian.private
    opendkim-testkey: checking key ‘202206._domainkey.mydomian.com.br’
    opendkim-testkey: ‘202206._domainkey.mydomian.com.br’ record not found

    • Fabio Bellini disse:

      Olá Anderson!
      Resolvi este problema aqui criando um registro na configuracao de zona dns do registro.br (onde registrei meu dominio .com.br)
      p=MI.. (pega do arquivo /etc/dkimkeys/202206.txt e remova as aspas duplas e os espacos , ou seja uma string única (uma chave única)
      Na configuracao de zona dns do registro.br
      Crie uma nova entrada
      TXT
      202206._domainkey
      “v=DKIM1; h=sha256; k=rsa; s=email; p=MIIBIjAN…”
      clique no botão Salvar Alterações e no seu server Debian, execute novamente o opendkim-testkey -d mydomian.com.br -s 202206…

      Espero ter ajudado.

  8. Anderson Carlos disse:

    Olá,
    Ótimo tutorial fiz a configuração toda por esse tutorial.

    Mas está me apresentando um erro na hora de enviar email e não recebo nenhum email.

    Erro apresentado e “Error 451 4.3.5 Server configuration error” revisei toda a configuração e está tudo igual a do tutorial.

    Obs.: o meu dominio já responde ao meu servidor dns autoritativo e o servidor de email está no mesmo servidor do dns. Outra coisa e o DNS Reverso ainda não passou para o meu dominio pois o bloco de IP e emprestado da operadora do link.

    desde já agradeço a atenção…

  9. Henri Azevedo disse:

    É possível configurar quantas tentativas o servidor fará para o envio de email?

    Estou fazendo um teste com o IP fixo que não tem DNSr configurado então um provedor de email em especifico não recebe meus emails, ele rejeita justamente pelo fato do meu IP não ter DNSr configurado, porem eu só recebo o email “Undelivered Mail Returned to Sender” após 5 dias do envio.. por exemplo enviei um dia 28/03 e só recebi o retorno de não recebimento 02/04, e nesse tempo o servidor foi tentando fazer o envio..

  10. Joel Chaves disse:

    Boa noite,
    para quando pode fazer este tutorial para o debian 11?

    • Sem previsão, quem sabe quando receber doações que de para deixar de lado o que realmente paga o leite das crianças para escrever para o blog 🙂
      Não parece mas escrever um tutorial demanda tempo e estudos, testes…
      Infelizmente meu tempo ta cada vez mais curto, pois preciso focar no que me da retorno.
      Mas quando achar um tempinho vou tentar escrever, tem uma fila gigante de pedidos já.

  11. Henri disse:

    Tem alguma configuração ou motivo que possa fazer demorar pra receber os emails?

    Segui o tutorial no Debian 11, fazendo alguns ajustes na parte do postfixadmin, mas deu tudo certo, consigo enviar e receber emaisl, mas os externos demoram um pouco pra ser recebido pelo servidor, bem que eu configurei a poucas horas o DNS então não sei se é por isso..

  12. Bruno disse:

    Parabens pelo tutorial.
    Meu servidor apresentou um problema na hora de enviar email.

    Erro smtp (-1) conexão ao servidor falhou. roundcube.

    Alguem sabe o que pode ser?

  13. Henri Azevedo disse:

    Boa tarde Rudimar, como podemos diagnosticar o que está causando o “delivery temporarily suspended”?

  14. iManjate disse:

    Boa tarde, parabens pelo tutorial muito didatico.
    Eu estou tendo problema ao tentar instalar o postfixadmin, usando o comando: apt install postfixadmin no debian 11.
    recebo o seguinte erro, E: Unable to locate package postfixadmin
    alguma saida para esta mensagem?

  15. Marcio dos Santos disse:

    Bom dia,

    Estou caindo na blacklist por conta do meu servidor estar enviando HELO/EHLO mal formado, saberia dizer onde ajusto isso? não achei no tutorial.

  16. Marcio dos Santos disse:

    Boa tarde, ótimo tutorial

    Estou com um problemas que estou caindo nas black-list por conta de EHLO/HELO mal formados, ja tentei resolver com o parâmetro 9 smtpd_command_filter ) porem sem sucesso, teria ideia de como resolver para que qualquer tentativa de EHLO/HELO seja substituída pelo nome do meu servidor.

    Segue exemplo do EHLO/HELO que peguei no trafego de saída:
    SMTP: EHLO n0Ojgf2.inflation.1Jmwt9t4kQl
    SMTP: EHLO su4jP9301.undisowning.f

    Desde já agradeço sua atenção, Obrigado

  17. Erico disse:

    Eu crio as contas pelo postfix admin, porem na hora de logar no rouncube da falha de comunicação com servidor, e ao verificar no servidor a maildir do dominio/contas não foram criadas, alguém passou por isso?

  18. Alvaro Rezende de Oliveira disse:

    Muito obrigado pelo tutorial. Excelente. Estou conseguindo receber emails de fora. Mas não consigo enviar nenhum email. Mensagemd e erro:
    Oct 26 11:09:41 srv postfix/smtp[15157]: connect to vip-us-br-mx.terra.com[208.84.244.133]:25: Connection timed out
    Oct 26 11:09:41 srv postfix/smtp[15157]: CE4C6BD7F9: to=, relay=none, delay=30, delays=0.11/0.01/30/0, dsn=4.4.1, status=deferred (connect to vip-us-br-mx.terra.com[208.84.244.133]:25: Connection timed out)

    O que pode ser?

  19. Joel disse:

    Estão a conseguir com o novo update do debian?

  20. Olivam Chaves disse:

    parabéns pelo seu artigo, tenho uma duvida no webmail quando recebo spam ele esta indo para a pasta spam, porem no outlook (pop3) nao recebe nada da pasta spam, tem alguma forma de o outlook conseguir receber os spam na pasta spam sem usar imap?

  21. Olivam Chaves disse:

    boa tarde,
    ótimo tutorial
    vc tem algum outro tutorial que complementa esse na parte do postfiadmin e dovecot para aparecer a quota de cada usuario.

    • Olivam Chaves disse:

      consegui resolver isso

      criei 1 arquivos dentro de /etc/dovecot/dovecot-dict-sql-user.conf com o conteudo

      connect = host=localhost dbname=postfixadmin user=postfixadmin password=XXXXXX

      map {
      pattern = priv/quota/storage
      table = quota2
      username_field = username
      value_field = bytes
      }
      map {
      pattern = priv/quota/messages
      table = quota2
      username_field = username
      value_field = messages
      }

      criei 1 arquivos dentro de /etc/dovecot/dovecot-dict-sql-domain.conf com o conteudo

      connect = host=localhost dbname=postfixadmin user=postfixadmin password=XXXXX

      map {
      pattern = priv/quota/storage
      table = domain
      username_field = domain
      value_field = quota
      }
      map {
      pattern = priv/quota/messages
      table = quota2
      username_field = username
      value_field = messages
      }

      alterei o dovecot.conf
      dict {
      #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
      #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
      sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf
      sqldomainquota = mysql:/etc/dovecot/dovecot-sql-domain.conf
      }

      service stats {
      unix_listener stats-reader {
      user = vmail
      group = vmail
      mode = 0660
      }

      unix_listener stats-writer {
      user = vmail
      group = vmail
      mode = 0660
      }
      }

      alterei o 10-master.conf
      service dict {
      # If dict proxy is used, mail processes should have access to its socket.
      # For example: mode=0660, group=vmail and global mail_access_groups=vmail
      unix_listener dict {
      mode = 0600
      user = vmail
      #group =
      }

      adicionei no final do 90-quota.conf
      plugin {
      # Using SQL Tables to store current quota size
      quota = dict:Quota:%d:proxy::sqldomainquota
      quota = dict:User Quota::proxy::sqluserquota
      # Allow 10% more for Trash Folder
      quota_rule2 = Trash:storage=+10%%
      }

      e ativei no postfixadmin config.inc.php
      $CONF[‘quota’] = ‘YES’;
      $CONF[‘domain_quota’] = ‘YES’;
      $CONF[‘used_quotas’] = ‘YES’;
      $CONF[‘new_quota_table’] = ‘YES’;

      agora mostra a % de cada usuario no postfixadmin

  22. diego brito sousa disse:

    Olá, parabéns pelo teu artigo, ele me ajudou a economizar muito tempo,
    pois eu demorava demais para configurar um sistema de emails. Com teu
    artigo configurei mais rápido e de forma melhor.

    Só me surgiu uma dúvida, quando executei os 3 comandos:
    # su – debian-spamd -c ‘razor-admin -d –create’
    # su – debian-spamd -c ‘razor-admin -register’
    # su – debian-spamd -c ‘razor-admin -discover’

    todos eles me retornaram: ‘This account is currently not available.’

    Estou no Ubuntu 20.04 LTS

  23. Angelo Silva disse:

    Quais os requisitos de hardware?

  24. Rogerio luksevicius disse:

    excelente manual fiz tudo como manda é show parabens
    to recebendo email limpo porem quando tento enviar recebo

    “Jul 23 18:46:23 c906f60d postfix/submission/smtpd[17404]: connect from localhost[127.0.0.1]
    Jul 23 18:46:23 c906f60d postfix/submission/smtpd[17404]: NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 554 5.7.1 : Client host rejected: Access denied; from= to= proto=ESMTP helo=”

    que, puder ajudar seria grato rogerio.luksevicius@gmail.com

  25. Luiz Fernando disse:

    Excelente conteudo, conheço o postfixa um bom tempo e fico feliz que ainda seja uma ferramenta adotada pelos profissionais atuais.

    Você incluiu umas coisas que eu não conhecia ainda, bem detalhada sua explicação.

    Obrigado por compartilhar.

  26. Joel disse:

    Olá,

    Bem que poderia fazer um Tutorial com o ISPConfig, ajudava bastante 😀

  27. Gustavo Peres disse:

    Boa Noite, excelente tutorial, porém não consigo acessar email pelo Roundcube nem por outro gerenciador, no Roundcube apresenta: Falha na conexão com servidor, no postfix já foi criado a conta de email normal. será que é alguma config no postfix???

  28. FELIPE MEIRELES disse:

    Olá. Obrigado pelo tutorial. Eu instalei meu servidor local está funcionando o envio e recebimento interno e externo. Só que o email remoto identifica a mensagens como spam e os emails enviados para gmail são bloqueados ao chegar no servidor deles. Como podemos resolver isso ??

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *