Servidor de E-mail e Webmail: Postfix, Dovecot e SnappyMail

Nesse tutorial vamos implementar e validar de maneira isolada um MTA (Postfix), um MDA (Dovecot ) e um MUA moderno e seguro (SnappyMail) em ambiente de rede privada, utilizando apenas pacotes do repositório oficial main do Ubuntu.

O Objetivo desse tutorial é permitir a compreensão da arquitetura de correio eletrônico na camada de aplicação de forma modular.

PARTE 1: Preparação do Servidor

Nesta etapa, usaremos uma máquina com Ubuntu LTS.

Passo 1: Atualização e Identificação de Rede

Antes de instalar os pacotes, é crucial definir a identidade do servidor. Utilizaremos o sufixo “.test" (reservado pela RFC 2606 para testes locais) para evitar conflitos de rota na Internet.

Atualize a lista de pacotes do sistema:

sudo apt update && sudo apt upgrade -y

Defina o nome qualificado (FQDN) do servidor para mail.network.test:

sudo hostnamectl set-hostname mail.network.test

Abra o ficheiro de resolução estática /etc/hosts:

sudo nano /etc/hosts

Adicione a linha associando o IP do seu Servidor ao nome configurado. Mantenha as linhas de loopback (127.0.0.1) intactas:

IP_Do_SERVIDOR mail.redes.test mail

PARTE 2: Configuração e Validação Isolada do MTA (Postfix)

Nesta etapa, o objetivo é colocar o servidor SMTP de envio no ar e garantir que ele seja capaz de receber mensagens e entregá-las fisicamente no formato de diretórios Maildir.

Passo 2: Instalação e Configuração do Postfix

O Postfix será o nosso MTA (Mail Transfer Agent).

Instale o Postfix e o utilitário de terminal mailutils:

sudo apt install postfix mailutils -y

Durante a instalação, o assistente em modo texto (dpkg) fará perguntas couciais. Configure exatamente assim:

Tipo geral de configuração de e-mail: Selecione a opção 2 que seguinifica Site da Internet (Internet Site).

Nome de e-mail do sistema: Digite exatamente o nome que você inseriu. No nosso caso, foi o mail.network.test.

Em seguida, virá uma pergunta para o receptor para o root e postmaster. Como não vamos usar essa configuração nesse tutorial vamos apenas pressionar ENTER.

Depois vem uma pergunta se você vai aceitar emails de outros destinos. Em nosso caso, vamos pressionar ENTER.

Em seguinda virá a pergunta sobre uso do postfix em redes locais e vamos também pressionar ENTER.

Depois vem a pergunta sobre a limitação da caixa de email do usuário. Nesse caso, vamos pressionar ENTER porque vamos inserir o valor no arquivo de configuração.

Agora, vem a pergunta sobre a utilização de caracteres para o endereço local e vamos apenas pressionar ENTER.

E finalmente, vem a pergunta sobre qual versão de IP funcionará o postfix. Nesse caso, vamos marcar 1 para permitir IPv4 e IPv6.

Abra o arquivo de configuração principal do Postfix:

sudo nano /etc/postfix/main.cf

Ajuste os parâmetros para ativar o armazenamento no formato Maildir e corrigir preventivamente limites numéricos em branco:

myorigin = $mydomain

mailbox_size_limit = 0

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

home_mailbox = Maildir/

(Nota pedagógica: home_mailbox = Maildir/ define que os e-mails não serão gravados num único ficheiro mbox, mas sim como ficheiros individuais dentro da pasta do utilizador. Deixar mailbox_command vazio garante a entrega direta pelo agente local. O mailbox_size_limit = 0 evita falhas fatais de sintaxe no agente local do Postfix se o assistente do instalador for deixado em branco).

Aplique as novas configurações reiniciando o serviço:

sudo systemctl restart postfix

Passo 3: Provisionamento de Utilizador de Teste

Cada conta de correio eletrônico neste modelo corresponde a um utilizador real do sistema operativo Linux.

