Você está na página 1de 66

Tecnologias de Correio Eletrnico: o Postx et al.

Reinaldo Gil Lima de Carvalho

Postx et al.

Sumrio a
Sumrio a 1 Introduo ao curso ca 1.1 Licena do material . . . . . . . . . . . . . . . . . . . . . . . c 1.2 Distribuiao de software . . . . . . . . . . . . . . . . . . . . c 1.2.1 Software obtido na forma de executvel (compilado): a 1.2.2 Software obtido a partir do cdigo fonte . . . . . . . o 1.3 Debian GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . 2 Correio Eletrnico o 2.1 Request for Comments (RFC) . . . . . . . . . . . . 2.2 Agentes . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Internet Message Format (RFC5322) . . . . . . . . 2.3.1 Interaao com cabealhos . . . . . . . . . . c c 2.4 Simple Mail Transfer Protocol - SMTP (RFC5321) 2.5 Cdigos de retorno . . . . . . . . . . . . . . . . . . o 2.6 Postmaster e Abuse . . . . . . . . . . . . . . . . . . 2.7 Email e DNS . . . . . . . . . . . . . . . . . . . . . 2.7.1 Consultas de DNS . . . . . . . . . . . . . . 3 Saslauthd 3.1 Instalaao . . c 3.2 Parmetros de a 3.3 Congurao ca 3.4 Autenticao ca 2 5 5 6 6 6 7 8 8 9 10 10 12 13 13 13 15 16 17 17 17 18 19 19 20 20 21 22 22 22 25 25 26 27 27 28 28 2

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . execuo ca . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

4 Cyrus 4.1 Instalaao . . . . . . . . . . . . . . . . . . c 4.2 Congurao . . . . . . . . . . . . . . . . ca 4.2.1 /etc/cyrus.conf . . . . . . . . . . . 4.2.2 /etc/imapd.conf . . . . . . . . . . . 4.3 Administrador . . . . . . . . . . . . . . . . 4.4 Administraao . . . . . . . . . . . . . . . . c 4.4.1 Protocolo IMAP . . . . . . . . . . 4.4.2 Cyradm . . . . . . . . . . . . . . . 4.4.3 Cyruslib . . . . . . . . . . . . . . . 4.5 IMAP Partitions . . . . . . . . . . . . . . 4.6 Caixas postais globais . . . . . . . . . . . 4.6.1 Postagens em caixas postais globais 4.7 Sieve . . . . . . . . . . . . . . . . . . . . . 4.7.1 Manage Sieve . . . . . . . . . . . .
Postx et al.

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

Postx et al. 4.8 Criptograa . . . . . 4.8.1 Ativando TLS 4.8.2 Ativando SSL Mail User Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Sumrio a . . . . . . . . . . . . 29 29 29 29 31 31 31 32 33 33 33 34 34 35 36 36 37 39 43 43 44 44 44 45 45 45 46 47 47 47 47 49 50 50 50 50 51 51 51 51 52 52 52

4.9

5 Postx: introduo ca 5.1 Histria . . . . . . . . . . . . . . . . . . . o 5.2 Caracter sticas . . . . . . . . . . . . . . . 5.3 Avanos . . . . . . . . . . . . . . . . . . . c 5.4 Componentes . . . . . . . . . . . . . . . . 5.4.1 Diagrama de interao dos mdulos ca o 5.4.2 Filas de mensagens . . . . . . . . . 5.4.3 Recepo de mensagens locais . . . ca 5.4.4 Recepo de mensagens via rede . . ca 5.4.5 Entrega local de mensagens . . . . 5.5 Instalaao . . . . . . . . . . . . . . . . . . c 5.5.1 Arquivos e utilitrios instalados . . a 5.5.2 main.cf . . . . . . . . . . . . . . . . 5.5.3 master.cf . . . . . . . . . . . . . . . 6 Postx: integraoes c 6.1 Integrao com Saslauthd . . . . . . . . ca 6.1.1 Mtodo de Autenticao PLAIN . e ca 6.1.2 Mtodo de Autenticao LOGIN e ca 6.2 Integrao com OpenLdap . . . . . . . . ca 6.3 Integrao com Cyrus . . . . . . . . . . . ca 6.4 Criptograa . . . . . . . . . . . . . . . . 6.4.1 Ativando TLS . . . . . . . . . . . 6.4.2 Ativando SSL . . . . . . . . . . . 7 Postx: restries co 7.1 Desabilitando comando VRFY . . . . 7.2 Endereos restritos . . . . . . . . . . c 7.3 Sender Policy Framework - SPF . . . 7.4 Greylist . . . . . . . . . . . . . . . . 7.5 Restrioes de cabealho . . . . . . . . c c 7.6 Restrioes de contedo . . . . . . . . c u 7.7 Restrioes de IP e reverso. . . . . . . c 7.8 Restrioes de helo . . . . . . . . . . . c 7.9 Restrioes de remetente . . . . . . . . c 7.10 Restrioes de destinatrios . . . . . . c a 7.11 Restrioes aps comando DATA . . . c o 7.12 Restrioes condicionais . . . . . . . . c 7.13 Restrioes de conexes . . . . . . . . c o 7.14 Restrioes de conexes por per c o odo de 7.15 Restrioes do tamanho da mensagem c

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tempo . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

Reinaldo de Carvalho - reinaldoc@gmail.com

Postx et al.

Sumrio a

8 Postx: las de entrega 8.1 Fila deferred . . . . . . . . . 8.2 Fila corrupt . . . . . . . . . 8.3 Ferramentas da la . . . . . 8.4 Listando a la . . . . . . . . 8.5 Removendo mensagens . . . 8.6 Retendo mensagens . . . . . 8.7 Reprocessando mensagens . 8.8 Exibindo o contedo de uma u

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . mensagem

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

53 54 54 54 54 55 55 56 56

9 Webmail 57 9.1 SquirrelMail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 9.2 RoundCube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 10 Utilitrios e ferramentas administrativas a 10.1 Como detectar e evitar gargalos . . . . . 10.2 Dimensionando o hardware . . . . . . . . 10.3 Como identicar o uso do disco . . . . . 10.4 Vericando o Postx com qshape . . . . Referncias Bibliogrcas e a A Licena c 61 61 61 62 63 65 66

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

Reinaldo de Carvalho - reinaldoc@gmail.com

Cap tulo 1 Introduo ao curso ca


Seja bem-vindo ao Curso de Tecnologias de Correio eletrnico. Este curso esta sendo fomentado o pela Centro de Tecnologia da Informao e Comunicao - CTIC da Universidade Federal do Par ca ca a e ministrado por Reinaldo Gil Lima de Carvalho. Realiza(ou)-se de 21/03/2011 a 01/04/2011. Os procedimentos descritos neste material foram validados sob a distribuio Debian GNU/Linux ca Lenny, todavia a base terica ministrada o conhecimento fundamental para a aplicabilidade dos o e procedimentos tcnicos sob qualquer sistema operacional. e Apesar das peculiaridades de cada sistema operacional o contedo ser abordado de forma isenta, u a para que o participante tenha a possibilidade de utilizar o conhecimento adquirido no ambiente que lhe for mais adequado. Neste cap tulo, sero abordados os seguintes temas: licenciamento deste material, origem do a software utilizado (executvel ou do cdigo fonte) e conguraoes essenciais da distribuiao Debian a o c c GNU/Linux.

1.1

Licena do material c

Todas as marcas registradas so de propriedade de seus respectivos detentores, sendo apenas citadas a de forma educacional neste material. O ministrante nem a fomentadora responsabilizam-se por danos causados devido a utilizao das ca informaoes tcnicas contidas neste material. No h garantias de que este material est livre de c e a a a erros, assim como, todos os sistemas em produo devem possuir backup antes de sua manipulao. ca ca Este material esta licenciado sobre a GNU Free Documentation License - GFDL ou Licena c de Documentao Livre GNU conforme descrito a seguir: ca Copyright (c) 2007-2012 Reinaldo Gil Lima de Carvalho - reinaldoc@gmail.com garantida a permiss~o para copiar, distribuir e/ou modificar este documento E a sob os termos da Licena de Documentaao Livre GNU (GNU Free Documentation c c~ License) Vers~o 1.2, publicada pela Free Software Foundation; com todas Seoes a c~ Secundrias Invariantes incluindo textos de Capa Frontal, e sem Textos de Quarta a Capa. Uma cpia da licena includa na seao intitulada "GNU Free Documentation o c e c~ License" ou "Licena de Documentaao Livre GNU". c c~ A Licena de Documentao Livre GNU permite que todo contedo esteja livre para cpia c ca u o e distribuiao, assim como, protege a propriedade autoral. O objetivo garantir que o conhecimento c e seja livre, assim como, garantir o reconhecimento ao autor. O autor recomenda ainda que este material seja sempre distribu como est, no formato original. Contribuioes e sugestes de do a c o melhorias sobre este material podem ser enviadas ao autor e sero sempre bem vindas. a
Postx et al.

Postx et al.

Cap tulo 1. Introduo ao curso ca

1.2

Distribuio de software ca

O acesso ao cdigo fonte do software e sua compilao, uma consequncia da liberdade propiciada o ca e e por um software livre. Entretanto, o software tambm pode ser obtido em forma executvel (come a pilada), e integrada ao sistema operacional (empacotado), j estando pronto para utilizaao. Cada a c uma destas opes possui vantagens e desvantagens que sero resumidas a seguir: co a

1.2.1

Software obtido na forma de executvel (compilado): a

V: Instalaao rpida que requer menos espao em disco, tornando desnecessrio a instalao c a c a ca de software de compilaao (ex: make, gcc) e cabealhos de bibliotecas (ex: libc6-dev). c c V: Evita a compilaao do software e a necessidade de conhecimentos sobre programaao e c c compiladores. V: Instalaao automatizada de software e de bibliotecas necessrias (dependncias) para o c a e funcionamento do software principal. V: Verso testada pelo distribuidor do software (em geral o distribuidor do sistema operacional), a e possivelmente livre de erros. V: Possibilita atualizaoes e correes de falhas de segurana de forma automtica, e fornecida c co c a pelo distribuidor do sistema operacional. V: Facilita suporte externo devido ao mtodo de instalaao padronizado e utilizao de verses e c ca o invariantes do software. V/D: Pode no ser a verso mais recente do software, e consequentemente no possuir as a a a funcionalidades recm criadas. Todavia, verses maduras tendem a ser mais estveis. e o a

1.2.2

Software obtido a partir do cdigo fonte o

