Como configurar o Postfix para enviar emails usando um servidor SMTP externo?

Neste artigo, vamos mostrar como configurar o servidor de e-mail Postfix para retransmitir (relay) mensagens através de outro servidor SMTP utilizando autenticação por usuário e senha.

Essa configuração é útil para os seguintes cenários:

  • Você possui um servidor de aplicação e deseja que as aplicações Web enviem e-mails utilizando um servidor Postfix local, que ficará responsável por encaminhar as mensagens para um servidor SMTP externo.
  • Você deseja utilizar um servidor SMTP autenticado, como o servidor de e-mail da Nevolus, Gmail ou outro serviço compatível com SMTP autenticado.
  • Você deseja evitar que a aplicação precise implementar diretamente a comunicação e autenticação com o servidor SMTP remoto.

Importante: para conexões SMTP autenticadas, recomendamos utilizar a porta 587 com STARTTLS. A porta 465 utiliza TLS desde o início da conexão (SMTPS) e deve ser utilizada somente quando o servidor SMTP de destino exigir esse método.

Instalando o Postfix

O primeiro passo é, obviamente, instalar o servidor de email Postfix.

NOTA: Se o seu servidor foi instalado a partir de um template padrão de servidor cloud da Nevolus, o Postfix já pode estar instalado. Nesse caso, você pode pular esta etapa.
Em sistemas Debian e Ubuntu, utilize:

sudo apt-get update
sudo apt-get install postfix

Durante a instalação, o sistema poderá solicitar algumas informações sobre a configuração inicial do Postfix. Caso seja apresentado o campo para definição do servidor de relay, informe o servidor SMTP que será utilizado.

[smtp.seudominio.com.br]:587

Os colchetes são importantes, pois fazem com que o Postfix utilize exatamente o servidor informado, sem realizar uma consulta DNS para procurar registros MX do domínio.

NOTA: Substitua smtp.seudominio.com.br pelo endereço do servidor SMTP que será utilizado.

Configurando o relay SMTP

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

sudo nano /etc/postfix/main.cf

Localize ou adicione a diretiva relayhost:

relayhost = [smtp.seudominio.com.br]:587

A porta 587 é a porta recomendada para envio autenticado de mensagens utilizando SMTP com STARTTLS.

Configurando a autenticação SMTP

Ainda no arquivo /etc/postfix/main.cf, adicione as seguintes configurações:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Essas configurações fazem com que:

  • O Postfix utilize autenticação SASL no servidor SMTP remoto.
  • As credenciais sejam obtidas a partir do arquivo /etc/postfix/sasl_passwd.
  • A autenticação anônima seja desabilitada.
  • A conexão SMTP utilize TLS.
  • O certificado do servidor remoto seja validado utilizando os certificados confiáveis instalados no sistema.

Sobre o parâmetro smtp_tls_security_level

O parâmetro recomendado atualmente é:

smtp_tls_security_level = encrypt

Ele substitui configurações antigas como: smtp_use_tls = yes

O parâmetro smtp_use_tls é considerado legado e está sendo removido das versões mais recentes do Postfix. Portanto, não utilize smtp_use_tls em novas configurações.

Configurando as credenciais

Crie o arquivo que armazenará as credenciais utilizadas para autenticação no servidor SMTP:

sudo nano /etc/postfix/sasl_passwd

Adicione uma linha no seguinte formato:

[smtp.seudominio.com.br]:587 conta@seudominio.com.br:senha

Substitua os valores de acordo com a conta que será utilizada para autenticação.

IMPORTANTE: esse arquivo contém uma senha em texto claro. Portanto, ele deve possuir permissões restritas e não deve ser disponibilizado para usuários sem necessidade de acesso administrativo.

Altere as permissões:

sudo chmod 600 /etc/postfix/sasl_passwd

Em seguida, gere o banco de dados utilizado pelo Postfix:

sudo postmap /etc/postfix/sasl_passwd

Esse comando criará o arquivo:

/etc/postfix/sasl_passwd.db

O Postfix utilizará o arquivo .db para consultar as credenciais durante a autenticação.

Validando a configuração

Antes de recarregar o serviço, é possível verificar a configuração do Postfix com:

sudo postfix check

Se não forem apresentados erros, recarregue o serviço:

sudo systemctl reload postfix

Também é possível verificar se o serviço está ativo:

sudo systemctl status postfix

Enviando um e-mail de teste

Para realizar um teste simples de envio, utilize:

echo "Mensagem de teste" | mail -s "Mensagem enviada via Postfix" email_do_destinatario@dominio.com.br

Caso o comando mail não esteja instalado, em sistemas Ubuntu/Debian ele pode ser instalado com:

sudo apt-get install mailutils

Verificando os logs

Caso a mensagem não seja entregue, verifique os logs do Postfix.
Em sistemas Ubuntu/Debian:

sudo tail -f /var/log/mail.log

Em sistemas baseados em RHEL, AlmaLinux ou CentOS, normalmente:

sudo tail -f /var/log/maillog

Também é possível consultar os logs do serviço com:

sudo journalctl -u postfix -f

Procure principalmente por mensagens relacionadas a:

  • Falha na autenticação SMTP;
  • Falha na negociação TLS;
  • Erros de certificado;
  • Conexão recusada pelo servidor SMTP;
  • Relay negado;
  • Usuário ou senha inválidos;
  • Falhas de resolução DNS.

NOTA: Recomendamos sempre a utilização da porta 587 com STARTTLS para conexões SMTP autenticadas. A porta 465, que utiliza TLS desde o início da conexão, deve ser utilizada somente em último caso, quando o servidor SMTP de destino não disponibilizar ou exigir especificamente esse método de conexão.

Utilizando a porta 465

A porta 465 utiliza um modelo diferente de TLS, no qual a conexão é protegida desde o início.
Ela não deve ser configurada da mesma forma que a porta 587. Caso o servidor SMTP de destino exija especificamente a porta 465, será necessário utilizar o modo TLS wrapper, por exemplo:

relayhost = [smtp.seudominio.com.br]:465
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes

Nesse cenário, o arquivo /etc/postfix/sasl_passwd também deverá utilizar a porta 465:

[smtp.seudominio.com.br]:465 conta@seudominio.com.br:senha

AVISO LEGAL: Os procedimentos descritos neste documento devem ser executados de acordo com o contexto de cada sistema, de forma a evitar impactos negativos à segurança, disponibilidade, integridade e privacidade de dados. A Nevolus se reserva o direito de modificar a qualquer tempo e sem aviso prévio as informações aqui apresentadas a fim de refletir o lançamento de novos serviços, atualizações físicas e operacionais, e evolução do estado-da-arte da tecnologia.

Posts Similares