Crie a utilizadora ana com shell padrão bash e diretório home:

sudo useradd -m -s /bin/bash ana

Defina uma palavra-passe simples para fins de laboratório (ex: ana):

sudo passwd ana

Passo 4: Teste de Envio SMTP e Entrega Física (Validação do MTA)

Agora, validaremos se o Postfix está operacional e a realizar entregas locais com sucesso.

Instale o swaks (Swiss Army Knife for SMTP), um excelente injetor de pacotes SMTP de teste:

sudo apt install swaks -y

Realize o disparo de um e-mail de teste para a utilizadora ana usando o domínio local ativo:

swaks --to ana@network.test --from ana@network.test --server localhost

Você verá uma mensagem com a da figura abaixo após digitar o comando.

Agora, vamos verificar se a mensagem foi enviada para a caixa de email do usuário, que no nosso tutorial é o usuário ana. Para isso, vamos usar o comando abaixo.

sudo ls -la /home/ana/Maildir/new/

E veremos a mensagem que enviamos como na figura abaixo.

(Se o Postfix funcionou, verá pelo menos um arquivo de texto com nome longo correspondente à mensagem enviada. Isso encerra a validação do MTA com sucesso total!)

DIAGNÓSTICO E DEPURAÇÃO (Caso a pasta Maildir não seja criada): Se o comando retornar um ID de fila (queued as [ID]) mas o diretório não surgir na home da Ana, verifique quais domínios o seu Postfix está aceitando localmente para entrega:

postconf mydestination

Se o servidor assumiu o domínio do sistema de rede do servidor automaticamente (ex: network.test), repita o disparo adaptando o domínio correspondente:

swaks --to ana@network.test --from ana@network.test --server localhost

PARTE 3: Configuração e Validação Isolada do MDA (Dovecot)

Agora que sabemos que existem e-mails físicos depositados no disco pelo Postfix, instalaremos o Dovecot para permitir o acesso e a leitura estruturada dessas caixas de correio através do protocolo IMAP na porta 143.

Passo 5: Instalação e Configuração do Dovecot

O Dovecot será o nosso MDA (Mail Delivery Agent).

Instale os módulos necessários do Dovecot (não há necessidade de instalar o pop3d caso o acesso seja estritamente via Webmail/IMAP):

sudo apt install dovecot-core dovecot-imapd -y

A Abordagem Moderna via local.conf: Em vez de alterar ficheiros extensos e poluídos como 10-mail.conf e 10-auth.conf que mudam de layout entre as atualizações do sistema, criaremos um ficheiro de configuração local que sobrescreve as definições padrão de forma limpa e direta.

Crie e edite o arquivo /etc/dovecot/local.conf:

sudo nano /etc/dovecot/local.conf

Adicione as seguintes configurações de armazenamento e segurança.

mail_driver = maildir
mail_home = /home/%{user | username}
mail_inbox_path = %{home}/Maildir
mail_path = %{home}/Maildir

auth_allow_cleartext = yes

(Nota: No Dovecot 2.4+, a antiga diretiva global mail_location foi descontinuada pelo upstream. Usamos os novos parâmetros específicos mail_driver, mail_path e definimos explicitamente o mail_inbox_path de forma vazia para anular o padrão mbox /var/mail/%{user} do sistema, permitindo que o driver do Maildir opere perfeitamente).

  1. Aplique as modificações reiniciando o serviço do Dovecot:
sudo systemctl restart dovecot

Passo 6: Teste de Acesso e Leitura IMAP (Validação do MDA)

Para provar que o Dovecot está a funcionar, vamos simular a ação de um cliente de e-mail via terminal, autenticando no servidor e lendo a mensagem que o Postfix entregou no Passo 4.

  • Ligue-se à porta de escuta IMAP local utilizando o utilitário telnet:
telnet localhost 143

(Deverá receber o banner de ligação bem-sucedida do Dovecot).

  • Execute o comando de login no protocolo IMAP com as credenciais da utilizadora ana:
. login ana ana