D: Instalaao mais complexa e demorada, demanda instalao manual de bibliotecas externas, c ca e conhecimentos sobre programao de compiladores. ca D: Atualizaes e correes so manuais, exigindo ateno diria `s atualizaoes necessrias co co a ca a a c a para correoes de falhas de segurana. c c D: Diculta suporte externo pois no um mtodo de instalao padronizado. a e e ca V/D: Permite utilizar a ultima verso do software, com os novos recursos, mas trata-se de a cdigo menos testado podendo possuir falhas no detectadas. o a V: Pode permitir um ganho de performace com a compilao com otimizaes do processador, ca co e tambm com o desligamento de recursos no utilizados do software. e a Aps o levantamento destas caracter o sticas, percept que ambientes corporativos demandam e vel a utilizaao de software fornecido por um distribuidor, sendo essencial para a disponibilidade dos c sistemas. A utilizaao de um distribuidor de software otimiza o esforo empregado para manter o parque c c tecnolgico atualizado e livre de falhas, sendo este servio fornecido sem custos por organizaoes o c c como o Debian. Dessa forma, o treinamento utilizar os pacotes fornecidos pelo distribuidor do sistema operacional a escolhido.
Reinaldo de Carvalho - reinaldoc@gmail.com

Postx et al.

Cap tulo 1. Introduo ao curso ca

1.3

Debian GNU/Linux

Os sistemas operacionais baseados em tecnologias livres tendem a fornecer software que realizam instalaoes automatizadas. O Debian fornece os utilitrios apt-get e aptitude para esta funcionalc a idade, sendo o segundo, sucessor e atualmente de uso recomendado. O Debian fornece repositrios web que contm os software dispon o e veis para instalao, e estes ca so distribu a dos em forma de pacotes: arquivos compactados com rotinas de pr/ps instalaao e e o c remoao, e informaes sobre dependncias, recomendaoes e sugestes de software adicionais. c co e c o O comportamento padro do utilitrio aptitude ao instalar um software realizar a instalao das a a e ca dependncias, e tambm daqueles especicados como recomendaoes. Entretanto, este compore e c tamento induz a instalaao de software no requeridos, e demanda a utilizaao de espao em disco c a c c adicional. A instalao automtica de software recomendado pode ser desabilitada atravs da adiao da ca a e c conguraao abaixo ao arquivo /etc/apt/apt.conf: c Debian Etch (aptitude 0.4.4): Aptitude::Recommends-Important "false"; Debian Lenny (aptitude 0.4.11) ou Squeeze (aptitude 0.6.3): Apt::Install-Recommends "false"; O utilitrio aptitude tambm requer a congurao da fonte dos software a serem instalados, e a e ca isto realizado no arquivo /etc/apt/sources.list, conforme indicado no quadro abaixo. e deb http://ftp.br.debian.org/debian lenny main contrib non-free deb http://security.debian.org/ lenny/updates main Caso a conectividade seja fornecida por um proxy via http, a seguinte congurao deve ser ca adicionada ao arquivo /etc/apt/apt.conf, com a devida adequaao ao endereo IP do proxy: c c Acquire::http::Proxy "http://172.16.0.1:3128/"; Aps a denio das fontes, necessrio o download da lista de software dispon o ca e a veis, que formada e por informaes como verso e descrio de cada software. Esse download deve ser realizado atravs co a ca e do comando: # aptitude update A lista de software dispon veis pode ser consultada, como indicado no exemplo abaixo: Pesquisar pelo nome do software: # aptitude search postfix Pesquisar nas descries do software, equivalente ao apt-cache search postx: co # aptitude search ~dpostfix Maiores informaoes sobre um determinado software podem ser obtidas como indicado a seguir: c # aptitude show postfix

Reinaldo de Carvalho - reinaldoc@gmail.com

Cap tulo 2 Correio Eletrnico o


O envio e recebimento de mensagens de correio eletrnico baseado em padres que especicam o e o o formato da mensagem (ex: RFC5322 e RFC2045), a forma de transmisso entre dom a nios (ex: RFC5321) e localmente (ex: RFC2033 e RFC3848), e o armazenamento de e-mail at a aquisiao da e c mensagem (ex: RFC1939 e RFC3501) pelo usurio nal. Nesse cap a tulo conceitos sobre estes temas sero abordados. a

Figura 2.1: Mensagens de correio eletrnico. o

2.1

Request for Comments (RFC)

A especicaao dos protocolos necessrios para a transmisso de mensagens eletrnicas so publicadas c a a o a pelo Internet Engineering Task Force (IETF) atravs de documentos Request for Comments (RFC). e Estes contm informaoes detalhadas para a implementaao, comunicao e intereoperabilidade entre e c c ca software de transmisso de mensagens eletrnicas. a o Os documentos de RFC so identicadas por cdigos unicos, sendo que novas publicaoes podem a o c ser realizadas atualizando (updates) verses existentes ou substituindo-as (obsoletes). Uma nova o publicaao recebe um novo cdigo unico. c o Um exemplo desta evoluao das especicaoes, o protocolo de transmisso de mensagens c c e a (SMTP), que foi originalmente publicado na RFC 821, e posteriormente substituido por uma nova especicaao, a RFC 2821, que ao mesmo tempo atualizou a RFC 1123. Atualmente a RFC 5321 a c e

Postx et al.

Postx et al.

Cap tulo 2. Correio Eletrnico o

publicaao mais recente sobre o protocolo SMTP, e deve ser consultada para obtenao de informaes c c co sobre este protocolo. Alm da especicao do protocolo de transmisso de mensagens, tambm padronizado o fore ca a e e mato da mensagem de correio eletrnico. A adequada implementao dos padres elimina as chances o ca o de problemas de comunicao ou m formataao da mensagem, como as falhas de acentuaao. ca a c c Segue a listagem no exaustiva sobre as publicaoes acerca dos protocolos relacionados a transa c misso de mensagens: a Cdigo o RFC 821 RFC 822 RFC 1651 RFC 1652 RFC 1870 RFC 2033 RFC 2034 RFC 2045 RFC 2046 RFC 2554 RFC 2920 RFC 2821 RFC 2822 RFC 3207 RFC 3461 RFC 3463 RFC 5321 RFC 5322 Publicao ca 08/1982 08/1982 07/1994 07/1994 11/1995 10/1996 10/1996 11/1996 11/1996 03/1999 09/2000 04/2001 04/2001 02/2002 01/2003 01/2003 10/2008 10/2008 Descrio ca Simple Mail Transfer Protocol ARPA Internet Text Messages SMTP Service Extensions SMTP Service Extension for 8bit-MIMEtransport SMTP Service Extension for Message Size Declaration Local Mail Transfer Protocol SMTP Service Extension for Returning Enhanced Error Codes Multipurpose Internet Mail Extensions: Message Bodies Multipurpose Internet Mail Extensions: Media Types SMTP Service Extension for Authentication SMTP Service Extension for Command Pipelining Simple Mail Transfer Protocol Internet Message Format SMTP Service Extension for Secure SMTP over TLS SMTP Service Extension for Delivery Status Notications Enhanced Mail System Status Codes Simple Mail Transfer Protocol Internet Message Format Tabela 2.1: Protocolo SMTP

Os documentos pode ser acessados conforme exemplos a seguir: http://tools.ietf.org/html/rfc5321 http://tools.ietf.org/html/rfc5322

2.2

Agentes

Mail User Agent (MUA): software que tem por nalidade a criaao e edio de mensagens c ca (RFC-5322), transmisso ao MTA (RFC-5321), aquisiao de mensagens (RFC-1939 e RFCa c 3501), e exibio destas ao usurio. Exemplos: Mozilla Thunderbird, Evolution e RoundCube ca a Webmail. Mail Transfer Agent (MTA): software que realiza e transmisso e recepao de mensagens a c entre MTAs, e recepao de mensagens de MUAs. Exemplos: Postx, Exim, Qmail. c Mail Delivery Agent (MDA): software que realiza o a entrega nal da mensagem, armazenandoa aps a recepao pelo MTA. Exemplos: postx/local, postx/virtual, procmail, Maildrop, o c cyr-deliver, dovecot-deliver.

Reinaldo de Carvalho - reinaldoc@gmail.com

Postx et al.

Cap tulo 2. Correio Eletrnico o

2.3

Internet Message Format (RFC5322)

A mensagem de correio eletrnico formada por caracteres US-ASCII (no acentuados) e divida em o e a duas seoes: cabealhos (headers section) e corpo (body section). Os cabealhos so identicados por c c c a um campo (eld name) seguido de dois-pontos e o valor do cabealho (eld body). c O valor de um cabealho pode ser representado em formato multi-linhas caso as linhas seguintes c iniciem pelo caracter em branco (espao em branco), e podem conter caracteres codicados em base64 c ou quoted-printable, para o suporte a caracteres acentuados. Cada cabealho possui uma sintaxe quanto ao seu valor, a sintaxe estruturada restritiva e exige c e que um determinado padro seja seguido, j a sintaxe no-estruturada permite o uso de qualquer a a a caracter da codicao US-ASCII imprim ca vel. A maior parte da RFC-5322 trata da deniao de c cabealhos padres e a respectiva sintxe. c o a O corpo de mensagem pode conter qualquer sequncia de caracteres, entretanto os caracteres e CR e LF devem aparecer sempre juntos. Tanto o corpo da mensagem quanto seus cabealhos c possuem tamanho de linha de 998 caracteres. Estas seoes da mensagem so dividas por uma linha c a em branco.
1 2 3 4 5 6 7 8 9 10 11 12 13

Date: Fri, 17 Dec 2010 10:31:11 -0300 From: Reinaldo de Carvalho <reinaldoc@gmail.com> To: Reinaldo de Carvalho <rei@ufpa.br> Reply-To: <reinaldoc@gmail.com> Message-ID: <4a5881460708211230g6e6e22cbi673462324f80f74e@mail.gmail.com> Subject: Mensagem de Teste Oi, Exemplo do corpo da mensagem. -Reinaldo de Carvalho Tarefa: exemplique o uso de caracteres acentuados em um cabealho de mensagem (ex: Subject, c From). Tarefa: exemplique o uso de formataao HTML no corpo de mensagem. Identique como os c MUAs renderizam adequadamente o HTML ao invs de exibir as TAGs ao usurio. e a Tarefa: exemplique o uso de arquivos anexos ao corpo da mensagem. Identique como os MUAs diferenciam os anexos do texto da mensagem.

2.3.1

Interao com cabealhos ca c

A mensagem quando criada pelo Mail User Agent possui inicialmente cabealhos como: Date, From, c To, Reply-To, Message-ID e Subject. Entretanto durante o trajeto ao destinatrio cabealhos adia c cionais so inseridos na mensagem, seja pelo Mail Transfer Agent, como: Received e X-Original-To, a ou pelo Mail Delivery Agent, como: X-Sieve. Procedimento ilustrado na Figura 2.2.

Reinaldo de Carvalho - reinaldoc@gmail.com

10

Postx et al.

Cap tulo 2. Correio Eletrnico o

Figura 2.2: Cabealhos durante a transmisso de mensagens. c a

Os cabealhos podem ser adicionados por qualquer aplicaao que processe a mensagem, como c c MTAs, MUAs, Anti-Spams, Anti-virus, etc. Os principais cabealhos inseridos pelo Mail User Agent c so: a From: o endereo do remetente da mensagem. c Reply-To: o endereo para resposta da mensagem. Ao responder uma mensagem, o MUA c utiliza este endereo como destinatrio da resposta em detrimento ao cabealho From. Em caso c a c de inexistncia deste cabealho, ser utilizado o remetente indicado no cabealho From. e c a c To: o endereo do destinatrio da mensagem. c a Subject: o assunto da mensagem. Message-ID: o cdigo de identicaao da mensagem. Apesar de tender a ser unico, depende o c que o MUA siga o padro estabelecido no item 3.6.4 da RFC 5322, ou seja, no h garantias a a a de unicidade. Date: a data que a mensagem esta pronta para o envio, ou seja, a data em que o usurio clicou a em enviar no Mail User Agent. Este campo depende da conguraao correta do relgio da c o estaao de trabalho que originou a mensagem. c Os principais cabealhos inseridos pelos Mail Transfer Agent so: c a Return-Path: o endereo do remetente utilizado no comando MAIL FROM do protocolo c SMTP. Delivered-To: o endereo utilizado no comando RCPT TO do procolo SMTP. c Received: referncias (hostname, IP, etc) dos Mail Transfer Agents ao qual a mensagem foi e transmitida. Tarefa: identique na RFC-5322 como se d a ordenaao dos cabealhos em uma mensagem. a c c Tarefa: identique na RFC-5322 quais so os cabealhos obrigatrios em uma mensagem. a c o Tarefa: identique na RFC-5322 quando os cabealhos In-Reply-To e References devem ser c utilizados.
Reinaldo de Carvalho - reinaldoc@gmail.com

11

Postx et al.

Cap tulo 2. Correio Eletrnico o

2.4

Simple Mail Transfer Protocol - SMTP (RFC5321)

O protocolo SMTP formado pelos comandos HELO/EHLO, MAIL FROM, RCPT TO, DATA e e QUIT. $ nc smtp.ufpa.br 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

S: C: S: C: S: C: S: C: S: C:

220 muana.ufpa.br ESMTP UFPA HELO origem.exemplo.com.br 250 muana.ufpa.br MAIL FROM:<remetente@exemplo.com.br> 250 Ok RCPT TO:<rei@ufpa.br> 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> From: Nome do Remetente <remetente@exemplo.com.br> To: Reinaldo de Carvalho <rei@ufpa.br> Subject: Teste Email de teste.

. S: 250 Ok: queued as 1C80218000CEA C: QUIT S: 221 Bye 1. HELO/EHLO: contm o nome do host que esta enviando a mensagem; e 2. MAIL FROM: contm o endereo do remetente da mensagem; e c 3. RCPT TO: contm o endereo do destinatrio da mensagem, este comando utilizado para e c a e cada destinatrio; a 4. DATA: indica que transmisso do contedo da mensagem ser realizada a seguir. Sendo a u a nalizada com um ponto .; 5. A mensagem transmitida, sendo esta formada por cabealhos (From, To, Subject) e corpo; e c 6. QUIT: encerra a conexo; a 7. RSET: reinicializa a conexo, indica ao servidor para eliminar informaes transientes; a co 8. STARTTLS: inicia comunicaao criptografada; c 9. VRFY: consulta a existncia de um destinatrio (obsoleto); e a 10. DSN: solicita noticao de entrega ao MTA; ca Os comandos SMTP so utilizados para o encaminhamento da mensagem ao seu destino, j os a a cabealhos da mensagem so utilizados para armazenar informaoes sobre a mensagem e exibio c a c ca dos dados no MUA do receptor.

Reinaldo de Carvalho - reinaldoc@gmail.com

12

Postx et al.

Cap tulo 2. Correio Eletrnico o

2.5

Cdigos de retorno o

Cdigos numricos esto presentes no inic das respostas SMTP, sendo formados por trs d o e a o e gitos, o primeiro d gito tem a seguinte notao: ca 2xx: Requisiao SMTP executada com sucesso. c 3xx: Requisiao SMTP utilizada necessita de complementos. c 4xx: Requisio SMTP no pode ser atendida por indisponibilidade temporria. Tente novaca a a mente (ex: DNS no encontrado). a 5xx: Requisiao SMTP no pode ser atendida por indisponibilidade permanente. No tente c a a novamente (ex: Usurio inexistente). a A tentativa de entrega para um usurio inexistente considerada indisponibilidade permanente, a e enquanto que a tentativa de envio para um dom nio inexistente considerada indisponibilidade e temporria, visto que o problema pode ser causado por um erro de DNS. a Os d gitos subsequentes dos cdigos de retorno detalham o motivo do erro. A verso inicial o a do protocolo SMTP utilizava apenas 3 d gitos, j com a implementaao da RFC-1893 e RFC-2034 a c passou-se a utilizar 6 d gitos, conforme ilustrado a seguir: C: S: C: S: C: S: C: S: MAIL FROM: <remetente@exemplo.com.br> 250 2.1.0 Ok RCPT TO: <rei@ufpa.br> 250 2.1.5 Ok RCPT TO: <nosuchuser@ufpa.br> 550 5.1.1 User unknown RCPT TO: <forwarduser@example.ufpa.br> 551 5.7.1 Forwarding not permited

Tarefa: identique na RFC-5321 qual o signicado de cada um dos trs d e gitos do cdigo de o retorno (reply code). Exemplique. Tarefa: identique na RFC-1893 os seguintes cdigo de retorno (enhanced status code): 5.2.2, o 5.3.4, 4.5.3.

2.6

Postmaster e Abuse

Todo dom nio deve possuir a conta denominada postmaster, que tem por nalidade receber e-mails sem qualquer restrio, sendo util para receber e-mails de dom ca nios que esto sendo rejeitados. Esta a conta deve ser lida periodicamente. Ademais, o MTA local enviar informaes a conta postmaster caso algum problema inesperado a co acontea com a entrega de mensagens, ou ao ocorrer uma falha no sistema. c

2.7

Email e DNS

Os sistemas de e-mails so dependentes do servio de DNS, sendo realizadas diversas consultas tanto a c ao receber quanto ao enviar mensagens, seja para determinar a existncia do dom e nio do remetente, quanto para identicar o endereo IP do servidor de e-mail para a entrega da mensagem. c

Reinaldo de Carvalho - reinaldoc@gmail.com

13

Postx et al.

Cap tulo 2. Correio Eletrnico o

Ao enviar a mensagem, necessrio determinar o endereo IP do servidor de destino da mensagem, e a c utiliza-se prioritariamente o registro MX do dom nio, e caso de inexistncia, obtm-se o registro e e A. Assim, para que um dom nio seja conhecido na Internet, deve-se adicionar o registro MX a conguraao de DNS respectivo dom c nio. No software Berkeley Internet Name Domain (Bind), essa entrada exemplicado abaixo: e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

$TTL 1D @ IN

SOA

IN IN IN IN IN cirio nazare muana IN IN IN

cirio abuse ( 2007080201 ; serial 86400 ; refresh 7200 ; retry 2592000 ; expire 86400 ) ; minimun NS cirio NS nazare A 192.168.100.6 MX 10 muana TXT "v=spf1 ip4:192.168.100.3 -all" 192.168.100.1 192.168.100.2 192.168.100.3

A A A

Pode-se realizar balanceamento da recepao de mensagens atravs do uso de mltiplos registros c e u A, como indicado a seguir:
1 2 3 4 5

IN muana IN IN IN

MX 10 muana A A A 192.168.100.3 192.168.100.4 192.168.100.5

O registro MX permite uso de prioridades, em que realizar-se- a entrega ao host de maior a prioridade (menor numeral) e em caso de indisponibilidade deste, a entrega ser realizada ao host a de prioridade subsequente. Opcionalmente pode-se utilizar conjuntamente ao balaceamento, como indicado a seguir:
1 2 3 4 5 6 7 8 9 10

IN IN muana IN IN IN IN IN IN

MX 10 muana MX 20 capim A A A A A A 192.168.100.3 192.168.100.4 192.168.100.5 192.168.100.7 192.168.100.8 192.168.100.9

capim

Reinaldo de Carvalho - reinaldoc@gmail.com

14

Postx et al.

Cap tulo 2. Correio Eletrnico o

2.7.1

Consultas de DNS

O utilitrio host pode ser utilizado para realizar consultas e vericar a congurao de DNS. A a ca instalaao realizada conforme indicado: c e # aptitude install host Veja o exemplo abaixo: $ host -t mx exemplo.com.br exemplo.com.br MX $ host -t txt exemplo.com.br $ host -t txt ufpa.br exemplo.com.br TXT

10 muana.exemplo.com.br

"v=spf1 ip4:172.16.17.20 -all"

Reinaldo de Carvalho - reinaldoc@gmail.com

15

Cap tulo 3 Saslauthd


O saslauthd um servio que fornece uma interface de autenticaao, entre os aplicativos e as bases de e c c usurios. Torna os aplicativos independentes dos drivers de acesso as bases, e implementa o protocolo a SASL para a comunicao com estes. ca Comumente utilizado em conjunto com servios de correio, porm est dispon c e a vel a qualquer software que requeira a validaao de usurios. O saslauthd possui drivers de conexo a diversas c a a bases e meios de autenticaao (authentication mechanisms), dentre os mais utilizados esto LDAP, c a MySQL, PostgreSQL, Kerberos e PAM. O diagrama a seguir contm os componentes relacionados com o saslauthd, os mdulos, arquivos e o de conguraao, socket de conexo e acesso a diferentes bases de dados. c a

Figura 3.1: Topologia do saslauthd [1]

O diagrama 3.1 representa uma instncia do saslauthd, sendo que cada instncia pode estar vina a culada apenas a um mtodo de autenticaao (authentication mechanisms) e estar acess e c a vel por um socket. O script de inicializaao (/etc/init.d/saslauthd) tem suporte a diversas instncias, c a 16

Postx et al.

Postx et al.

Cap tulo 3. Saslauthd

identicando-as pela existncia da conguraao /etc/default/saslauthd-name1, onde name1 o nome e c e dado a esta instncia. a

3.1

Instalao ca

A instalaao realizada a seguir: c e # aptitude install sasl2-bin libsasl2-modules

3.2

Parmetros de execuo a ca

Aps a instalaao do saslauthd, o servio de autenticaao no ser ativado por padro, sendo o c c c a a a necessrio a conguraao dos parmetros de execuo. No arquivo /etc/default/saslauthd (cona c a ca guraao da instncia padro), dena a varivel START=yes (l.1), o mtodo de autenticaao (l.4), c a a a e c e o caminho para socket de conexo (l.7), conforme indicado abaixo: a
1 2 3 4 5 6 7

START=yes DESC="SASL Authentication Daemon" NAME="saslauthd" MECHANISMS="ldap" MECH_OPTIONS="" THREADS=5 OPTIONS="-c -m /var/run/saslauthd"

3.3

Congurao ca

Alguns mtodos de autenticao como pame shadowno dependem de conguraoes adicionais, e ca a c outros, como a autenticao em bases ldapou mysql, necessitam de conguraao de conexo, que ca c a deve ser realizada no arquivo /etc/saslauthd.conf. A conguraao abaixo exemplica a integraao c c a uma base LDAP:
1 2 3 4 5 6 7 8 9

ldap_servers: ldap://127.0.0.1 ldap_port: 389 ldap_version: 3 ldap_search_base: o=Example ldap_auth_method: bind ldap_default_realm: imap.exemplo.com.br ldap_filter: (&(objectClass=inetOrgPerson)(mail=%u@%d)) # ldap_bind_dn: uid=queryuser,ou=Accounts,o=Example # ldap_bind_pw: password As opes ldap bind dn e ldap bind pw podem ser utilizadas caso o Directory System Agent reco queira autenticaao (bind) para permitir a consulta ao registro do usurio. c a

Reinaldo de Carvalho - reinaldoc@gmail.com

17

Postx et al.

Cap tulo 3. Saslauthd

3.4

Autenticao ca

O utilitrio testsaslauthd implementa um client-SASL, realizando a conexo ao socket e solicitando a a a autenticao atravs do protocolo SASL. Pode ser utilizado para testes de autenticao de usurios. ca e ca a Assim, reinicie o servio saslauthd aps o trmino de sua congurao: c o e ca # invoke-rc.d saslauthd restart Teste a autenticao com o seguinte comando: ca # testsaslauthd -u usuario -r exemplo.com.br -p senha 0: OK "Success." Se o resultado for 0: OK Success., o servio de autenticao est congurado adequadamente, c ca a caso contrrio reveja as conguraoes. a c Tarefa: altere o diretrio do socket de conexo de /var/run/saslauthd para /tmp/saslauthd o a e realize um teste de autenticaao atravs do utilitrio testsaslauthd. Devido o socket no estar c e a a localizado no caminho padro, deve-se especicar o caminho atravs de uma opo do testsaslauthd. a e ca

Tarefa: inicialize duas instncias do saslauthd, a primeira autenticando em LDAP e com socket a no diretrio /var/run/saslauthd, a segunda autenticando na PAM e com socket no diretrio /tmp/saslauthd. o o Ambos sockets s devem ser acess o veis somente pelos usurios do grupo sasl e pelo usurio root. Rea a alize testes de autenticao com o utilitrio testsaslauthd. ca a Tarefa: desabilite as demais instncias e congure o socket da instncia padro para o diretrio a a a o /var/spool/postx/var/run/saslauthd, e permita acesso somente aos membros do grupo sasl e ao usurio root. a

Reinaldo de Carvalho - reinaldoc@gmail.com

18

Cap tulo 4 Cyrus


O Cyrus um software de armazenamento de mensagens que implementa os protocolos IMAP4rev1, e POP3, LMTP, SIEVE e NNTP. E mantido pela Carnigie Mellow University e tem recebido melhorias do ISP FastMail.fm. E distribu atravs de licena livre e seu site ocial www.cyrusimap.org. do e c e O projeto Cyrus um esforo continuo para oferecer um sistema de e-mails com design escalvel e c a para ambientes pequenos e enormes, sendo altamente ex vel.

Figura 4.1: Topologia do Cyrus.

O processo cyrmaster realiza o controle de conexes, distribuindo estas entre os daemons de o servios, inicializando e reutilizando processos. c

4.1

Instalao ca
# aptitude install cyrus-imapd-2.2 cyrus-pop3d-2.2

A instalaao realizada a seguir: c e

Postx et al.

19

Postx et al.

Cap tulo 4. Cyrus

4.2

Congurao ca

A conguraao do Cyrus realizada em dois arquivos: c e /etc/cyrus.conf: contm a conguraao do cyrmaster e controla: e c (i) quais processos sero executados na inicializao (seo START), como a vericaao da a ca ca c integridade das bases; (ii) quais servios estaro ativos: pop3, pop3s, imap, imaps, lmtp, sieve, nntp e mupdate (seao c a c SERVICES), e a deniao da quantidade de processos que devem ser inicialmente executados, c quantidade mxima de processos em execuao, nmero de vezes que um processo pode ser a c u reutilizado, tempo de espera mximo para reutilizaao, e porta de conexo. a c a (iii) e, quais processos sero executados periodicamente (seo EVENTS), como procedimentos a ca de checkpoint, remoao de mensagens (vacum) e indexaao para FTS (fulltext searches). c c /etc/imapd.conf: contm a conguraao dos demais daemons, em sua maioria do servio e c c IMAP. Entre as conguraes poss co veis esto: a deniao do usurio administrativo, a intea c a graao com mecanismo de autenticaao e o suporte a caixas postais com dom c c nio completo.

4.2.1

/etc/cyrus.conf

As seguintes conguraoes devem ser realizadas no arquivo /etc/cyrus.conf: c ca Desativao da expiraao de mensagens (cyr expire) na inicializao; ca c
1 2 3

START { # delprune }

cmd="/usr/sbin/cyr_expire -E 3"

O processo cyr expire realiza a remoao de mensagens expiradas, onde realizada uma busca c e em cada caixa postal, vericando se existem mensagens mais antigas que o permitido, removendoas. Processo que tende a levar mais tempo conforme maior o nmero de mensagens armazenadas. u Fazendo com que exista um atraso na inicializaao dos SERVICES, visto que estes somente sero c a ativados aps o trmino dos processos da seao START. o e c Desativao da autenticaao de conexes LMTP; ca c o Aceitar conexes no servio LMTP em qualquer interface; o c Aceitar conexes no servio SIEVE em qualquer interface; o c
1 2 3 4 5 6 7

SERVICES { # lmtp cmd="lmtpd -a" listen="lmtp" prefork=5 maxchild=50 # sieve cmd="timsieved" listen="sieve" prefork=1 maxchild=50 # } Deve-se utilizar o parmetro -a no servio de LMTP, para que as mensagens possam ser recebidas a c do MTA sem necessidade de autenticao, que um requisito padro. Assim como, para tornar os ca e a servios LMTP e SIEVE acess c veis a partir de outros hosts deve-se omitir o termo localhost:da opao listen. c
Reinaldo de Carvalho - reinaldoc@gmail.com

20

Postx et al.

Cap tulo 4. Cyrus

Ativao da indexaao (squatter); ca c


1 2 3 4 5

EVENTS { # squatter_1 cmd="/usr/bin/nice -n 19 /usr/sbin/squatter -s" at=0100 # }

4.2.2

/etc/imapd.conf

As seguintes conguraoes devem ser realizadas no arquivo /etc/imapd.conf, seja alterando seu c valor padro ou adicionando-as: a
1 2 3 4 5 6 7 8 9

unixhierarchysep: yes admins: imap-admin allowplaintext: yes sasl_mech_list: PLAIN virtdomains: yes sasl_pwcheck_method: saslauthd sasl_saslauthd_path: /var/spool/postfix/var/run/saslauthd/mux allowusermoves: yes lmtp_over_quota_perm_failure: yes unixhierarchysep: altera o delimitador de sub-pastas do caracter .para o caracter /, necessrio para a utilizaao de usurios contendo ., como reinaldo.carvalho; a c a admins: fornece a determinados usurios recursos administrativos como a criao de caixas a ca postais, controle de quota e compartilhamentos (ACLs). Pode-se especicar um administrador global sem o uso de um dom nios (ex: imap-admin), ou usurios que somente podem gerenciar a o dom nio ao qual pertencem (ex: admin@exemplo.com.br); allowplaintext: permite autenticao sem a obrigatoriedade do uso de criptograa. Em ca ambientes ideais, em que todas as conexes ocorrem sob TLS ou SSL, esta opao deve ser o c desativada; ca e a sasl mech list: permite a autenticao atravs do padro PLAIN; virtdomains: dene que as caixas postais sero baseados no e-mail, ou seja, com o uso de a dom nio, ao invs de ser baseado em usurio, sem o uso de dom e a nio. Implicitamente exige que a autenticaao seja realizada atravs do e-mail (rei@exemplo.com.br) e no somente com c e a o usurio (rei); a sasl pwcheck method: seleciona a interface de autenticao (ex: saslauthd e auxprop); ca sasl saslauthd path: indica o caminho do socket da interface de autenticaao saslauthd; c allowusermoves: permite que caixas postais possam ser renomeadas; lmtp over quota perm failure: retonar indisponibilidade permanente (5xx) em tentativas de entregas de mensagens atravs de LMTP para usurios com quota excedida; e a A lista completa das opoes congurveis est dispon em: c a a vel $ man imapd.conf
Reinaldo de Carvalho - reinaldoc@gmail.com

21

Postx et al.

Cap tulo 4. Cyrus

4.3

Administrador

Atravs de uma conexo IMAP e a autenticao de um usurio previamente denido como admine a ca a istrador na congurao (/etc/imapd.conf), poss realizar operaoes sobre qualquer caixa postal, ca e vel c seja a criao ou remoao de caixas postais, denio de quota, compartilhamento (acls) ou pol ca c ca ticas de expiraao de mensagens. c Assim, necessrio a existncia deste usurio na base LDAP, pode-se utilizar o LDIF (imap.ldif) e a e a indicado a seguir:
1 2 3 4 5 6

dn: cn=Imap Admin,o=Example objectClass: inetOrgPerson cn: Imap Admin mail: imap-admin@imap.exemplo.com.br sn: Admin userPassword: secret O utilitrio slappasswd pode ser utilizado para a codicaao da senha em formato de hash, como a c {SSHA} e {MD5}. Para adicionar o registro a base, utilize o seguinte comando: $ ldapadd -h ldap.exemplo.com.br -x -D cn=admin,o=Example -W -f imap.ldif

4.4
4.4.1

Administrao ca
Protocolo IMAP

LOGIN $ nc localhost 143 S: * OK water Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready C: . LOGIN imap-admin 123456 S: . OK User logged in LIST/CREATE C: . LIST * * S: . OK Completed (0.000 secs 1 calls) C: . CREATE user/rei@exemplo.com.br S: . OK Completed C: . CREATE user/rei/Sent@exemplo.com.br S: . OK Completed C: . CREATE user/rei/Trash@exemplo.com.br S: . OK Completed C: . CREATE user/rei/Drafts@exemplo.com.br S: . OK Completed
Reinaldo de Carvalho - reinaldoc@gmail.com

22

Postx et al.

Cap tulo 4. Cyrus

C: S: S: S: S: S:

. * * * * .

LIST * * LIST (\HasChildren) "/" "user/rei@exemplo.com.br" LIST (\HasNoChildren) "/" "user/rei/Drafts@exemplo.com.br" LIST (\HasNoChildren) "/" "user/rei/Sent@exemplo.com.br" LIST (\HasNoChildren) "/" "user/rei/Trash@exemplo.com.br" OK Completed (0.000 secs 5 calls)

RENAME C: S: S: S: S: S: . * * * * . RENAME user/rei@exemplo.com.br user/reinaldo@exemplo.com.br OK rename user/rei@exemplo.com.br user/reinaldo@exemplo.com.br OK rename user/rei/Drafts@exemplo.com.br user/reinaldo/Drafts@exemplo.com.br OK rename user/rei/Sent@exemplo.com.br user/reinaldo/Sent@exemplo.com.br OK rename user/rei/Trash@exemplo.com.br user/reinaldo/Trash@exemplo.com.br OK Completed

QUOTA C: . GETQUOTA user/reinaldo@exemplo.com.br S: . NO Quota root does not exist C: . SETQUOTA user/reinaldo@exemplo.com.br (STORAGE 1024000) S: . OK Completed C: . GETQUOTA user/reinaldo@exemplo.com.br S: * QUOTA user/reinaldo@exemplo.com.br (STORAGE 0 1024000) S: . OK Completed ACL C: . GETACL user/reinaldo/Sent@exemplo.com.br S: * ACL user/reinaldo/Sent@exemplo.com.br reinaldo@exemplo.com.br lrswipcda S: . OK Completed C: . SETACL user/reinaldo/Sent@exemplo.com.br johndoe@exemplo.com.br lrsw S: . OK Completed C: . GETACL user/reinaldo@exemplo.com.br S: * ACL user/reinaldo@exemplo.com.br reinaldo@exemplo.com.br lrswipcda johndoe@exemplo.com.br lrsw S: . OK Completed As permisses so representadas pelas letras lrswipcda, que possuem o seguinte signicado: o a

Reinaldo de Carvalho - reinaldoc@gmail.com

23

Postx et al. Letra l r s w i p c d a lrsw lrswi lrswicd lrswipcda

Cap tulo 4. Cyrus Permisso a Listar a caixa postal (ver que ela existe). Ler as mensagens da caixa postal. Manter as ags lida e nova para este usurio. a Permite alterar ags lida e delete. Permite a insero de novas mensagens. ca Permite postagens diretas atravs do padrao usuario+pasta@exemplo.com.br. e Permite a criaao de subpastas. c Permite o uso de expunge, rename ou deletar a caixa postal. Permite alteraao das ACLs. c Permisso padro para leitura. a a Permisso padro para leitura e adiao de mensagens. a a c Permisso padro para escrita. a a Permisso total. a Tabela 4.1: Permisses de pastas IMAP. o

ANNOTATION C: . GETANNOTATION user/reinaldo@exemplo.com.br "*" "value.shared" S: * ANNOTATION "user/reinaldo@exemplo.com.br" "/vendor/cmu/cyrus-imapd/lastpop" ("value.shared" " ") * ANNOTATION "user/reinaldo@exemplo.com.br" "/vendor/cmu/cyrus-imapd/lastupdate" ("value.shared" "28-Mar-2011 14:49:00 -0300") * ANNOTATION "user/reinaldo@exemplo.com.br" "/vendor/cmu/cyrus-imapd/size" ("value.shared" "0") * ANNOTATION "user/reinaldo@exemplo.com.br" "/vendor/cmu/cyrus-imapd/partition" ("value.shared" "default") . OK Completed C: . SETANNOTATION "user/reinaldo@exemplo.com.br" "/vendor/cmu/cyrus-imapd/expire" ("value.shared" "30") S: . OK Completed DELETE C: . DELETE user/reinaldo@exemplo.com.br S: . NO Permission denied C: . SETACL user/reinaldo@exemplo.com.br imap-admin c S: . OK Completed C: . DELETE user/reinaldo@exemplo.com.br S: . OK Completed C: . LIST * * S: . OK Completed (0.000 secs 1 calls)

Reinaldo de Carvalho - reinaldoc@gmail.com

24

Postx et al.

Cap tulo 4. Cyrus

4.4.2

Cyradm

O IMAP-client cyradm uma ferramenta que permite o uso do protocolo IMAP atravs de linhas de e e comando, como descrito na tabela abaixo: Comando lm cm dm renm lq sq lam sam info mboxcfg exit Descrio ca Lista caixas postais. Cria caixa postal. Remove caixa postal. Renomeia caixa postal. Lista quota da caixa postal. Altera quota da caixa postal. Lista ACLs de caixa postais. Aplica ACLs a caixa postais. Lista Annotations da caixa postal. Aplica Annotations a caixa postais. Desconecta.

Tabela 4.2: Principais comandos do cyradm.

# aptitude install cyrus-admin-2.2 $ cyradm -u imap-admin localhost CREATE cm cm cm cm user/rei@exemplo.com.br user/rei/Sent@exemplo.com.br user/rei/Drafts@exemplo.com.br user/rei/Trash@exemplo.com.br

QUOTA sq user/rei@exemplo.com.br 51200 lq user/rei@exemplo.com.br DELETE sam user/rei@exemplo.com.br imap-admin c dm user/rei@exemplo.com.br

Tarefa: realize os seguintes procedimentos atravs do cyradm: (i) crie uma caixa postal e as e pastas Sent, Drafts e Trash; (ii) dena quota de 512 Mbytes; (iii) dena a annotation expire para a pasta Trash para 90 dias; (iv) compartilhe a pasta Sent com outro usurio com permisso de a a somente-leitura.

4.4.3

Cyruslib

http://python-cyrus.sf.net
Reinaldo de Carvalho - reinaldoc@gmail.com

25

Postx et al.

Cap tulo 4. Cyrus

4.5

IMAP Partitions

As parties IMAP o recurso utilizado para o armazenamento de mensagens em diferentes areas co e de disco. Recurso necessrio quando se exauriu a capacidade de armazenamento ou de operaes de a co entrada e sa de uma unidade de disco. da Para utilizar este recurso, deve-se (i) associar um label ao diretrio de armazenamento de meno sagens atravs da opo de conguraao partition-{label} no arquivo de conguraao /etc/imapd.conf, e ca c c conforme exemplo a seguir: partition-default: /var/spool/cyrus/mail partition-exemplo1: /var/spool/cyrus/mail1 partition-exemplo2: /var/spool/cyrus/mail2 Em seguida, deve-se (ii) criar os diretrios no local apropriado, (iii) congurar as permisses o o para o usurio cyrus, e (iv) reiniciar o servio. a c # mkdir /var/spool/cyrus/mail1 /var/spool/cyrus/mail2 # chown cyrus: /var/spool/cyrus/mail1 /var/spool/cyrus/mail2 # invoke-rc.d cyrus2.2 restart Neste momento, as novas partioes IMAP esto dispon c a veis para uso, e pode-se solicitar ao servio c de armazenamento de mensagens que mova determinadas caixas postais existentes para estas areas de disco, conforme exemplo a seguir: $ nc localhost 143 S: * OK water Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready C: . LOGIN imap-admin 123456 S: . OK User logged in C: . RENAME user/rei@exemplo.com.br user/rei@exemplo.com.br exemplo1 S: . OK Completed C: . RENAME user/johndoe@exemplo.com.br user/johndoe@exemplo.com.br exemplo2 S: . OK Completed

Tarefa: verique o caminho de armazenamento de mensagens, realize a alterao da partio ca ca IMAP conforme indicado, e conrme o novo local da mensagem em disco. Ao realizar o procedimento de criaao de caixas postais, pode-se indicar a partiao IMAP ao c c qual esta pertencer, em caso de omisso, a partio IMAP congurada na opao defaultpartition a a ca c ser utilizada. Para que a caixa postal seja criada diretamente em uma determinada partiao IMAP a c pode-se utilizar o exemplo a seguir: C: . CREATE user/reinaldo@exemplo.com.br exemplo1 S: . OK Completed

Reinaldo de Carvalho - reinaldoc@gmail.com

26

Postx et al.

Cap tulo 4. Cyrus

4.6

Caixas postais globais

As caixas postais globais possuem ACLs que garantem a permisso de leitura para todos os usurios a a do mesmo dom nio. So criadas atravs da omisso do termo user/. O exemplo a seguir, cria a a e a caixa postal global avisos: $ nc localhost 143 S: * OK water Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready C: . LOGIN imap-admin 123456 S: . OK User logged in C: . CREATE avisos@exemplo.com.br S: . OK Completed As caixas postais globais podem possuir permisso de escrita para determinados usurios, pera a mitindo a este usurio a inserao e remoao de mensagens. Para isto, utilize o procedimento a a c c seguir: $ nc localhost 143 S: * OK water Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready C: . LOGIN imap-admin 123456 S: . OK User logged in C: . SETACL avisos@exemplo.com.br rei@exemplo.com.br lrswipcd S: . OK Completed

4.6.1

Postagens em caixas postais globais

As caixas postais globais podem ser associadas a um determinado endereo de e-mail para recepo c ca direta de mensagens. Primeiramente crie um usurio conforme indicado (usuario.ldif): a
1 2 3 4 5

dn: cn=Imap Global,o=Example objectClass: inetOrgPerson cn: Imap Global mail: imap-global@exemplo.com.br sn: Global $ ldapadd -x -D cn=admin,o=Example -W -f usuario.ldif Congure a opo postuser no arquivo /etc/imapd.conf conforme indicado: ca postuser: imap-global Desta forma, os emails enviados para o destinatrio imap-global+avisos@exemplo.com.br sero a a armazenados diretamente na caixa postal global avisos, que est dispon para todos os usurios. a vel a Toda caixa postal deve possuir a ACL p para o usurio anyone para aceitar postagens, conforme a indicado:
Reinaldo de Carvalho - reinaldoc@gmail.com

27

Postx et al.

Cap tulo 4. Cyrus

$ nc localhost 143 S: * OK water Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready C: . LOGIN imap-admin 123456 S: . OK User logged in C: . SETACL avisos@exemplo.com.br anyone lrsp S: . OK Completed

4.7

Sieve

Exemplo de Script sieve (exemplo.sie): require ["vacation","fileinto"]; if address :contains ["from","cc"] "user1@example.com" { fileinto "INBOX/Folder1"; } if address :contains ["from","cc"] "user2@example.com" { redirect "user3@example.com"; keep; stop; } if header :contains "subject" "viagra" { discard; stop; } vacation :days 5 :subject "Estou de Ferias" :addresses ["rei@example.com"] "Estou de ferias, retornarei em 30/02. Atenciosamente, -Reinaldo de Carvalho";

4.7.1

Manage Sieve

$ sieveshell -u rei@exemplo.com.br -a imap-admin localhost connecting to localhost Please enter your password: > ? help - this screen list - list scripts on server put filename - upload script to server
Reinaldo de Carvalho - reinaldoc@gmail.com

28

Postx et al.

Cap tulo 4. Cyrus

get name - get script. if no filename display to stdout delete name - delete script. activate name - set a script as the active script deactivate - deactivate all scripts quit - quit > list > put exemplo.sie > list exemplo.sie > activate exemplo.sie > list exemplo.sie <- active script

4.8
4.8.1

Criptograa
Ativando TLS

/etc/imapd.conf tls_cert_file: /etc/ssl/cert/hostname.cer tls_key_file: /etc/ssl/cert/hostname.key

4.8.2

Ativando SSL

/etc/cyrus.conf SERVICES { # imaps pop3s # }

cmd="imapd -s -U 30" listen="imaps" prefork=5 maxchild=100 cmd="pop3d -s -U 30" listen="pop3s" prefork=5 maxchild=50

O servio deve ser reinciado para as novas conguraoes serem utilizadas. c c

4.9

Mail User Agents

Instale um cliente de e-mail e realize testes com caixas postais. Icedove (Thundebird) # aptitude install icedove icedove-locale-pt-br Evolution # aptitude install evolution Kmail
Reinaldo de Carvalho - reinaldoc@gmail.com

29

Postx et al.

Cap tulo 4. Cyrus

# aptitude install kmail

Tarefa: (i) congure uma conta IMAP, (ii) crie uma mensagem de rascunho, (iii) copie-a para outras pastas, (iv) verique no sistema de arquivos a estrutura de diretrios, o padro de nome do o a arquivo de mensagem, e o contedo da mensagem armazenada. u

Reinaldo de Carvalho - reinaldoc@gmail.com

30

Cap tulo 5 Postx: introduo ca


5.1 Histria o

Na dcada de 70, as primeiras mensagens eram enviadas pela Arpanet, antecessora da atual Internet. e A troca de mensagens era feita em sua maioria por estudantes, pesquisadores e prossionais dos grandes centros de pesquisa, restrita a poucos usurios que tinham acesso a essa rede. As mensagens a eram enviadas atravs de um protocolo semelhante ao atual SMTP, que foi denido apenas em 1982. e O Sendmail era o servidor de correios mais utilizado na decada de 90, causando amor e dio aos o administradores de sistema. Causava amor `queles que tinham tempo de ler, estudar e compreender a o seu funcionamento complexo e cheio de macros. Odio para aqueles que precisavam apenas rotear suas mensagens e no havia necessidade de perder horas e mais horas tentando compreender seu a funcionamento. A sua forma monol tica tambm era um grande ponto negativo. Sendo apenas e um unico processo controlando todas as etapas de transmisso de email, o Sendmail apresentava a inmeras falhas de segurana, de maior risco quando executado em modo root. Muitos servidores u c eram invadidos por crackers e naturalmente os administradores de sistema procuravam alternativas. Na poca no existia muitas alternativas, os administradores continuavam a utilizar o Sendmail. e a Em 1998 as primeiras verses do Postx comearam a surgir. Wietse Venema seu criador e o c e possui inmeros trabalhos relacionados ` segurana da informaao. Wietse pesquisador da IBM u a c c e at hoje. A primeira verso ocial do Postx, em software livre foi lanada em Dezembro de 1998. e a c As conguraoes feitas de maneira simples, fazem o seu uso bastante eciente e simplicado. E c importante compreender em detalhes cada etapa de seu funcionamento, desta forma ser poss a vel agir de forma rpida e eciente em caso de problemas ou eventualidades em sua estrutura de correio. a A sua arquitetura diferente de outros sistemas monol e ticos, como o Sendmail. O Postx separa em mdulos cada etapa da entrega da mensagens, desta forma, diferentes aplicativos trabalham o individualmente em uma ordem pr-denida para que a entrega das mensagens seja feita com sucesso. e Isso garante uma estabilidade no sistema e naturalmente um ganho de performance.

5.2

Caracter sticas

As principais caracter sticas em seu desenvolvimento: Sistema multitarefa O Postx possui um conjunto completo de mdulos que desempenham o um papel espec co para cada etapa do trfego de e-mails; este comportamento permite melhor a desempenho em equipamentos multiprocessados. Separao de privilgios O Postx executado em chroot que restringe o acesso a arquivos ca e e internos a jaula, separando assim muito de seus mdulos. Um poss o vel invasor que explore uma vulnerabilidade do Postx ser restrito a um pequeno espao do sistema, normalmente a c /var/spool/postx, assim, no comprometendo os arquivos do sistema, base de mensagens. a
Postx et al.

31

Postx et al.

Cap tulo 5. Postx: introduo ca

Modular E poss criar mdulos para trabalhar em conjunto com o Postx, tornando-o vel o facilmente extend vel. Compatibilidade O Postx foi desenvolvido para suportar os formatos de armazenamentos de mensagens existentes, e possui suporte a LMTP para entregar a mensagem a um servio de c aramazenamento de mensagens especializado.

5.3

Avanos c
Verso a Postx 1.0 Postx 1.0 Postx 1.0 Postx 1.0 Postx 2.0 Postx 2.2 Postx 2.2 Postx 2.2 Postx 2.3 Postx 2.3 Postx 2.3 Descrio ca ETRN em Relay. Suporte a LMTP. Pipelining (SMTP client and server). Suporte a autenticao SASL. ca MIME (including 8BITMIME to 7BIT conversion). Cache de conexo SMTP. a Suporte a IPV6. Criptograa via TLS e autenticaao. c DSN. Melhorias nos cdigos de status. o Suporte a mltiplos formatos da biblioteca SASL. u

Tabela 5.1: Avanos no suporte de protocolos. c

Verso a Postx 1.1 Postx 2.1 Postx 2.1 Postx 2.1 Postx 2.1 Postx 2.2

Descrio ca Content lter. Controle de acesso por cliente, remetente, destinatrio, etc. a Testes com endereos. c Plugin Greylist. Plugin SPF. Limite de conexes. o Tabela 5.2: Avanos no controle de lixo eletrnico. c o

Verso a Postx 1.0 Postx 1.0 Postx 1.0 Postx 1.0 Postx 2.0 Postx 2.2

Descrio ca Berkeley DB. DBM Database. Suporte LDAP. Suporte MySQL. Suporte PostgreSQL. CDB Database.

Tabela 5.3: Avanos no suporte a banco de dados. c

Reinaldo de Carvalho - reinaldoc@gmail.com

32

Postx et al.

Cap tulo 5. Postx: introduo ca

5.4
5.4.1

Componentes
Diagrama de interao dos mdulos ca o

Figura 5.1: Interaao entre os mdulos do Postx c o

5.4.2

Filas de mensagens

O Postx possui uma la para cada etapa da entrega de mensagens. Vamos agora explorar cada uma dessas las na tabela abaixo:

Reinaldo de Carvalho - reinaldoc@gmail.com

33

Postx et al.

Cap tulo 5. Postx: introduo ca

Figura 5.2: Descriao das las de mensagens c

5.4.3

Recepo de mensagens locais ca

As mensagens locais so inseridas na la maildrop pelo comando sendmail, sendo uma interface a de compatibilidade para o utilitrio postdrop. Estas mensagens podem ser provenientes do prprio a o sistema, como mensagems do Cron ou outro aplicativo. O mdulo pickup monitora a la maildrop, o e ao ser detectada uma nova mensagem, esta entregue ao mdulo cleanup. Caso a mensagem no e o a possua todos os itens necessrios em seu cabealho, o mdulo cleanup realizar a inserao dos mesmos. a c o a c Antes do e-mail prosseguir, o mdulo trivial-rewrite acionada para vericar se o destinatrio deve o e a ser alterado. Em seguinda a mensagem movida para a la incoming. e

5.4.4

Recepo de mensagens via rede ca

O uso mais comum do Postx via rede, onde um servidor de correio (que no precisa ser necessarie a amente outro Postx) realiza a entrega do email, muitas vezes passando por vrios cantos do planeta a at chegar ` caixa do usurio. As mensagens chegam pelo daemon smtpd, que faz vrias checagens e a a a de segurana (verica se as mensagens atende os padres, se o cliente tem o direito de fazer relay c o por esse servidor ou no e se o destinatrio existe no servidor). O smtpd repassa a mensagem para o a a cleanup, que como j vimos acima, faz suas checagens e entrega a mensagem para a la de incoming. a A partir da a mensagem segue seu ciclo at chegar a caixa postal do usurio. , e ` a

Reinaldo de Carvalho - reinaldoc@gmail.com

34

Postx et al.

Cap tulo 5. Postx: introduo ca

5.4.5

Entrega local de mensagens

Aps a recepao da mensagem, esta enleirada sendo necessrio a realizao da sua entrega a caixa o c e a ca de mensagens. Este procedimento chamado de Mail Delivery Agent - MDA, sendo poss a e vel utilizaao de um software externo ao Postx para a realizao deste procedimento como o procmail c ca ou o maildrop, ou a utilizao do prprio Postx, como documentado a seguir. ca o A mensagem pode ser entregue em um diretrio no sistema de arquivos, sendo armazenada no o formato mbox ou Maildir, assim como, pode ser entregue atravs do protocolo LMTP. e Formato mbox O formato de armazenamento mbox utiliza um unico arquivo para armazenar a caixa postal de cada usurio, sendo que as mensagens cam concatenadas e separadas por um linha indicativa de a in de mensagem. As mensagens do usurio rei, cam localizadas no arquivo /var/spool/mail/rei, cio a sendo que este arquivo pode ser grande, dicultando a leitura de seu contedo pelo servidor de u POP/IMAP. O comportamento padro do Postx realizar a entrega da mensagem no formato mbox, em a e /var/spool/mail/usuario, e determinada pelo valor do parmetro especicado a seguir: e a mail_spool_directory = /var/spool/mail Formato Maildir O formato de armazenamento Maildir cria um novo arquivo para cada mensagem recebida. Criado para resolver decincias do formato mbox, como a lentido para acesso as mensagens em grandes e a caixas postais. Para o Postx realizar a entrega da mensagem no formado Maildir deve utilizar a conguraao a c seguir: mail_spool_directory = /var/spool/mail/ A escolha do formato de armazenamento depende diretamente do software de POP3/IMAP que e utilizado, pois sua conguraao precisa acessar exatamente o mesmo diretrio e as mensagens devem c o estar no formato esperado por este software. LMTP - Local Mail Transport Protocol O LMTP criado para a transferncia de mensagens em redes internas, semelhante ao protocolo e e SMTP, entretando seu objetivo transferir as mensagens entre servidores locais. e Este meio de entrega utilizado pelo Cyrus, software utilizado durante este treinamento. Assim, e o Postx recebe a mensagem, verica a existncia do usurio, entre outros validaes, encaminhando e a co a mensagem para o Cyrus. O LMTP permite a utilizao de um conjunto de servidores para o armazenamento de e-mails, ca caso inmeros dom u nios precisem ser armazenados em diferentes servidores. O Cyrus fornece recebe as mensagens atravs da porta TCP/24. e O LMTP no deve ser acess atravs da internet, visto que somente o MTA necessita realizar a vel e conexes a este protocolo. O parmetro de conguraao a seguir tem prioridade em relaao a entrega o a c c nos formatos mbox e Maildir. mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp mailbox_transport = lmtp:inet:[127.0.0.1]:24
Reinaldo de Carvalho - reinaldoc@gmail.com

35

Postx et al.

Cap tulo 5. Postx: introduo ca

5.5

Instalao ca

A instalaao Postx no Debian demonstrada abaixo: c e # aptitude install postfix postfix-ldap O comando acima vai automaticamente instalar o Postx e desinstalar automaticamente o Exim, j que pela pol a tica do Debian (e da maioria das outras distribuies), cada servidor pode ter apenas co um unico MTA. Depois de instalado, os arquivos de conguraes cam localizados no diretrio /etc/postx , que co o no prximo cap o tulo estudaremos com detalhes suas conguraes. co

5.5.1

Arquivos e utilitrios instalados a

O Postx possui uma srie de recursos e ferramentas para trabalhar com la, mensagens, aliases e entre outros. Abaixo, a lista dos comandos e seu signicado, em seguida uma relaao mais detalhada c de cada um deles:

Figura 5.3: Ferramentas do Postx

No Debian, os arquivos no diretrio /etc/postx so os seguintes: o a

Reinaldo de Carvalho - reinaldoc@gmail.com

36

Postx et al.

Cap tulo 5. Postx: introduo ca

Figura 5.4: Arquivos do Postx

5.5.2

main.cf

O main.cf o arquivo principal de conguraao, com ele voc pode determinar todo o funcionamento e c e do seu Postx. Abaixo, o main.cf padro do Debian, que por sinal bastante reduzido e suciente a e para colocar o servidor em produao. Adiante, veremos mais detalhes de conguraoes e comandos c c uteis para gerenciar seu sistema. # See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUAs job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client.
Reinaldo de Carvalho - reinaldoc@gmail.com

37

Postx et al.

Cap tulo 5. Postx: introduo ca

myhostname = devil.exemplo.com.br alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = localhost relayhost = mynetworks = 127.0.0.0/8 mailbox_size_limit = 0 recipient_delimiter = + #inet_interfaces = 127.0.0.1 A sa acima o arquivo padro, gerado logo aps a instalaao do Postx no Debian. No foi da e a o c a feita nenhuma modicao nesse arquivo, mas desta forma o Postx funcionaria perfeitamente no ca sistema Debian. Vamos agora explorar cada uma das diretivas do arquivo padro e depois vamos aos poucos a aprofundando em outras diretivas:

Reinaldo de Carvalho - reinaldoc@gmail.com

38

Postx et al.

Cap tulo 5. Postx: introduo ca

Figura 5.5: Principais opes do main.cf co

As diretivas acima so as mais comuns e j so sucientes para colocar o servidor em produo. a a a ca O Debian por padro, faz a entrega local das mensagens, localizados no /var/spool/mail e usa como a padro os usurios criados no sistema. O esquema acima no tem muitas vantagens, apenas faz a a a a entrega de mensagens, nada muito alm disso. e

5.5.3

master.cf

O master.cf controla a inicializaao e aoes de cada daemon do Postx. O exemplo abaixo mostra c c o modelo do master.cf do Postx instalado no Debian e logo aps alguns comentrios importantes o a sobre seu formato: # # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). #
Reinaldo de Carvalho - reinaldoc@gmail.com

39

Postx et al.

Cap tulo 5. Postx: introduo ca

# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n smtpd pickup fifo n 60 1 pickup cleanup unix n 0 cleanup qmgr fifo n n 300 1 qmgr #qmgr fifo n 300 1 oqmgr tlsmgr unix 1000? 1 tlsmgr rewrite unix trivial-rewrite bounce unix 0 bounce defer unix 0 bounce trace unix 0 bounce verify unix 1 verify flush unix n 1000? 0 flush proxymap unix n proxymap smtp unix smtp relay unix smtp -o fallback_relay= # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n showq error unix error discard unix discard local unix n n local virtual unix n n virtual lmtp unix n lmtp anvil unix 1 anvil scache unix 1 scache # ==================================================================== # Interfaces to non-Postfix software. Be sure to examine the manual # pages of the non-Postfix software to find out what options it wants. # # Many of the following services use the Postfix pipe(8) delivery # agent. See the pipe(8) man page for information about ${recipient} # and other message envelope options. # ==================================================================== maildrop unix n n pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient} uucp unix n n pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) ifmail unix n n pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) bsmtp unix n n pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient scalemail-backend unix n n 2 pipe flags=R user=scalemail
Reinaldo de Carvalho - reinaldoc@gmail.com

40

Postx et al.

Cap tulo 5. Postx: introduo ca

mailman

argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension} unix n n pipe flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}

Abaixo, a descrio de cada coluna: ca

Figura 5.6: Opes de cada mdulo do master.cf co o

Alguns exemplos de servios: c

Reinaldo de Carvalho - reinaldoc@gmail.com

41

Postx et al.

Cap tulo 5. Postx: introduo ca

Figura 5.7: Exemplos de mdulos utilizados no master.cf o

Reinaldo de Carvalho - reinaldoc@gmail.com

42

Cap tulo 6 Postx: integraes co


Aps a instalaao do Postx, funcionalidades essenciais esto dispon o c a veis, e alguns recursos devem ser ativados, como: suporte a autenticao e integraao ao saslauthd; ca c consulta a base LDAP para validaao de endereos de e-mails; c c encaminhamento da mensagem ao servidor de armazenamento de mensagens; suporte a comunicao segura atravs de TLS e SSL; ca e

6.1

Integrao com Saslauthd ca

A integrao com o saslauthd necessria para o suporte ao comando AUTH do protocolo SMTP. ca e a A autenticao o recursos comumente utilizado para determinar quais endereos de destinatrios ca e c a so aceitos. Assim, para conexes autenticadas todo destinatrio permitido, e para conexes noa o a e o a autenticadas, somente destinatrios de dom a nios locais so permitidos. Para ativar a autenticaao, a c realize as seguintes conguraes: co /etc/postx/main.cf
1 2 3

## SASL ## smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes /etc/postx/sasl/smtpd.conf: especicaao dos mtodos de autenticaao. c e c pwcheck_method: saslauthd mech_list: PLAIN LOGIN A comunicaao com o saslauthd d-se atravs do socket /var/run/saslauthd/mux interno a jaula, c a e e que possui permisso padro de acesso somente para os membros do grupo sasl, assim, utilize o a a comando: # adduser postfix sasl Aps realizadas as conguraes indicadas, faz-se necessrio reiniciar o Postx para que as novas o co a conguraoes sejam utilizadas. c # invoke-rc.d postfix restart
Postx et al.

43

Postx et al.

Cap tulo 6. Postx: integraes co

6.1.1

Mtodo de Autenticao PLAIN e ca

$ perl -MMIME::Base64 -e print encode_base64("\000rei\@exemplo.com.br\000senha"); AHJlaUA0bGludXguY29tLmJyAHNlbmhh


1 2 3 4 5 6

S: C: S: C: S:

$ nc 127.0.0.1 25 220 exemplo.com.br ESMTP Example HELO exemplo.com.br 250 exemplo.com.br AUTH PLAIN AHJlaUA0bGludXguY29tLmJyAHNlbmhh 235 2.0.0 Authentication successful

6.1.2

Mtodo de Autenticao LOGIN e ca

$ perl -MMIME::Base64 -e print encode_base64("rei\@exemplo.com.br") cmVpQDRsaW51eC5jb20uYnI= $ perl -MMIME::Base64 -e print encode_base64("senha") c2VuaGE=
1 2 3 4 5 6 7 8 9 10

S: C: S: C: S: C: S: C: S:

$ nc 127.0.0.1 25 220 exemplo.com.br ESMTP Example HELO exemplo.com.br 250 exemplo.com.br AUTH LOGIN 334 VXNlcm5hbWU6 cmVpQDRsaW51eC5jb20uYnI= 334 UGFzc3dvcmQ6 c2VuaGE= 235 2.0.0 Authentication successful

6.2

Integrao com OpenLdap ca

A integrao com a base de usurios essencial para que emails para usurios inexistente sejam ca a e a rejeitados em tempo de recebimento RCPT TO. Para isto, deve-se realizar a conguraao abaixo e c referenciando a lista de dom nios que devem ser consultadas nesta base. /etc/postx/main.cf
1 2 3 4 5 6 7 8 9 10

## LDAP ## mydestination = hash:/etc/postfix/ldap-domains virtual_alias_maps = ldap:ldapconn ldapconn_domain = hash:/etc/postfix/ldap-domains ldapconn_bind = no ldapconn_server_host = 127.0.0.1 ldapconn_version = 3 ldapconn_search_base = o=Example ldapconn_query_filter = (|(mail=%s)(mailAlternateAddress=%s)) ldapconn_result_attribute = mail
Reinaldo de Carvalho - reinaldoc@gmail.com

44

Postx et al.

Cap tulo 6. Postx: integraes co

/etc/postx/ldap-domains exemplo.com.br example.com example.org comment another domain employer domain

A utilizaao do mdulo hash depende da compilao do arquivo, conforme indicado: c o ca # postmap /etc/postfix/ldap-domains O postx deve ser reiniciado para utilizar as novas conguraoes: c # invoke-rc.d postfix restart

6.3

Integrao com Cyrus ca

A integrao com Cyrus ser realizada atravs de LMTP conforme indicado. A especicao de ca a e ca endereos dos servidores IMAP so realizadas no arquivo /etc/postx/ldap-domains, conforme indic a cado: /etc/postx/main.cf ## CYRUS ## transport_maps = hash:/etc/postfix/ldap-domains /etc/postx/ldap-domains exemplo.com.br example.com example.org lmtp:inet:[192.168.0.1]:24 lmtp:inet:[192.168.0.2]:24 lmtp:inet:[192.168.0.3]:24

Em seguida execute o comando abaixo: # postmap /etc/postfix/ldap-domains Reinicie os aplicativos fazendo um teste de envio e recebimento de mensagem. # invoke-rc.d postfix restart

6.4
6.4.1

Criptograa
Ativando TLS

/etc/postx/main.cf smtpd_tls_cert_file = /etc/ssl/hostname.cer smtpd_tls_key_file = /etc/ssl/hostname.key smtpd_tls_security_level = may smtpd_tls_received_header = yes


Reinaldo de Carvalho - reinaldoc@gmail.com

45

Postx et al.

Cap tulo 6. Postx: integraes co

6.4.2

Ativando SSL

/etc/postx/master.cf
1 2 3 4 5 6 7 8 9 10 11 12

# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n smtpd -o smtpd_sasl_auth_enable=no submission inet n smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes smtps inet n smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes Alm da ativao do suporte a portas SSL, recomendado que a autenticaao seja permitida e ca e c somente atravs de conexoes criptografadas. Assim, opao de ativaao de autenticaao ser expl e c c c a cita por servio smtpd, podendo ser removida do /etc/postx/main.cf. c

Reinaldo de Carvalho - reinaldoc@gmail.com

46

Cap tulo 7 Postx: restrioes c


As restries. co

7.1

Desabilitando comando VRFY

disable_vrfy_command = yes

7.2

Endereos restritos c

De acordo com RFC 821, endereos de e-mail utilizados nos comandos MAIL FROM e RCPT TO c devem estar delimitados entre os sinais < e > para serem considerados vlidos. O comportamento a padro no realizar esta vericao, para ativ-la, utilize a conguraao abaixo: a e a ca a c strict_rfc821_envelopes = yes Exemplo de dilogo: a
1 2 3 4 5 6

S: C: S: C: S:

$ nc localhost 25 220 zeus.exemplo.com.br ESMTP Postfix HELO origem.dominio.com.br 250 zeus.exemplo.com.br MAIL FROM: usuario@dominio.com.br 501 Bad address syntax

7.3

Sender Policy Framework - SPF

Sender Policy Framework - SPF (Traduao livre: Estrutura e Regras de Origem) uma pol c e tica anti-spam baseada em consultas de DNS. A primeira etapa divulgar atravs de um registro na e e e zona de DNS quais endereos IP podem realizar entregras utilizando como remetente um endereo c c de e-mail deste dom nio. A seguir observemos um exemplo de um registro TXT do tipo SPF informando que somente o ip 200.212.122.137 tem permisso para entregar e-mails utilizando o remetente pertencente ao dom a nio exemplo.com.br. $ host -t txt exemplo.com.br
Postx et al.

47

Postx et al.

Cap tulo 7. Postx: restries co

exemplo.com.br

TXT

"v=spf1 ip4:200.212.122.137 -all"

Para incluir este registro, necessrio alterar a zona de DNS que responde pelo respectivo dom e a nio, incluindo um campo TXT conforme o exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

$TTL 1D @ IN

SOA

IN IN IN IN IN ns1 ns2 mail IN IN IN

ns1.exemplo.com.br. rei.exemplo.com.br. ( 2007080201 ; serial 86400 ; refresh 7200 ; retry 2592000 ; expire 86400 ) ; minimun NS ns1 NS ns2 A 192.168.100.1 MX 10 mail TXT "v=spf1 ip4:192.168.100.3 -all" 192.168.100.1 192.168.100.2 192.168.100.3

A A A

A inserao deste registro de SPF informa ao servidores de correio eletrnico que somente devem c o receber e-mails com remetente do dom exemplo.com.br, caso seja proveniente o ip 192.168.100.3. nio A prxima etapa congurar o postx para vericar SPF dos emails recebidos. Para realizar o e esta vericaao utilizaremos um mdulo adicional que pode ser obtido: c o # aptitude install postfix-policyd-spf-python /etc/postx/master.cf
1 2 3

spf

unix n n 0 spawn user=nobody argv=/usr/bin/python /usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf

/etc/postx/main.cf smtpd_sender_restrictions = check_policy_service unix:private/spf # invoke-rc.d postfix restart # nc 10.118.118.6 25 220 rpawsds10.redetre.jus.br ESMTP Postfix (Debian/GNU) EHLO uol.com.br 250-rpawsds10.redetre.jus.br 250-PIPELINING 250-SIZE 10240000 250-VRFY 48

S: C: S: S: S: S:

Reinaldo de Carvalho - reinaldoc@gmail.com

Postx et al.

Cap tulo 7. Postx: restries co

S: S: S: S: S: C: S: C: S:

250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN MAIL FROM:<rei@uol.com.br> 250 2.1.0 Ok RCPT TO:<rei@rpawsds10.redetre.jus.br> 550 5.7.1 <rei@uol.com.br>: Sender address rejected: Message rejected due to: SPF fail - not authorized. Please see http://www.openspf.org/Why?s=helo;id=uol.com.br;ip=10.118.118.6;r=rei@rpawsds10

7.4

Greylist

Greylist a validaao do servidor de e-mail que est entregando a mensagem. Na primeira tentativa e c a de entrega de um determinado e-mail, o conjunto formado pelo ip do servidor de origem, endereo c de e-mail do remetente e endereo de e-mail do destinatrio - tripla - armazenada. Nesta fase, esta c a e tentativa de entrega do e-mail rejeitada com um cdigo de erro 4xx. Este cdigo indica um erro e o o temporrio, e induz ao servidor que est entregando a mensagem, a realizao de uma nova tentativa a a ca depois de algum tempo. [2] Caso o servidor de origem seja um servidor de e-mail seja vlido, seguindo as RFCs, ao receber a esta noticaao de erro temporrio, uma nova tentativa de entrega ser realizada, quando o sistema c a a de greylist aceitar a mensagem. Emails com a mesma tripla, aps um certo nmero de entregas com a o u sucesso podem ser aceitos diretamente por um determinado per odo, minimizando o atraso natural do sistema de greylist. Outras opes tambm so congurveis, maiores informaoes podem ser co e a a c obtidas no manual: man postgrey. [2] A eur stica utilizada no sistema de greylist atua no bloqueio de SPAMs gerados uma unica vez utilizando a tripla ip, remetente e destinatrio. A maior parte dos e-mails gerados por v a rus, SPAMs originados por programas de envio de e-mails em massa, alm dos ataques de SPAMs baseados em e dicionrios, apresentam este comportamento sendo rejeitados pelo sistema de greylist. Entretando a este sistema inecais contra SPAMs provenientes de open relays, visto que estes so MTAs e a vlidos, e re-enviaro o e-mail rejeitado inicialmente pela greylist. [2] a a Para a instalao deste sistema, utilze o comando a seguir: ca # aptitude install postgrey /etc/default/postgrey
1 2 3

POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=60 --retry-window=1 --auto-whitelist-clients=1" POSTGREY_TEXT="Try again latter" delay: Nmeros de segundos que devem ser aguardados para a re-entrega do e-mail ser aceita. u max-age: Nmero de dias que no ser exigido greylist aps a primeira tentativa com sucesso. u a a o retry-window: Nmero de dias que a segunda tentativa ser aguardada. u a auto-whitelist-clients: Nmero de entregas com sucesso para no sofrer greylist. u a
Reinaldo de Carvalho - reinaldoc@gmail.com

49

Postx et al.

Cap tulo 7. Postx: restries co

7.5

Restrioes de cabealho c c

Expresses regulares aplicadas ao cabealho da mensagem. o c header_checks = regexp:/etc/postfix/header_checks /etc/postx/header checks /.*(file)?name=.*\.(bat|exe|src|scr|pif|chm|hta|vbs)/ /^(Return-Path|From):.*<.*_.*_.*_.*@.*/ /^Subject:.*([Rr][Ee](:)?( )?\[[0-9]{1,2}\](:)?)/ /^Subject:.*([oO0][eE][mM]).*/ REJECT REJECT REJECT REJECT ATTACH TAG: EXEC. SPAM TAG: _. SPAM TAG: re[]. SPAM TAG: OEM.

7.6

Restrioes de conte do c u

Expresses regulares aplicadas ao corpo da mensagem. o body_checks = regexp:/etc/postfix/body_checks /etc/postx/body checks /(http|https|ftp):\/\/.*\/.*\.(bat|pif|scr|[eE][xX][eE]).*(\s|\")/ REJECT PHISHING

7.7
1 2 3 4 5 6 7

Restrioes de IP e reverso. c

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, check_client_access hash:/etc/postfix/client_whitelist, check_client_access hash:/etc/postfix/client_blacklist, reject_unknown_client_hostname, reject_rbl_client bl.spamcop.net reject_rbl_client dnsbl.njabl.org

7.8
1 2 3 4 5 6 7 8

Restrioes de helo c

smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, check_helo_access hash:/etc/postfix/helo_blacklist, check_client_access hash:/etc/postfix/helo_whitelist, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname

Reinaldo de Carvalho - reinaldoc@gmail.com

50

Postx et al.

Cap tulo 7. Postx: restries co

7.9
1 2 3 4 5 6

Restrioes de remetente c

smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unlisted_sender, reject_authenticated_sender_login_mismatch, permit_sasl_authenticated, check_policy_service unix:private/spf

7.10
1 2 3 4 5 6

Restrioes de destinatrios c a

smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service inet:127.0.0.1:60000

7.11
1 2

Restrioes aps comando DATA c o

smtpd_data_restrictions = reject_unauth_pipelining, reject_multi_recipient_bounce

7.12
1 2 3 4 5 6 7 8 9 10

Restrioes condicionais c

smtpd_restriction_classes = reject_if_sender_match1, reject_if_sender_match2 reject_if_sender_match1 = check_sender_access hash:/etc/postfix/sender1_denied reject_if_sender_match2 = check_sender_access hash:/etc/postfix/sender2_denied smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unknown_recipient_domain, check_recipient_access hash:/etc/postfix/rcpts, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service inet:127.0.0.1:60000 /etc/postx/rcpts rei@exemplo.com.br tha@exemplo.com.br /etc/postx/sender1 denied saito@exemplo.com.br cesar@exemplo.com.br fike@exemplo.com.br reject reject reject 51 reject_if_sender_match1 reject_if_sender_match2

Reinaldo de Carvalho - reinaldoc@gmail.com

Postx et al.

Cap tulo 7. Postx: restries co

/etc/postx/sender2 denied origem1@origem.com.br origem.com.br dunno reject

7.13

Restrioes de conexes c o

smtpd_client_connection_count_limit = 10 smtpd_recipient_limit = 200 smtpd_timeout = 60s smtpd_hard_error_limit = 1

7.14

Restrioes de conexes por per c o odo de tempo

anvil_rate_time_unit = 60s smtpd_client_connection_rate_limit = 10 smtpd_client_message_rate_limit = 20 smtpd_client_recipient_rate_limit = 200

7.15

Restrioes do tamanho da mensagem c

message_size_limit = 20480000

Reinaldo de Carvalho - reinaldoc@gmail.com

52

Cap tulo 8 Postx: las de entrega


Umas das funoes mais importantes de um MTA o seu correto gerenciamento de las. Existem c e diferentes las para cada etapa do sistema e como j vimos antes, o Postx possui uma variedade de a las para atender todas as demandas de um completo sistema de correio. Quem controla as las o qmgr (Queue Manager), uma rotina que roda em segundo plano e gerenciando as 5 diferentes las do Postx (a saber: active, bounce, corrupt, deferred e hold). As las esto localizadas no diretrio /var/spool/postx/, existindo um doretrio com nome de a o o cada la existente:

Figura 8.1: Descriao das las de mensagens c

Postx et al.

53

Postx et al.

Cap tulo 8. Postx: las de entrega

8.1

Fila deferred

As mensagens permanecem nessa la at que sejam entregues com sucesso ou expiram, ento elas so e a a devolvidas para o remetente (bounce). Uma vez que a mensagem no pde ser entregue, o Postx a o marca essa mensagem com um timestamp indicando o momento de uma nova tentativa. Periodicamente o Postx verica as mensagens que esto paradas na la deferred e tenta fazer o a envio. Se no conseguir enviar em at 5 dias, a mensagem enviada como bounce para o remetente a e e indicando que no foi poss ser entregue e informa o erro. O valor de 5 dias pode ser alterado no a vel main.cf pela diretiva maximal queue lifetime

8.2

Fila corrupt

Esse tipo de mensagem bastante raro. Se isso est acontecendo com certa frequencia em seu sistema, e a indica que pode haver algum problema de memria ou de hardware. O Postx costuma recusar o mensagens com problemas no momento que estabelece o dilogo, isso um papel dos daemons a e cleanup e trivial-rewrite, que j vimos antes. Portanto, esses dois daemons j devem descartar a a a mensagem, no deixando ela chegar at a la. a e Se seu servidor apresenta algum problema de hardware (memria, processamento ou disco), a o mensagem pode se corromper na la, o que muito raro. O Postx mantm as mensagens que se e e corromperam na la no diretrio /var/spool/postx/corrupt . o

8.3

Ferramentas da la

O Postx possui uma ferramenta que ajuda a desempenhar algumas tarefas na la, como por exemplo: Listas mensagens; Remover mensagens; Segurar mensagens (hold); Enleirar mensagens; Exibir contedo de uma mensagem; u Reprocessar mensagens;

8.4

Listando a la

Ao listar o contedo da la, voc ter acesso as seguintes informaes: u e a ` co ID da mensagem (identicador unico); Tamanho; Hora do recebimento da mensagem; Remetente; Destinatrios da mensagem; a

