====== Serviços de e-mail ====== O objetivo desta aula é compreender melhor os serviços oferecidos pelo sistema operacional para o suporte de e-mail, através de experiências utilizando clientes e servidores de e-mail. ===== Infraestrutura ===== A infra-estrutura de transporte de e-mail na Internet funciona através da interação entre diferentes agentes, como nos mostra a figura a seguir: {{ :espec:mail-fluxo.gif |}} Os principais elementos desse trajeto são: * **MUA** - //Mail User Agent//: o programa que o usuário acessa para compor seu e-mail. Exemplo: Outlook, Netscape, Eudora, Pine, Kmail, etc. * **MTA** - //Mail Transport Agent//: recebe o e-mail do MUA e o envia a outros MTA, para que seja entregue ao destinatário. O principal MTA em UNIX é o [[http://www.sendmail.org|SendMail]], mas existem também o [[http://www.qmail.org|QMail]] , [[http://www.postfix.org|Postfix]], [[http://www.exim.org|Exim]] e outros. * **MDA** - //Mail Delivery Agent//: recebe o e-mail do MTA e o deposita na caixa de correio do usuário. O MDA default do Linux é o //procmail//, mas existem diversos outros. * **MAA** - //Mail Access Agent//: permite ao MUA o acesso aos e-mails que estão na caixa de correio do usuário. Na prática, esta função é exercida pelos servidores POP3 e/ou IMAP. ===== Protocolos ===== O serviço de e-mail usa vários protocolos para o transporte das mensagens entre remetentes e destinatários. O protocolo **SMTP** - //Simple Mail Transfer Protocol// é o protocolo responsável pelo envio do e-mail do cliente (MUA) ao servidor (MTA) e deste para outros servidores, até chegar ao servidor de destino. Para consultar os e-mails armazenados no servidor, o cliente (MUA) utiliza os protocolos **POP3** (//Post-Office Protocol v3//) e **IMAP** (//Internet Message Access Protocol//), cujas principais características são: * POP3: * Usa a porta 110/TCP ou 995/TCP (versão segura POP3S). * Considera apenas uma pasta no servidor (a pasta INBOX). * Por default descarrega as mensagens do servidor no cliente. * não permite carregar mensagens de volta no servidor (//upload//). * IMAP: * Usa a porta 143/TCP ou 993/TCP (versão segura IMAPS) * Pode manter diversas pastas no servidor, além da INBOX. * Por default mantém as mensagens no servidor. * Pode movimentar mensagens em ambas as direções (entre pastas no cliente e no servidor). Normalmente o uso de POP3 é mais indicado quando os usuários são estáticos, ou seja, cada um possui seu computador e só acessa seu e-mail a partir dele. POP3 é um protocolo leve e que não mantém conexão constante com o servidor. O uso de IMAP é indicado quando os usuários são "nômades", usando vários computadores diferentes. Todavia, este protocolo exige mais recursos de CPU, disco e memória do servidor. A conexão IMAP normalmente é mantida enquanto durar a sessão de trabalho do usuário. Este protocolo é muito usado em ambientes de WebMail, para os acessos do servidor Web ao servidor de e-mail. ===== O Servidor de e-mail ===== Os servidores de e-mail (MTAs) funcionam segundo um princípio "store and forward". Isso significa que um MTA recebe cada mensagem integralmente e a deposita em um diretório temporário, para somente então passá-la adiante, seja a um outro MTA ou ao MDA, se o destinatário for um usuário local. Cada transmissão fica registrada em uma linha ''Received'' do cabeçalho do e-mail. Esse procedimento garante a entrega da mensagem ao destinatário, sem possibilidade de perdas na transmissão. {{ :espec:mail-store-forward.gif |}} O //daemon// ''sendmail'' é lançado durante a inicialização (//boot//) da máquina, e opera em modo mestre-escravo. O processo mestre ouve a porta 25/TCP; para cada pedido de conexão, ele cria um novo processo escravo para tratar do pedido. Os principais arquivos e diretórios de um sistema de e-mail SMTP UNIX típico são: * ''/etc/sendmail.cf'' : arquivo de configuração do MTA Sendmail * ''/etc/aliases'' : aliases globais de e-mail * ''/etc/mail/*'' : arquivos de controle de acesso ao sendmail (spam, relay, etc). * ''/var/spool/mail'' : diretório das caixas de entrada (//inbox//) dos usuários. cada usuário contém uma caixa de entrada na forma de um arquivo texto com seu nome de login (por exemplo: ''/var/spool/mail/maziero''). * ''/var/spool/mqueue'' : fila de mensagens em trânsito, recebidas de MUAs ou de MTAs e esperando o envio a outros MTAs. cada mensagem é representada por um arquivo de controle e um arquivo de conteúdo. A fila pode ser visualizada através do comando ''mailq''. * ''/var/log/maillog'' : arquivo de log, contendo os registros das trocas de mensagens efetuadas. O MDA é o processo que efetua a entrega dos e-mails aos usuários locais. No Linux normalmente é usado o [[http://www.procmail.org|procmail]], que permite uma grande flexibilidade na entrega de e-mail, como: * redireção automática, através do arquivo ''$HOME/.forward''. * separar os e-mails recebidos por folders, de acordo com suas caracteristicas. * filtrar e-mails com virus ou outros problemas. A configuração do //procmail// é feita através do arquivo ''/etc/procmailrc'' (sistema) e ''$HOME/.procmailrc'' (usuário). ===== Formato do e-mail ===== Um e-mail é visto pelos processos e protocolos como um texto em formato ASCII padrão (texto puro, sem acentos, figuras ou caracteres de controle). Cada e-mail é composto de duas seções principais: * o **cabeçalho** (//header//), que contém informações sobre a origem, destino, trajeto, datas e formato das informações contidas no e-mail; * o **corpo** (//body//), que contém a mensagem propriamente dita, eventualmente com anexos. O cabeçalho é separado do corpo do e-mail por uma linha vazia (equivalente a "\n\n" em linguagem C): header line header line ... header line <--- (linha vazia separando cabeçalho e corpo) body line body line body line ... O exemplo a seguir ilustra um e-mail típico no formato em que ele é armazenado e transportado nos sistemas de e-mail: Return-path: Delivery-date: Sun, 15 Jun 2008 11:38:00 -0300 Received: from [64.12.138.210] (helo=imr-m08.mx.aol.com) by ppgia.pucpr.br with esmtp (PPGIA PUCPR) id 1K7tMl-00067J-55 for ; Sun, 15 Jun 2008 11:38:00 -0300 Received: from imo-d20.mx.aol.com (imo-d20.mail.aol.com [172.18.157.194]) by imr-m08.mx.aol.com (v107.10) with ESMTP id RELAYIN9-a4855293039a; Sun, 15 Jun 2008 10:37:36 -0400 Received: from frank210@switched.com by imo-d20.mx.aol.com (mail_out_v38_r9.4.) id t.ccf.32ac7044 (37097); Sun, 15 Jun 2008 10:37:30 -0400 (EDT) Received: from User ([82.128.35.119]) by cia-db07.mx.aol.com (v121.5) with ESMTP id MAILCIADB077-90e948552919370; Sun, 15 Jun 2008 10:37:25 -0400 Reply-To: From: "Mark" Date: Sun, 15 Jun 2008 16:37:24 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="Windows-1251" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 X-AOL-IP: 172.18.157.194 To: maziero@ppgia.pucpr.br Message-ID: X-Spam-Flag:YES X-Spam-Score: 5.1 (+++++) X-Virus-Scanned: Verificado contra virus. Subject: [***SPAM***] Second notice THIS IS FOR YOUR ATTENTION. We wish to notify you again that you were listed as a beneficiary to the total sum of Ј10,600,000.00GBP (Ten Million Six Hundred Thousand British Pounds) in the codicil and last testament of the deceased. (Name now withheld since this is our second letter to you). We contacted you because you bear the surname identity and therefore can present you as the beneficiary to the inheritance. We therefore reckoned that you could receive these funds as you are qualified by your name identity. All the legal papers will be processed in your acceptance. In your acceptance of this deal, we request that you kindly forward to us your letter of acceptance; your current telephone and fax numbers and a forwarding address to enable us file necessary documents at our high court probate division for the release of this sum of money. Please call me on +447045769387 so that we can get this done immediately. Kind regards, Frank Mark. Algumas observações devem ser feitas sobre este exemplo: * A primeira linha vazia (em branco) separa o cabeçalho do corpo da mensagem; as demais linhas em branco fazem parte do corpo da mensagem. * As linhas de cabeçalho têm sempre um formato "''Field: value''" ou "''Field: value; complement''". * Linhas do cabeçalho muito longas podem ser quebradas em duas ou mais linhas; para indicar isso, as linhas de continuação são identadas em relação à primeira linha (como mostram as linhas "''Received''" e "''Content-type''"; * O formato e os campos das linhas de cabeçalho são padronizados pelas RFCs [[http://tools.ietf.org/html/rfc2821|2821]] e [[http://tools.ietf.org/html/rfc2822|2822]]; somente os campos que iniciam com "''X-''" (como "''X-AOL-IP:''") podem ser definidos ou ajustados por fabricantes ou softwares específicos. Os principais campos do cabeçalho de um e-mail são: ^ Campo ^ Significado ^ | ''From'' | Endereço de origem | | ''To'' | Endereço de destino principal| | ''Cc'' | Enviar cópia da mensagem para este endereço (//Carbon-copy//) | | ''Bcc'' | Enviar cópia da mensagem para este endereço (//Blind carbon-copy//), sem revelar quem são os outros destinários da mensagem; os destinatários receberão uma mensagem com a linha de cabeçalho "''Cc: undisclosed recipients''" | | ''Reply-To'' | Endereço para onde enviar uma resposta | | ''Return-path'' | Endereço do remetente informado pelo último MTA | | ''Received'' | Indica um "salto" do e-mail entre servidores; as linhas ''Received'' são adicionadas ao cabeçalho do e-mail a cada operação de transferência entre MTAs ou MUA, de baixo para cima (ou seja, a primeira linha ''Received'' indica a última transferência realizada | | ''Delivery-date'' | Data da entrega do e-mail na caixa de entrada do destinatário | | ''Date'' | Data de envio do e-mail | | ''Subject'' | Assunto do e-mail | | ''Message-ID'' | Identificador do e-mail, gerado automaticamente pelo cliente onde o e-mail foi criado e enviado | | ''MIME-Version'' | Informações sobre anexos (vide próxima seção) | | ''Content-Type'' | Informações sobre anexos (vide próxima seção) | | ''Content-Transfer-Encoding'' | Informações sobre anexos (vide próxima seção) | | ''X-*'' | Campos de cabeçalho não normatizados, criados e mantidos por softwares específicos | A visualização do formato nativo de um e-mail pode ser feita facilmente em um cliente de e-mail: basta localizar a opção "exibir código fonte" ou similar. ===== Anexos ===== A necessidade de enviar arquivos através do e-mail levou à definição do padrão MIME (Multipurpose Internet Mail Extensions), no início dos anos 90. Esse padrão da Internet é definido nas RFCs 2045 a 2049, com extensões em outras RFCs mais recentes. Basicamente, o padrão MIME permite codificar arquivos com qualquer conteúdo em formato ASCII puro, para ser enviados pelos protocolos de e-mail convencionais. Os principais aspectos cobertos pelo padrão são: * codificação de textos com caracteres não-ASCII * codificação de arquivos binários * embutimento dos arquivos codificados no corpo dos e-mails Pelas normas, o cabeçalho de um e-mail deve indicar que seu corpo está codificado em formato MIME. Cada seção de um e-mail em formato MIME pode conter um arquivo, um texto ou outro e-mail (que pode, por sua vez, também estar em formato MIME). Dessa forma, um e-mail MIME pode ter uma estrutura multi-nível, como indica o diagrama abaixo: {{ :espec:mail-anexos.png |}} Vejamos como ficaria um e-mail contendo um arquivo anexo ''envelope.gif'' {{:espec:mail-envelope.gif|}}: From maziero@ppgia.pucpr.br Thu Jul 3 15:41:53 2003 Return-Path: Delivered-To: maziero@ppgia.pucpr.br Received: from alias.acm.org (alias.acm.org [199.222.69.90]) by hermes.ppgia.pucpr.br (Postfix) with ESMTP id A954E2B0048 for ; Thu, 3 Jul 2003 15:41:48 -0300 (BRT) Received: from hermes.ppgia.pucpr.br ([200.192.112.141]) by alias.acm.org (ACM Email Forwarding Service) with ESMTP id COB73880 for ; Thu, 03 Jul 2003 14:41:43 -0400 Received: from floripa (ariadne.ppgia.pucpr.br [200.192.112.144]) by hermes.ppgia.pucpr.br (Postfix) with SMTP id 7E3D32B0048 for ; Thu, 3 Jul 2003 15:41:39 -0300 (BRT) From: "Carlos Maziero" To: Subject: Um pequeno anexo Date: Thu, 3 Jul 2003 15:43:51 -0300 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0004_01C34179.E6BD74D0" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.6604 (9.0.2911.0) Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 This is a multi-part message in MIME format. ------=_NextPart_000_0004_01C34179.E6BD74D0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Vamos enviar uma pequena imagem como teste... Maziero ------=_NextPart_000_0004_01C34179.E6BD74D0 Content-Type: image/gif; name="envelope.gif" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="envelope.gif" R0lGODlhFAAUAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh ISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0 NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdH R0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpa WltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1t bW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CA gIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOT k5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaam pqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5 ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM zM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f 3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy 8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///yH+Dk1hZGUgd2l0aCBHSU1Q ACH5BAEKAAEALAAAAAAUABQAAAhuAAMIHEiwoMGDCBMqXMiwoUIAECNKnBhRIMR/GDNq1AgxUgAA /0BuHAkgUsmPGEWOTBkppEeVKjeWZIkyY0yWNl9yjDkzZ82QKXHC1AnUZs+iJ0HeXKn05dKVIZNS nCrRY4BIWLNq3ZrVodeFAQEAOw== ------=_NextPart_000_0004_01C34179.E6BD74D0-- É importante ressaltar que todo o trabalho de codificação/decodificação dos anexos é efetuado pelos clientes de e-mail (MUAs). Os servidores (MTAs, MDAs e MAAs) continuam a tratar os e-mails como textos no padrão ASCII. Vejamos outro exemplo, com um e-mail no formato HTML: From jamhour@ppgia.pucpr.br Thu Jul 3 13:53:27 2003 Return-Path: Delivered-To: maziero@ppgia.pucpr.br Received: from darkhal (ftp.ppgia.pucpr.br [200.192.112.144]) by hermes.ppgia.pucpr.br (Postfix) with ESMTP id 88C932B0049; Thu, 3 Jul 2003 13:53:27 -0300 (BRT) From: "Edgard Jamhour" To: , Subject: Aula de Web Date: Thu, 3 Jul 2003 13:56:43 -0300 Message-ID: <000d01c34184$14fd77f0$2d01200a@darkhal> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_000E_01C3416A.EFB03FF0" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook, Build 10.0.2627 Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Status: RO X-Status: X-Keywords: X-UID: 43082 This is a multi-part message in MIME format. ------=_NextPart_000_000E_01C3416A.EFB03FF0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable A pedido dos senhores, estou mandando um email para confirmar a seguinte altera=E7=E3o. Hoje dia 03/06 (Quinta) o Maziero substituir=E1 o Scalabrin na aula de Desenvolvimento Web. No dia 16/06 (Quarta), o Scalabrin dar=E1 aula no lugar do Maziero, reequilibrando o cronograma. Edgard Jamhour, PPGIA, PUC-PR - Pontif=EDcia Universidade Cat=F3lica do Paran=E1=20 Phone: +55 (41) 3301675 Phone: +55 (41) 3301669 http://www.ppgia.pucpr.br/~jamhour/ =20 ------=_NextPart_000_000E_01C3416A.EFB03FF0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Aula de Web

