UP | HOME

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:

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.

Sorry, your browser does not support SVG.

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.

    mbox-example.png

    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.

    maildir-example.png

    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.

Autor: Jeremias Alves Queiroz

Criado em: 2021-12-19 dom 20:07

Valid XHTML 1.0 Strict