Reinaldo de Carvalho - reinaldoc@gmail.com

54

Postx et al.

Cap tulo 8. Postx: las de entrega

Se a mensagem est em deferred, o motivo da no entrega da mensagem tambm exibido. a a e e As mensagens que esto sendo processadas no momento so marcadas com um asterisco (*) antes a a do identicador da mensagem. Voc pode listar toda a la do Postx com o seguinte comando: e # postqueue -p A sa do comando seria parecida com o seguinte: da -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------4754B2B068A0* 3906 Sun Jun19 11:22:41 rei@exemplo.com.br reinaldoc@gmail.com Perceba que logo aps o ID da mensagem, existe um asterisco. Isso signica que a mensagem o est sendo processada naquele momento. a

8.5

Removendo mensagens

O comando postsuper permite remover mensagens da la, para isso, utilize a opao -d como mostra c abaixo: # postsuper -d 4754B2B068A0 postsuper: 4754B2B068A0: removed postsuper: Deleted: 1 message Se voc deseja remover todas as mensagens da la, basta um: e # postsuper -d ALL postsuper: Deleted: 23 messages Repare que o parmetro ALL deve ser informado tudo em maisculo. a u

8.6

Retendo mensagens

Pode existir situaoes onde voc tenha necessidade de segurar mensagens na la. Para isso, voc c e e pode usar o comando postsuper, com a opao -h. As mensagens em espera cam marcadas com uma c exclamaao aps seu ID e cam nessa la por tempo indeterminado, at que o administrador rode c o e outro comando para soltar as mensagens, o postsuper -H (ma usculo). Veja o exemplo: # postsuper -h 849D9a89 Para liberar: # postsuper -H 849D9a89

