Faça relay com Postfix e adicione HA em seus projetos

Faça relay com Postfix e adicione HA em seus projetos

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.

relay

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:

relay

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

relay

# 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:

relay

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 :

relay

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

relay

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:

relay

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.

 

Anterior Openshift: criação de cluster e deploy de uma aplicação
Próxima Mulheres que programam quebrando paradigmas.

About author

Gabriel Araujo
Gabriel Araujo 4 posts

Gabriel Policante Araujo, atua como Analista de Infraestrutura em Software Livre, formado em Redes de Computadores pelo Senai Suíço e cursando Análise e Desenvolvimento de Sistemas pela Universidade de Santo Amaro. Possui experiência em ferramentas voltadas para aplicação da cultura Devops, com ênfase em automação, Aplicações de e-mail como Zimbra e Arquiteto Multi Cloud. Detém expertise como instrutor de cursos voltados ao Sistema Operacional Linux, possui Certificação LPIC1 e LPIC2.

View all posts by this author →

Você pode gostar também

Infraestrutura

MongoDB: como criar um Cluster Replication Set

O MongoDB é um banco com foco em escalabilidade horizontal, sendo assim ele possui um recurso chamado ReplicatSet que serve para replicar os dados em um cluster de servidores para

Infraestrutura

Inventário de rede com OCS Inventory

O OCS Inventory é um software de gerência para inventários de dispositivos em rede, com ele é possível registrar todas as características de um computador incluindo: Versão do sistema operacional;

Infraestrutura

Instalação e Migração OTRS

Introdução OTRS, Open-source Ticket Request System (Sistema Livre de Requisição de Chamados), é um sistema de gerenciamento de incidentes, livre e de código aberto, que qualquer organização pode usar na