Como configuro o Postfix para atender a esses requisitos?

2

Estou com dificuldades para descobrir como criar uma configuração específica do Postfix para uma instância do Postfix que será executada em um contêiner.

Aqui estão meus requisitos:

  1. Proibir a retransmissão, a menos que o remetente seja de um pequeno conjunto de endereços IP ou o remetente seja um programa local (embora permitir que um programa fora do contêiner envie mensagens para o Postfix em execução no contêiner seja um enigma interessante) .
  2. Execute cada parte do e-mail recebido de endereços IP sem retransmissão por meio de um pequeno conjunto de verificações e recuse a entrega se ela não passar por todos eles:
    1. Se o IP do remetente estiver em uma RBL especificada, rejeite-o.
    2. IPs de entrada da lista de e-mails Eu não aceitei e-mails de antes.
    3. Se a parte do usuário do endereço de destino não corresponder a nenhum conjunto pequeno de expressões regulares, rejeite-o.
    4. Se o e-mail não passar em alguns cheques simples e rápidos de spamassassin, rejeite-o.
  3. Para todas as entregas locais, use um programa para determinar a disposição final. Este programa terá um dos quatro resultados.
    1. Entregue para um endereço local diferente (Delivered-To será atualizado para fornecer proteção de loop e o programa de entrega local será executado novamente).
    2. Encaminhar para um endereço remoto (como uma conta do Gmail ou algo do tipo).
    3. Entregue em um diretório Maildir local de propriedade de um usuário específico (sempre o mesmo usuário por enquanto).

Eu só preciso lidar com emails endereçados a um domínio. Em algum momento, gostaria de adicionar um novo domínio no qual todos os e-mails são manipulados pelo Mailman, apesar de que seria bom rejeitar qualquer e-mail de um endereço de lista inexistente antes da entrega.

Existem indicadores para documentos que especificam como atingir um ou mais desses objetivos? O manual do Postfix para local e transporte é muito obtuso para realmente ser útil. Seria bom ter um documento especificando o fluxo de correspondência através do sistema e como ele pode ser alterado em vários pontos.

Além disso, embora eu possa escrever meu próprio programa para entregar em uma caixa de correio do Maildir, fazê-lo corretamente é bastante complicado, e eu gostaria de evitá-lo se for possível e ter a parte do Postfix que já sabe como faça isso.

O postfix será executado em um contêiner. O diretório de filas e os diretórios do Maildir serão sistemas de arquivos persistentes que são montados dentro do contêiner. Eu presumo que todos os programas necessários para implementar as coisas de que falei antes (postgrey, spamassassin, o que determina como o correio local será descartado) também serão executados no mesmo container. Talvez eu tenha que providenciar para que o estado que postgrey e spamassassin mantenham também seja persistente em invocações de contêineres.

Eu estarei usando o mutt para ler o e-mail. Atualmente, serei a única pessoa para quem os e-mails serão entregues localmente, embora eu tenha vários diretórios Maildir diferentes para os quais as coisas serão entregues. Provavelmente vou rodar o Dovecot no mesmo sistema (talvez contêiner em um container diferente) para fazer isso.

Além disso, tenho algumas centenas de endereços de destinatários locais, a maioria dos quais desejo tratar de maneira idêntica. Todos eles se encaixam em um padrão, mas alguns que se encaixam nesse padrão precisam ser tratados de forma diferente dos outros. Eu sei que de antemão sem referência ao conteúdo do e-mail, para que eu possa criar padrões mais específicos para eles.

    
por Omnifarious 28.12.2017 / 00:36

1 resposta

2

Muitos dos itens podem ser abordados na seção smtpd_client_restrictions dos Parâmetros de configuração do Postfix

Aqui estão as restrições do meu cliente:

smtpd_client_restrictions = permit_mynetworks 
                            permit_sasl_authenticated
                            check_helo_access 
                            hash:/etc/postfix/helo_access
                            check_client_access 
                            hash:/etc/postfix/client_checks 
                            reject_unauth_destination
                            check_policy_service unix:private/policy-spf
                            reject_rbl_client cbl.abuseat.org
                            reject_rbl_client pbl.spamhaus.org
                            reject_rbl_client sbl.spamhaus.org
                            reject_rbl_client bl.blocklist.de
                            reject_unknown_client

Esta configuração remove cerca de 99% do correio de spam recebido. A lista é uma lista ordenada. Cada cheque passa para o próximo. Quando ocorre uma falha, o email é rejeitado. Descobri que precisava criar algumas exceções para minhas regras e elas estão contidas no arquivo client_checks db.

Este arquivo de exceção é assim:

cat /etc/postfix/client_checks

ip.address.123.456     OK
ip.address.789.123     REJECT

Depois de criar o arquivo colunar de texto simples, você precisa emitir o comando postmap para que o arquivo seja enviado como um arquivo db.

postmap /etc/postfix/client_checks

As regras de encaminhamento para um sistema que tem um ou dois destinatários devem ser fáceis de configurar por meio de aliases.

man aliases
man postaliases

O formato e o procedimento do arquivo são praticamente os mesmos. Digite aliases linha por linha e, em seguida, emita o comando postaliases para criar o banco de dados.

Para aliases mais complicados, expressões regulares podem ser incluídas em sua tabela de alias:

man regexp_table
...
EXAMPLE SMTPD ACCESS MAP
   # Disallow sender-specified routing. This is a must if you relay mail
   # for other domains.
   /[%!@].*[%!@]/       550 Sender-specified routing rejected

   # Postmaster is OK, that way they can talk to us about how to fix
   # their problem.
   /^postmaster@/       OK

   # Protect your outgoing majordomo exploders
   if !/^owner-/
   /^(.*)-outgoing@(.*)$/  550 Use ${1}@${2} instead
   endif
    
por 28.12.2017 / 01:07