Reinaldo de Carvalho - reinaldoc@gmail.com

55

Postx et al.

Cap tulo 8. Postx: las de entrega

8.7

Reprocessando mensagens

Se voc teve mensagens em deferred devido a alguma falha temporria ou algum erro na congurao, e a ca voc pode pedir ao Postx que reprocesse essas mensagens imediatamente, sem precisar esperar o e per odo padro que o Postx faria esse trabalho automaticamente. a Para reprocessar as mensagens, basta um: # postsuper -r ALL As mensagens ganharo um novo ID e uma nova entrada no cabealho (Received:). a c

8.8

Exibindo o conte do de uma mensagem u

Voc pode precisar ler o contedo de uma mensagem na la, para isso, o comando Postcat atende e u essa demanda, como por exemplo: # postcat -q DF5616A A sa seria da mensagem em formato texto puro, na seo do usurio. da ca a

Reinaldo de Carvalho - reinaldoc@gmail.com

56

Cap tulo 9 Webmail


Webmail uma aplicao web que implementa um cliente para os protocolos de acesso a mensagens e ca POP3 e/ou IMAP4. Em sua maioria desenvolvidos em PHP, os mais utilizados so SquirrelMail, a OpenWebmail, Horde-IMP, RoundCube e o projeto brasileiro Uebimiau. Os Webmails so baseados no sistema de internacionalizaao para permitir o uso de diversas a c linguagens, verique se o locales est congurado corretamente: a $ cat /etc/locale.gen pt_BR.UTF-8 UTF-8 pt_BR ISO-8859-1 # locale-gen O prximo passo a instalao do servidor web Apache2 com suporte a PHP: o e ca # aptitude install apache2 php5 libapache2-mod-php5

