Nota: Eu postei originalmente esta pergunta no Unix/Linux StackExchange, mas depois de uma semana, não houve respostas. Vejo mais discussões relacionadas ao postfix aqui e, por isso, votei para fechar a versão do StackExchange da minha pergunta e movi minha pergunta aqui.
Estou correndo postfix version 2.93
sob Debian 8
, e estou tentando realizar algo incomum.
Eu tenho usado um milter caseiro por anos que está funcionando bem. Ele executa vários testes em cada estágio da caixa de diálogo SMTP: ehlo
, mail from
, rcpt to
, etc .
Eu configurei postfix
para fazer sua verificação padrão para "Usuário desconhecido na tabela de caixa de correio virtual", e isso também está funcionando como deveria.
No entanto ...
Em alguns casos raros, gostaria de interceptar a mensagem recebida durante o rcpt to
estágio, antes postfix
de determinar "Usuário desconhecido na tabela de caixa de correio virtual", e se essas mensagens vierem de um pequeno grupo de determinados remetentes selecionados e forem endereçadas a um pequeno grupo de nomes de destinatários desconhecidos específicos , quero processá-los de maneira diferente do normal por meio dessa etapa milter.
Há informações suficientes disponíveis durante a rcpt to
etapa de milter para realizar esse processamento especial, mas, infelizmente, o processamento "Usuário desconhecido na tabela de caixa de correio virtual" postfix
já rejeita mensagens para usuários desconhecidos antes que a rcpt to
etapa de milter seja chamada e, portanto, essa etapa de milter nunca recebe realizado.
Existe uma maneira de configurar postfix
para rejeitar apenas mensagens com "Usuário desconhecido na tabela de caixa de correio virtual" se o nome do remetente não corresponder a determinados padrões especiais?
Nesse caso, postfix
poderia continuar a rejeitar automaticamente mensagens para a maioria dos usuários desconhecidos e, então, passar apenas aquelas mensagens raras e especiais para o milter para que fossem tratadas durante a rcpt to
etapa.
Eu sei que eu poderia desabilitar completamente os postfix
testes de destinatário desconhecido e, em seguida, gerenciar isso sozinho durante minha rcpt to
etapa de milter para todas as mensagens recebidas. No entanto, se possível, gostaria de evitar isso e de alguma forma dizer postfix
para rejeitar condicionalmente a maioria das mensagens para usuários desconhecidos e passar apenas um pequeno subconjunto dessas mensagens recebidas de remetentes especiais para o processamento milter.
Não estou otimista sobre isso ser possível sob o postfix
, mas talvez um ou mais de vocês conheçam uma maneira de realizar essa tarefa incomum.
Muito obrigado por quaisquer pensamentos e sugestões.
O lado direito de uma
check_sender_access
pesquisa em umasmtpd_*_restrictions
lista pode, por sua vez, conter restrições condicionais nomeadas (documentadas no arquivo RESTRICTION_CLASS_README ). Isso significa que, se o critério para rejeitar mensagens para destinatários desconhecidos for exclusivamente‡ dependente do rfc5321.MailFrom ("envelope remetente"), mover areject_unverified_recipient
instrução dasmtpd_*_restrictions
própria lista para uma pesquisa dependente do remetente deve resolver o problema:Para cada remetente listado (ou qualquer outra
check_*_access
condição única), isso ignora a pergunta "Este destinatário existe?" cheque e, para todos os outros remetentes, ele aplicará essa verificação.Agora, todo esse exercício praticamente só faz sentido se você posteriormente rejeitar incondicionalmente quaisquer mensagens que recebam esse tratamento especial, porque o que o postfix vai fazer com as mensagens ele já deveria ter verificado anteriormente que não será capaz de entregá-las. Você nunca deve emitir relatórios de falha na entrega nos casos em que as rejeições do estágio SMTP seriam possíveis. Se o seu milter precisar apenas dos cabeçalhos das mensagens (como sugere o seu caso de uso de investigação de abusos) você poderá garantir isso adicionando a restrição incondicional também na
smtpd_end_of_data_restrictions
lista (esperando pequenas implicações de desempenho no caso desta segunda pesquisa competir com a verificação de endereço processo).‡ Caso contrário, você pode implementar a decisão de se o caso especial é aplicável em a
check_policy_service
, o que permite decisões mais complexas do que uma pesquisa simples (ou regex) no remetente, por exemplo, você pode analisar o rfc5322.From (cabeçalhos indicando remetente) lá. A única diferença é que, em vez de escrever duas linhas deno-recipient-lookups.pcre
arquivo, você precisa escrever/adaptar e executar um daemon de política que retorna oreject_unverified_recipient
resultado, análogo a como seu Milter atualmente retorna códigos de status SMTP.