Como adicionar um único cabeçalho para qualquer e-mail recebido com Postfix?

Como adicionar um único cabeçalho para qualquer e-mail recebido com Postfix?

Tenho o Postfix em execução com vários processos smtpd configurados em master.cf assim:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
  -o ...   # internet-only overrides

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
  -o ...   # internal-only overrides

Agora, gostaria de adicionar um único cabeçalho, com nome e valor estáticos, paraentradamail dependendo de qual smtpd foi recebido.

Exemplo:

X-Gert-Postfix-Received-From: the evil internet

Minhas opções consideradas:

  1. Adicione oheader_checksopção e use a PREPENDação no arquivo.

    Quase lá, mas:

    • É necessário corresponder a um cabeçalho existente e, em seguida, adicionar mais um nas correspondências subsequentes.
    • Nem sempre tenho um determinado cabeçalho presente, talvez até Fromesteja faltando um, por exemplo.
    • Caso você já exista header_checks, não há uma maneira fácil de empilhar dois header_checkarquivos, eu acho.
  2. Crie um aplicativo personalizado que use oProtocolo Miltere conecte-o ao Postfix com smtpd_milters.

    Claro, isso funcionará. Posso inspecionar o e-mail em meu próprio aplicativo e injetar o cabeçalho lá. Parece excesso de engenharia para uma tarefa simples como adicionar um cabeçalho. Além disso, requer manutenção extra com a necessidade de executar outro aplicativo daemon, algum código padrão, etc.

  3. Conforme sugerido em um comentário, use check_recipient_access(Q relacionado).

    As mesmas desvantagens de header_checks(ver 1).

Sinto que estou perdendo algo simples. Alguém tem uma ideia melhor?

Responder1

Caso você tenha header_checks existentes, não há uma maneira fácil de empilhar dois arquivos header_check, eu acho.

Na verdade, existe uma maneira de ter vários arquivos header_checks independentes por daemon.

cada-oA opção em seu master.cf substitui um valor padrão ou qualquer parâmetro de configuração postfix em main.cf. Para ter header_checks diferentes por daemon (digamos/etc/postfix/header_checks1e/etc/postfix/header_checks2), você terá que substituir cadaheader_checksparâmetro:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks1

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks2

Desta forma você terá total independênciaheader_checksarquivos por daemon smtpd. A partir daí você pode adicionar regras que precedem a tag da qual você estava falando.

Responder2

Para contornar as limitações de smtpd_*_restrictions:

Uma mensagem - mesmo uma com remetente "nulo" - possui exatamente um remetente de envelope. Então use check_sender_accessem vez de check_recipient_access. O tipo de pesquisa usado pode ser static:porque não nos importamos com as especificidades do caminho de retorno. Adicione-o à sua lista de smtpd_sender_restrictions antes de qualquer verificação gerar ACCEPTresultados (o postfix não consultaria pesquisas adicionais além).

# in main.cf
common_sender_restrictions =
  reject_non_fqdn_sender
  reject_unknown_sender_domain
  ..
internet_sender_restrictions =
  $common_sender_restrictions
  check_sender_access static:{PREPEND X-Gert-Postfix-Received-From: the evil internet}

# in master.cf
192.0.2.0:25        inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$internet_sender_restrictions
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$common_sender_restrictions

informação relacionada