Trabalho de Formatura - MAC499
Dados
Introdução
A Empresa
O Estágio
Adminstrador de Sistemas
Sistemas Unix
Servidor de Email
Proxy
Firewall
Ferramentas Úteis
Conclusão
Arquivos

Servidor de Email

Um sistema de e-mail pode ser dividido em quatro partes:

  • MUA(Mail user agent) - que é o software que o usuário utiliza para ler e enviar emails.
  • MTA(Mail transport agent) - que envia as mensagens entre as máquinas
  • Agente de entrega - que armazena as mensagens na caixa postal do usuário
  • Agente de acesso - que conecta o usuário ao local de armazenamento das mensagens.

Existem diversos sistemas de email, dentre eles estão o SendMail, QMail e PostFix.

Segue uma breve descrição das características desses softwares:

  • Sendmail
    Sua primeira versão foi escrita em 1979, por Eric Allman
    É largamete utilizado, porém após uma série de vulnerabilidades descobertas começou a perder terreno.
    O Sendmail foi construído como um bloco único. O mesmo executável que recebia emails entregava para a caixa postal do usuário ou entregava para outra máquina.
    Esse foi um dos grandes problemas desse software, pois ele era executado com permissão de root o tempo todo (para poder ter acesso às caixas postais dos usuários), com uma falha descoberta, o invasor ganhava acesso de root na máquina.
    Mesmo com esse problema é o sistema de emails com mais recursos no mercado.
  • Qmail
    É mais recente que o Sendmail, sua primeira versão foi liberada em janeiro de 1996. Foi escrito baseado em módulos, cada módulo era responsável por uma parte do processo de entrega e recebimento de email. Com cada módulo pequeno, era muito mais fácil identificar problemas, a execução era muito mais rápida e o módulo responsável pela entrega, o qual deveria ser executado com permissão de root, só ficava ativo no momento da entrega da mensagem localmente, dificultando muito a ação dos invasores.
  • PostFix
    Também é modularizado, sendo o mais rápido dos MTAs.
    É famoso por ser muito fácil para configurar e muito versátil.
    Com certeza um dos pontos a favor contra o Qmail é a fácil interpretação do arquivo de log e o trace de uma mensagem. Quando uma mensagem é recebida ela ganha um id, com ele se pode identificar todos os passos que a mensagem deu no servidor.

Agregado a esses MTAs instalamos um software anti-vírus, toda mensagem é checada, quando um vírus é identificado a mensagem ou o anexo contaminado é barrado e colocado em 'quarentena'. Uma mensagem é anexada ao email informando o destinatário que sua mensagem foi barrada. Se mesmo assim ele quiser a mensagem podemos enviá-la.

Também instalamos sistemas anti-spam. Um deles, o SpamAssassim, "lê" o email, dando uma pontuação para cada característica do email, se a pontuação passar de um valor pré-definido a mensagem pode ser marcada como "spam" e prosseguir o caminho ou bloqueada. Tudo configurado segundo as necessidades do cliente.

Outro sistema anti-spam utiliza algumas listas públicas de IPs que enviam spam ou que são de rede doméstica, bloqueando o recebimento dos emails partindo desses IPs. Pode ocorrer de um IP legítimo cair nessas listas, nesse caso o IP pode ser colocado em uma lista branca no servidor, liberando assim o recebimento.

Detalhes de um Servidor de Emails

Um servidor de emails comum aceita os protocolos SMTP(porta 25) e POP(porta 110). O servidor ilustrado na imagem acima aceita esses dois protocolos.

O SMTP