9.1

SquirrelMail

SquirrelMail o webmail com muitos mdulos (plugins) adicionais, entretando possui uma interface e o simples. Sua instalaao realizada atravs do comando: c e e # aptitude install squirrelmail squirrelmail-locales Sua conguraao realizada atravs de menus. Como indicado: c e e # squirrelmail-configure A congurao inicial deve ser realizada no menu Server Setting, acess a partir da opao ca vel c 2. SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------Main Menu -1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options
Postx et al.

57

Postx et al.

Cap tulo 9. Webmail

5. 6. 7. 8. 9. 10. D. C S Q

Themes Address Books Message of the Day (MOTD) Plugins Database Languages Set pre-defined settings for specific IMAP servers Turn color on Save data Quit

Command >> O servidor de IMAP deve ser indicado atravs da sub-opao A, como indicado: e c IMAP Settings -------------4. IMAP Server 5. IMAP Port 6. Authentication type 7. Secure IMAP (TLS) 8. Server software 9. Delimiter

: : : : : :

localhost 993 login true cyrus /

Conguraoes relativas ao servidor SMTP devem ser especicadas na sub-opao B: c c SMTP Settings ------------4. SMTP Server 5. SMTP Port 6. POP before SMTP 7. SMTP Authentication 8. Secure SMTP (TLS) 9. Header encryption key

: : : : : :

localhost 465 false login true

O prximo passo congurar as pastas padres, e pode ser realizado retornando para o menu o e o principal atravs da opao r, atravs do menu Folder Defaults, acess a partir da opo 3: e c e vel ca SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------Folder Defaults #... 3. Trash Folder : INBOX/Trash 4. Sent Folder : INBOX/Sent 5. Drafts Folder : INBOX/Drafts #...

Reinaldo de Carvalho - reinaldoc@gmail.com

58

Postx et al.

Cap tulo 9. Webmail

Assim, o ultimo procedimento a deniao da linguagem utilizada, que deve ser realizada atravs e c e do menu principal Languages, acess a partir da opao 10: vel c SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------Language preferences 1. Default Language : pt_BR 2. Default Charset : iso-8859-1 #... A opo spode ser utilizada para salvar as conguraes realizadas: ca co Command >> s Data saved in config.php Press enter to continue... Um link no diretrio principal do servidor web deve criado para o diretrio de instalao do o o ca SquirrelMail: # ln -s /usr/share/squirrelmail /var/www/webmail O SquirrelMail pode ser acessado pela endereo: c http://localhost/webmail

9.2

RoundCube

RoundCube um projeto inicial de webmail implementado em PHP e utiliza modernos padres web e o XHTML e CSS2. Sua instalaao de comentada a seguir: c # cd /root # wget http://ufpr.dl.sourceforge.net/sourceforge/\ roundcubemail/roundcubemail-0.1-rc1.1.tar.gz # tar xzf roundcubemail-0.1-rc1.1.tar.gz # mv roundcubemail-0.1-rc1 /usr/share/roundcube # chown www-data /usr/share/roundcube/temp /usr/share/roundcube/logs O RoundCube necessita de um banco de dados para guardar informaoes como a lista de contato c dos usurios, tendo suporte aos bancos PostgreSQL, MySQL e SQLite. Utilizaremos o PoostgreSQL a conforme indicado: # # # $ $ $ aptitude install postgresql-8.1 php5-pgsql /etc/init.d/apache2 restart su - postgres createuser roundcube createdb -O roundcube roundcube psql roundcube 59