A pedido dos senhores, estou mandando = um email para confirmar a seguinte altera=E7=E3o.

Hoje dia 03/06 (Quinta) o Maziero = substituir=E1 o Scalabrin na aula de Desenvolvimento Web.

No dia 16/06 (Quarta), o Scalabrin = dar=E1 aula no lugar do Maziero, reequilibrando o cronograma.

Edgard Jamhour,
PPGIA, PUC-PR - Pontif=EDcia Universidade = Cat=F3lica do Paran=E1
Phone: +55 (41) 3301675=A0 Phone: +55 = (41) 3301669
http://www.ppgia.pucpr.br/~jamhour/<= /A>
=A0 ------=_NextPart_000_000E_01C3416A.EFB03FF0--
Muitos vírus e worms usam características (e bugs) do suporte MIME para se propagar. Veja um [[e-mail com o worm Klez.H]]. O que parece estranho nele? ===== O MTA Postfix ===== O servidor de e-mail **Postfix** é conhecido por sua robustez, segurança, eficiência e facilidade de operação. Ele vem sendo distribuído junto à maioria das distribuições Linux, embora também possa ser facilmente instalado em outros ambientes UNIX. Suas principais características são: * Um processo //master// executa em modo privilegiado (usuário //root//), lançando filhos não-privilegiados (usuário postfix) para executar todas as tarefas necessárias ao envio, recepção, entrega e filtragem de e-mail. * Cada função do MTA (receber e-mail via rede, receber e-mail local, entregar e-mail remoto, etc) é tratada por um processo filho distinto. * Arquitetura construída visando escalabilidade e segurança. Os principais arquivos/diretórios do Postfix em uma instalação Linux padrão são: * ''/etc/postfix'' : diretório de configuração * ''main.cf'' : arquivo principal de configuração * ''access'' : controle de acesso * ''aliases'' : aliases (sinônimos) de nomes locais * ''/var/spool/mail'' : caixas de correio dos usuários locais * ''/var/spool/postfix'' : diretório de operação dos daemons (ambiente restrito chroot) * ''etc'' : arquivos de configuração das bibliotecas no ambiente restrito * ''maildrop'', ''incoming'', ''deferred'', ... : diretórios contendo as filas de e-mails Alguns utilitários normalmente oferecidos junto com o Postfix: * ''sendmail'' : implementa a interface do sendmail (para compatibilidade com softwares mais antigos) * ''postqueue'' : gerencia as filas de e-mails. * ''postsuper'' : operações de manutenção sobre as filas de e-mail.