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.