(A resposta esperada é . OK [CAPABILITY ...] Logged in, indicando que o Dovecot integrou-se com sucesso ao módulo PAM do Linux e autenticou o utilizador local).

  • Instrua o Dovecot a selecionar e abrir a pasta de entrada padrão (INBOX) da utilizadora:
. select INBOX

(O Dovecot retornará as propriedades da pasta, incluindo uma contagem das mensagens que ele encontrou e indexou na pasta Maildir física. Exemplo: * 1 EXISTS).

  • Solicite ao Dovecot a recuperação (fetch) do conteúdo da primeira mensagem da fila:
. fetch 1 body[]

(O Dovecot interpretará o ficheiro físico que o Postfix gravou em /home/ana/Maildir/new/ e exibirá de forma estruturada o cabeçalho SMTP, o assunto e a mensagem “This is a test mailing” no console do terminal).

  • Termine a sessão de forma segura e encerre a ligação:
. logout

(Se conseguiu ler a mensagem, isso valida de forma definitiva o seu MDA! O motor de e-mail local está 100% testado, funcional e pronto).

PARTE 4: Interface Webmail Segura (SnappyMail)

Com a infraestrutura de correio eletrónico (MTA + MDA) validada, instalaremos o SnappyMail (MUA). Como o SnappyMail é stateless (sem estado), ele se conecta diretamente ao IMAP e SMTP em tempo real. Não é necessário instalar nem configurar nenhuma base de dados SQL (como o MariaDB/MySQL), tornando a instalação extremamente limpa e segura.

Passo 7: Instalação do Servidor Web Apache e PHP (Apenas repositório main)

Instalaremos a infraestrutura web básica utilizando apenas os pacotes nativos do repositório principal do Ubuntu.

  1. Instale o Apache e as extensões básicas do PHP necessárias para o SnappyMail:
sudo apt install apache2 php php-curl php-mbstring php-xml php-zip php-gd php-intl libapache2-mod-php -y

Passo 8: Download e Implantação Manual do SnappyMail (MUA)

Para garantir que os alunos aprendem a obter software atualizado e seguro de forma profissional, eles devem aprender a navegar de forma autónoma na página de lançamentos (Releases) do GitHub do projeto para obter o link do pacote de produção mais recente.

Crie a pasta de destino do webmail no Apache (ou garanta que ela seja criada de forma limpa):

sudo mkdir -p /var/www/html/snappymail

Instruções de navegação no GitHub:

No navegador de uma máquina cliente ou física, aceda à página oficial de lançamentos do SnappyMail[https://github.com/the-djmaze/snappymail/releases]

https://github.com/the-djmaze/snappymail/releases

Identifique o lançamento mais recente que possua a etiqueta verde “Latest” no topo da página.

Role a página para baixo, passando pelas notas de lançamento (Release Notes), até encontrar a secção “Assets” (Recursos) desse bloco de lançamento. Caso a secção esteja oculta, clique para expandi-la.

Localize o ficheiro compactado em formato .tar.gz (ex: snappymail-2.38.2.tar.gz).

Nota Importante de Segurança/DevOps: Geralmente evito a escolha os ficheiros “Source code (zip)” ou “Source code (tar.gz)”. Estes contêm o código-fonte bruto de desenvolvimento, que não está compilado e não inclui as dependências necessárias, o que resultará num erro de indexação de diretório no Apache.

Depois de copiar o arquivo com final .tar.gz , vamos usar o comando abaixo para descompactar e enviar para a pasta correta.

sudo tar -xvzf snappymail* -C /var/www/html/snappymail

Defina as permissões de acesso corretas para que o utilizador do servidor web (www-data) consiga ler e escrever nos ficheiros de configuração temporários da aplicação:

sudo chown -R www-data:www-data /var/www/html/snappymail
sudo find /var/www/html/snappymail -type d -exec chmod 755 {} \;
sudo find /var/www/html/snappymail -type f -exec chmod 644 {} \;

Reinicie o servidor web Apache para garantir a aplicação de todas as permissões:

sudo systemctl restart apache2

Passo 9: Configuração de Domínios no Painel de Administração do SnappyMail

O SnappyMail possui um painel web exclusivo para os administradores configurarem os servidores de destino.

No navegador de uma máquina cliente ou da própria máquina do servidor, vá ao painel de administração do SnappyMail:

http://IP_DO_SERVIDOR/snappymail/?admin

Inicie sessão utilizando as credenciais padrão de administração do SnappyMail:

Usuário: admin

Senha: O SnappyMail gera uma senha aleatória única na primeira inicialização por motivos de segurança. Para descobrir a senha gerada para o seu servidor, execute o seguinte comando no terminal:

sudo cat /var/www/html/snappymail/data/_data_/_default_/admin_password.txt

Copie a senha exibida no terminal e utilize-a para entrar no painel de administração.

Altere a senha padrão imediatamente no menu de segurança do painel para garantir a integridade do servidor.

Configurar o domínio local:

No menu lateral esquerdo, clique em “Domains” (Domínios).

Podemos observar que o nosso domínio “mail.network.test” já está listado.

Se clicar no domínio listado, vamos ver a configuração abaixo para IMAP.

Ao clicar em SMTP, vamos ver a configuração abaixo.

Caso o seu domínio não tenha sido adicionado ou você queira fazer alterações e criar novos domínios você pode usar as figuras acima como base de sua configuração. Em seguida, você pode clicar no botão “Add Domain” (Adicionar Domínio).

Preencha os campos da figura acima conforme a sua configuração de domínio.

Caso tenha feito alguma alteração, clique em “Save” para salvar as configurações.

PARTE 5: Teste Prático no Cliente

Agora, você pode usar uma segunda máquina virtual ou física conectada na mesma sub-rede para acessar o Webmail.

Passo 10: Acesso ao Webmail

Na máquina cliente, abra o navegador web e utilize o IP do seu Servidor Webmail.

http://IP_DO_SERVIDOR/snappymail

Faça o login utilizando a conta criada no Passo 3:

Usuário: ana@network.test

Senha: ana

Validação: Você verá instantaneamente na caixa de entrada a mensagem de teste enviada via swaks no Passo 4. Agora você pode enviar novos e-mails diretamente pela interface gráfica do SnappyMail e verificar a entrega imediata!

Assim que você entrar no email, vai aparecer uma tela pedindo para inserir o nome e a etiqueta que aparecerá no email do usuário.

Em seguida, você vai ver a tela com os emails do usuário.

Agora, vamos enviar um email da ana para a própria ana. Esse vai ser nosso primeiro teste. Para isso clique em “New Message” e depois insira o email da ana “ana@network.test” e o assunto do email. Em seguida, digite algo no email e clique em “Send“.

Em seguida, vamos clicar no ícone para atualizar o Webmail e vamos ver nosso email na caixa postal, como na figura abaixo.

Caderno de Análise Pedagógica (Depuração)

Se ocorrer algum erro durante a entrega ou autenticação, podemos usar alguns comandos para nos permitir agir como verdadeiros engenheiros de infraestrutura, investigando os arquivos de log em tempo real.

Logs de Transmissão de E-mail (SMTP/IMAP) via systemd (Ubuntu moderno):

sudo journalctl -u postfix.service -u dovecot.service -f

Logs do Servidor Web (Apache/PHP):

sudo tail -f /var/log/apache2/error.log

Mostrar as últimas 50 mensagens geradas especificamente pelo servidor Dovecot.

sudo journalctl -u dovecot.service -n 50 --no-pager

Mostrar últimas 50 mensagens de logs geradas especificamente pelo servidor de e-mail Postfix:

sudo journalctl -u postfix.service -n 50 --no-pager

Veja mais:

Instalar e configurar NGINX no Linux

Tutorial servidor de email com Postfix e Dovecot

Tutorial: Instale seu Servidor DNS no Linux com Bind9 Passo a Passo

SSH: Como criar chave pública

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer