Estoy intentando configurar Postfix para retransmitir correo sólo si proviene de localhost, Y sólo si va a un determinado dominio. Sin embargo, tan pronto como especifiqué un servidor de retransmisión, todo (excepto la entrega local) irá allí. Estaba pensando que tenía restricciones incorrectas, así que finalmente bajé a "rechazar todo" y todavía se cumple. Me pregunto si mynetworks
pasa por alto todo, no estoy definido mynetworks
. Todavía transmite todo.
En este punto, postconf -n
da:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = loopback-only
inet_protocols = all
mailbox_size_limit = 0
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks =
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relay_domains = domain.com
relayhost = [mailserver.domain.com]:587
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_client_restrictions = reject
smtpd_recipient_restrictions = reject
smtpd_relay_restrictions = reject
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
Inicialmente estaba intentando algo más como esto (mostrando qué es diferente):
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject
Estoy perdido. Sin mesa de transporte. Sufijo 2.11.0 (Ubuntu 14.04).
Respuesta1
El servidor de retransmisión en la terminología de Postfix es un servidor al que Postfix entregará todo el correo electrónico no local (por ejemplo, Postfix en la red interna de la empresa definiría el servidor de correo electrónico principal de la empresa como su retransmisión, por lo que no intentará ponerse en contacto con los servidores de destino en absoluto). Esto es para enviar correo electrónico y es controlador por elrelayhost
directiva.
Postfix sabe qué dominios son suyos mediante la configuración delmydestination
directiva. Los dominios de esta lista se entregarán localmente (si tienen el registro MX correcto).
Anfitriones enmynetworks
Se les permite enviar correos electrónicos desde todas partes a todas partes. Por lo tanto, debe configurar aquí sólo la red en la que confíe (solo localhost o red interna). Se dice que Postfix transmite el correo electrónico desde estos servidores a Internet. Esta es la configuración predeterminada, que se establece en smtpd_relay_restrictions
(o smtpd_recipient_restrictions
antes de la v2.10) tener el permit_mynetworks
valor. Si lo elimina permit_mynetworks
por completo de la configuración de postfix, mynetworks
el parámetro no hará nada.
Directivarelay_domains
controla para qué dominios no locales postfix acepta correo electrónico de todo el mundo. Esto generalmente se usa cuando su postfix es MX de respaldo para algún dominio.
Entonces, en su caso, la configuración debería estar mynetworks
vacía (si no es posible, use alguna IP interna que no se use en su red, como 10.10.10.10)Oeliminar permit_mynetworks
de smtpd_client_restrictions
.
relay_domains = domain.com
mydestination = host.domain.com localhost
relayhost = [mailserver.domain.com]:587
Respuesta2
Esto es lo que finalmente hice funcionar. La clave era default_transport = error
, para que todo lo que no coincida con el relé simplemente rebote. Gracias @Marki555 por hacerme pensar más allá de la configuración de smtpd.
default_transport = error
inet_interfaces = loopback-only
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
relay_domains = domain.com
relay_transport = smtp
relayhost = [mailserver.domain.com]:587
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject
Otra buena sugerencia de depuración de postfix: un mensaje de rebote local (es decir, retransmisión rechazada inmediatamente) todavía tiene el nombre del host de retransmisión, ¡aunque el host de retransmisión no haya sido tocado!
También investigué master_service_disable = inet
, pero hay suficientes cosas que manejan el envío de correo local conectándose a localhost:25 que no fue realmente práctico.