48 votos

Obligando a la dirección cuando postfix relés a través de smtp

Estoy tratando de conseguir informes de correo electrónico de nuestra AWS instancias de EC2. Estamos usando Exchange Online (parte de Microsoft Online Services). He configuración de una cuenta de usuario específica para la retransmisión SMTP, y he de configuración de Postfix para cumplir con todos los requisitos para la retransmisión de mensajes a través de este servidor. Sin embargo, Exchange Online SMTP del servidor rechazará los mensajes a menos que la dirección coincida exactamente con la autenticación de direcciones (es el mensaje de error 550 5.7.1 Client does not have permissions to send as this sender).

Con cuidado de configuración, puedo configurar mis servicios para enviar a este usuario. Pero yo no soy un gran fan de cuidado - prefiero tener postfix fuerza de la cuestión. Es allí una manera de hacer esto?

69voto

Jasper Puntos 46

Esto es cómo hacerlo en postfix.

Esta config cambios de direcciones de remitente de ambos locales se originó, y se transmitió de correo SMTP de tráfico:

/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 sobre direcciones de correo electrónico procedentes del propio servidor

/etc/postfix/sender_canonical_maps:

/.+/    newsender@address.com

Reescritura de dirección SMTP de correo electrónico transmitido

/etc/postfix/header_check:

/From:.*/ REPLACE From: newsender@address.com

Eso es muy útil si por ejemplo el uso de un relé local smtp server el cual es utilizado por todos sus multifunctionals y varias aplicaciones.

Si usa Office 365 servidor SMTP, cualquier mensaje de correo con una dirección de remitente diferentes que el correo electrónico del usuario autenticado en sí simplemente se negó. El de arriba de configuración impide que este.

18voto

Jocelyn Puntos 141

Con el fin de reescritura DE direcciones debe utilizar smtp_generic_maps.

De acuerdo con postfix documentación :

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

/etc/postfix/generic:
    his@localdomain.local       hisaccount@hisisp.example
    her@localdomain.local       heraccount@herisp.example
    @localdomain.local      hisaccount+local@hisisp.example

Luego de hacer:

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

Referencias:

8voto

Mark Hatton Puntos 685

Actualización: En el consejo de un amigo, yo estoy usando postfix en todos mis servidores, en lugar de hacer una nube de servidor de correo. Aquí está mi solución hasta el momento:

/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 relayer@hosteddomain.com: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 relayer@hosteddomain.com
# output of hostname -f
@domU-01-02-03-04-05-06.compute-1.internal relayer@hosteddomain.com

/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:           awsadmins@hosteddomain.com

/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 de las que estoy contento:

  • Una gran cantidad de correo electrónico que se le envía a la root, y una línea en alias dirige quién lo recibe.
  • Todo el correo de los usuarios locales se traduce venir desde relayer@hosteddomain.com, por lo que se obtiene a través de la MS en Línea del servidor SMTP.
  • postfix tiene mucho mejor documentación de sendmail.

Cosas que no estoy feliz por:

  • Personalizado cambios son necesarios para cada host, y varios pasos. Escribí un script en bash para ayudar.
  • El passwd nombre truco no siempre funciona, y puede ser difícil de averiguar cuál es el servidor de correo.
  • Cada correo enviado pone tres avisos en el registro:
    1. warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list (Servidor SMTP envía un null AUTH lista antes de STARTTLS, pero AUTH LOGIN después).
    2. certificate verification failed for smtp.mail.microsoftonline.com: num=20:unable to get local issuer certificate (Hay algunas opciones de configuración de alrededor de certs, pero no estoy seguro de si la entrega de correo se rompe cuando el certificado se renueva)
    3. certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted (Lo mismo que #2)

Gracias a la serverfault de la comunidad para el intercambio de opiniones fuertes sobre los servidores de correo.

4voto

Eric Labashosky Puntos 136

Usted puede utilizar smtpd_sender_login_maps para especificar una lista de los mapas: la dirección del remitente - usuario.

Ejemplo:

smtpd_sender_login_maps = 
    hash:/etc/postfix/login-map 

/etc/postfix/login-mapa:

mail1@domain    userlogin
mail2@domain    userlogin, otheruser@example.com

Funciona para el envío, se debe trabajar para la retransmisión de la misma manera.

1voto

ZHANG Cheng Puntos 1

Yo uso canónico de asignación de volver a escribir la dirección, tales como la reescritura de root@app01 a no-reply@example.com.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: