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.
