Postifix: use myorigin=$myhostname para email local e myorigin=$mydomain para redes confiáveis

Postifix: use myorigin=$myhostname para email local e myorigin=$mydomain para redes confiáveis

Eu tenho uma instância postfix configurada para reescrita de endereço que permite a canonização do cabeçalho.

Configurações atuais (obrigatórias?)

Estas são as configurações relevantes:

# Basic conf
myhostname = hostname.example.test
mydomain = example.test
mynetworks = 127.0.0.0/8,1.2.3.4/32
myorigin = $mydomain
mydestination =

# Rewrite options
append_at_myorigin = yes
local_header_rewrite_clients = permit_mynetworks
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

# restrictions (redacted for readability)
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, permit

Resultado desejado

Eu quero conseguir isso:

  1. quando um e-mail é recebido de 127.0.0.1, From: rooté reescrito como (ou seja, root@$hostname)From: [email protected]
  2. quando um e-mail é recebido da versão 1.2.3.4, From: rooté reescrito como (ou seja, root@$meudominio)From: [email protected]
  3. quando um e-mail é recebido de qualquer outra pessoa, o e-mail From: rooté rejeitado (uma vez que a restrição reject_non_fqdn_senderestá em vigor)

O problema

A variável $myorigindeve ser diferente com base no endereço de recebimento, mas não consigo encontrar uma maneira de fazer isso. Até agora tentei muitas soluções, mas falhei.

Tentativa sem sucesso...

Eu tentei criar dois serviços mestre SMTP - 127.0.0.1:smtpcom myorigin = $myhostnamee 192.168.1.2:smtpcom myorigin = $mydomain- mas como a opção myorigin está relacionada ao processo de reescritas triviais, ela é ignorada.

O mapeamento para canonical/ virtualparece ser inutilizável, pois ocorre após a execução de reescritas triviais.

O mapeamento para aliasesparece ser inutilizável, pois eles são usados ​​​​depois que a mensagem é determinada para ser enviada para $mydestination, mas essas mensagens são enviadas para outro lugar.

Responder1

Graças aanxfeedback encontrei a solução.

O esquema de solução

De acordo comDocumentos oficiais do Postfixsobre reescrita, a árvore do processo mestre é semelhante a esta:

smtp   --+--> cleanup --> rewrite --> [queue]
pickup --/

Então acabei criando um pipeline específico para localhost, como o seguinte:

192.168.1.2:smtp  --+--> cleanup --> rewrite ------------+--> [queue]
127.0.0.1:smtp  --+--> cleanup_local --> rewrite_local --/
pickup -----------/

A configuração

Esta é a main.cfconfiguração, que representa configurações de IP externas:

#  configure the global desiderata

# Basic conf (for display purpose, use your own configuration)
# myhostname = hostname.example.test
# mydomain = example.test
# mydestination =
# mynetworks = 127.0.0.0/8,1.2.3.4/32

# Rewrite options
myorigin = $mydomain
append_at_myorigin = yes
local_header_rewrite_clients = permit_mynetworks
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

# restrictions (redacted for readability)
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, permit

Esta é a master.cfconfiguração, com o pipeline customizado:

# add this for local smtp service
127.0.0.1:smtp      inet  n       -       n       -       -       smtpd
  -o myorigin=$myhostname
  -o cleanup_service_name=cleanup_local
  -o inet_interfaces=loopback-only
  -o local_header_rewrite_clients=permit_inet_interfaces

# edit pickup sevice with this two options
pickup    unix  n       -       n       60      1       pickup
  -o myorigin=$myhostname
  -o cleanup_service_name=cleanup_local

# add this for local email cleanup
cleanup_local   unix  n       -       n       -       0       cleanup
  -o myorigin=$myhostname
  -o rewrite_service_name=rewrite_local

# add this for local email basic rewrite
rewrite_local   unix  -       -       n       -       -       trivial-rewrite
  -o myorigin=$myhostname
  -o local_header_rewrite_clients=permit_inet_interfaces

# Then for each public IP assigned to the machine, add smtp service like this
192.168.3.85:smtp      inet  n       -       n       -       -       smtpd
# and remove default service smtp inet [..cut..] smtpd

informação relacionada