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:
- cuando se recibe un correo electrónico desde 127.0.0.1,
From: root
se reescribe como (es decir, raíz@$nombredehost)From: [email protected]
- cuando se recibe un correo electrónico desde 1.2.3.4,
From: root
se reescribe como (es decir, raíz@$midominio)From: [email protected]
- cuando se recibe un correo electrónico de otra persona,
From: root
se rechaza (ya quereject_non_fqdn_sender
existe una restricción)
El problema
La variable $myorigin
deberí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:smtp
con myorigin = $myhostname
y 192.168.1.2:smtp
con myorigin = $mydomain
, pero como la opción myorigin está relacionada con el proceso de reescritura trivial, se ignora.
El mapeo de canonical
/ virtual
parece ser inutilizable ya que ocurre después de que se ejecutan reescrituras triviales.
La asignación de aliases
parece 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.cf
configuració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.cf
configuració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