quinta-feira, 28 de agosto de 2008

Servidores de SMTP, IMAP, Pop

Boa noite pessoal! O post de hoje é sobre e-mail, ou correio eletrônico. Nele eu pretendo esclarecer alguns pontos sobre como funciona essa modalidade de comunicação.

O serviço de correio eletrônico, ou e-mail, é um dos mais antigos e que ainda hoje se mantém mais em voga na internet. O serviço de e-mail é tão antigo, tão importante, que praticamente o serviço de Domain Name Server, o popular DNS, trás configurações específicas para servidores de e-mail.

A troca de e-mails entre usuários na internet ocorre através do protocolo SMTP, ou Simple Mail Transfer Protocol, organizado pelo IETF, ou Internet Engineering Task Force, uma instituição dedicada a padronização de procotolos. A primeira versão do SMTP era baseada no RFC, uma documentação da IETF, 821. Atualmente utiliza-se a versão mais recente que é a RFC 2821.

O funcionamento do protocolo, como seu próprio nome diz, é bem simples. Um exemplo, o usuário 1 (user1@server1.com) deseja enviar uma mensagem ao usuário 2 (user2@server2.org). O usuário 1 digita a sua mensagem em seu programa de e-mail e manda enviar. Através de uma facilidade chamada relay, o programa de e-mail entrega a mensagem ao servidor de smtp do usuário.

O próximo passo consiste na conexão entre o servidor smtp do usuário 1 e servidor de smtp do usuário 2. O servidor de smtp do usuário 1, server1.com, consulta o servidor de DNS para descobrir o servidor de DNS responsável pelo domínio server2.org. Ao encontrá-lo, o servidor 1 verifica qual o servidor que consta na cláusula MX daquele domínio.

Dentro da configuração do BIND, o servidor de nomes padrão do mundo linux, existe uma entrada chamada MX, onde é possível configurar diferentes servidores de smtp com diferentes prioridades, como uma forma de redundância.

Enfim, verificado qual o IP do servidor que responde pelo serviço de smtp daquele domínio, o servidor de usuário 1 realizará a seguinte comunicação para com o servidor:

EHLO root@server1.com
Aqui é feito uma apresentação do servidor1 que tenta contato com o server2. Caso o contato seja bem sucedido o servidor 2 retorna uma lista de comandos válidos disponíveis.

MAIL FROM: user1@server1.com
Aqui é feita a identificação do usuário que tenta enviar a mensagem. Caso o endereço seja válido o servidor 2 retornará ok.

RCPT TO: user2@server2.org
Aqui é feita a identificação da conta que irá receber a mensagem. Nesse momento não é feita uma checagem sobre a conta ser válida ou não, e sim do endereço apresentado ser válido ou não. Novamente deve ser retornado um ok.

DATA
Aqui sim é iniciado o envio da mensagem, incluindo seus anexos e outros arquivos associados.

.
O último comando enviado pelo servidor de SMTP é um ponto. Ele indica o fim da mensagem assim como a desconexão com o servidor.


É possível verificar tais comandos utilizando um simples programa de telnet. Para isso, basta se conectar na porta 22 (porta default do serviço de SMTP) e entrar manualmente com os comandos acima.

O mundo do software livre possui algumas opções bem interessantes de servidores de e-mail SMTP. O mais antigo e popular deles é o Sendmail. Um mais recente que vem tomando o lugar deste nas distribuições é o Postfix, desenvolvido por Vietse Vena. No mundo das distribuições baseadas no Debian temos o Exim, desenvolvido pela própria equipe da distribuição. Esses três são distribuídos em GPL. Uma quarta opção, livre, porém não em GPL é o Qmail, bem popular devido a seu foco na segurança.

Voltando ao nosso exemplo, após entregue a mensagem do usuário 1 ao servidor de smtp do usuário 2, falta que este acesse ao servidor e busque as mensagens. Este passo pode ser feito através de 2 protocolos diferentes: POP ou IMAP.

O protocolo POP é o mais antigo e mais simples. Através dele, o cliente de e-mail do usuário 2 acessa ao servidor de smtp e lá ele se torna capaz de ou baixar as mensagens e deixar uma cópia no servidor ou baixar e depois apagar as mensagens. Sua porta padrão é a 110 e o programa servidor mais utilizado é o pop3d.

Outro protocolo pelo qual o usuário 2 pode vi a buscar as suas mensagens é através do IMAP, mais atual e completo, pois permite a existência de cópia sincronizadas de mensagens entre cliente e servidor, criação de diretórios, agrupamento de mensages e etc. Sua porta de operação é a 143 e o programa servidor mais utilizado é o dovecot.

O protocolo POP é regulamentado pela normal RFC 1939 e e o IMAP pela normal RFC 3501.

Uma curiosidade, a sigla RFC significa Request For Comming, ou requisita-se comentários. Essa sigla deriva da necessidade do IETF de gerar tais normas em decorrência da grande confusão entre os protocolos no passado e de após gerar tais documentos aguardar por um retorno dos usuários e desenvolvedores.

É isso pessoal, espero com esse post ter esclarecido alguns pontos sobre como funciona a comunicação via e-mail. Um abraço e até o próximo post!

RFC 821 - SMTP
RFC 2821 - SMTP atual
RFC 3501 - IMAP
RFC 1939 - POP