Tutorial como criar Servidor de Emails completo no Ubuntu
Objetivos
- Entender o que é um servidor
- Saber as atribuições de um servidor de email
- As necessidades para criar um servidor de email
- Passo a passo para criar um servidor de email completo no Ubuntu
O que é um servidor
Dentro do contexto de computação, rede, internet e serviços, um servidor possui duas características principais:
Do ponto de vista de hardware (equipamento necessário), um servidor é um computador, e possui a maioria das características que um computador possui: placa mãe, processador, memória ram, dispositivo de armazenamento, etc.
Na visão de software, um servidor pode ser definido como um conjunto de programas de computador que visam prestar um serviço.
Quais as atribuições de um servidor de email?
Como vimos a definição generalista para o conceito de servidor, agora podemos especificar de uma forma mais sucinta o que é um servidor de emails.
Uma explicação bastante simplificada define um servidor de emails como um computador configurado com softwares que visam realizar tarefas relacionadas ao envio e recebimento de emails.
Este servidor pode ser configurado em uma rede local, sem acesso a internet, provendo envio e recebimento de emails de forma restrita dentro de uma empresa, por exemplo. Ou pode ser configurado com acesso a internet, provendo serviço de envio e recebimento de email de forma ampla, para domínios externos.
Quais as necessidades para criar um servidor de emails
O primeiro passo é ter um computador disponível.
Caso pense em um projeto didático, pode criar um servidor localmente em sua casa. Se sua empresa de fornecimento de internet disponibilizar um IP real, é possível abrir as portas necessárias no seu roteador, para dar acesso a envio e recebimento de emails na internet para o seu servidor, a única ressalva é que geralmente não poderá configurar facilmente uma entrada DNS do tipo PTR, mas não é um problema tão grande inicialmente.
Lembrando que é necessário ter um sistema operacional instalado. Você pode realizar esta etapa manualmente ou utilizar uma imagem pronta do sistema operacional para seu setup. Por exemplo, se optar por um Raspberry Pi, pode utilizar uma imagem pronta do Ubuntu Server, poupando a etapa de instalação do sistema operacional.
Caso opte por utilizar uma máquina virtual, também existem imagens do Sistema Operacional já prontas.
Agora, se tiver um computador antigo em casa e precise instalar o sistema operacional, basta seguir os passos do Tutorial setup Servidor Linux Ubuntu Local, lembre de começar a partir do passo 9 (e você precisa de um pen drive com a imagem de um SO para dar boot no instalador).
Uma opção mais funcional é alugar um servidor do tipo VPS (Virtual Private Server), ele funciona como um computador já ligado na internet, com IP real configurado e geralmente é possível configurar a entrada DNS do tipo PTR sem problemas. Este servidor já vem com sistema operacional instalado, poupando esta etapa de configuração.
Uma visão ampla do processo envolve várias etapas, mas podemos citar:
-
- Escolha de um domínio/subdomínio para o servidor
- Setup de Hardware
- Escolha do equipamento: computador pessoal ou raspberry pi, ou um VPS, etc.
- Setup de Software
- Instalação do Sistema Operacional
- Configuração DNS
- Configuração do domínio/subdomínio no servidor
- Instalação servidor http (Apache ou Nginx) – para dar suporte administrativo (PostfixAdmin) e cliente web para acesso aos emails (Roundcube)
- Instalação de banco de dados (MySQL/MariaDB ou Postgresql) – para gerenciar armazenamento de emails
- Instalação de certificados SSL (TLS) para o domínio e subdomínio
- Instalação do Postfix para gerenciar processo de envio e recebimento de emails
- Instalação e configuração PostfixAdmin (acesso web para criar novas caixas de email)
- Verificar portas abertas no servidor (firewall) e abrir portas, caso necessário
- Instalação do OpenDKIM
- Configurar suporte SPF, DKIM e DMARC no DNS do domínio do servidor de email
- Integrar DKIM e DMARC no Postfix
- Instalação e configuração Dovecot para suporte de conexão IMAP para clientes de email
- Mudar o escopo de armazenamento de emails do tipo sistema de arquivos para banco de dados
- Mudar o escopo de caixas de email vinculadas aos usuários do linux, para caixas de email virtuais (gerenciadas pelos usuários cadastrados no banco de dados pelo postfixadmin – virtual mail box)
- Instalação e configuração Roundcube (acesso web para ler e enviar emails)
- Suporte para configuração de vários domínios no servidor de email: neste setup, configuramos que o servidor só pode enviar email e criar caixas para o dominio1.com.br, por exemplo; Com esta etapa, permite configurar domínios adicionais: dominio2.com.br, dominio3.com.br, onomededominioqueeuquiser.com.br, etc.
Passo a para criar servidor de email completo no Ubuntu
Vamos começar partindo do princípio que você já tem um computador com sistema operacional instalado, ou um VPS.
Neste exemplo, vou criar o servidor baseado no domínio viniciuspaes.com. Lembre-se de alterar este domínio, para seu domínio escolhido. Lembre-se que você precisa ser o dono do domínio escolhido, ou seja, tenha realizado o processo de registro do domínio que deseja utilizar. Caso tenha dúvida em como fazer, acesse o Tutorial de como registrar domínio na internet. Lembrando que domínio com final .br só pode ser registrado pelo site do Registro.br.
Passo 1
Conecte no seu servidor por SSH, exemplo:
ssh usuario@ip
Ou caso utilize uma chave:
ssh -i chave.pem usuario@IP
Passo 2
Verificar o hostname do servidor, digite:
hostname
O ideal é termos o hostname configurado corretamente. Por exemplo, caso meu domínio escolhido seja o viniciuspaes.com, quero configurar o meu servidor de email em um subdomínio chamado mail.viniciuspaes.com. O ideal é ter então o hostname configurado para mail.viniciuspaes.com.
Podemos editar o arquivo:
sudo nano /etc/hostname
E alterar seu conteúdo para:
mail.viniciuspaes.com
Outra opção é utilizando o comando:
sudo hostnamectl set-hostname mail.viniciuspaes.com
É comum o hostname não ficar persistente após reiniciar o servidor, para garantir que não ocorra, esta etapa opcional pode resolver o problema:
Edite o arquivo:
sudo nano /etc/cloud/cloud.cfg
Procure a linha que começa com:
preserve_hostname
Precisamos que ela fique ativada, se ela tiver com a opção “false”, então altere a linha toda para:
preserve_hostname: true
Agora faça um teste, reinicie o servidor:
sudo reboot now
Agora conecte novamente por SSH no servidor após ele terminar o boot (pode demorar alguns minutos).
Verifique novamente o hostname, para verificar se ficou persistente:
hostname
Passo 3
Agora é necessário realizar algumas alterações nas entradas DNS do seu domínio. O que eu faço para facilitar o processo, é redirecionar meus domínios do Registro.BR para a DigitalOcean gerenciar o DNS. Pois a considero o serviço de gerenciar o DNS do Registro.BR um pouco lento. Então, se utilizar um domínio com final .BR é uma opção a ser considerada. É possível utilizar também outra empresa para gerenciar o DNS, como o Route66 da Amazon AWS.
Neste exemplo utilizo um domínio .com, registrado no Google Domains; local também onde gerencio o DNS. A interface do Google Domains é satisfatória, então não vou redirecionar meu DNS do Google Domains para outra empresa gerenciar.
Neste passo, precisamos inserir entradas DNS. Primeiramente precisamos informar qual servidor irá gerenciar os emails para o domínio. Isto é feito pela entrada do tipo MX.
Então vou criar uma entrada MX com as informações:
Nome do host: viniciuspaes.com Tipo: MX TTL: 3600 Prioridade: 0 Dados: mail.viniciuspaes.com
No exemplo acima, algumas empresas optam por separar o campo de prioridade do servidor de email, no caso do Google Domains, ele aparece no campo Dados, separando a prioridade com um espaço do nome do subdomínio.
Com a criação desta entrada DNS quando alguém enviar um email para qualquercaixa@viniciuspaes.com, ele vai entender que o servidor de email está configurado no subdomínio mail.viniciuspaes.com, pois foi o que configuramos no exemplo acima.
Mas agora precisamos informar em qual IP o servidor de email está configurado. Então, para esta etapa, precisamos criar uma entrada do tipo A, que direciona um nome de domínio (ou subdomínio) para um IP, ou seja, o mail.viniciuspaes.com vai para qual IP?
Então, vamos criar uma entrada DNS do tipo A:
Nome do host: mail.viniciuspaes.com
Tipo: A
TTL: 1800
Dados: (digite o endereço IP do seu servidor)
Passo 4
Vamos instalar agora o principal software do servidor de emails. Este que gerencia o processo de envio e recebimento de emails. Digite o comando abaixo para instalar o Postfix:
sudo apt install postfix
No processo de instalação quando perguntarem “General type of mail configuration”, selecione:
Internet Site
Quando perguntarem “System mail name”, selecione o seu domínio principal, não insira o subdomínio:
viniciuspaes.com
Agora é interessante verificar se a porta 25 (smtp) responsável por enviar emails está aberta e funcional, acesse o site do link abaixo e insira seu IP e a porta 25 e clique para realizar o teste:
https://www.yougetsignal.com/tools/open-ports/
Caso a porta esteja fechada, teste se o seu IP do servidor realmente está correto. Se utilizar o endereço do subdomínio (mail.viniciuspaes.com) tenha certeza que o endereço está com o DNS correto direcionando para o IP do servidor. Caso esteja tudo certo, tente abrir a porta 25 no firewall do Ubuntu (caso o firewall realmente esteja instalado):
sudo ufw allow 25/tcp
Caso ainda tenha algum erro, é possível verificar quais portas o Postfix está escutando, digite o comando:
sudo ss -lnpt | grep master
No comando acima, é possível verificar algo parecido como:
LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=1610,fd=13))
O resultado acima mostra que o processo mestre do Postfix está utilizando a porta 25 (0.0.0.0:25)
Uma outra forma de testar, é se conectar ao servidor de email do google por telnet. Vamos instalar telnet com o comando:
sudo apt install telnet
Agora vamos tentar realizar uma conexão, utilizando o comando:
telnet gmail-smtp-in.l.google.com 25
Caso consiga realizar a conexão nas etapas acima, tudo certo!
Caso negativo, será necessário entrar em contato com a empresa onde contratou o VPS e pedir para abrirem as portas de envio e recebimento de emails para você. Caso seu servidor seja local, em sua residência, será necessário abrir as portas de envio e recebimento de email, e realizar um port foward para o IP local do seu servidor.
Passo 5
Tecnicamente já temos o servidor de email pronto para enviar email. Porém não possui autenticação TLS e nem entradas DNS para proteção contra spoof, spam e outros. Mas já podemos realizar um teste, enviando email pela linha de comando. Já adianto que o email será recusado, pois ainda não temos SPF, DKIM e DMARC configurados, mas vamos lá:
echo "teste envio de email por linha de comando" | sendmail seuemail@gmail.com
No comando acima, lembre-se de trocar seuemail@gmail.com por uma caixa de email que você tenha acesso.
Agora é interessante olhar o log de email, para ver se o email foi enviado, ou se aconteceu algum problema:
cat /var/log/mail.log
Fiz um teste de envio para uma conta que tenho no gmail.com e outra no icloud.com, em ambos os casos o email foi recusado. Segue um exemplo de erro que pode aparecer:
GMAIL: <seuemail@gmail.com>: host gmail-smtp-in.l.google.com[142.250.0.26] said: 550-5.7.1 [100.100.100.100] The IP you're using to send mail is not authorized to 550-5.7.1 send email directly to our servers. Please use the SMTP relay at your 550-5.7.1 service provider instead. Learn more at 550 5.7.1 https://support.google.com/mail/?p=NotAuthorizedError .157 - gsmtp (in reply to end of DATA command) ICLOUD: <seuemail@icloud.com>: host mx02.mail.icloud.com[17.57.156.30] said: 550 5.7.1 Mail from IP 100.100.100.100 was rejected due to listing in Spamhaus PBL. For details please see http://www.spamhaus.org/query/bl?ip=100.100.100.100 (in reply to RCPT TO command)
Na sua conta de email externa (gmail, icloud, outlook, etc) tente enviar um email para você. Por exemplo, se o seu login no Ubuntu é ubuntu e o seu domínio é viniciuspaes.com, automaticamente sua conta de usuário do Linux também é uma caixa de email. Ou seja, tente enviar um email para ubuntu@viniciuspaes.com.
As caixas de email baseadas em usuário do linux ficam armazenadas no diretório /var/mail.
Para olhar as caixas já criadas, utilize o comando:
ls /var/mail
Neste exemplo temos o usuário ubuntu criado. Podemos editar o arquivo para ver o email:
sudo nano /var/mail/viniciuspaes
Ou apenas mostrar seu conteudo:
sudo cat /var/mail/viniciuspaes
Caso o email tenha chego corretamente, o arquivo irá contar com bastante texto, boa parte sendo o header (cabeçalho) do email. Estas informações de cabeçalho normalmente são ocultas quando olhamos o email em um cliente com interface gráfica.
Um upgrade para visualizar o email em linha de comando é instalar o pacote mailutils:
sudo apt install mailutils
Faça outro teste e envie um novo email para seu usuário do servidor, utilizando uma caixa de email externa (por exemplo, vá no seu gmail e mande um email para ubuntu@viniciuspaes.com, não esqueça de trocar viniciuspaes.com pelo nome do seu domínio e ubuntu pelo seu nome de usuário de login).
Com o mailutils instalado, você pode checar a caixa de email com o comando:
Se tudo correr bem, você vai entrar no aplicativo em linha de comando chamado mail. Se tiver emails em sua caixa de entrada, cada email vai ter um ID numérico: 1, 2, 3 …, n.
Para ler o email, basta digitar o ID do mesmo para abrí-lo.
O email será apresentado por pedaços, pois geralmente seu cabeçalho é muito grande. Tecle ENTER ou seta para baixo para ir mostrando o email aos poucos. Ao terminar de ler, aperte a tecla “x” para fechar.
Não precisa se preocupar muito em aprender a utilizar o programa mail (linha de comando) futuramente vamos instalar interface gráfica com roundcube. Estes passos são somente para testes iniciais no servidor. Mas em todo caso, segue um resumo das principais funções (teclas de execução/atalho) do software:
- h – acessar o header de um email
- z – ir para o fim do email
- n – ir para o próximo email
- r – responder um email que está lendo
- r 1 – (dentro do menu inicial) responder o email com ID = 1
- d 1 – (dentro do menu inicial) excluir o email com ID = 1
- d 1 3 4 6 – (dentro do menu inicial) excluir os emails com ID’s = 1 3 4 6
- d 1-15 – (dentro do menu inicial) excluir os emails com ID’s = 1-15
- q – sair e arquivar o email lido na pasta /home/usuario/mbox
- x – sair sem arquivar emails lidos
Se quiser saber mais sobre o mailutils, pode acessar a man page ou a url:
https://mailutils.org/manual/mailutils.html
Caso tenha lido emails e saído do programa utilizando a tecla “q”, os emails lidos serão arquivados na pasta pessoal do usuário. Então, o usuário com nome ubuntu, terá seus emails arquivados na pasta “/home/ubuntu/mbox”.
Caso queira acessar estes emails arquivados, basta acessar o arquivo:
sudo nano /home/ubuntu/mbox
Resumindo, os emails que chegam ficam disponíveis na pasta “/var/mail/usuario/”, e os emails que foram lidos e arquivados são movidos para a pasta “/home/usuario/mbox”. Levando em conta que a pasta padrão dos usuários fique dentro de /home.
Passo 6 – Configurações iniciais no Postfix
Agora é importante realizar algumas configurações iniciais no Postfix.
Vamos verificar qual o tamanho definido para cada caixa de email do usuário, de forma geral:
postconf | grep mailbox_size_limit
No comando acima, utilizamos o postconf para verificar no arquivo de configuração do postfix (/etc/postfix/main.cf) o valor da variável mailbox_size_limit. Lembrando que a saída será em bytes. Caso retorne o valor “0” (zero) quer dizer que a caixa de email não possui nenhum limite de tamanho, o que é perigoso, pois se receber um bombardeio de spam nesta fase inicial de configuração, pode encher todo o dispositivo de armazenamento (HD/SSD/SD, etc) e ter problema no boot do sistema operacional.
Vamos definir então um tamanho máximo de 250MB para cada caixa de email criada:
sudo postconf -e mailbox_size_limit=256000000
Lembrando que 1024 bytes = 1KB, logo, 256000000/1024 = 250MB
Agora vamos verificar qual o tamanho máximo que uma mensagem pode ter, contando com anexo. Costumo utilizar o limite adotado pelo gmail, que é de 25MB, sendo também 10% do tamanho total da caixa. Mas fique livre para escolher os valores que funcionam melhor para o seu setup. Utilizando o comando abaixo vamos verificar como está configurado:
postconf | grep message_size_limit
Geralmente o Postfix vem com o tamanho padrão de 10240000. Que é equivalente a 10.240.000 Bytes = 10240 Kbytes = 1024 * 10 Kbytes = 1 * 10 MB = 10MB.
Caso queira aumentar o limite para 25MB, utilize o comando:
sudo postconf -e message_size_limit=25600000
Outro ponto importante é verificar se o hostname do servidor está corretamente configurado no Postfix. Como comentamos em um passo anterior, ter o hostname corretamente configurado no servidor é uma etapa importante. Uma alternativa, é definir o hostname manualmente no postfix também. Vamos então editar manualmente o arquivo de configuração para verificar como o mesmo está configurado:
sudo nano /etc/postfix/main.cf
Na linha que começa com a variável “myhostname”, certifique-se de alterar para que apareça somente o subdomínio escolhido pro servidor de email, no meu caso ficaria como:
myhostname = mail.viniciuspaes.com
É importante também verificar se o seu servidor tem suporte tanto para IPv4, quanto para IPv6. O Postfix possui suporte para ambos os casos, mas caso só tenha suporte para IPv4, ou tenha o desejo de utilizar somente o IPv4 com o Postfix, é possível alterar com o comando:
sudo postconf -e "inet_protocols = ipv4"
Para que todas as mudanças realizadas no arquivo de configuração do postfix tenham efeito, basta reiniciar o serviço:
sudo service postfix restart
Passo 7 – Lembrete ao realizar upgrade no sistema com apt
Esta etapa é apenas para lembrar que caso faça o upgrade do Postfix pelo apt (sudo apt upgrade) e no momento do upgrade apareça a opção de reconfigurar o Postfix, recuse (no configuration). Caso realize novamente a configuração, será necessário realizar o passo anterior novamente, pois a modificações que acabamos de realizar podem ser reescritas pelo arquivo padrão de configuração do postfix.
Passo 8 – Como configurar Alias por linha de comando
Posteriormente neste tutorial vamos instalar o PostfixAdmin, configurar maildir, dovecot e virtual mail boxes (vmail). O processo de configurar o Alias que será mostrado neste passo não ficará funcional e sim o Alias criado pelo PostfixAdmin. Então se pretende seguir este tutorial até o fim, não se preocupe tanto com esta etapa. Esta etapa é mais didática, para mostrar como seria a configuração.
Como dito acima, nesta etapa inicial de configuração do servidor em modo de linha de comando, é possível também criar redirecionamento de caixas de email. Ou seja, se receber um email em webmaster@viniciuspaes.com, você pode redirecionar para a caixa de um outro usuário, como exemplo, para ubuntu@viniciuspaes.com. Este redirecionamento é conhecido como Alias, ou seja, um pseudônimo.
Uma característica de um Alias, é que a caixa “webmaster@viniciuspaes.com” não existe, os emails que forem enviados para ela serão direcionados para “ubuntu@viniciuspaes.com”. Em contrapartida, em um redirecionamento de caixas, as 2 caixas iriam existir, e o email enviado para a primeira seria replicado para a outra, mas estaria presente nas 2 caixas.
Então vamos lá, para criar um alias, edite o arquivo:
sudo nano /etc/aliases
A lógica dentro do arquivo de alias é a seguinte: “origem: destino”
Então como só temos 1 domínio configurado no servidor, podemos realizar o exemplo citado acima como:
webmaster: ubuntu
Que seria o mesmo que:
webmaster@viniciuspaes.com: ubuntu@viniciuspaes.com
Agora é uma boa hora para criar os Alias que desejar, algumas sugestões:
postmaster: ubuntu@viniciuspaes.com hostmaster: ubuntu@viniciuspaes.com webmaster: ubuntu@viniciuspaes.com dmarc: ubuntu@viniciuspaes.com
Importante! Toda vez que editar o arquivo de alias (/etc/aliases) é necessário recriar o banco de dados de redirecionamentos do sistema. Utilize o comando:
sudo newaliases
Passo 9 – Configurando SPF
Como mostramos em um dos passos anteriores, os emails que estamos enviando pelo servidor estão sendo recusados. A maioria das grandes empresas de servidor de email costumam recusar as mensagens que não contenham o mínimo de segurança e autenticidade do remetente. Para suprir esta necessidade, neste passo vamos ensinar como configurar o SPF (Sender Policy Framework).
O SPF é configurado primeiramente pelo DNS, sendo um registro do tipo TXT. Uma tradução para seu acrônimo seria “Estrutura da Política do Remetente”.
O SPF pode ser utilizado para definir quais servidores são autorizados para enviar emails do domínio. Uma finalidade conhecida do SPF é a proteção dos seus emails contra técnicas em que um servidor malicioso tenta se passar pelo seu servidor (técnica conhecida como spoofing) enviando emails de SPAM e muitas vezes realizando Phishing.
Então faça login na empresa que utiliza para gerenciar as entradas DNS do seu servidor. Precisamos então criar uma nova entrada DNS.
A configuração da entrada DNS deve ser:
Nome do host: @ (dependendo da sua empresa de registro, deixe em branco ou insira seu nome de domínio) Tipo: TXT TTL: 3600 Dados: v=spf1 mx ~all
Da configuração acima, estamos definindo o SPF como:
- v=spf1: indica a versão, no caso, versão spf1
- mx: indica que apenas os servidores destacados na entrada mx estão autorizados a enviar email deste domínio
- ~all: emails oriundos deste domínio só devem ter como origem os servidores definidos pelo SPF
A propagação do DNS pode demorar alguns minutos ou até muitas horas. Mas no meu caso, quando faço alterações no Google Domains, as mudanças são quase que instantâneas. Em todo caso, utilize o comando abaixo para verificar se a entrada TXT criada já está funcional (já foi propagada):
dig viniciuspaes.com txt
Terá uma resposta parecida com os dados abaixo:
;; ANSWER SECTION: viniciuspaes.com. 3563 IN TXT "v=spf1 mx ~all"
Agora precisamos instalar e configurar o agente de políticas SPF que irá trabalhar juntamente com o Postfix. Instale com o comando:
sudo apt install postfix-policyd-spf-python
Agora precisamos configurar o agente de políticas SPF. Primeiramente, vamos configurar para que o mesmo seja iniciado junto com o postfix. Então, vamos editar o arquivo:
sudo nano /etc/postfix/master.cf
Agora vá até o fim do arquivo e insira o texto abaixo:
policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spf
No texto acima, fique atento que a segunda linha tem 2 caracteres de espaço. Ela fica assim para frente da primeira linha. Isso indica que a linha abaixo é uma continuação do comando.
Agora vamos editar outro arquivo de configuração:
sudo nano /etc/postfix/main.cf
Nesta etapa, vamos definir o timeout para o agente SPF, caso aconteça algum problema de execução. Vamos também definir uma regra para rejeitar emails que não atendam as regras do SPF:
policyd-spf_time_limit = 3600 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policyd-spf
Na inserção acima, atenção novamente no espaçamento e indentação, como explicado anteriormente.
Agora precisamos reiniciar o Postfix, para que as configurações do SPF tenham efeito:
sudo service postfix restart
Passo 10 – Configurando DKIM com OPENDKIM
Continuando com o processo para garantir confiabilidade ao nosso novo servidor de email e das mensagens enviadas por ele, precisamos também configurar o DKIM. O DKIM vem do termo em inglês “DomainKeys Identified Mail”. Basicamente é um protocolo que permite assinar os emails digitalmente em um processo que o destinatário consiga confirmar a veracidade sobre o remetente da mensagem por autenticação criptografada.
Para dar suporte ao DKIM no servidor, vamos instalar o pacote opendkim e o opendkim-tools:
sudo apt install opendkim opendkim-tools
Ao instalar o opendkim, automaticamente um usuário e grupo com o nome opendkim será criado. Como o opendkim e o postfix irão precisar acessar alguns arquivos em comum, é interessante já adicionar o usuário postfix ao grupo do opendkim para facilitar o gerenciamento de acesso de arquivos e suas permissões:
sudo gpasswd -a postfix opendkim
Precisamos realizar agora algumas configurações no opendkim, para isso vamos editar o arquivo de configuração:
sudo nano /etc/opendkim.conf
Encontre a linha “#LogWhy no”, precisamos habilitar a mesma. O caracter “#” no começo da linha transforma a linha em um comentário. Precisamos descomentar a linha e habilitar o LogWhy, altere então a linha para:
LogWhy yes
Precisamos agora garantir que a linha que começa com “Mode” e a linha que começa com “SubDomains” estejam descomentadas. Então estas linhas devem ficar como:
Mode sv SubDomains no
Agora encontre a linha “OversignHeader From”, precisamos inserir as informações abaixo desta linha:
AutoRestart yes AutoRestartRate 10/1M Background yes DNSTimeout 5 SignatureAlgorithm rsa-sha256
Caminhe agora para o fim do arquivo e insira estas linhas:
KeyTable refile:/etc/opendkim/key.table SigningTable refile:/etc/opendkim/signing.table ExternalIgnoreList /etc/opendkim/trusted.hosts InternalHosts /etc/opendkim/trusted.hosts
Precisamos definir uma estrutura de arquivos e diretórios para armazenar as chaves para o opendkim e definir as permissões de acesso. Execute as linhas abaixo 1 de cada vez no terminal, não copie tudo e cole no terminal, senão somente a primeira linha será executada:
sudo mkdir /etc/opendkim sudo mkdir /etc/opendkim/keys sudo chown -R opendkim:opendkim /etc/opendkim sudo chmod go-rw /etc/opendkim/keys
Vamos criar e editar agora o arquivo de tabela de assinaturas:
sudo nano /etc/opendkim/signing.table
Insira o conteúdo abaixo dentro do arquivo, lembre-se de trocar o domínio viniciuspaes.com pelo seu domínio configurado:
*@viniciuspaes.com default._domainkey.viniciuspaes.com
*@*.viniciuspaes.com default._domainkey.viniciuspaes.com
Seguimos agora criando e editando o arquivo de chaves de assinaturas:
sudo nano /etc/opendkim/key.table
Insira o texto no arquivo:
default._domainkey.viniciuspaes.com viniciuspaes.com:default:/etc/opendkim/keys/viniciuspaes.com/default.private
Agora crie e edite o arquivo para servidores confiáveis, para que internamente os emails oriundos destes endereços não precisem passar pela verificação do OpenDKIM:
sudo nano /etc/opendkim/trusted.hosts
Insira o texto dentro do arquivo (lembre de trocar viniciuspaes.com pelo seu domínio escolhido):
127.0.0.1
localhost
.viniciuspaes.com
Caminhamos agora para a etapa final de configuração do OpenDKIM. Vamos criar a pasta onde o par de chave público/privada será armazenado:
sudo mkdir /etc/opendkim/keys/viniciuspaes.com
Vamos gerar o par de chaves do domínio viniciuspaes.com dentro do diretório acima criado, com o comando:
sudo opendkim-genkey -b 2048 -d viniciuspaes.com -D /etc/opendkim/keys/viniciuspaes.com -s default -v
Precisamos agora corrigir as permissões de arquivos (lembre de executar uma linha de cada vez, não cope e cole as 2 linhas no terminal, senão somente o comando da primeira linha será executado):
sudo chown opendkim:opendkim /etc/opendkim/keys/viniciuspaes.com/default.private sudo chmod 600 /etc/opendkim/keys/viniciuspaes.com/default.private
Vamos reiniciar o OpenDKIM para ter certeza que as mudanças realizadas surtiram efeito:
sudo service opendkim restart
Agora podemos verificar a chave pública DKIM criada com o comando:
sudo cat /etc/opendkim/keys/viniciuspaes.com/default.txt
O comando acima irá gerar uma saída parecida com:
default._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEXW0SRvQxj+8SuWEAzsJ/qbYmaH6lFAAOCAQ8HLCJ+C1QT7PAM" "XbFC2PrMmh+XJUKdOvj4z0jBr2ITMDNqpDOuOKWqME5MWslr6xEk6l/A8vydHvyeikS8" ) ; ----- DKIM key default for viniciuspaes.com
Repare que na saída acima temos 4 campos de variáveis:
- v=DKIM1;
- h=sha256;
- k=rsa;
- p=(uma chave grande dividida em 2 partes)
No caso da variável p=, ela está dividida em 2 partes, estas 2 partes são divididas com aspas duplas. Dependendo da empresa que gerencia seu DNS, ela aceitará a variável p= separada em 2 partes. Mas o ideal é juntar esta variável removendo as aspas duplas e espaçamento que pode haver entre elas.
Então no exemplo acima, precisamos dos dados desta forma:
- v=DKIM1;
- h=sha256;
- k=rsa;
- p=MIIBIjANBgkqhkiG9w0BAQEXW0SRvQxj+8SuWEAzsJ/qbYmaH6lFAAOCAQ8HLCJ+C1QT7PAM
IIBCgKCAQsksk3a9Y1ymBZvgXY5bnTyy1w5wK5BG/7UtDUKKSD2ggtIgPNDLaGJGEvxjJiHieRRp
NeJ2zyOuTJmw1MKcRiJ3pEfT0oBHZl5HZLE1iljXFX58R0/qLp3IdQGvT4/pwKI/ZeBKwBe
pa80mQ8Es+xGn2Bh7PB7e4j1VDIfrpcXbFC2PrMmh+XJUKdOvj4z0jBr2ITMDNqpDOu
OKWqME5MWslr6xEk6l/A8vydHvyeikS8s8yntmN473Twca0rGvbdrcfOoZG9VkH7YPC
iv4ucdf6+btY2moibxqzpeEHswnt+43SQIDAQAB
Estamos prontos então para criar uma entrada DNS do tipo TXT para configurar assinatura DKIM. Lembrando que os dados acima devem ser inseridos neste formado:
v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEXW0SRvQxj+8SuWEAzsJ/qbYmaH6lFAAOCAQ8HLCJ+C1QT7PAM IIBCgKCAQsksk3a9Y1ymBZvgXY5bnTyy1w5wK5BG/7UtDUKKSD2ggtIgPNDLaGJGEvxjJiHieRRpNeJ2zyOuTJmw1MKcRiJ3pEfT0oBH Zl5HZLE1iljXFX58R0/qLp3IdQGvT4/pwKI/ZeBKwBepa80mQ8Es+xGn2Bh7PB7e4j1VDIfrpcXbFC2PrMmh+XJUKdOvj4z0jBr2IT MDNqpDOuOKWqME5MWslr6xEk6l/A8vydHvyeikS8s8yntmN473Twca0rGvbdrcfOoZG9VkH7YPCiv4ucdf6+btY2moibxqzpeEHswnt+43SQIDAQAB
Então, na empresa que gerencia seu DNS, insira os dados da nova entrada (lembre de trocar a chave p= do exemplo abaixo por sua chave gerada):
Nome do host: default._domainkey Tipo: TXT TTL: 3600 Dados: v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEXW0SRvQxj+8SuWEAzsJ/qbYmaH6lFAAOCAQ8HLCJ+C1QT7PAMIIBCgKCAQsksk3a9Y1ymBZvgXY5bnTyy1w5wK5BG/7UtDUKKSD2ggtIgPNDLaGJGEvxjJiHieRRpNeJ2zyOuTJmw1MKcRiJ3pEfT0oBHZl5HZLE1iljXFX58R0/qLp3IdQGvT4/pwKI/ZeBKwBepa80mQ8Es+xGn2Bh7PB7e4j1VDIfrpcXbFC2PrMmh+XJUKdOvj4z0jBr2ITMDNqpDOuOKWqME5MWslr6xEk6l/A8vydHvyeikS8s8yntmN473Twca0rGvbdrcfOoZG9VkH7YPCiv4ucdf6+btY2moibxqzpeEHswnt+43SQIDAQAB
Após a alteração no DNS podemos testar se a chave DKIM está funcionando corretamente. De volta no servidor, execute o comando:
sudo opendkim-testkey -d viniciuspaes.com -s default -vvv
Ao executar o comando acima, receberá uma saída semelhante com:
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key 'default._domainkey.viniciuspaes.com'
opendkim-testkey: key secure
opendkim-testkey: key OK
Quando faço o teste acima com meus domínios contratados pelo Google Domains sempre recebo notificação de chave segura (key secure). Já meus domínios do Registro.br sempre aparecem como chave insegura (key not secure). Se receberem esse aviso, não se preocupem, pelo que pesquisei é devido ao DNSSEC e nem todas as empresas de registro de domínios possuem ele implementado ainda.
Lembrando que toda vez que alterar os registros DNS de seu domínio, é necessário esperar alguns minutos até que as mudanças sejam propagadas. Então é bom aguardar um pouco, caso esteja recebendo algum erro nesta etapa.
Uma observação pertinente, verifiquei alguns usuários relatando erro sobre “query timed out”. Particularmente quando configurei no Ubuntu 22.04 não percebi problema algum com a autenticação DKIM. Mas caso aconteça com você, basta editar o arquivo “sudo nano /etc/opendkim.conf” e descomentar a linha que começa com “#TrustAnchorFile” e reiniciar o opendkim (sudo service opendkim restart).
Agora é necessário realizar a integração do OpenDKIM com o Postfix. Primeiro vamos criar um diretório para armazenar os arquivos .socket:
sudo mkdir /var/spool/postfix/opendkim
Definir a permissão correta para o diretório criado:
sudo chown opendkim:postfix /var/spool/postfix/opendkim
Agora vamos editar o arquivo de configuração:
sudo nano /etc/opendkim.conf
Agora é necessário encontrar a linha “Socket local:/run/opendkim/opendkim.sock”, vai ser necessário alterar esta linha para o caminho do novo diretório criado:
Socket local:/var/spool/postfix/opendkim/opendkim.sock
Necessário também editar outro arquivo de configuração:
sudo nano /etc/default/opendkim
Encontre a linha “SOCKET=local:$RUNDIR/opendkim.sock”, será necessário alterar ela para o novo caminho também:
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
Por fim, precisamos editar o último arquivo para ter o OpenDKIM integrado:
sudo nano /etc/postfix/main.cf
Adicionar este texto no fim do arquivo para habilitar o mail filter (milter protocol):
# Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim.sock non_smtpd_milters = $smtpd_milters
Integração OpenDKIM e Postfix finalizada, agora precisamos reiniciar os serviços (execute uma linha de cada vez):
sudo service opendkim restart sudo service postfix restart
Pronto, se tudo correu corretamente, seu servidor de email já tem autenticação DKIM configurada.
Passo 11
Continuando com o processo de garantir confiabilidade e autenticação para o servidor de email que estamos criando, precisamos também habilitar o DMARC (Domain-based Message Authentication, Reporting, and Conformance).
O primeiro passo para seguir com a configuração do DMARC é ter certeza que o SPF e DKIM já estão funcionando corretamente. Nesta etapa do tutorial, já é possível enviar um email para uma caixa do GMAIL sem que ele seja recusado. Então vamos realizar o teste:
echo "teste dkim e spf" | sendmail pessoa@gmail.com
Lembre-se de substituir no comando acima, adicionando uma caixa de email do gmail que tenha acesso.
Agora vá no seu gmail e procure pelo email que acabou de enviar. Seja humilde, procure na pasta de SPAM também. Ao encontrar o email, clique para verificar seu conteúdo.
Com o email aberto, no canto superior direito da mensagem, há 3 pontos na vertical, sendo um menu sobre a mensagem. Clique para abrir as opções deste menu e selecione:
Mostrar original
A mensagem em formato texto plano será exibida e é possível verificar no alto, algumas considerações que o gmail faz:
SPF: PASS com o IP 100.100.100.100
DKIM: 'PASS' com o domínio viniciuspaes.com
Desta forma conseguimos também confirmar que configuramos corretamente o SPF e o DKIM, pois o gmail está reconhecendo a autenticação. Só para confirmar se está tudo correto, podemos também confirmar se há um alinhamento dos identificadores, ou seja, configuramos corretamente o hostname e o domínio (FQDN). Então no texto plano da mensagem de email, procure as linhas que contenham as informações abaixo:
- Return-Path: <email@viniciuspaes.com>
- DKIM-Signature: (…) d=viniciuspaes.com
- From: <email@viniciuspaes.com>
No exemplo acima, podemos ver que os 3 campos contém o mesmo domínio, então é dito que os identificadores estão alinhados. Sendo um sinal verde, para podermos configurar o DMARC.
Caso não tenha uma caixa de email no gmail, uma excelente opção é acessar o site:
https://www.learndmarc.com/
Ao acessar o site, ele irá informar para enviar um email para um destinatário (este destinatário muda a cada acesso, anote o seu!):
Send an email to this address to get started:
ld-123456@learndmarc.com
Basta executar o comando de envio de email por linha de comando e o website após receber o email, irá fazer os testes baseado na mensagem recebida. Então envie um email para eles:
echo “teste” | sendmail ld-123456@learndmarc.com
No comando acima, troque o remetente pelo remetente que o website irá te informar.
Lembrando que neste teste, só precisamos do SPF e DKIM funcionais, caso positivo, podemos continuar.
Vamos então criar a entrada DNS do tipo TXT para configurar o DMARC:
Nome do host: _dmarc Tipo: TXT TTL: 300 Dados: v=DMARC1; p=none; pct=100; fo=1; rua=mailto:dmarc@viniciuspaes.com; ruf=mailto:dmarc@viniciuspaes.com;
Um breve resumo sobre o que estamos fazendo na configuração acima:
- v=DMARC1, estamos utilizando a versão do protocolo DMARC1
- p=none, a política do nosso servidor é nenhuma.
- pct=100, a porcentagem dos emails deste domínio que o DMARC deve ser aplicado
- fo=1, gerar relatórios caso qualquer mecanismo de segurança apresente falha (SPF, DKIM e DMARC).
- rua=email@domínio.com, para qual endereço de email os relatórios agregados do DMARC devem ser enviados
- ruf=email@domínio.com, para qual endereço de email os relatórios forense de emails que falharam DMARC devem ser enviados
É interessante alterar a política (p=none) futuramente. Mas inicialmente é prudente analisar todos os emails que chegam, para verificar se existem emails legítimos que não utilizam o DMARC. A medida que for dando manutenção no servidor e verificando os logs dos remetentes, percebendo que todos estão cumprindo com a política DMARC, é possível então atualizar para:
- quarantine, os emails que não atendem ao DMARC ficam retidos para o administrador verificar sua legitimidade
- reject, rejeitar todos os emails que não atendem os critérios do DMARC
Próximo passo é verificar o registro TXT para o DMARC criado no seu DNS:
dig txt +short _dmarc.viniciuspaes.com
A saída do comando acima será exatamente a entrada que criou, no caso do nosso exemplo, vamos ter:
"v=DMARC1; p=none; pct=100; fo=1; rua=mailto:dmarc@viniciuspaes.com; ruf=mailto:dmarc@viniciuspaes.com;"
Vamos agora repetir o teste que realizamos no início deste email. Mas enviar um email do servidor até uma caixa do gmail e verificar se agora o gmail reconhece o DMARC configurado:
echo "email de teste DMARC" | sendmail pessoa@gmail.com
Vá novamente na sua caixa do gmail e procure pelo email que acabou de enviar. Tem chance de ainda aparecer na caixa de SPAM, é normal para um servidor de email novo, sem reputação reconhecida.
Com o email aberto, vá nas opções e selecione:
Mostrar original
Agora será possível verificar uma saída semelhante com:
SPF: PASS com o IP 100.100.100.100
DKIM: 'PASS' com o domínio viniciuspaes.com
DMARC: 'PASS'
Se todas as etapas forem executadas com êxito o DMARC deverá estar configurado e funcional no servidor!
Passo 12
Esta etapa é exclusiva para preparar o servidor para os próximos passos.
Primeiro, vamos aproveitar e habilitar as portas de acesso web (80 e 443), caso estejam bloqueadas:.
sudo ufw allow 80,443/tcp
Precisamos habilitar certificado SSL para o subdomínio “mail.viniciuspaes.com”. Mas antes precisamos instalar um software de servidor http (apache, nginx, etc), depois criar o arquivo de configuração para o subdomínio com acesso http e https. Instalar o certbot e solicitar o certificado.
Você pode optar por qual servidor http deseja utilizar. Nginx é uma ótima opção, com um excelente desempenho. No geral, as próximas etapas do tutorial não são muito influenciadas por qual servidor de páginas escolher. O que muda é a modificação do arquivo de configuração e pacotes de integração com o banco de dados. Mas para efeito deste tutorial, vamos utilizar o apache:
sudo apt install apache2
Agora vamos criar o primeiro arquivo de configuração:
sudo nano /etc/apache2/sites-available/mail.viniciuspaes.com.http.conf
Agora vamos criar o arquivo de configuração para acesso com SSL (TLS):
sudo nano /etc/apache2/sites-available/mail.viniciuspaes.com.ssl.conf
Agora precisamos ativar os 2 arquivos de configuração (executar uma linha por vez):
a2ensite mail.viniciuspaes.com.http.conf a2ensite mail.viniciuspaes.com.ssl.conf
Reiniciando o apache para que as modificações tenham efeito:
sudo service apache2 restart
Vamos atualizar o gerenciador de pacotes snap para a última versão:
sudo snap install core; sudo snap refresh core
Agora precisamos instalar o certbot, que irá gerenciar a instalação e configuração dos certificados SSL do Let’s Encrypt no servidor:
sudo snap install --classic certbot
Precisamos criar um link lógico da pasta do certbot para correto funcionamento:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
como estamos utilizando o apache neste tutorial, vamos executar o Certbot com o comando:
sudo certbot --apache
Nesta primeira execução do certbot, será necessário “criar uma conta”, informando seu email e suas preferências para compartilhar seu endereço de email com terceiros.
Após este processo, aparecerá a opção para escolher para qual domínio deseja solicitar o certificado SSL.
Neste exemplo, utilizamos o domínio viniciuspaes.com, então o subdomínio escolhido/configurado para o servidor de emails:
mail.viniciuspaes.com
Esta primeira etapa de configuração do certificado SSL para o servidor de emails está pronta.
Uma curiosidade é que, caso siga este tutorial até o fim, vamos configurar o Roundcube para funcionar nesta URL do subdomínio, então os arquivos de configuração acima terão uma pequena mudança.
Passo 13
Um recurso interessante para o servidor de email é permitir que clientes de email se conectem e acessem as mensagens dos usuários. Os clientes de email são softwares/aplicativos presentes nos computadores, celulares e tablets que permitem essa integração com o servidor de email. Ou seja, ao invés de ter que utilizar um navegador de internet, se conectar ao seu servidor, o seu servidor ter um cliente de email web configurado (gmail é um exemplo de cliente web de email), você pode ter um aplicativo que faça todo esse processo de acessar sua conta de email de forma mais prática.
Para ter este suporte, utilizamos o software chamado Dovecot, para dar suporte IMAP e POP3 para clientes de email.
Pensando em todo este processo, o primeiro passo é verificar se o Firewall do Ubuntu conhecido como UFW está bloqueando as portas necessárias para este funcionamento.
Então, para abrir as portas de acesso para IMAP:
sudo ufw allow 587,465,143,993/tcp
Se desejar dar suporte para POP3, precisamos também abrir as portas:
sudo ufw allow 110,995/tcp
Para permitir a conexão de cliente de email no nosso servidor de email, precisamos habilitar o suporte para “Submission Service”. Então vamos editar o arquivo:
sudo nano /etc/postfix/master.cf
Adicione as linhas abaixo no arquivo (lembrete para manter os 2 caracteres de espaço da segunda linha em diante, manter este padrão de identação):
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=no -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth #Microsoft Outlook Support smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth
Agora, vamos continuar a configuração editando o arquivo:
sudo nano /etc/postfix/main.cf
Dentro do modo de edição é necessário encontrar as linhas abaixo e inserir o caractere “#” no início delas. Com isso vamos “comentar” a linha e desabilitar sua funcionalidade, precisamos então que fiquem desta forma:
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_tls_security_level=may #smtp_tls_security_level=may #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Ainda com o editor aberto, é necessário inserir as seguintes linhas no fim do arquivo:
#Enable TLS Encryption when Postfix receives incoming emails smtpd_tls_cert_file=/etc/letsencrypt/live/viniciuspaes.com/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/viniciuspaes.com/privkey.pem smtpd_tls_security_level=may smtpd_tls_loglevel = 1 smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #Enable TLS Encryption when Postfix sends outgoing emails smtp_tls_security_level = may smtp_tls_loglevel = 1 smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache #Enforce TLSv1.3 or TLSv1.2 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
Para que as alterações que fizemos nos arquivos de configuração acima tenham efeito, precisamos reiniciar o postfix:
sudo service postfix restart
Um passo importante agora é verificar quais portas o postfix está escutando. Especificamente a porta 465 e 587 (a 25 também). Vamos utilizar o seguinte comando:
sudo ss -lnpt | grep master
A saída do comando acima irá mostrar algo parecido com:
LISTEN 0 100 0.0.0.0:587 0.0.0.0:* users:(("master",pid=13,fd=57)) LISTEN 0 100 0.0.0.0:465 0.0.0.0:* users:(("master",pid=13,fd=60)) LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=13,fd=53))
Ou seja, na saída acima temos as portas 587 (0.0.0.0:587), 465 (0.0.0.0:465) e 25 (0.0.0.0:25) sendo utilizadas pelo postfix. Como deveriam realmente estar, então podemos prosseguir.
Agora vamos seguir instalando o Dovecot com suporte IMAP:
sudo apt install dovecot-core dovecot-imapd
Caso queira também suporte POP3, instale:
sudo apt install dovecot-pop3d
Importante verificar a versão do dovecot atualmente instalada, para ver se está em uma versão muito mais atual do que a que vamos cobrir neste tutorial:
dovecot --version
Neste servidor de exemplo, estou utilizando o Dovecot na versão:
2.3.16 (7e2e900c1a)
Agora edite o arquivo de configuração do Dovecot:
sudo nano /etc/dovecot/dovecot.conf
Dentro do editor, procure pela linha “# Enable installed protocols”, precisamos inserir este texto logo abaixo dela (caso não use pop3 no seu servidor, não é necessário inserir o protocolo):
protocols = imap pop3
Uma etapa importante é verificar o padrão do caminho onde os emails ficam salvos.
Vamos confirmar este padrão utilizando o comando:
postconf mail_spool_directory
Como acabamos de instalar o servidor e não realizamos modificação nesta etapa, a saída do comando acima será ainda:
/var/mail
É interessante adotarmos o padrão Maildir ao invés do padrão mbox, é uma forma mais robusta de organizar os usuários, suas caixas de email e as mensagens. É mais robusta, pois estamos atualmente utilizando a estrutura de sistema de arquivos para as mensagens, ao invés de estrutura de banco de dados.
Vamos editar então o seguinte arquivo:
sudo nano /etc/dovecot/conf.d/10-mail.conf
Encontre a linha “mail_location = mbox:~/mail:INBOX=/var/mail/%u”, ela precisa ser substituída por:
mail_location = maildir:~/Maildir
E abaixo da linha acima, adicione:
mail_privileged_group = mail
Neste ponto agora, vamos instalar o suporte ao protocolo lmtp. Ele é interessante para que o postfix e o dovecot conversem entre si.
sudo apt install dovecot-lmtpd
Precisamos agora adicionar o protoclo lmtpd na lista de protocolos que o Dovecot tem suporte. Vamos editar o arquivo:
sudo nano /etc/dovecot/dovecot.conf
Agora vá novamente na linha “protocols = imap pop3” e adicione o protocolo lmtpd, a linha deve ficar como:
protocols = imap pop3 lmtp
Continuando com o processo, precisamos agora editar o arquivo:
sudo nano /etc/dovecot/conf.d/10-master.conf
Dentro do modo de edição, procure pela linha “service lmtp { … }“, esta linha define o funcionamento do serviço lmtp. É preciso que edite as linhas que compõem o serviço lmtpd para ficarem desta forma:
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } }
Agora vá até o arquivo de configuração do postfix e abra para edição:
sudo nano /etc/postfix/main.cf
Adicione as seguintes linhas no fim do arquivo:
mailbox_transport = lmtp:unix:private/dovecot-lmtp smtputf8_enable = no
De volta agora editando o arquivo de configuração do dovecot:
sudo nano /etc/dovecot/conf.d/10-auth.conf
Encontre a linha “#disable_plaintext_auth = yes”, é preciso descomentá-la. Então a mesma deve ficar como:
disable_plaintext_auth = yes
Encontre a linha “#auth_username_format = %Lu” é preciso que esta linha seja descomentada e alterada para:
auth_username_format = %n
Encontre a linha “auth_mechanisms = plain” e altere para:
auth_mechanisms = plain login
Agora vamos configurar o processo de conexão e encriptação. Edite o arquivo:
sudo nano /etc/dovecot/conf.d/10-ssl.conf
Encontre a linha “ssl = yes” e altere para:
ssl = required
Encontre as linhas:
ssl_cert = </etc/dovecot/private/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.key
Altere as linhas acima para:
ssl_cert = </etc/letsencrypt/live/mail.viniciuspaes.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.viniciuspaes.com/privkey.pem
Encontre a linha “#ssl_prefer_server_ciphers = no”, é necessário descomentá-la e alterar para:
ssl_prefer_server_ciphers = yes ssl_min_protocol = TLSv1.2
Agora edite o arquivo:
sudo nano /etc/ssl/openssl.cnf
Procure pela linha “providers = provider_sect”, é necessário comentá-la. Então esta linha ficará como:
#providers = provider_sect
Edite o arquivo:
sudo nano /etc/dovecot/conf.d/10-master.conf
Dentro do modo de edição, procure pela linha “service auth { … }“ este serviço engloba uma grande quantidade de linhas. É necessário inserir dentro dele o seguinte texto:
unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix }
Agora vamos editar o arquivo de configuração para criar automaticamente as pastas de emails enviados e a pasta de emails na lixeira. Para isso, vamos editar o arquivo de configuração:
sudo nano /etc/dovecot/conf.d/15-mailboxes.conf
Agora procure pelas caixas de “Trash” e “Sent”, insira a linha “auto create” para que tenham suporte a criá-las automaticamente no momento que uma caixa de email é criada. Estas linhas devem ficar como:
mailbox Trash { auto = create special_use = \Trash } mailbox Sent { auto = create special_use = \Sent }
Após todas estas modificações acima, vamo reiniciar em conjunto o postfix e o dovecot:
sudo systemctl restart postfix dovecot
Agora vamos criar uma pasta para salvar o arquivo de configuração do daemon do dovecot:
sudo mkdir -p /etc/systemd/system/dovecot.service.d/
Vamos criar e editar o arquivo no diretório criado acima:
sudo nano /etc/systemd/system/dovecot.service.d/restart.conf
Inserir o texto abaixo dentro do arquivo:
[Service] Restart=always RestartSec=5s
Agora reinicie o daemon do dovecot o comando abaixo:
sudo systemctl daemon-reload
Verifique se o serviço do Dovecot está funcionando:
sudo service dovecot status
Caso encontre algum erro nesta etapa, é provável que tenha inserido ou editado algum arquivo incorretamente. Na maioria das vezes é este o problema. Uma palavra fora de lugar, uma indentação errada, um caractere incorreto inserido.
Vamos agora testar o serviço de reiniciar o dovecot automaticamente. Vamos matar o processo e verificar se o daemon vai reiniciá-lo, da forma que configuramos acima:
sudo pkill dovecot
Verificar novamente o status do serviço:
sudo service dovecot status
Se o Dovecot estiver ativo (running) o processo foi executado corretamente e o Dovecot está instalado e funcional! Você também já pode utilizar um cliente de email para se conectar ao servidor. Mas continue seguindo este tutorial, pois a mudança de estrutura de arquivos para banco de dados é indicada e vamos abordar no próximo passo!
Passo 14
Este passo é um divisor de águas. Agora será feita a mudança da estrutura de arquivos para armazenar e-mail, para a estrutura de banco de dados. Após a finalização desta etapa as caixas de email só poderão ser criadas pelo PostfixAdmin, assim como os Alias das caixas de email e domínios. Então é interessante deixar bem claro para você leitor. Caso o setup até o passo anterior esteja satisfatório para as suas necessidades, avalie bem continuar. Porém, recomendo fortemente os próximos passos, para ter um servidor de email completo.
Como mencionei, vamos precisar de um banco de dados instalado. Para este tutorial, optei por utilizar o MariaDB (continuação melhorada da branch do MySQL). Se ainda não instalou o banco de dados, instale agora com o comando:
sudo apt install mariadb-server mariadb-client
Pode não parecer usual, mas é importante verificar se o servidor de banco de dados que acabamos de instalar está funcionando. Execute então o comando abaixo para verificar o funcionamento:
sudo service mariadb status
Para garantir que o servidor será iniciado juntamente com o boot do servidor, pode utilizar o comando abaixo:
sudo systemctl enable mariadb
Por padrão, quando instalamos o MariaDB (ou MySQL) ele vem com uma configuração padrão que não é nada segura. Como é muito utilizado localmente de forma didática para aprendizado sobre Banco de Dados em diversos locais, este setup de fábrica pode fazer sentido para facilitar a vida de quem está começando. Mas para um ambiente de produção igual o servidor de emails que estamos configurando, é necessário utilizar o comando abaixo, para dar os primeiros passos de segurança ao servidor de banco de dados em um ambiente de produção:
sudo mysql_secure_installation
Quando utilizando o comando acima, diversas perguntas vão aparecer. Basicamente você precisa criar uma senha para o usuário root, desabilitar usuário e banco de dados de teste e recarregar a tabela de privilégios para que as mudanças tenham efeito. Dependendo da versão da sua instalação, também será perguntado se deseja ativar o módulo de segurança de senha. Este módulo é do capiroto, não recomendo que seja ativado, a não ser que você realmente saiba o que está fazendo.
Vou deixar aqui um aviso. Nesta etapa foi criada a senha de login root no banco de dados. É necessário que você tenha um controle pessoal das senhas. Anote em um papel, na agenda, ou qualquer outra forma.
Agora precisamos instalar o PostfixAdmin, temos 2 opções. Instalar pelo repositório do apt ou baixar a última versão no github do mantenedor.
A primeira vez que instalei meu servidor de emails, tive muito problema com o PostfixAdmin, tanto que achei que não seria uma boa opção. O principal problema que tive era as senhas de admin não funcionarem. Refazia a instalação do zero e ele funcionava bem por alguns dias, mas volta ou outra parava de funcionar. Investigando mais a fundo, percebi que havia problema no certificado SSL e no log verificava erro de contexto do certificado. Também tinha problema do postfixadmin não abrir e recebia uma página em branco. Depois de sofrer bastante com ele, e pesquisando em fórum e outros tutoriais online, deram a dica que era melhor instalar manualmente o postfixadmin. A vantagem é você ter o controle de quando atualizar e poder realizar o backup dos arquivos de configuração para verificar o que mudou, caso recebesse algum erro. Em resumo, pelo apt é um pouco de loteria, melhor ter um pouco mais de trabalho e instalar manualmente para evitar dor de cabeça quando for atualizar o servidor.
Primeiro passo é ir no github do mantenedor e verificar a última versão disponível:
https://github.com/postfixadmin/postfixadmin/releases
Na data de criação deste tutorial, a última versão era a 3.3.13. Caso venha do futuro ler este tutorial, recomendo sempre pegar a última versão disponível.
Caminhe até a pasta de home do seu usuário:
cd ~
Agora vamos executar o comando wget para fazer o download do postfix admin (mude a versão do arquivo caso necessário):
wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.13.tar.gz
O download do arquivo veio no formato compactado “.tar.gz”. Com o comando abaixo, vamos descompactar já na pasta de destino “/var/www”.
sudo tar xvf postfixadmin-3.3.13.tar.gz -C /var/www/
Agora vamos mudar o nome da pasta do postfixadmin:
sudo mv /var/www/postfixadmin-postfixadmin-3.3.13/ /var/www/postfixadmin
Precisamos criar uma pasta para os templates:
sudo mkdir -p /var/www/postfixadmin/templates_c
Para gerenciar as permissões de arquivos e diretórios por aqui em diante, vamos optar em utilizar o pacote ACL. Então vamos aproveitar para instalar o mesmo:
sudo apt install acl
Agora vamos definir as permissões da pasta template:
sudo setfacl -R -m u:www-data:rwx /var/www/postfixadmin/templates_c/
Definir permissões da pasta onde os certificados são armazenados:
sudo setfacl -R -m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
Agora precisamos entrar no console do MySQL para criar o banco de dados e o usuário para o postfixadmin:
sudo mysql -u root ou sudo mysql -u root -p
Dentro do console do MySQL, precisamos executar os comandos a seguir. Mas fique atento, evite utilizar control+c + control+v de todos os comando de uma vez, copie e cole um de cada vez e evite copiar espaços em branco de final de linha (lembre-se de trocar a senha @@@mudar123 por uma senha de sua preferência).
create database postfixadmin;
create user 'postfixadmin'@'localhost' identified by '@@@mudar123';
grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost';
flush privileges;
exit;
Vou deixar aqui um aviso. Nesta etapa foi criada a senha de login do postfixadmin no banco de dados. É necessário que você tenha um controle pessoal das senhas. Anote em um papel, na agenda, ou qualquer outra forma.
Agora vamos inserir as credenciais de acesso ao banco de dados no arquivo de configuração do postfixadmin:
sudo nano /var/www/postfixadmin/config.local.php
Agora é necessário inserir as configurações do fim do arquivo (lembre de alterar o campo senha pela senha de login do postfixadmin no banco de dados – $CONF[‘database_password’] = ‘@@@mudar123‘:
Agora é importante ter um subdomínio configurado para acessar o postfixadmin. Para fins didáticos, vamos utilizar o “postfixadmin.viniciuspaes.com”. É possível utilizar outro nome de subdomínio se preferir.
Vamos criar o seguinte arquivo de configuração para o apache:
sudo nano /etc/apache2/sites-available/postfixadmin.conf
E dentro do arquivo vamos colar a configuração abaixo (lembrar de realizar as alterações de nome de domínio):
O arquivo acima é para acesso a url sem SSL, agora precisamos criar o arquivo de configuração com certificado SSL:
sudo nano /etc/apache2/sites-available/postfixadmin-ssl.conf
Dentro do arquivo cole a configuração abaixo, lembre-se de atualizar o arquivo abaixo com os dados do seu domínio:
Com os arquivos criados, precisamos ativá-los (execute uma linha de cada vez):
sudo a2ensite postfixadmin.conf sudo a2ensite postfixadmin-ssl.conf
Agora reinicie o servidor Apache:
sudo service apache2 restart
Com a configuração no servidor http finalizada, precisamos agora criar a entrada DNS.
Nome do host: postfixadmin Tipo: A TTL: 1 hora (ou 3600 segundos, no caso, a DigitalOcean expressa o tempo em segundos) Dados: (coloque o IP do seu servidor)
Caso o PHP ainda não esteja instalado, vamos realizar a instalação:
sudo apt install php8.1-fpm php8.1-imap php8.1-mbstring php8.1-mysql php8.1-curl php8.1-zip php8.1-xml php8.1-bz2 php8.1-intl php8.1-gmp php8.1-redis libapache2-mod-php
Agora reinicie o servidor Apache para ter a integração do php finalizada:
sudo service apache2 restart
Vamos solicitar agora um certificado para o subdomínio postfix.viniciuspaes.com:
sudo certbot --apache
No menu do certbot, escolha o subdomínio que configuramos para o postfix:
postfix.viniciuspaes.com
Continuamos agora, realizando modificações no arquivo de configuração do Dovecot, para habilitar estatísticas e permissão para usuário www-data:
sudo nano /etc/dovecot/conf.d/10-master.conf
Insira o conteúdo no arquivo:
service stats { unix_listener stats-reader { user = www-data group = www-data mode = 0660 } unix_listener stats-writer { user = www-data group = www-data mode = 0660 } }
Agora precisamos adicionar o usuário do servidor web (www-data) ao grupo do dovecot:
sudo gpasswd -a www-data dovecot
Reiniciar o dovecot:
sudo service dovecot restart
Prover permissões para o usuário www-data:
sudo setfacl -R -m u:www-data:rwx /var/run/dovecot/stats-reader /var/run/dovecot/stats-writer
Agora precisamos terminar parte do processo de setup do PostfixAdmin pela interface web. Acesse então a url:
https://postfixadmin.viniciuspaes.com/setup.php
Escolha uma senha, repita a mesma e depois clique para gerar seu hash
Vou deixar aqui um aviso. Nesta etapa foi criada a senha de setup do postfixadmin. É necessário que você tenha um controle pessoal das senhas. Anote em um papel, na agenda, ou qualquer outra forma.
Será então gerada uma linha que começa com “$CONF[‘setup_password’]”. Copie esta linha inteira, pois vamos precisar inserir ela no arquivo de configuração.
Edite então o arquivo:
sudo nano /var/www/postfixadmin/config.local.php
Agora copie a linha do hash da senha no fim do arquivo:
$CONF['setup_password'] = '(seu hash aqui)';
Agora acesse novamente a url:
https://postfixadmin.viniciuspaes.com/setup.php
Agora preencha os dados:
Senha de setup (senha de setup do postfixadmin) criada na etapa anterior (senha normal, não é o hash) Email do administrador (utilize um email do seu próprio domínio - evite caixas externas no gmail, outlook, etc) Definir nova senha para o usuário administrador Confirmar a senha criada
Vou deixar aqui um aviso. Nesta etapa foi criada a senha de login do usuário administrador do postfixadmin. É necessário que você tenha um controle pessoal das senhas. Anote em um papel, na agenda, ou qualquer outra forma.
Após estes passos, receberá confirmação de login de administrador criado.
Vamos continuar agora com a integração do postfix com o banco de dados, instalando o pacote de suporte a banco do postfix:
sudo apt install postfix-mysql
Necessário agora editar o arquivo de configuração:
sudo nano /etc/postfix/main.cf
Copiar o texto no fim do arquivo, cuidado especial com o espaçamento/identação:
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf virtual_transport = lmtp:unix:private/dovecot-lmtp
Vamos criar então o diretório para armazenar os arquivos necessários para integração:
sudo mkdir /etc/postfix/sql/
Agora com foco nos domínios virtuais, precisamos criar o arquivo que mapeia as consultas sql:
sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
Inserir o texto abaixo no arquivo (mudar a senha abaixo para a senha de login do postfixadmin no banco de dados):
user = postfixadmin
password = @@@mudar123
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
Agora com foco para as caixas de email virtuais:
sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
Inserir o texto no arquivo (mudar a senha destacada abaixo para a senha de login do postfixadmin no banco de dados):
user = postfixadmin
password = @@@mudar123
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
Agora com foco nos Alias de domínio:
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
Colocar o texto abaixo dentro do arquivo (mudar a senha destacada abaixo para a senha de login do postfixadmin no banco de dados):
user = postfixadmin
password = @@@mudar123
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
Agora com foco em Alias de caixa de domínio, precisamos criar o arquivo:
sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
Dentro do arquivo criado, precisamos inserir a configuração (mudar a senha destacada abaixo para a senha de login do postfixadmin no banco de dados):
user = postfixadmin
password = @@@mudar123
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Seguindo, arquivo para mapear alias em domínio:
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
E no arquivo, necessário inserir o texto (mudar a senha destacada abaixo para a senha de login do postfixadmin no banco de dados):
user = postfixadmin
password = @@@mudar123
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
Agora para fail safe, vamos criar um mapeamento do tipo catch all, criando o arquivo:
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
E dentro do arquivo, vamos inserir (mudar a senha destacada abaixo para a senha de login do postfixadmin no banco de dados):
user = postfixadmin
password = @@@mudar123
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
Agora vamos acertar as permissões dos arquivos criados. Lembre de executar um comando abaixo de cada vez:
sudo chmod 0640 /etc/postfix/sql/* sudo setfacl -R -m u:postfix:rx /etc/postfix/sql/
Lembra no começo do tutorial que alteramos a variável hostname para incluir somente o subdomínio principal do servidor de email? Então, agora como vamos utilizar suporte a domínios/caixas virtuais, será necessário realizar a alteração:
sudo postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost"
Seguindo para configurar o virtual mailbox, precisamos editar o arquivo:
sudo nano /etc/postfix/main.cf
Insira o texto abaixo dentro do arquivo:
virtual_mailbox_base = /var/vmail virtual_minimum_uid = 2000 virtual_uid_maps = static:2000 virtual_gid_maps = static:2000
Vamos reiniciar o postfix:
sudo service postfix restart
Criar agora o usuário chamado de vmail, definir um número de id=2000, desabilitar login e não criar pasta home do usuário:
sudo adduser vmail --system --group --uid 2000 --disabled-login --no-create-home
Criar a pasta de suporte para armazenamento de dados do email:
sudo mkdir /var/vmail/
Definir a permissão da pasta para o usuário vmail que acabamos de criar:
sudo chown vmail:vmail /var/vmail/ -R
Seguindo agora com a integração do Dovecot com o banco de dados MySQL:
sudo apt install dovecot-mysql
Vamos editar o arquivo:
sudo nano /etc/dovecot/conf.d/10-mail.conf
Encontre a variável “mail_location” e insiria logo abaixo a variável “mail_home”, para que fique desta forma:
mail_home = /var/vmail/%d/%n/
Agora precisamos alterar novamente como é o formato de autenticação de usuário. Antes utilizávamos os usuários do linux para usuários do email. Então a opção “%n” removia a necessidade de @dominio.com na hora do login. Mas como agora vamos utilizar as caixas de email oriundas do banco, precisamos do caminho completo, então vamos utilizar o formato “%u”. Encontre e altere a variável “auth_username_format” para:
auth_username_format = %u
Ainda dentro do arquivo, encontre a linha “#auth_default_realm =”, precisamos que ela seja descomentada e alterada para:
auth_default_realm = viniciuspaes.com
O que a linha acima quer dizer? Bom, caso realize o login e esqueça de inserir @dominio.com.br, automaticamente o sistema irá concatenar o domínio principal, que é o viniciuspaes.com.
Ainda no mesmo arquivo, precisamos buscar a linha “#!include auth-sql.conf.ext” e descomentá-la, alterando ela para:
!include auth-sql.conf.ext
Esta alteração acima é para que o dovecot busque informação no banco de dados com solicitações do tipo sql.
Ainda dentro do modo de edição do arquivo, encontre a linha “!include auth-system.conf.ext”. Ela precisa ser comentada (desabilitada), pois agora não vamos mais realizar login com usuário do sistema linux:
#!include auth-system.conf.ext
Continuando com a edição do mesmo arquivo, insira estas informações no fim dele:
auth_debug = yes auth_debug_passwords = yes
Seguindo com as configurações no Dovecot, vamos editar o arquivo:
sudo nano /etc/dovecot/dovecot-sql.conf.ext
Insira o texto abaixo no fim do arquivo (lembre de alterar a senha abaixo pela senha de conexão do postfixadmin ao banco de dados):
driver = mysql
connect = host=localhost dbname=postfixadmin user=postfixadmin password=@@@mudar123
default_pass_scheme = ARGON2I
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1'
iterate_query = SELECT username AS user FROM mailbox
Vamos reiniciar o dovecot novamente:
sudo service dovecot restart
Agora vamos realizar a configuração pela interface web do postfixadmin, acesse a url:
https://postfixadmin.viniciuspaes.com/login.php
Lembrar que utilizar o login e senha de administrador que criou anteriormente para o postfixadmin, para conseguir realizar o login acima.
No menu, acesse a opção domínios, e em seguida a opção de:
Criar domínio
Agora cadastre seu domínio principal. Ou seja, no meu caso o domínio principal é viniciuspaes.com.
Ainda dentro da interface do postfixadmin, clique na opção “Virtual” e em seguida clique em:
Criar conta de email
Para configurar sua caixa de email em um cliente de email como o Thunderbird, Outlook, Mail, etc, utilize as configurações:
Login (usuário@domínio.com.br) Senha (a senha que escolheu ao criar conta de email pelo postfixadmin) Serviço de chegada de email (POP3/IMAP) - Porta 143 para IMAP (993 também habilitada) Serviço de saída de email (SMTP) - Porta 587 para SMTP (465 também habilitada) Hostname para POP3/IMAP/SMTP - mail.viniciuspaes.com Criptografia ativada (SSL/TLS - STARTTLS) para IMAP e SMTP
Pensando agora na manutenção do servidor de emails, podemos configurar um cron job para limpar mensagens na lixeira:
Entrar no modo de edição da crontab:
sudo crontab -e
Agora insira o texto abaixo no arquivo:
@daily doveadm expunge -A mailbox Trash savedbefore 2w @daily setfacl -R -m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/ MAILTO="seuemail@seudominio.com"
No comando acima usei como o padrão que a pasta de lixo chama “Trash”, caso utilize o padrão “Junk”, basta realizar as modificações.
Um passo final e importante nesta etapa é restringir quais usuários do sistema do linux podem enviar email. Neste caso, vamos deixar somente o usuário root, www-data e vmail.
Edite então o arquivo:
sudo nano /etc/postfix/main.cf
Adicione o texto no fim do arquivo:
authorized_submit_users = root,www-data,vmail
Reinicie o postfix:
sudo service postfix restart
Passo 15 – Como instalar e configurar o RoundCube Web Cliente
Um passo interessante na hora de configurar um servidor de email é permitir a usuários que possam acessar seus emails, sem a necessidade de ter aplicativo cliente de email instalado e configurado no seu computador pessoal, ou seja, ter a possibilidade de acessar os emails diante uma interface web.
Esta etapa é dita como opcional, pois não é necessária para o funcionamento do servidor de emails. Mas caso queira disponibilizar um setup completo para sua equipe, ou até mesmo fornecer serviço de gestão de emails para clientes, com certeza é uma etapa primordial.
Existem diversos clientes de email disponíveis no mercado, para este tutorial vamos utilizar o RoundCube.
O primeiro passo para instalação do roundcube é verificar a última versão disponível para download:
https://roundcube.net/download/
Na tela acima, podemos verificar as opções de download do RoundCube. Neste tutorial vamos utilizar o link da versão completa. Então clique com botão direito do mouse no link de Download e copie a URL de download.
De volta no servidor, tenha certeza que está na sua pasta home:
cd ~
Agora vamos realizar o download da última versão do RoundCube. Neste exemplo, a última versão disponível é a versão 1.6.1. Então o comando de download juntamente com a url copiada ficam desta forma:
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.1/roundcubemail-1.6.1-complete.tar.gz
Para descompactar o arquivo, utilize o comando:
tar xvf roundcubemail-1.6.1-complete.tar.gz
Agora é necessário mover a pasta descompactada do roundcube para a pasta de produção do webserver:
sudo mv roundcubemail-1.6.1 /var/www/roundcube
Definir as permissões de arquivo da pasta temp e logs (executar um comando por vez):
sudo chown www-data:www-data /var/www/roundcube/temp/ -R sudo chown www-data:www-data /var/www/roundcube/logs/ -R
Nesta instalação de exemplo, a versão disponível do php é a 8.1. Abaixo segue o comando para instalar os pacotes adicionais do php que vamos precisar para o funcionamento do RoundCube. Pode reparar que alguns pacotes estão vinculados a versão 8.1 do php. Caso seu PHP instalado esteja em outra versão, lembre-se de atualizar a versão dos pacotes abaixo também:
sudo apt install php-net-ldap2 php-net-ldap3 php-imagick php8.1-common php8.1-gd php8.1-imap php8.1-mysql php8.1-curl php8.1-zip php8.1-xml php8.1-mbstring php8.1-bz2 php8.1-intl php8.1-gmp php8.1-redis
Agora precisamos também criar um usuário e tabela de banco de dados para o funcionamento do RoundCube.
O primeiro passo é o login no banco de dados:
sudo mysql -u root
Dentro do prompt do MySQL (ou MariaDB) precisamos então criar o banco de dados. Vamos utilizar o comando abaixo:
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Agora precisamos criar o usuário roundcube no banco de dados e permitir que ele tenha acesso a tabela de banco de dados chamada roundcubemail. No comando abaixo também é necessário definir uma senha para o login deste usuário. É uma boa prática de segurança que a senha de exemplo abaixo (@@@mudar123) seja alterada:
CREATE USER roundcube@localhost IDENTIFIED BY '@@@mudar123';
Necessário permitir que o usuário criado tenha permissão de acesso ao banco de dados criado:
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost;
Recarregar a tabela de privilégios para que as modificações acima tenham efeito:
flush privileges;
Sair do prompt do MySQL:
exit;
Vou deixar aqui um aviso. Nesta etapa foi criada a senha de login do usuário roundcube para o banco de dados roundcubemail. É necessário que você tenha um controle pessoal das senhas. Anote em um papel, na agenda, ou qualquer outra forma.
O RoundCube possui um arquivo SQL com as configurações iniciais do seu banco de dados. Podemos então carregar o arquivo SQL com o comando:
sudo mysql roundcubemail < /var/www/roundcube/SQL/mysql.initial.sql
Pensando no acesso dos usuários ao RoundCube podemos definir qual URL desejamos que isso ocorra. Particularmente acho interessante utilizar o subdomínio mail.viniciuspaes.com. Mas fique a vontade de escolher a melhor forma de acesso que desejar. Vamos então preparar 2 arquivos de configuração do apache para o acesso com e sem SSL.
Agora precisamos editar o arquivo de configuração com acesso http:
sudo nano /etc/apache2/sites-available/mail.viniciuspaes.com.http.conf
Trocar o conteúdo por:
Seguindo, vamos criar/editar o arquivo de configuração para acesso com SSL no roundcube:
sudo nano /etc/apache2/sites-available/mail.viniciuspaes.com.ssl.conf
E trocar o conteúdo para:
Vamos agora editar o arquivo /etc/hosts para adicionar query local para o subdomínio que o roundcube está instalado:
sudo nano /etc/host
Procure a linha que começa com o IP de loopback (127.0.0.1), altere a mesma para que fique desta forma:
127.0.0.1 localhost mail.viniciuspaes.com
Seguindo com a configuração do RoundCube vamos fazer uma cópia do arquivo de configuração de exemplo, para que possamos realizar as alterações:
sudo cp /var/www/roundcube/config/config.inc.php.sample /var/www/roundcube/config/config.inc.php
Agora vamos editar o arquivo criado:
sudo nano /var/www/roundcube/config/config.inc.php
Encontre a linha que começa com “$config[‘db_dsnw’] =” ela precisa ser substituída por:
$config['db_dsnw'] = 'mysql://roundcube:%40%40%40mudar123@localhost/roundcubemail';
Repare que no campo acima, ao invés de utilizarmos nossa senha padrão de exemplo “@@@mudar123” estamos utilizando “%40%40%40mudar123”. Isto ocorre pois não podemos utilizar caracteres especiais livremente na senha, eles precisam ser convertidos para o padrão “Percent Encode”. Desta forma, o caractere @ é convertido para %40. Se sua senha escolhida possuir caracteres especiais, como os destacados na lista abaixo, lembre-se de realizar a alteração.
- : deve ser substituído por %3A
- / deve ser substituído por %2F
- ? deve ser substituído por %3F
- # deve ser substituído por %23
- [ deve ser substituído por %5B
- ] deve ser substituído por %5D
- @ deve ser substituído por %40
- ! deve ser substituído por %21
- $ deve ser substituído por %24
- & deve ser substituído por %26
- “” deve ser substituído por %27
- ( deve ser substituído por %28
- ) deve ser substituído por %29
- * deve ser substituído por %2A
- + deve ser substituído por %2B
- , deve ser substituído por %2C
- ; deve ser substituído por %3B
- = deve ser substituído por %3D
- % deve ser substituído por %25
- (espaço) deve ser substituído por %20 ou +
Ainda dentro do arquivo “sudo nano /var/www/roundcube/config/config.inc.php” precisamos realizar mais alterações.
Encontrar as linhas:
$config['imap_host'] = 'localhost:143'; $config['smtp_host'] = 'localhost:587';
E substituir por:
$config['imap_host'] = 'tls://mail.viniciuspaes.com:143'; $config['smtp_host'] = 'tls://mail.viniciuspaes.com:587';
Agora encontre a linha que começa com “$config[‘des_key’]”, ela precisa ser alterada. Substitua o valor da variável da chave por 24 caracteres aleatórios (lembre de substituir a chave de exemplo abaixo). Esta linha deve ficar semelhante a:
$config['des_key'] = 'ASl95U9Ioepsh*k-@ahGjUIk';
Ainda dentro do arquivo, precisamos encontrar a linha que define os plugins instalados. Procure a linha que comça com “$config[‘plugins’] =”.
Este vetor vem por padrão com apenas 2 plugins:
$config['plugins'] = [ 'archive', 'zipdownload', ];
É preciso habilitar diversos outros plugins para que o RoundCube funcione com toda sua glória. Substitua então o texto acima por:
$config['plugins'] = [ 'acl', 'additional_message_headers', 'archive', 'attachment_reminder', 'autologon', 'debug_logger', 'emoticons', 'enigma', 'filesystem_attachments', 'help', 'hide_blockquote', 'http_authentication', 'identicon', 'identity_select', 'jqueryui', 'krb_authentication', 'managesieve', 'markasjunk', 'new_user_dialog', 'new_user_identity', 'newmail_notifier', 'password', 'reconnect', 'show_additional_headers', 'squirrelmail_usercopy', 'subscriptions_option', 'userinfo', 'vcard_attachments', 'virtuser_file', 'virtuser_query', 'zipdownload' ];
Ainda na edição, insira o texto no fim do arquivo:
$config['enable_spellcheck'] = true;
Agora acesse a URL onde configurou o RoundCube, neste exemplo:
https://mail.viniciuspaes.com
Caso tenha uma caixa de email configurada, digite seu nome de usuário e senha e a configuração inicial do RoundCube está completa!
No primeiro acesso a sua caixa de email, o RoundCube irá perguntar alguns dados básicos, como o Nome do Remetente para aparecer na conta, se deseja adicionar uma assinatura nos emails, etc.
Por motivos de segurança, é recomendado remover a pasta de instalação do RoundCube:
sudo rm /var/www/roundcube/installer/ -r
Uma etapa recomendada é também instalar o serviço de filtro de mensagens Sieve. Ele dá permissões avançadas de integração que permite que os usuários façam configurações adicionais pelo Roundcube, alguns exemplos:
-
- Permite que os usuários criem pastas dentro do RoundCube para organizar as mensagens de email
- Permite que usuários do RoundCube criem filtros para os emails
- Dá suporte para que os usuários possam alterar os endereços de email pela interface do RoundCube
O primeiro passo é instalar o sieve e pacotes auxiliares:
sudo apt install dovecot-sieve dovecot-managesieved dovecot-lmtpd
Editar o arquivo de configuração do dovecot:
sudo nano /etc/dovecot/dovecot.conf
Encontrar a linha “protocols = “. É necessário adicionar o protocolo sieve. A linha deve ficar como (pop3 é opcional, apenas se estiver utilizando):
protocols = imap pop3 lmtp sieve
Editar agora o arquivo de configuração do postfix:
sudo nano /etc/postfix/main.cf
Adicione estas linhas no fim do arquivo:
mailbox_transport = lmtp:unix:private/dovecot-lmtp smtputf8_enable = no
Agora vamos editar este outro arquivo do Dovecot:
sudo nano /etc/dovecot/conf.d/15-lda.conf
Agora pesquise pela linha “mail_plugins =” que estará dentro do protocolo lda. Esta linha está comentada, será necessário descomentá-la e alterar para:
mail_plugins = $mail_plugins sieve
Agora vamos editar o arquivo:
sudo nano /etc/dovecot/conf.d/20-lmtp.conf
Procure agora sobre o protocolo lmtp, temos que habilitar o sieve por lá também, ele deve ficar desta forma:
protocol lmtp { mail_plugins = quota sieve }
Vamos reiniciar o postfix e o dovecot:
sudo service dovecot restart sudo service postfix restart
Ao fim desta parte, já podemos criar em uma mensagem de email dentro do roundcube e verificar no botão de “mais” as opções de filtros habilitadas.
Uma etapa de segurança interessante é remover do header do email, para que o destinatário não saiba que você está utilizando o RoundCube.
Crie e edite o arquivo:
sudo nano /etc/postfix/smtp_header_checks
Agora insira o conteúdo abaixo dentro do arquivo:
/^User-Agent.*Roundcube Webmail/ IGNORE
Precisamos editar o arquivo de segurança do postfix para habilitar o smtp_header_check que criamos:
sudo nano /etc/postfix/main.cf
Insira o texto abaixo no fim do arquivo:
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
Agora execute o comando abaixo para recriar a tabela de hash:
sudo postmap /etc/postfix/smtp_header_checks
Reinicie o postfix para que a alteração que realizamos tenha efeito e o User-Agent do Rounducbe senha removido das mensagens enviadas:
sudo service postfix restart
Seguindo com as configurações extras no RoundCube, vamos realizar modificações para permitir que os usuários possam alterar as próprias senhas diretamente pela interface do Roundcube.
Faça uma cópia do arquivo de exemplo, para que possamos realizar as alterações:
sudo cp /var/www/roundcube/plugins/password/config.inc.php.dist /var/www/roundcube/plugins/password/config.inc.php
Agora edite o arquivo criado:
sudo nano /var/www/roundcube/plugins/password/config.inc.php
Encontre a linha “$config[‘password_db_dsn’] =”, agora é encessário alterar ela para:
$config['password_db_dsn'] = 'mysql://postfixadmin:%40%40%40mudar123@127.0.0.1/postfixadmin';
Lembrando que é necessário alterar a senha padrão acima (%40%40%40mudar123) para a senha que escolheu a conexão do postfixadmin ao banco de dados. Lembrando também que deverá utilizar a senha no padrão “Percent Encode”, trocando os caracteres especiais pelo seu código correspondente. Então novamente, do exemplo acima, a senha @@@mudar123, traduzida para o formato Percent Encode, fica %40%40%40mudar123.
Agora no mesmo arquivo, encontre a linha “$config[‘password_query’] = ‘SELECT update_passwd(%c, %u)’;” e altere para:
$config['password_query'] = 'UPDATE mailbox SET password=%P,modified=NOW() WHERE username=%u';
Encontre a linha “$config[‘password_strength_driver’] = null;” e altere para:
$config['password_strength_driver'] = 'zxcvbn';
Adicione abaixo da linha acima o seguinte texto:
$config['password_zxcvbn_min_score'] = 5;
Encontre a linha “$config[‘password_minimum_length’]” e defina o tamanho mínimo para a senha, recomendamos pelo menos 8 caracteres:
$config['password_minimum_length'] = 8;
Agora encontre a linha “$config[‘password_algorithm’] = ‘clear’;” e altere para:
$config[‘password_algorithm’] = ‘dovecot’;
Encontre a linha “$config[‘password_dovecotpw’] = ‘/usr/local/sbin/dovecotpw’;” e altere para:
$config['password_dovecotpw'] = '/usr/bin/doveadm pw -r 5';
Encontre a linha “$config[‘password_dovecotpw_method’] = ‘CRAM-MD5’;” e altere para:
$config['password_dovecotpw_method'] = 'ARGON2I';
Encontre a linha “$config[‘password_dovecotpw_with_method’] = false;” e altere para:
$config['password_dovecotpw_with_method'] = true;
Agora altere as permissões dos arquivos (execute um comando de cada vez):
sudo chown www-data:www-data /var/www/roundcube/plugins/password/config.inc.php sudo chmod 600 /var/www/roundcube/plugins/password/config.inc.php
Agora precisamos alterar o arquivo de configuração do php, lembrando que estamos utilizando a versão 8.1 com o php-fpm habilitado no apache, se estiver em uma versão diferente, ou utilizando o apache handler, altere o caminho até o arquivo:
sudo nano /etc/php/8.1/fpm/php.ini
Encontre a linha “upload_max_filesize =” e altere para habilitar upload de até 25MB:
upload_max_filesize = 25M
Encontre a linha “post_max_size = 8M” e altere para poder permitir que o upload de até 25MB funcione:
post_max_size = 25M
Agora é necessário reiniciar o apache e o php (php 8.1 com fpm habilitado):
sudo service apache2 restart sudo service php8.1-fpm restart
Tudo certo! Roundcube instalado e plugins extras configurados corretamente!
Passo 16 – Preparar o servidor para dar suporte a vários domínios
O setup do servidor de emails está completo. Com as configurações realizadas nos passos anteriores toda a proposta que definimos nos objetivos está implementada. Porém, para apenas 1 domínio. Neste exemplo, configuramos o servidor de email para funcionar no domínio viniciuspaes.com.
Mas é possível prover este suporte para mais domínios? Pensando em uma empresa que presta serviços de criação de caixas de email personalizadas para cada cliente do tipo seunome@seudominio.com.br, seria necessário 1 servidor para cada domínio? Não necessariamente, é possível realizar algumas modificações neste setup, para habilitar suporte para diversos domínios distintos.
A forma mais elegante é deixar os certificados SSL de cada domínio independentes e utilizar o mapeamento SNI MAPS para vincular cada domínio ao seu certificado.
Há também a possibilidade de gerar os certificados agrupados junto ao certificado do domínio principal; não fica muito elegante, porém é mais fácil e a compatibilidade com clientes de email é maior.
Neste exemplo vou utilizar o mapeamento SNI (sni_maps), para deixar os certificados independentes.
Primeiro passo é habilitar a função sni-maps:
Edite o arquivo do postfix:
sudo nano /etc/postfix/main.cf
Cole o seguinte texto no fim do arquivo:
tls_server_sni_maps = hash:/etc/postfix/sni_maps
Agora crie o arquivo para o mapeamento:
sudo nano /etc/postfix/sni_maps
Insira o conteúdo que mapeia o primeiro domínio (domínio principal):
mail.viniciuspaes.com /etc/letsencrypt/live/mail.viniciuspaes.com/privkey.pem /etc/letsencrypt/live/mail.viniciuspaes.com/fullchain.pem
Agora precisamos recriar o hash da tabela de mapeamento sni:
sudo postmap -F /etc/postfix/sni_maps
Agora é necessário reiniciar o Postfix:
sudo service postfix restart
Uma etapa importante é realizar o hash da tabela de mapeamento sni automaticamente com um cronjob. Quando o certificado dos subdomínios é renovado, é necessário realizar um novo hash. Então fica interessante automatizar este processo para evitar erros. Edite a crontab com o comando:
sudo crontab -e
Agora adicione a seguinte linha:
@daily certbot renew --quiet; /usr/sbin/postmap -F /etc/postfix/sni_maps; systemctl reload postfix dovecot httpd
Pronto, o servidor já tem suporte para gerenciar email de vários domínios de forma independente. Agora siga o próximo passo a cada vez que precisar adicionar um novo domínio.
Passo 17 – Como adicionar um novo domínio no servidor de Email
Para configurar um novo domínio no servidor, vamos chamar este novo domínio de dominio2.com (mas pode configurar um domínio com a extensão que quiser).
Etapa 1 – Configurar DNS, SPF, DMARC e DKIM
Crie uma entrada do tipo DNS do MX:
Nome do host: @ (ou deixe em branco)
Tipo: A
TTL: 3600
Prioridade: 0
Dados: mail.dominio2.com
Crie entrada DNS do tipo A
Nome do host: mail Tipo: A TTL: 1 hora (ou 3600 segundos, no caso, a DigitalOcean expressa o tempo em segundos) Dados: (coloque o IP do seu servidor)
Crie entrada DNS do tipo TXT para o SPF
Nome do host: @ Tipo: TXT TTL: 3600 Dados: v=spf1 mx ~all
Crie entrada DNS do tipo TXT para o DMARC
Nome do host: _dmarc Tipo: TXT TTL: 3600 Dados: v=DMARC1; p=none; pct=100; fo=1; rua=mailto:dmarc@dominio2.com; ruf=mailto:dmarc@dominio2.com;
Configurar o DKIM para poder adicionar o DNS dele:
sudo nano /etc/opendkim/signing.table
Adicione a linha do novo domínio no fim do arquivo:
*@dominio2.com default._domainkey.dominio2.com
Editar o arquivo de tabela de chaves do DKIM:
sudo nano /etc/opendkim/key.table
Inserir no fim do arquivo:
default._domainkey.dominio2.com dominio2.com:default:/etc/opendkim/keys/dominio2.com/default.private
Editar o arquivo de host confiável:
sudo nano /etc/opendkim/trusted.hosts
Inserir no fim do arquivo:
.dominio2.com
Criar a pasta para o par de chaves do DKIM:
sudo mkdir /etc/opendkim/keys/dominio2.com
Gerar o par de chaves dentro da pasta criada:
sudo opendkim-genkey -b 2048 -d dominio2.com -D /etc/opendkim/keys/dominio2.com -s default -v
Definir permissão para a chave criada:
sudo chown opendkim:opendkim /etc/opendkim/keys/dominio2.com/default.private
Ver qual conteúdo da chave pública criada:
sudo cat /etc/opendkim/keys/dominio2.com/default.txt
Criar o Registro DNS do tipo TXT com este padrão, utilizando os dados da sua chave pública (p=)
Nome do host: default._domainkey Tipo: TXT TTL: 3600 Dados: v=DKIM1; h=sha256; k=rsa; p=(cole aqui a sua chave, retire as aspas duplas e espaços em branco, pois ela é dividida em 2 partes)
Verificar DNS do DKIM foi configurado corretamente:
dig TXT default._domainkey.dominio2.com
Testar a chave do DKIM configurada:
sudo opendkim-testkey -d dominio2.com -s default -vvv
Reiniciar o serviço opendkim:
sudo service opendkim restart
Configurar novo subdomínio no servidor de página e solicitar certificado SSL
Criar arquivo de configuração para acesso http no domínio:
sudo nano /etc/apache2/sites-available/mail.dominio2.com.http.conf
Inserir o conteúdo no arquivo:
Criar o arquivo de configuração para acesso https no domínio:
sudo nano /etc/apache2/sites-available/mail.dominio2.com.ssl.conf
Insira o conteúdo no arquivo:
Ativar os arquivos de configuração criados (execute 1 linha de cada vez):
sudo a2ensite mail.dominio2.com.http.conf sudo a2ensite mail.dominio2.com.ssl.conf
Agora reinicie o servidor apache:
sudo service apache2 restart
Agora solicite o certificado do novo subdomínio pelo certbot:
sudo certbot --apache
Escolha o subdomínio onde deseja pedir o certificado, no caso deste exemplo:
mail.dominio2.com
Configurar novo domínio no Postfix e Dovecot
Criar a entrada sni do novo domínio, informando o caminho do certificado:
sudo nano /etc/postfix/sni_maps
Adicionar no fim do arquivo:
mail.dominio2.com /etc/letsencrypt/live/mail.dominio2.com/privkey.pem /etc/letsencrypt/live/mail.dominio2.com/fullchain.pem
Recriar hash da tabela SNI:
sudo postmap -F /etc/postfix/sni_maps
Editar o arquivo abaixo para inserir o caminho do certificado do novo domínio no padrão sni:
sudo nano /etc/dovecot/conf.d/10-ssl.conf
Encontre a linha dos certificados do domínio principal:
ssl_cert =</etc/letsencrypt/live/mail.viniciuspaes.com/fullchain.pem ssl_key =</etc/letsencrypt/live/mail.viniciuspaes.com/privkey.pem
Adicione o novos domínios, neste padrão:
ssl_cert =</etc/letsencrypt/live/mail.viniciuspaes.com/fullchain.pem ssl_key =</etc/letsencrypt/live/mail.viniciuspaes.com/privkey.pem #entrada modelo sni para subdomínio mail.dominio2.com local_name mail.dominio2.com { ssl_cert =</etc/letsencrypt/live/mail.dominio2.com/fullchain.pem ssl_key =</etc/letsencrypt/live/mail.dominio2.com/privkey.pem }
Reinicie todos os serviços (execute 1 linha de cada vez):
sudo service apache2 restart sudo service postfix restart sudo service dovecot restart
Configurar novo domínio e nova caixa de email no PostfixAdmin
Acesse a URL do postfixadmin:
https://postfixadmin.viniciuspaes.com
Clique no menu:
Domínios
Em seguida em:
Criar novo domínio
E configure o novo domínio desejado.
Clique no menu:
Virtual
Em seguida em:
Criar conta de email
E configure sua nova caixa de email no novo domínio configurado.
Agora acesse sua nova caixa de email pelo roundcube:
https://mail.dominio2.com
Ou configure um cliente de email com os dados da sua nova caixa:
IMAP Recebimento de email Host: mail.dominio2.com Porta: 143 SSL: Sim (STARTSSL) SMTP Envio de email Host: mail.dominio2.com Porta: 587 SSL: Sim (STARTSSL)
Tudo certo, novo domínio configurado! siga este passo novamente quantas vezes for necessário para configurar novos domínios!
Considerações Finais
Lembrando que neste setup não foi configurado/abordado um software anti spam, primordial para um bom funcionamento do servidor; mas será abordado em uma próxima publicação.
A entrada DNS do tipo PTR também não foi abordada. Meu provedor de serviço VPS (Digital Ocean) configura automaticamente a entrada PTR para meu servidor contratado a partir do nome do servidor/hostname configurado. Se tiver um servidor em casa, é muito provável que não consiga configurar a entrada PTR, ela atrapalha um pouco a autoridade do seu servidor, mas no geral terá um funcionamento satisfatório.
Este tutorial é bastante extenso, se tiver algum erro em algum arquivo de configuração é interessante checar caso não tenha inserido alguma informação incorreta, ou algum caracter fora de lugar. Na maioria das vezes que configurei um servidor de email tive estes problemas, é algo comum de acontecer.
No geral, é sempre uma boa prática acompanhar o log do servidor, para verificar problemas:
nano /etc/log/mail.log
Para enviar emails para domínio @icloud.com é necessário entrar em contato com a Spamhaus e remover seu IP da lista de SPAM deles. É um processo bastante rápido, basta alterar a URL e inserir o endereço IP do seu servidor. Ao acessar o link, será necessário confirmar propriedade do servidor para liberação:
http://www.spamhaus.org/query/bl?ip=100.100.100.100
Caso tenha alguma dúvida ou sugestão, basta informar nos comentários!