Estou tendo dificuldade em descobrir como criar uma configuração específica do Postfix para uma instância do Postfix que será executada dentro de um contêiner.
Aqui estão meus requisitos:
- Não permitir 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 como permitir que um programa fora do contêiner enfileire mensagens para o Postfix em execução no contêiner seja um enigma interessante).
- Execute todas as mensagens recebidas de endereços IP não retransmissores por meio de um pequeno conjunto de verificações e recuse a entrega se não passar em todas:
- Se o IP do remetente estiver em um RBL especificado, rejeite-o.
- Lista cinza de IPs de entrada que eu não aceitei antes.
- Se a parte do usuário do endereço de destino não corresponder a nenhum de um pequeno conjunto de regexps, rejeite-o.
- Se o e-mail não passar por algumas verificações simples e rápidas do spamassass, rejeite-o.
- Para todas as entregas locais, use um programa para determinar a disposição final. Este programa terá um dos quatro resultados.
- Entregue em um endereço local diferente (Delivered-To será atualizado para fornecer proteção de loop e o programa de entrega local será executado novamente).
- Encaminhe para um endereço remoto (como uma conta do Gmail ou algo assim).
- Entregue em um diretório Maildir local pertencente a um usuário específico (sempre o mesmo usuário por enquanto).
Eu só preciso lidar com e-mails endereçados a um domínio. Em algum momento, gostaria de adicionar um novo domínio no qual todos os e-mails sejam manipulados pelo Mailman, embora novamente seja bom rejeitar qualquer e-mail para um endereço de lista inexistente antes da entrega.
Existem indicações de documentos que especificam como atingir um ou mais desses objetivos? O manual do Postfix para local e transporte é muito obtuso para ser realmente útil. Seria bom ter um documento especificando o fluxo de correspondência pelo sistema e como ele pode ser alterado em vários pontos.
Além disso, embora eu possa escrever meu próprio programa para entregar a uma caixa de correio Maildir, fazer isso perfeitamente corretamente é bastante complicado, e eu gostaria de evitá-lo se possível e ter a parte do Postfix que já sabe como fazer isso lidar isto.
O Postfix será executado em um contêiner. O diretório da fila e os diretórios Maildir serão sistemas de arquivos persistentes montados dentro do contêiner. Presumo que todos os programas necessários para implementar o que mencionei antes (postgrey, spamassassin, o que determina como o correio local será descartado) também serão executados no mesmo contêiner. Posso ter que providenciar para que o estado que postgrey e spamassassin mantenha também seja persistente nas invocações de contêiner.
Eu estarei usando mutt para ler o e-mail. Atualmente, serei a única pessoa para quem a correspondência será entregue localmente, embora tenha vários diretórios Maildir diferentes para os quais as coisas serão entregues. Provavelmente estarei executando o Dovecot no mesmo sistema (talvez em um contêiner em um contêiner 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 maneira diferente dos outros. Eu sei qual de antemão sem referência ao conteúdo do e-mail, então posso criar padrões mais específicos para eles.
Muitos dos itens podem ser abordados na
smtpd_client_restrictions
seção de Parâmetros de configuração do PostfixAqui estão minhas restrições de cliente:
Essa configuração remove cerca de 99% dos emails de spam recebidos. A lista é uma lista ordenada. Cada verificação passa para a próxima. Quando ocorre uma falha, o e-mail é rejeitado. Descobri que precisava criar algumas exceções às minhas regras e elas estão contidas no
client_checks
arquivo db.Este arquivo de exceção se parece com isto:
Depois de criar o arquivo colunar de texto simples, você precisa emitir o
postmap
comando para que o arquivo seja gerado como um arquivo db.As regras de encaminhamento para um sistema que possui um ou dois destinatários devem ser bastante fáceis de configurar por meio de aliases.
O formato e o procedimento do arquivo são praticamente os mesmos. Insira os aliases linha por linha e emita o
postaliases
comando para criar o banco de dados.Para aliases mais complicados, expressões regulares podem ser incluídas em sua tabela de alias: