Dividindo carga de saída de servidor SMTP (MTA Selor)

Como dividir/balancear a carga de saída de seus e-mails entre dois ou mais links, com base no domínio de saída, IP, remetente ou qualquer outra coisa. O servidor de e-mails usado para isto, será o MTA Selor.

[ Hits: 5.727 ]

Por: Lucas Priori em 08/08/2014


Configurando



Muitas pessoas entram em contato comigo, para saber como dividir a carga de saída entre dois ou mais links.

Imagine que seu servidor tem disponível 2 ou mais links e você, por algum motivo, quer que o seu MTA envie algumas mensagens usando esses links alternativos.

O Servidor SMTP usado aqui será o MTA Selor.

Neste artigo, eu preciso supor algumas cadeias de redes LOCAIS para poder criar os exemplos (adapte-as para a rede de seu servidor). Usarei, então:

Rede 1: 192.168.0.0/24:
  • IP do servidor: 192.168.0.25
  • IP do gateway: 192.168.0.1 (link1)

Rede 2: 10.10.10.0/24:
  • IP do servidor: 10.10.10.25
  • IP do gateway: 10.10.10.1 (link2)

A Rede 1 (principal), provavelmente, já está configurada em seu servidor, então, precisamos criar apenas a tabela e a saída para a Rede 2.

Configurando a saída do outro link:

Edite o arquivo /etc/iproute2/rt_tables para criarmos a tabela que será relacionada ao nosso link secundário:

# pico /etc/iproute2/rt_tables

Dentro do arquivo, logo abaixo de "default", acrescente a seguinte linha:

00     link2

Salve e saia do arquivo.

Rode os seguintes comandos:

# ip route flush cache
# ip route add default via 10.10.10.1 table link2

Agora, para a tabela link2, o GNU/Linux já sabe que o gateway dela será o 10.10.10.1, e não o 192.168.0.1 da rede 1.

Basta adicionarmos uma regra dizendo que todos os pacotes que saem e o endereço de origem, é o nosso servidor de e-mails 10.10.10.25, devem sair pelo link2:

# ip rule add from 10.10.10.25 lookup link2
# ip route flush cache

A parte do GNU/Linux está feita. Agora, nós podemos entrar no arquivo de evento do Selor e especificar qualquer condição para forçarmos a saída do e-mail por este link.

Todos os pacotes cujo o IP de origem for 10.10.10.25, sairão pelo link2. No Selor, nós podemos especificar qual IP de origem ele deve usar para enviar um e-mail para fora. Usamos para isto a ação: Mx_source!

Abra o arquivo referente ao evento Event.rcpt (por padrão, fica em /usr/local/selor/rcpt_rules):

# pico /usr/local/selor/rcpt_rules

Vamos à "festa":

Digamos que o Hotmail está recusando mensagens de nosso servidor sem a menor explicação (coisa extremamente comum de acontecer, mesmo com um IP limpo, com SPF e tudo mais...) e queremos enviar as mensagens pelo link secundário:

Acrescente a seguinte linha no início do arquivo:

Find_in_to? "@hotmail.com" Mx_source! "10.10.10.25"

Obs.: lembrando que o IP de Internet desse segundo link, deve estar com seu endereço reverso configurado. Pode ser igual ao do IP do Link1.

Podemos usar muitas condições para acionarmos a ação Mx_source! "10.10.10.25", que faz o envio do e-mail sair pelo link2.

Tem aquele funcionário da empresa que precisa enviar mala direta, mas nós não queremos congestionar o link1 com suas mensagens:

Pode ser pelo IP do micro dele (Ex: 192.168.0.155):

Ip? "192.168.0.155" Mx_source! "10.10.10.25"

Ou, pode ser por usuário autenticado (marketing@minhaempresa.com.br):

Auth? Cmp_str? "%u:marketing@minhaempresa.com.br" Mx_source! "10.10.10.25"

Extra

Vale lembrar que temos também a ação Mx_dest!, que força a entrega daquele destinatário para um outro MTA. Às vezes, pegamos o problema de um servidor SMTP remoto começar a recusar mensagens de nosso servidor por algum motivo.

Podemos encaminhar as mensagens com destino ao domínio hospedado naquele HOST para um outro MTA nosso em outra rede. Digamos que o HOST que mantém os e-mails do domínio "dominiodeteste123.net" está recusando conexões de nosso MTA, mas nós temos um segundo MTA em outro link e vamos supor que esteja no IP 254.254.254.50 na porta 587.

Find_in_to? "@dominiodeteste123.net" Mx_dest! "254.254.254.50 587"

Você poderia também usar autenticação, para fazer o Selor autenticar-se no outro MTA para entregar a mensagem:

Find_in_to? "@dominiodeteste123.net" Mx_dest! "254.254.254.50 587" Mx_auth! "usuario:senha"

Extra 2

O Selor compilado com a libcap (capability) para GNU/Linux, vem com a ação "So_mark!" que adiciona marcações aos pacotes quando estão sendo enviados, igual aos MARKs do iptables -t mangle .... -j MARK --set-mark, onde podemos criar regras para fazer QoS e controlar a taxa de transmissão.

Ex.:

Ip? "192.168.0.60" So_mark! "1"

Todos os e-mails que o IP 192.168.0.60 enviar através de seu servidor, sairão com pacotes TCP/IP marcados com o valor 1. Você pode criar regras de QoS, através da ferramenta "tc".

Existem inúmeros artigos aqui no Viva o Linux explicando como fazer QoS com base nestas marcações.


Qualquer dúvida é só perguntar.

Obrigado à equipe do Viva o Linux.

   

Páginas do artigo
   1. Configurando
Outros artigos deste autor

Servidor de e-mail no Linux com MTA Sceo

Benchmark entre servidores de e-mails

MTA Selor: Servidor de E-mails - Novo Projeto GPL

Servidor de emails com Dovecot e MTA Sceo (projeto brasileiro)

Leitura recomendada

Conversão da base de dados do Cyrus IMAP no Debian

Servidor de email completo com Postfix

Instalando MTA Sceo no FreeBSD 7.1

Instalando o Qmail no RedHat 9

Solução completa com o sendmail

  
Comentários
[1] Comentário enviado por joorlando3 em 11/08/2014 - 09:21h

As dicas são muito boas! O hotmail recusa mesmo emails. As dicas de usar duas rotas são muito boas, algo que anteriormente demorei muito para entender.

[2] Comentário enviado por renatomartins_3 em 11/08/2014 - 20:37h

Parabéns !!!
ótimo Artigo
vai me ajudar e a outros tb !!

Estou usando o selor com muito sucesso ele è um ótimo servidor mta bem cutomizavel
migrei vários servidores que tinha tanto postifx e qmail para ele e estou muito feliz com os resultados !!

do postfix e do qmail as migrações foram totalmente transparentes usei até os mesmo usuários e senha dos domínios virtuais
Show de Bola mesmo

Parabéns Lucas !!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts