Interação
    DNS x Sendmail

O programa Sendmail utiliza os serviços do DNS para ajudá-lo a realizar a entrega de mensagens. Uma implementação correta de gerenciamento de mensagens requer uma coordenação precisa e coordenada entre o DNS e o sendmail.  Para processar uma mensagem o Sendmail envia uma pergunta ao servidor DNS local e solicita os registros MX (Mail Exchanger) para aquele domínio. Por exemplo, para enviar uma mensagem para dicas-l@netway.unicamp.br, o Sendmail irá procurar registros MX para o domínio netway.unicamp.br. O servidor DNS irá responder com todos os registros MX que encontrar para aquele domínio, frequentemente mais de um e em média dois. Caso o recipiente não possua registros MX o Sendmail solicitará então registros do tipo CNAME ou A de maneira a, uma vez de posse desta informação,  poder conectar-se à máquina destino.  Podem ser definidos vários registros MX para um domínio. Um registro MX contém um campo que indica, dentre os mail exchangers disponíveis, a preferência que deve ser obedecida para a entrega de mensagens.

Tomemos o exemplo da Unicamp. O meu endereço particular é queiroz@unicamp.br. Não existe entretanto um computador denominado "unicamp.br" (nada impede, entretanto, que exista). Para se realizar entrega de mensagens para endereços como o meu é necessário que o programa sendmail interaja com o DNS para obter nomes de computadores reais que façam a entrega destas mensagens.

Vejamos como isto ocorre no DNS:

% nslookup
Default Server:  ns.unicamp.br
Address:  143.106.1.5

> set type=mx
O comando acima indica que eu quero obter do servidor DNS apenas registros do tipo MX.
> unicamp.br
Server:  ns.unicamp.br
Address:  143.106.1.5
A seguir especifiquei o domínio a respeito do qual desejo informações, no caso o domínio "unicamp.br". E as respostas:
unicamp.br      preference = 5, mail exchanger = apolo.ccuec.unicamp.br
unicamp.br      preference = 10, mail exchanger = styx.iqm.unicamp.br
unicamp.br      preference = 0, mail exchanger = obelix.unicamp.br
unicamp.br      nameserver = ns.sbq.org.br
unicamp.br      nameserver = ns.unicamp.br
unicamp.br      nameserver = styx.iqm.unicamp.br
apolo.ccuec.unicamp.br  internet address = 143.106.80.3
styx.iqm.unicamp.br     internet address = 143.106.51.37
styx.iqm.unicamp.br     internet address = 143.106.1.37
obelix.unicamp.br       internet address = 143.106.10.2
ns.sbq.org.br   internet address = 200.136.224.101
ns.unicamp.br   internet address = 143.106.1.5
O domínio "unicamp.br" possui três servidores que podem atende-lo, obelix.unicamp.br, apolo.ccuec.unicamp.br e styx.iqm.unicamp.br. A cada um destes servidores está associado um número. Este número indica a prioridade que cada um dos servidores possui. Quanto mais baixo o número mais alta a prioridade.

Desta forma, mensagens enviadas para o domínio unicamp.br devem ser entregues primeiramente a maquina obelix.unicamp.br (valor 0). Caso esta máquina esteja fora do ar, as mensagens devem então ser entregues à máquina apolo.ccuec.unicamp.br (valor 5). E em último caso, as mensagens devem ser entregues à máquina styx.iqm.unicamp.br (valor 10).

Todas as mensagens enviadas para determinado domínio possuem uma ordem de precedência quanto ao computador que irá recebe-las.

O fato de que eu tenha três servidores que possam receber mensagens endereçadas a um domínio como "unicamp.br" não implica no fato de que os usuários tenham contas nas três máquinas.

Quando alguém manda uma mensagem para queiroz@unicamp.br, o programa sendmail que irá fazer a entrega da mensagem primeiramente faz uma consulta ao DNS pedindo os registros MX associados ao domínio "unicamp.br". De posse das respostas, ele tentará entrar em contato com o servidor especificado no registro MX de mais alta prioridade. Este servidor, o de prioridade mais alta, normalmente é o servidor onde as pessoas tem suas contas. Ou seja, se este servidor estiver no ar e funcionando perfeitamente, o programa sendmail deste servidor irá aceitar a conexão, receber a mensagem, e gravá-la na mailbox do usuário queiroz.

Caso ele não esteja funcionando, o programa sendmail tentará então entrar em contato com o servidor especificado no registro MX seguinte. O usuário queiroz não possui conta neste segundo servidor. O que ocorre então? A mensagem é recebida e ao invés de ser gravada na mailbox do usuário (que não existe neste equipamento), é mantida na área de spool de mensagens. Esta mensagem ficará então na fila e de tempos em tempos o sendmail tentará conectar com a máquina destino, para enviar a mensagem.

É claro que, caso a máquina cujo registro MX tenha a prioridade mais alta demore mais que cinco dias para voltar a funcionar, existe o risco das mensagens retornarem a quem as enviou dizendo que o destino está inacessível.

Alguns pontos importantes a serem lembrados. Os servidores MX de determinado domínio devem residir em redes diferentes, o mais afastadas possível. Caso residam em redes diferentes mas compartilhem a mesma linha de comunicação para acesso à Internet não adianta muita coisa. Se a linha cair as duas ou mais máquinas ficam inacessíveis e a mensagem não será entregue. Se possível, coloque os servidores MX de seu domínio em redes diferentes, como por exemplo, uma delas no tronco RNP da Internet Brasil e outra no tronco Embratel. Desta forma você garante que mensagens enviadas para o seu domínio sempre cheguem.

E se a sua máquina demorar muito para ser consertada? Contacte o administrador do seu servidor MX secundário e peça a ele para ir salvando as mensagens destinadas ao seu domínio em uma área alternativa. Desta forma não se perdem mensagens e você economiza tempo de processamento do servidor secundário visto que ele não ficará tentando entregar, a intervalos normalmente definidos em uma hora, mensagens que não podem ser entregues.

Nunca se esqueça de avisar o administrador do servidor MX secundário quando houverem problemas com o servidor primário. Especialmente se o seu domínio recebe muitas mensagens. Se o servidor secundário for uma máquina com poucos recursos de armazenamento, problemas sérios poderão ocorrer. Se o filesystem ficar cheio mensagens para o domínio que o servidor secundário atende também serão devolvidas. E como estas coisas de um ser servidor secundário de outro geralmente funcionam no favor, não é bom complicar a vida de quem está te ajudando.

Uma vez que a sua máquina voltar a funcionar, o administrador do servidor MX secundário poderá invocar o sendmail para processar especificamente a fila de mensagens para o seu domínio.

Suponhamos que isto tenha sido feito movendo-se as mensagens para o diretório /var/spool/unicamp.back. Para invocar o sendmail fazendo com que ele utilize este diretório basta invocá-lo com as seguintes opções abaixo:

# /usr/sbin/sendmail -OQueueDirectory=/var/spool/unicamp.back -q -v
Uma consideração final, todas as precauções que sugeri para os servidores MX secundários se aplicam também aos servidores DNS secundários. Para ficar garantido, coloque o seu servidor primário no Brasil e um secundário na Austrália. Só para garantir.


| Anterior | | Próxima | | Sumário | | Notas |

SENDMAIL
Página 21