Forzar la dirección de origen cuando Postfix retransmite a través de SMTP

Forzar la dirección de origen cuando Postfix retransmite a través de SMTP

Estoy intentando recibir informes por correo electrónico de nuestras instancias AWS EC2. Estamos utilizando Exchange Online (parte de Microsoft Online Services). He configurado una cuenta de usuario específicamente pararetransmisión SMTPy configuré Postfix para cumplir con todos los requisitos para transmitir mensajes a través de este servidor. Sin embargo, el servidor SMTP de Exchange Online rechazará los mensajes a menos que la dirección De coincida exactamente con la dirección de autenticación (el mensaje de error es 550 5.7.1 Client does not have permissions to send as this sender).

Con una configuración cuidadosa, puedo configurar mis servicios para que envíen como este usuario. Pero no soy un gran partidario de tener cuidado; prefiero que Postfix fuerce el problema. ¿Hay alguna forma de hacer esto?

Respuesta1

Así es como se hace realmente en postfix.

Esta configuración cambia las direcciones del remitente tanto del tráfico de correo SMTP de origen local como del retransmitido:

/etc/postfix/main.cf:

sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps =  regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/header_check

Reescribir la dirección del sobre del correo electrónico que se origina en el propio servidor

/etc/postfix/sender_canonical_maps:

/.+/    [email protected]

Reescribir desde la dirección en el correo electrónico retransmitido SMTP

/etc/postfix/header_check:

/From:.*/ REPLACE From: [email protected]

Esto es muy útil si, por ejemplo, está utilizando un servidor SMTP de retransmisión local que utilizan todos sus equipos multifuncionales y varias aplicaciones.

Si utiliza el servidor SMTP de Office 365, cualquier correo con una dirección de remitente diferente a la del usuario autenticado simplemente será rechazado. La configuración anterior evita esto.

Respuesta2

el opcionalgenéricoLa tabla especifica una asignación de direcciones que se aplica cuando el correo se entrega (envía) desde el servidor.

Esto es lo opuesto acanónicomapeo, que se aplica cuando el servidor recibe el correo.

(Nota: las direcciones DESDE y HASTA coinciden para reemplazar cualquiera de las tablas genéricas y canónicas).

Usando la tabla canónica cuando el correo esrecibido por el servidorYa está explicado son otras respuestas.

Puede reescribir direcciones FROM cuando el correo seaenviado desde el servidorusando smtp_generic_maps.

De acuerdo adocumentación postfix:

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    [email protected]      [email protected]
    @localdomain.local          [email protected]

Entonces hazlo:

sudo postmap /etc/postfix/generic
sudo /etc/init.d/postfix reload

Referencias:

Respuesta3

Actualización: Siguiendo el consejo de un amigo de TI, estoy ejecutando postfix en todos mis servidores, en lugar de crear un servidor de correo en la nube. Aquí está mi solución hasta ahora:

/etc/postfix/main.cf

# output of hostname -f - mail from local users appears to come from here
myhostname = domU-01-02-03-04-05-06.compute-1.internal
# Local delivery - include all 127.0.0.1 aliases from /etc/hosts
mydestination = $myhostname, $mydomain, rest_of_entries_from_hosts
# Needed for address translation to work
myorigin = $mydomain

# Talking to MS Online
# :submission = port 587
relayhost = [smtp.mail.microsoftonline.com]:submission
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =   # Yes, leave empty
smtp_tls_security_level = encrypt
smtp_generic_maps = hash:/etc/postfix/generic

# Enable if you need debugging, but it does leak credentials to the log
#debug_peer_level = 2
#debug_peer_list = smtp.mail.microsoftonline.com

# Only listen on the local interfaces (not the public)
inet_interfaces = localhost

# I left out a bunch of CentOS defaults.  postconf -n is your friend.
# These are included
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

/etc/postfix/sasl_passwd

# Run postmap /etc/postfix/sasl_passwd after editing
# Also, chown root:root; chmod 600
smtp.mail.microsoftonline.com [email protected]:YourP@ssw0rd

/etc/postfix/generic

# Run postmap /etc/postfix/generic
# I've seen local mail come from either source
# output of dnsdomainname
@compute-1.internal [email protected]
# output of hostname -f
@domU-01-02-03-04-05-06.compute-1.internal [email protected]

/etc/aliases

# Run newaliases after changing
# Lot of stuff here. Mostly, just make sure the graph points to root, such as
mailer-daemon:  postmaster
postmaster:     root

# And the important part - your email or distribution group
root:           [email protected]

/etc/passwd

# Sometimes it helps to expand the name, so email comes from 'root at aws host 5'
#  rather than just 'root'
# Was
#root:x:0:0:root:/root:/bin/bash
# Is
root:x:0:0:root on aws host 5:/root:/bin/bash

Cosas que me alegran:

  • Una gran cantidad de correo se envía a la raíz, y la única línea aliasindica quién lo recibe.
  • Todo el correo de los usuarios locales se traduce como proveniente de [email protected], por lo que pasa a través del servidor SMTP de MS Online.
  • postfix tiene documentación mucho mejor que sendmail.

Cosas que no me hacen feliz:

  • Se requieren cambios personalizados para cada host y varios pasos. Escribí un script bash para ayudar.
  • El passwdtruco del nombre no siempre funciona y puede resultar difícil determinar de qué servidor proviene un correo.
  • Cada correo enviado pone tres advertencias en el registro:
    1. warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list(El servidor SMTP envía una AUTHlista nula antes STARTTLS, pero AUTH LOGINdespués).
    2. certificate verification failed for smtp.mail.microsoftonline.com: num=20:unable to get local issuer certificate(Hay algunas opciones de configuración en torno a los certificados, pero no estoy seguro de si la entrega del correo se interrumpe cuando se renueva el certificado)
    3. certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted(Igual que el número 2)

Gracias a la comunidad serverfault por compartir opiniones sólidas sobre los servidores de correo.

Respuesta4

Una respuesta aún más simple frente a una expresión regular (según la respuesta de @Jasper) es utilizar una búsqueda estática:

sender_canonical_maps = static:[email protected]

staticsiempre devuelve el mismo valor (https://www.postfix.org/DATABASE_README.html#types)

información relacionada