Reinaldo de Carvalho - reinaldoc@gmail.com

Postx et al.

Cap tulo 9. Webmail

> > $ #

ALTER USER roundcube WITH PASSWORD senha; \q exit psql -h 127.0.0.1 -U roundcube -d roundcube \ -f /usr/share/roundcube/SQL/postgres.initial.sql

As conguraoes do RoundCube so realizadas nos arquivos db.inc.php e main.inc.php contidos c a no diretrio /usr/share/roundcube/cong, renomeie os modelos de conguraao conforme indicado: o c # cd /usr/share/roundcube/config # mv db.inc.php.dist db.inc.php # mv main.inc.php.dist main.inc.php Realize a congurao no arquivo db.inc.php: ca $rcmail_config[db_dsnw] = pgsql://roundcube:senha@127.0.0.1/roundcube; Realize a congurao no arquivo main.inc.php: ca $rcmail_config[default_host] = ssl://127.0.0.1:993; $rcmail_config[smtp_server] = ssl://127.0.0.1:465; $rcmail_config[smtp_user] = %u; $rcmail_config[smtp_pass] = %p; $rcmail_config[smtp_auth_type] = PLAIN; $rcmail_config[des_key] = 123abc123abc123abc123abc; $rcmail_config[junk_mbox] = Spam; $rcmail_config[default_imap_folders] = array(INBOX, Drafts, Sent, Spam, Trash); Um link no diretrio principal do servidor web deve criado para o diretrio de instalao do o o ca RoundCube: # ln -s /usr/share/roundcube /var/www/webmail2 O RoundCube pode ser acessado atravs do endereo: e c http://localhost/webmail2

