Postifix: use myorigin=$myhostname para correo electrónico local y myorigin=$mydomain para redes confiables

Postifix: use myorigin=$myhostname para correo electrónico local y myorigin=$mydomain para redes confiables

Tengo una instancia de postfix configurada para la reescritura de direcciones que permite la canonicalización del encabezado.

Configuraciones actuales (¿obligatorias?)

Estas son las configuraciones 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 deseado

Quiero lograr eso:

  1. cuando se recibe un correo electrónico desde 127.0.0.1, From: rootse reescribe como (es decir, raíz@$nombredehost)From: [email protected]
  2. cuando se recibe un correo electrónico desde 1.2.3.4, From: rootse reescribe como (es decir, raíz@$midominio)From: [email protected]
  3. cuando se recibe un correo electrónico de otra persona, From: rootse rechaza (ya que reject_non_fqdn_senderexiste una restricción)

El problema

La variable $myorigindebería ser diferente según la dirección de recepción, pero no encuentro la manera de hacerlo. Hasta ahora he probado muchas soluciones pero he fallado.

Intento fallido...

Intenté crear dos servicios maestros smtp, 127.0.0.1:smtpcon myorigin = $myhostnamey 192.168.1.2:smtpcon myorigin = $mydomain, pero como la opción myorigin está relacionada con el proceso de reescritura trivial, se ignora.

El mapeo de canonical/ virtualparece ser inutilizable ya que ocurre después de que se ejecutan reescrituras triviales.

La asignación de aliasesparece ser inutilizable ya que se utilizan después de que se determina que el mensaje se enviará a $mydestination, pero estos mensajes se envían a otra parte.

Respuesta1

Gracias aansiedadcomentarios encontré la solución.

El esquema de solución

De acuerdo aDocumentos oficiales de PostfixEn cuanto a la reescritura, el árbol de procesos maestro es como el siguiente:

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

Entonces terminé creando una canalización específica para localhost, como la siguiente:

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

La configuración

Esta es la main.cfconfiguración, que representa configuraciones 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 es la master.cfconfiguración, con el pipeline personalizado:

# 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

información relacionada