Garanta Alta Disponibilidade em Projetos com Postfix: Guia Prático
Aprenda nesse artigo adicionar alta disponibilidade em seus projetos com Postfix com a inclusão de relay para encaminhar mensagens para mais de um servidor e garantir a operação
Durante meus projetos como sysadmin estive diante de duas funcionalidades interessantes no postfix. Uma das técnica é a utilização de servidores terceiros para realizar o disparo de envio, quando você possui um gateway de e-mail e por trás dele é necessário ter outro ou outros servidores de e-mail para repassar esta mensagem, você utiliza o host relay.
Agora se você já possui o host relay e quer manter uma alta disponibilidade de envios, você irá utilizar o smtp fallback relay ou fallback relay, variando o parâmetro de acordo com a versão do Postfix.
Ele dará a você uma segunda opção de gateway de envio. Como assim ? Você possui 1 gateway de envio, apenas este servidor está enviando e-mail, agora este servidor fica sem comunicação, o que acontece ? Você irá parar de enviar e-mail, sendo refém apenas de um servidor. Com o smtp fallback relay, ele irá tentar fazer o relay para o servidor 1, se o servidor 1 não responder, ele automaticamente envia para o servidor 2, o servidor que você configurou como fallback, isto tudo automático, sem precisar ficar alternando ip’s entre servidores para conseguir manter os envios.
CRIANDO O CENÁRIO
Vamos lá, vamos criar um exemplo para o host relay, você tem um servidor anti-spam e quer que todos os envios da sua empresa sejam centralizados nele, então este servidor será seu gateway de envio, neste caso você irá criar um host relay para ele, seguindo o seguinte fluxo:
Neste exemplo, os 2 servidores locais, ao realizar um envio, eles não enviam direto para o destinatário assim economizando recursos, eles enviam para o gateway, o gateway analisa o e-mail e ele é responsável por entregar o e-mail ao destinatário.
Configurando relay
Vamos partir do princípio que as suas 3 máquinas já estão configuradas na mesma rede e realizando envios normalmente, neste caso você irá acessar o arquivo main.cf, o principal arquivo de configuração do postfix.
Nas máquinas servidores locais, você irá configurar para qual máquina você irá redirecionar o envio, agora na gateway, irá informar quais redes estão autorizadas a realizar o disparo por ele.
Servidor local
# vim /etc/postfix/main.cf
na linha do relayhost você irá inserir o ip da máquina gateway:
relayhost = 192.168.0.254
saia salvando e reinicie o serviço do postfix.
# service postfix restart
Servidor Gateway de envio
Nele irei autorizar apenas a minha rede realizar envio para ele, então irei acessar novamente o main.cf porem agora do servidor gateway e irei autorizar qualquer ip que estiver na minha rede poderá realizar envio por ele, encontre a linha com o mynetworks e adicione a sua rede. No meu caso eu deixei o localhost e todos que for da mesma range de ip.
# vim /etc/postfix/main.cf
mynetworks = 127.0.0.0/8,192.168.0.0/24
salve e reinicie o serviço do postfix
# service postfix restart
Verificando o serviço:
Ao verificar o log dentro de /var/log/mail.log do postfix servidor local, irá aparecer o ip que foi feito o relay e se o envio foi realizado:
to=<usuario@dominio.com.br>, relay=192.168.0.254[192.168.0.254]:25, delay=0.05, delays=0.02/0.01/0.01/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as CFA587FC40)
Agora no gateway de email irá mostrar que foi recebido um relay e de onde foi o relay:
Jun 5 16:29:22 postfix2 postfix/smtpd[4885]: connect from postfix1.4linux.int[192.168.0.250]
Jun 5 16:29:25 postfix2 postfix/smtp[4889]: CFA587FC40: to=<usuarioteste@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.190.26]:25, delay=2.8, delays=0.01/0.01/2.1/0.73, dsn=2.0.0, status=sent (250 2.0.0 OK 1496690967 c22si6177024qtd.74 – gsmtp)
Dica:
relay host autenticado
O relay host criado anteriormente serve para servidores na mesma rede, agora se você possuir um provedor de e-mail, como exemplo, alguma empresa de envio de e-mail em massa e a autenticação é feita através de login e senha criptografadas, você irá ter que adicionar alguns parâmetros a mais. Vamos para o segundo exemplo:
Vamos abrir novamente o main.cf nele iremos adicionar as seguintes linhas:
relayhost = [smtp.4linux.com.br]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
salve e vamos criar o arquivo de autenticação:
# vim /etc/postfix/sasl_passwd
[smtp.4linux.com.br]:587 usuario:senha
salve e saia do arquivo.
Agora vamos dar permissão para este arquivo:
# chmod 600 /etc/postfix/sasl_passwd
O postfix não consegue ler arquivos de texto, então vamos mudar para uma forma que ele consiga ler :
# postmap /etc/postfix/sasl_passwd
Garanta que a linha da criptografia esteja dentro do /etc/postfix/master.cf, se não tiver adicione:
# vim /etc/postfix/master.cf
tlsmgr unix – – n 1000? 1 tlsmg
Assim que garantir que a criptografia tls encontra-se no master, vamos reiniciar o postifx
# service postfix restart
Pronto, basta realizar o envio e verificar o log no /var/log/mail.log novamente.
UTILIZANDO FALLBACK
Vamos criar um cenário com 2 servidores como gateway de saída, porém um ficará como secundário, caso o primeiro não responda, ele irá redirecionar os envios :
Agora vamos configurar o smtp fallback relay de acordo com a versão do postfix, no meu caso estarei utilizando a versão 2.11.3-1.
Servidores Locais
Nos servidores locais que já encontra-se com o relayhost configurado, vamos acessar o main.cf e adicionar a seguinte linha:
# vim /etc/postfix/main.cf
smtp_fallback_relay = 192.168.0.253
Então ficará da seguinte forma:
relayhost = 192.168.0.254
smtp_fallback_relay= 192.168.0.253
O que eu fiz ? Avisei o postfix de que caso o relayhost não esteja acessível é para enviar para o smtp fallback relay.
salve e reincie o postfix
# service postfix restart
Pronto, Agora se você derrubar a conexão com o gateway 1, ele irá redirecionar os envios automaticamente para o segundo gateway da seguinte forma:
Para acompanhar essa mudança, acesse /var/log/mail.log, ele irá tentar realizar o envio e irá tentar disparar para o primeiro gateway na primeira vez, após 30 segundos tentando realizar o disparo e não houve a comunicação com o primeiro, ele redireciona automaticamente para o segundo:
Caso queira alterar o tempo, adicione dentro do main.cf a linha de timeout :
# vim /etc/postfix/main.cf
smtp_connection_timeout=10
saia salvando e reinicie o serviço.
Log do relay:
to=<emaildeteste@gmail.com>, relay=192.168.0.253[192.168.0.253]:25, delay=30, delays=0.01/0/30/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as F2EC5801CA)
Jun 5 17:34:58 postfix1 postfix/qmgr[9149]: B8BC0801C9: removed
Após reduzir o prazo:
Jun 5 17:49:44 postfix1 postfix/smtp[9708]: 364AE801C9: to=<emaildeteste@gmail.com>, relay=192.168.0.253[192.168.0.253]:25, delay=1.2, delays=0.05/0.01/1.1/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 7904F801CA)
Jun 5 17:49:44 postfix1 postfix/qmgr[9650]: 364AE801C9: removed
Seu relayhost e fallback relay estão funcionando corretamente, ambas as 2 funcionalidades do postfix são muito úteis em cenários que você utilize mais de 1 servidor e necessita garantir o envio de e-mail, um dos serviços mais importantes na sua infra.
About author
Você pode gostar também
Entenda a Alta Disponibilidade com Pacemaker e Corosync
Fugindo um pouco dos tópicos mais quentes como Cloud Pública, IaC, DevOps e SRE, hoje veremos alguns elementos que são usados como base de muitos serviços que utilizamos: Clusters. Entender
Engenheiro de Dados: a profissão essencial na era da informação
Profissões tendem a desaparecer e surgir com outras roupagens em um mundo onde a quantidade de conhecimento cresce exponencialmente. Embora esse fenômeno cause crises em algumas áreas, ele pode ser
Guia prático: Como criar grupos e aplicar regras de política com SUDO no FreeIPA
Este é o terceiro post de uma série de publicações sobre o FreeIPA. Até aqui vimos em outros posts como subir um servidor IPA e também seus clientes, como criar