Reinaldo de Carvalho - reinaldoc@gmail.com

60

Cap tulo 10 Utilitrios e ferramentas administrativas a


Abaixo uma tabela com algumas ferramentas e utilitrios que podem facilitar a vida do administrador a de sistemas em um servidor de correio.

Figura 10.1: Utilitrios e ferramentas. a

10.1

Como detectar e evitar gargalos

Uma das tarefas mais complicadas para o administrador de sistemas saber dimensionar sua rede e e saber investir em hardware/software para evitar lentido no sistema ou diculdade de seus usurios a a ao acessar os servios de sua rede. c

10.2

Dimensionando o hardware

O erro mais comum do administrador de sistemas dimensionar o hardware errado para o ambiente e errado. Muitas vezes esse administrador acredita que se obter um Xeon com quatro processadores, 2Gb de memria RAM, placa de rede giga, muito espao em disco vai estar solucionando a necessidade o c de uma rede de mil caixas-postais onde cada usurio recebe uma mdia de 100 e-mails por dia e ca a e mais de 8 horas pendurados no IMAP (webmail ou client de e-mail). Pode chegar um ponto dessa
Postx et al.

61

Postx et al.

Cap tulo 10. Utilitrios e ferramentas administrativas a

estrutura apresentar lentido ao rotear mensagens, mas os recursos de memria e processador esto a o a bastante baixos. Por que isso? A resposta simples: o administrador esqueceu de calcular o IO e (Input/Output) e carga do disco. Um sistema de e-mails como o Postx consome muito disco, necessita de um HD muito rpido para a trabalhar com IO em disco. Como j foi apresentado no in dessa apostila, para cada etapa da la a cio do Postx a mensagem ca localizada em um espao em disco. Quando passa para prxima la, essa c o mensagem movida de um lado ao outro. Pensando assim simples, mas imagine isso acontecendo e e em um servidor que est recendo milhares de mensagens em um curto per a odo de tempo. O uso de memria e processador pode estar baixo, mas o IO em disco poder estar extremamente alto. o a O que melhor nesses casos: ao invs de investir alto em uma mquina boa, invista o mesmo e e a valor comprando diversas mquinas pequenas, com um processador, quantidade menor de memria a o e discos bons e conveis. Dessa forma voc pode dividir sua rede em algumas mquinas e assim a e a diluir toda carga de IO entre essas mquinas. a Para a realidade do Postx, o que voc pode fazer separar os servios. Uma mquina seria e e c a o MTA, receberia e-mails da internet e faria o processamento de anti-v rus e anti-spam. Outra mquina seria o Cyrus e teria todas as caixas-postais dos seus usurios. Por ultimo, uma outra a a mquina poderia ser o Webmail onde os seus usurios fariam a conexo direta para ler e enviar a a a mensagens. Voc quebrando o sistema em trs partes, reduzir muito o overhead do seu sistema e e e a o custo seria quase o mesmo de comprar apenas um servidor bom e colocar todos os servios nessa c unica mquina. a

10.3

Como identicar o uso do disco

Existem ferramentas na maioria dos sistemas Unix que permitem uma viso geral do uso de todas a as partes do sistema, incluindo IO de disco. A ferramenta vmstat pode ajudar muito nesse caso. Os exemplos abaixo demonstram duas situaoes bem diferentes, a primeira de uma mquina que est c e a a bastante estressada e a segunda, de uma mquina bastante tranqila, que no est desempenhando a u a a nenhum papel naquele momento: root@akhenaton:~# vmstat 3 10 procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---r b swpd free buff cache si so bi bo in cs us sy id wa 2 2 18920 3480 16 193836 0 1 71 28 1133 951 10 2 87 1 0 1 18924 4976 16 205468 0 4397 4267 7758 1206 2402 86 6 0 8 1 0 18924 3800 16 207656 0 0 4053 2037 1160 2378 93 6 0 2 1 0 18924 4292 16 207984 0 212 3925 2452 1157 2331 94 5 0 1 1 0 18924 3956 16 208456 0 35 4480 3749 1173 2322 93 6 0 1 2 0 18924 5000 16 207592 0 1 4864 1777 1158 2504 94 5 0 1 1 0 18924 3564 16 209008 0 0 4608 3446 1173 2381 93 6 0 1 1 0 18936 5024 16 207488 0 0 5335 2914 1173 2607 92 6 0 2 1 0 18936 4632 16 207956 0 0 5036 2941 1170 2461 91 5 0 4 1 0 18936 4224 16 208408 0 0 4825 1886 1172 2474 93 6 0 1 root@akhenaton:~# vmstat 3 10 procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 18936 45644 16 168032 0 4 97 49 1133 958 11 2 86 1 0 0 18936 45700 16 168036 0 0 1 3 1103 348 1 0 98 1 0 0 18936 45708 16 168036 0 0 0 13 1115 429 0 0 100 0 0 0 18936 45716 16 168036 0 0 0 0 1101 344 0 0 100 0
Reinaldo de Carvalho - reinaldoc@gmail.com

62

Postx et al.

Cap tulo 10. Utilitrios e ferramentas administrativas a

0 0 0 0 0 0

0 0 0 0 0 0

18936 18936 18936 18936 18936 18936

45716 45724 45724 45732 45732 45716

16 16 16 16 16 16

168036 168060 168068 168068 168076 168100

0 0 0 0 0 0

0 0 0 0 0 0

0 8 3 0 3 8

3 21 0 0 11 72

1113 1105 1113 1100 1114 1111

369 420 355 397 354 425

1 2 0 0 0 0

0 0 0 0 0 1

98 97 100 99 100 99

0 0 0 0 0 0

Vamos agora s apresentar os detalhes importantes para voc interpretar a sa acima. Repare o e da na coluna io, do primeiro bloco o bi (Blocks Input) e bo (Blocks Output) esto com valor a bem elevado, ou seja, existe bastante gravaao e leitura em disco. Observe tambm o campo cpu, a c e coluna id idle. Se o valor est zerado, signica que a CPU est bastante ocupada. Se estiver com a a valor alto (at 100), signica que a CPU est tranqila, com toda sua capacidade de processamento e a u liberada. Esses so os pontos que voc deve vericar no vmstat para ajudar a encontrar gargalos. a e Lembrando: esse apenas um indicador, analisando o vmstat sozinho ou no interpretando bem seus e a bastante recomendado que voc leia o man do vmstat para valores, pode no ajudar em nada. E a e compreender melhor todo seu signicado. Para instalar o vmstat no Debian, basta instalar o pacote sysstat aptitude install sysstat

10.4

Vericando o Postx com qshape

Existe uma ferramenta do Postx chamada qshape, que indica o status atual do sistema e assim ajudar no diagnstico de algum problema com as las do Postx. Veja o exemplo abaixo do qhape o em produo: ca $ qshape -s hold | head TOTAL yahoo.com extremepricecuts.net ms35.hinet.net winnersdaily.net hotmail.com worldnet.fr ms41.hinet.net osn.de T 486 14 13 12 12 11 6 6 5 5 10 20 40 80 160 320 640 1280 1280+ 0 0 1 0 0 2 4 20 40 419 0 0 1 0 0 0 0 1 0 12 0 0 0 0 0 0 0 2 0 11 0 0 0 0 0 0 0 0 1 11 0 0 0 0 0 0 0 2 0 10 0 0 0 0 0 0 0 0 1 10 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 1 0 0 0 4

Interpretando a sa acima, a primeira coluna mostra o dom da nio que possui mensagens acumuladas. A coluna da letra T signica total e os valores ao lado (5, 10, 20....) seria a quanto tempo (em minutos) a mensagem est parada na la. Traduzindo a sa acima para o dom yahoo.com, a da nio saber amos que existem 486 mensagens paradas, sendo que uma delas est na la entre 10 e 20 a minutos e a maior quantidade de mensagens est parada na la a mais de 1280 minutos. Ou seja, a existe algum problema com esse servidor de e-mails. Cabe ao administrador identicar o motivo do problema, seja DNS, rede ou at mesmo algum problema f e sico. Voc pode tambm ver as mensagens de outras las, como por exemplo: e e $ qshape deferred | less $ qshape incoming active deferred | less
Reinaldo de Carvalho - reinaldoc@gmail.com

63

Postx et al.

Cap tulo 10. Utilitrios e ferramentas administrativas a

Sempre que os valores estiverem altos, importante analisar pelo mail.log ou atravs de outras e e ferramentas o motivo do servidor no estar conseguindo deixar as mensagens uirem. Pode ser vrios a a problemas, como resoluo de nomes, rede at mesmo hardware. O local onde voc poder coletar ca e e a informaoes importantes o mail.log. Pode por exemplo dar um grep no mail.log procurando por c e ocorrncias do dom yahoo.com e tentar reproduzir alguns testes na mo, como telnet no servidor e nio a remoto ou rever as conguraoes do seu sistema por completo. c

Reinaldo de Carvalho - reinaldoc@gmail.com

64

Referncias Bibliogrcas e a
[1] Reinaldo Gil Lima de Carvalho. Saslauthd. Documentao ca http://www.nautilus.com.br/ rei/material/artigos/saslauthd.html. Pessoal, 2006.

[2] Reinaldo Gil Lima de Carvalho. Postx with mbox. Documentao Pessoal, 2006. ca http://www.nautilus.com.br/ rei/material/artigos/postx-with-mailbox.html.

Postx et al.

65

Apndice A e Licena c
Copyright (c) 2007-2012 Reinaldo Gil Lima de Carvalho - reinaldoc@gmail.com distribuir e/ou modificar este documento Livre GNU (GNU Free Documentation Software Foundation; com todas Seoes c~ de Capa Frontal, e sem Textos de Quarta

garantida a permiss~o para copiar, E a sob os termos da Licena de Documentaao c c~ License) Vers~o 1.2, publicada pela Free a Secundrias Invariantes incluindo textos a Capa.

Postx et al.

66