SMTP (Simple Mail Transfer Protocolo), é usado para o envio de emails para o servidor. O protocolo é bem simples, para um cliente enviar um email para o servidor basta abrir uma conexão na porta 25 do servidor e informar os seguintes parâmetros:

  • helo cliente.teste.com.br
  • mail from: <email@teste.com.br>
  • rcpt to: <destino@servidor.com>
  • data
    conteúdo do email
    .

    O conteúdo do email é composto por um cabeçalho e o conteúdo propriamente dito. O que divide o cabeçalho do restante do email é a primeira linha em branco.

    O cabeçalho possui alguns campos comuns, separdos por uma quebra de linha: FROM, TO, SUBJECT, DATE. Também possui vários parâmetros que são deixados por cada servidor pelo qual a mensagem passa.

    Voltando ao servidor de emails, vejamos o que ocorre em cada passo da entrega de um email.

    • Cliente conecta-se ao servidor na porta 25, cujo programa escutando é o SMTPD.
      Nesse momento o servidor checa se o IP cliente está em alguma de suas listas, para saber como prosseguir. Caso não esteja faz uma consulta em listas públicas de IPs.
      Caso o IP cliente esteja em alguma lista negra (tanto local como remota), o servidor aceita os comandos HELO, MAIL FROM e RCPT TO e então finaliza a conexão. Esses comandos são aceitos para deixar o histórico do bloqueio nos logs, para futura verificação.
      Nesse momento alguns servidores também checam se o Reverso do IP se resolve para o IP corretamente, ou seja, faz uma busca para saber qual o nome relacionado ao IP, depois faz a busca para identificar qual IP está relacionado com o nome encontrado, caso algum erro seja encontrado, a conexão é terminada neste momento.
    • Caso tudo ocorra bem, os comandos HELO, MAIL FROM e RCPT TO são aceitos e mais verificações são feitas:
      Se o servidor for MX(Mail eXchanger) do domínio destinatário, e o endereço de email existir, a mensagem é aceita. Caso o servidor for MX do domínio, mas o email não existir, a conexão é terminada com um erro explicativo.
      Caso o servidor não seja MX do domínio destinatário, para que a mensagem continue o IP do cliente deve estar na lista de permissão de relay, caso esteja a mensagem segue adiante, senão a conexão é terminada.
    • Mais uma vez, se tudo ocorreu bem, a mensagem é aceita e o programa SMTPD deposita a mensagem na Fila de Entrada, terminando aqui sua tarefa.
    • O programa MailScanner então pega a mensagem na Fila de Entrada, analisando-a com anti-vírus, spamassssim e outras regras do próprio MailScanner.
      Caso algum anexo esteja contaminado com vírus ou o tipo do anexo não é permitido, o anexo é removido do email e colocado em quarentena no servidor. Um alerta é inserido na mensagem, informando que o anexo foi removido.
      O SpamAssassim verifica a mensagem através de várias regras, entregando o resultado para o MailScanner, que decide o que fazer com a mensagem, que pode ser entregá-la normalmente, marcar como um possível spam, marcar como spam, ou mover a mensagem para quarentena.
    • Caso o email tenha passado pelos testes, ele é entregue para a fila de entrega.
    • Então o programa de entrega de email pega a mensagem da fila.
      Caso a entrega seja local, ela deposita a mensagem na caixa de entrada do usuário, caso contrário ele se conecta com o servidor remoto para entregar o email.

    Toda essa transação fica gravada em arquivos de log, para uma possível verificação de algum tipo de erro na entrega da mensagem.

    O POP

    O POP (Post Office Protocol) é o protocolo para baixar as mensagens do servidor para o seu programa de email. Atualmente a versão 3 é utilizada, sendo conhecido como POP3.

    É também um protocolo bem simples, o programa de email deve se conectar ao servidor na porta 110, na qual algum programa POP SERVER estará escutando e informar os seguintes parâmetros:

  • user: usuario
  • pass: senha

    Estando os dados corretos a caixa postal do usuário em questão é aberta, e o programa de email deve enviar novos comandos para o servidor para listar, pegar ou deletar as mensagens.

  • LIST
  • RETR 1
  • DELE 1
    Respectivamente.

    Toda essa transação também fica grava em arquivos de log.

    Outros detalhes

    Além desses dois protocolos existe o IMAP, é similar ao POP, porém é mais complexo, e permite o manuseio e armazenamento das mensagens no servidor.

    Todos os protocolos citados acima não oferecem muita segurança, os dados são transmitidos sem criptografia, até mesmo as senhas, ficando exposto para qualquer um que esteja "escutando" a transação.
    Porém todos eles possuem suas versões que utilizam criptografia, normalmente a porta no servidor será outra, para que ambos os serviços possam estar disponíveis no mesmo servidor.

    Administrador de sistemas

    O Administrador de sistemas é responsável por criar, deletar e verificar problemas com as contas de email.

    Para adicionar uma conta, criamos o usuário no sistema, como este é um usuário de email, ele não deve ter permissão de se logar na máquina. Para muitos sistemas essa operação já basta, porém alguns servidores possuem mais de um domínio, sendo necessário a utilização de domínio virtual, que nada mais é do que um arquivo indicando qual email está relacionado com qual usuário.

    Para deletar uma conta, basta remover o usuário, juntamente com sua caixa postal e, caso necessário, remover a identificação do email para o usuário no arquivo para domínios virtuais.

    Segue alguns problemas com possíveis soluções:

    • Problema: Email enviado para usuário do servidor não chegou.
      Possível causa: Email foi bloqueado. Para descobrir isso devemos analisar o log. Segue um exemplo de email bloqueado:
      Feb 1 06:33:59 noxygen postfix/smtpd[31440]: NOQUEUE: reject: RCPT from unknown[222.107.66.153]: 554 Service unavailable; Client host [222.107.66.153] blocked using dnsbl-1.uceprotect.net; Sorry 222.107.66.153 is Level 1 listed at UCEPROTECT-NETWORK. See http://www.uceprotect.net/rblcheck.php?ipr=222.107.66.153; from=<hcbnamCrDm@mail.ru> to=<marilane.voz@academiaconcerto.art.br> proto=ESMTP helo=<mx.plala.or.jp>
      Podemos ver que o email de hcbnamCrDm@mail.ru para marilane.voz@academiaconcerto.art.br foi bloqueado e o motivo foi que ele está na lista negra: http://www.uceprotect.net/rblcheck.php?ipr=222.107.66.153
      Caso o email hcbnamCrDm@mail.ru não seja spam, então devemos colocar o IP 222.107.66.153 ou alguma faixa de IPs na lista branca no servidor, assim o email será aceito no próximo envio.
    • Problema: Email partindo do servidor não chegou ao destino.
      Possível causa: Servidor de destino bloqueou a entrega, segue exemplo de um bloqueio:
      Feb 1 06:24:07 noxygen postfix/smtpd[30001]: 7D9FE1140523: client=host2-252-static.29-87-b.business.telecomitalia.it[87.29.252.2]
      Feb 1 06:24:08 noxygen postfix/cleanup[31349]: 7D9FE1140523: hold: header Received: from [87.29.252.2] (host2-252-static.29-87-b.business.telecomitalia.it [87.29.252.2])??by noxygen.communiplex.net (Postfix) with ESMTP id 7D9FE1140523??for <3dfran@urp.com.br>; Thu, 1 Feb 2 from host2-252-static.29-87-b.business.telecomitalia.it[87.29.252.2]; from=<tifa@ersi-usa.com> to=<3dfran@urp.com.br> proto=ESMTP helo=<[87.29.252.2]>: PARA_QUEUE_MAILSCANNER
      Feb 1 06:24:08 noxygen postfix/cleanup[31349]: 7D9FE1140523: warning: header Received: from FMNTF (unknown [140.180.23.72])??by ersi-usa.com with ESMTP id 488E13A487D1??for <3dfran@urp.com.br>; Thu, 1 Feb 2007 09:24:34 +0100 (GMT) from host2-252-static.29-87-b.business.telecomitalia.it[87.29.252.2]; from=<tifa@ersi-usa.com> to=<3dfran@urp.com.br> proto=ESMTP helo=<[87.29.252.2]>: OUTROS_RECEIVED
      Feb 1 06:24:08 noxygen postfix/cleanup[31349]: 7D9FE1140523: message-id=<000901c745da$52550880$00000000@Daniele>
      Feb 1 06:24:16 noxygen MailScanner[20430]: Requeue: 7D9FE1140523.99C8B to 86E101140559
      Feb 1 06:24:16 noxygen postfix/qmgr[26863]: 86E101140559: from=<tifa@ersi-usa.com>, size=12894, nrcpt=1 (queue active)
      Feb 1 06:24:17 noxygen postfix/smtp[32168]: 86E101140559: to=<3dfran@urp.com.br>, relay=gateway.urp.com.br[200.233.50.41], delay=13, status=bounced (host gateway.urp.com.br[200.233.50.41] said: 550 <3dfran@urp.com.br>: Recipient address rejected: User unknown in virtual alias table (in reply to RCPT TO command))
      Feb 1 06:24:17 noxygen postfix/qmgr[26863]: 86E101140559: removed
      Nesse caso, um email partindo de tifa@ersi-usa.com foi entregue para nosso servidor, com destino a 3dfran@urp.com.br, porém quando nosso servidor foi entregar para o MX primário do domínio urp.com.br, o email foi recusado, pois o email não existe.
      Nosso servidor aceito essa entrega pois é MX secundário desse domínio(urp.com.br).
      Em azul destaquei os IDs da mensagem, muito úteis para seguir a transação no log. Note que quem altera o ID da mensagem é o MailScanner, pois ele é o responsável por mudar a mensgem de fila.
      Para pegar essas linhas utilizei o comando:
      #> tail -10000 /var/log/maillog | egrep -i "86E101140559|7D9FE1140523"
    • O anexo da mensagem foi removido da mensagem, porém era importante.
      Junto com o email enviado ao usuário, vai uma mensagem informando onde o anexo foi guardado no servidor. Para que o usuário tenha acesso ao anexo, basta o administrador enviar o anexo sem que ele passe pelo MailScanner.
    • Outros problemas podem ser falha na rede que liga o cliente com o servidor, o firewall está bloqueando o IP remoto, o IP remoto não tem permissão de relay, etc...

  • Daniel Manuel Rey Fernandes - 2006