LPI-2 202-450 Topico 211.2: Administração da entrega de email
Entrega de Email
Índice
211.2 Administração da entrega de email - Objetivos
Peso 2
O candidato deve ser capaz de implementar programas de gerenciamento de email cliente, classificar e monitorar a entrada de email.
Conhecimentos-chave:
- Entender a finalidade do Sieve, sua sintaxe e operadores;
- Utilizar o Sieve para filtrar e classificar de acordo com remetente, destinatário, cabeçalho e tamanho;
- Noção de Procmail.
Lista parcial dos arquivos, termos e ferramentas utilizados:
- Operadores condicionais e comparativos;
keep
,fileinto
,redirect
,reject
,discard
,stop
;- Extensão
vacation
do Dovecot.
211.2 Administração da entrega de email - Conteúdo
Além de permitir o tráfego de mensagens via SMTP, servidores de EMail geralmente oferecem algum mecanismo de entrega e classificação das mensagens. Contudo esses recursos não estão presentes no MTA, como o Postfix, mas são oferecidos por outros programas. Esses programas são os MDA (Mail Delivery Agent) ou LDA (Local Delivery Agent) e funcionam de maneira integrada ao MTA.
Procmail
O MDA/LDA mais tradicional para administração da entrega em contas locais é o Procmail. A maioria dos MTAs trabalham com o Procmail ou pelo menos estão habilitadas a trabalhar com ele.
O Procmail analisa detalhes do EMail como a origem, o destinatário,
o assunto e o corpo da mensagem a partir de regras definidas em
/etc/procmailrc
e também em ~/.procmailrc
. Com essas regras é
possível definir quais mensagens devem ser mantidas, movidas
apagadas ou direcionadas como entrada para um comando.
Figura 1: Localização do Procmail na Topologia
Procmail é um MDA antigo e não mais suportado ainda que muito estável. Usuários que ainda o utilizam já foram alertados por seu autor, Philip Guenther, a usar alguma ferramenta alternativa (tais como o Maildrop ou o Sieve). Porém como este assunto é pre-requisito do exame LPIC2 precisamos ter um conhecimento básico do seu funcionamento.
Para entender o Procmail primeiro precisamos entender como o
Postfix trabalha. Pois bem, tal como mostrado no tópico 211.1 o
Postfix armezena os EMails em /var/spool/mail/<username>
. Ele
cria um único arquivo por usuário e vai concatenando os conteúdos
dos emails destinados a esse usuário dentro desse único arquivo.
O Procmail permite armazenar as mensagens em
/home/<username>/mail/
e organizá-los. O Procmail pode armazenar
EMails em dois formatos diferentes mbox
ou maildir
:
mbox
- é o formato mais antigo onde todos os emails são
armazenados em um grande arquivo de texto, tem como
características:
- rápido para pesquisas dentro das mensagens;
- bom para o filesystem pois é apenas 1 arquivão;
- problemas com locking de arquivo;
possibilidade de corromper em caixas muito grandes.
Figura 2: Exemplo de mbox tendo os EMails concatenados dentro de um único arquivo
maildir
- todos os emails são armazenados em arquivos
individuais dentro de uma estrutura de diretórios. Tem como
características:
- não há problemas de corrupção de arquivos;
- não há problemas com locking;
- Se a caixa for muito grande com muitas mensagens pode ter problemas de falta de inodes em sistemas como ext3;
procurar textos dentro das mensagens é moroso.
Figura 3: Exemplo de maildir tendo os EMails armazenados em arquivos individuais distribuídos em diretórios com funções diferentes
Funcionamento do Procmail
O Procmail não é um daemon ou um programa acionado pelo usuário,
na verdade ele é acionado pelo daemon do Postfix sendo acionado
pela diretiva mailbox_command
dentro do arquivo
/etc/postfix/main.cf
funcionando de forma semelhante a
linguagens de programação orientada a dados (data-driven
programming) tais como SED e AWK.
A instalação do Procmail é bastante simples sendo necessário a
instalação de apenas um pacote o procmail
.
Após instaldo editamos o arquivo /etc/postfix/main.cf
e
definimos a diretiva mailbox_command
:
mailbox_command = procmail
Após reiniciar o Postfix qualquer EMail recebido irá acionar o Procmail. Porém precisamos ainda executar as configurações das regras do Procmail que são feitas em dois locais:
- Regras globais - são configuradas no arquivo
/etc/procmailrc
; - Regras de usuário - são colocadas em um arquivo oculto na
/home
do usuário -~/.procmailrc
;
Quando o Procmail é acionado pelo Postfix ele lê o EMail separando
o cabeçalho do corpo. Em seguida, o Procmail procura o arquivo
/etc/procmailrc
para considerar as diretivas de configuração
globais e depois lê o ~/.procmailrc
no diretório home que
conterá as configurações específicas do usuário
Importante o preencimento do arquivo /etc/procmailrc
deve ser
feito com bastante cuidado pois ele é lido e executado como
root
. Isso implica que ajustes mal pensados podem causar sérios
danos no sistema como por exempo por uma regra mal digitada fazer
o Procmail sobrescreva algum binário importante do sistema
operacional. Por esse motivo as configurações em
/etc/procmailrc
devem ser as mínimas necessárias e quaisquer
ajustes mais avançados devam ser executados no ~/.procmailrc
na
home do usuário.
Por padrão o arquivo /etc/procmailrc
não existe portanto
precisaremos criá-lo.
### Define onde queremos que os EMails sejam armazenados MAILDIR=$HOME/mail ### Define o formato de armazenamento # Para o formato mbox DEFAULT=$HOME/mail/inbox #Para o formato maildir #DEFAULT=$HOME/mail/inbox/
Regras do Procmail
Como já exposto o Procmail nos permite filtrar o EMail conforme
ele é recebido. A filtragem é feita usando as regras previamente
especificadas pelo usuário salvas no arquivo ~/.procmailrc
na
home do usuário.
A construção das regras é a parte mais difícil ao aprender a usar o Procmail, porque as regras fazem a correspondência de suas mensagens usando expressões regulares. No entanto, as expressões regulares não são muito difíceis de construir e ainda menos difíceis de entender quando lidas. O problema é a compreensão da esgtrutura de regras do Procmail.
:0 [flags] [: lockfile-name ] * [ condition_1_special-condition-character condition_1_regular_expression ] * [ condition_2_special-condition-character condition-2_regular_expression ] * [ condition_N_special-condition-character condition-N_regular_expression ] special-action-character action-to-perform
Os primeiros dois caracteres em um arquivo de regras do Procmail
são :0
. Várias flags podem ser setadas após o Zero para
controlar como o Procmail processa as regras. Dois pontos após a
seção de flags especifica o nome do arquivo de bloqueio que
será criado para o EMail processado.
Podem ser colocadas várias condições para formar as regras de
processamento de mensagens. Se não houverem condições, todas as
mensagens corresponderão. Expressões regulares são colocadas em
algumas condições para facilitar a correspondência de
mensagens. Se várias condições forem usadas, todas devem
corresponder para que a ação seja executada. As condições são
verificadas com base nos sinalizadores definidos na primeira
linha. Os caracteres especiais opcionais colocados após o
asterisco *
podem controlar ainda mais a condição.
O argumento action-to-perform
especifica a ação realizada
quando a mensagem corresponde a uma das condições. Só pode haver
uma ação por conjunto de regras. Em muitos casos, o nome de uma
caixa de correio é usado aqui para direcionar as mensagens
correspondentes para esse arquivo, classificando o EMail de forma
eficaz. Os caracteres de ação especial também podem ser usados
antes que a ação seja especificada.
:0: * ^Subject:.lpi linuxcert
NO exemplo acima todo EMail que chegar com o assunto contendo a
palavra LPI será enviado para o arquivo do tipo mbox
com nome
linuxcert
.
Dovecot e filtros Sieve
Para que o Dovecot possa atuar como LDA e filtrar as mensagens localmente, é necessário instalar o pacote adicional do Dovecot que oferece suporte ao Sieve. O Sieve é um formato de regras específicas para filtragem, classificação e entrega local de EMails.
O nome do pacote Dovecot que fornece suporte ao Sieve varia
conforme a distribuição, mas costuma ser encontrado como
pigeonhole
, dovecot-pigeonhole
ou dovecot-sieve
.
Depois de instalados o Dovecot e o pacote que dã suporte ao Sieve, são necessárias algumas alterações nos arquivos de configuração do Sieve e do Postfix para que ambos trabalhem integradamente. A comunicação entre o Dovecot e o Postfix se dá apenas localmente e, por não envolver filas de envio para outros servidores, recomenda-se a utilização do protocolo LMTP, que ẽ uma variação do SMTP voltada para o trãfego local de mensagens de EMail.
O primeiro passo é ativar o suporte ao LMTP na configuração do
Dovecot, cujos arquivos encontram-se no diretõrio
/etc/dovecot/
. O arquivo de configuração principal é o
/etc/dovecot/dovecot.conf
, mas ẽ comum que diferentes aspectos da
configuração estejam discriminados em diferentes arquivos no
diretório /etc/dovecot/conf.d
.
O protocolo LMTP é ativado na diretiva protocols
do arquivo
/etc/dovecot/dovecot.conf
.
protocols = lmp
Caso a diretiva protocols
não esteja presente, é possível que o
Dovecot esteja configurado para ativar automaticamente todos os
protocolos que estão instalados no sistema. Nesse caso, deve
existir uma linha como:
!include_try /usr/share/dovecot/protocols.d/*.protocol
Essa linha ativa todos os protocolos instalados a partir dos arquivos de configura;áo correspondentes no diretório indicado.
No lugar de executar um comando do LDA toda vez que uma mensagem é recebida (tal como o Procmail faz), é possível configurar o Postfix e o Dovecot de modo que o daemon LDA esteja sempre ativo para tratar as mensagens que chegam. Para isso, é necessário configurar um socket no arquivo /etc/dovecot/conf.d/10-master.conf~
service lmp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } }
Na entrada service lmp
são especificados o arquivo do socket e
as permissões de acesso ao mesmo. O usuário e grupo devem ser os
mesmos que os utilizados para executar o Postfix. Para que o
Postfix encaminhe as mensagens recebidas para o Dovecot, esse
socket deve ser indicado na opção virtual_transport
do arquivo
/etc/postfix/main.cf
:
virtual_transport = lmtp:unix:private/dovecot-lmp
A diretiva virtual_transport
é utilizada para ocntas de EMail
virtuais. No caso de contas de EMail vinculadas a contas de
sistemas tradicionais, a diretiva utilizada deve ser
mailbox_transport
:
mailbox_transport = lmtp:unix:private/dovecot-lmp
Por fim, os recursos de filtragem do Sieve são ativados como
plugins do Dovecot. Isso pode ser feito diretamente na
configuração específica do LMTP, mantida no
/etc/dovecot/conf.d/20-lmtp.conf
:
protocol lmtp { postmaster_address = postmaster@infralinux.com.br mail_plugin = quota sieve }
Devem constar o endereço de EMail do administrador do servidor de
EMails na opção postmaster_address
e quais plugins ativar na
opção mail_plugins
. No exemplo serão ativados os plugins
quota
e sieve
. Concluídas as alterações é necessário reiniciar
o Postfix e o Dovecot para que as novas configurações tenham
efeito.
Com o plugin Sieve ativo, é possível definir regras de tratamento
para os EMails recebidos, antes que os mesmos sejam acessados pelo
usuário. Por padrão, o plugin lê as regras armazenadas no
diretório pessoal de cada usuário, no arquivo
~/.dovecot.sieve
. Caso o arquivo não exista, será consultado o
arquivo de regras gerais /var/lib/dovecot/sieve/default.sieve
.
Uma regra do Sieve consiste em uma ou mais condições às quais a
mensagem recebida é submetida e qual ação tomar caso a mensagem se
enquadre na condição. Por exemplo, para criar uma regra de
auto-resposta de ausência, é utilizada a extensão vacation
:
require "vacation"; vacation # Enviar apenas uma vez por dia para o mesmo destinatário :days 1 :subject "Ausência devido a férias" # Endereços que utilizarão a resposta automática :addresses ["jeremias@infralinux.com.br", "jeremias@redes.eti.br"] "Por motivo de férias, não responderei até a próxima semana. Atenciosamente, Jeremias";
Cada tipo de regra pode exigir uma extensão diferente. Para
carregar mais de uma extensão, se pode utilizar o formato require
["vacation", "fileinto"]
. A extensão fileinto
, por exemplo, é
utilizada para guardar a mensagem em uma pasta específica da conta
de email:
require "fileinto"; if header :contains "from" "jeremias" { redirect "jeremias.aq@gmail.com"; } elsif header :contains ["subject"] ["Promoção"] { discard; } else { fileinto "INBOX"; }
A regra acima utiliza a estrutura de controle if
para definir
qual ação tomar para a mensagem, no caso se o cabeçalho da mensagem
contiver from
e jeremias
a mensagem receberá uma action
redirect
para a conta jeremias.aq@gmail.com
, se no cabeçalho
contiver subject
e Promoção
ela receberá a action
discard
. Por fim se nenhuma das condições for verdadeira a
ação fileinto
(da extensão Fileinto) enviará a mensagem para INBOX
.
Ações
Outras ações importantes são:
keep
Apenas guardar a mensagem no local padrão. Por exemplo, para descartar todas as mensagens com tamanho superior a 1 megabyte, utiliza-se:
if size :under 1M { keep; } else { discard; }
O mesmo resultado é obtido com a regra:
if not size :under 1M { discard; }
redirect
Redireciona a mensagem para o endereço indicado na sequência, como em:
redirect "jeremias.aq@gmail.com"
reject
Rejeitar o recebimento da mensagem. Se for indicado um texto, como em:
reject "Não desejo receber seus EMails.";
Este será enviado para o remetente juntamente com a mensagem rejeitada.
discard
- Simplesmente ignora o recebimento da mensagem.
stop
- Essa ação interrompe o processamento das regras
subsequentes que eventualmente constem no arquivo de regras. Se
nenhuma outra ação foi aplicada à mensagem, a ação
keep
é tomada.
É possível criar regras bastante elaboradas com o Sieve e inclusive permitir que usuários criem regras próprias remotamente. Mais detalhes sobre o Sieve são encontrados no endereço http://sieve.info.