Postfix, alias virtuales y catchall para direcciones indefinidas


8

En Postfix 2.10.2, tengo una configuración con múltiples dominios y varios alias virtuales para asignar direcciones de correo a usuarios locales. Funciona bien siempre que no agregue un catchall.

Antes de usar alias virtuales, tenía un catchall definido con

local_recipient_maps =
luser_relay = catchall

pero como necesito ordenar las direcciones de correo de diferentes dominios, tuve que usar alias virtuales.

Ahora postfix.org dice que debería hacerlo así, lo cual hice:

/etc/postfix/main.cf:

virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual

/ etc / postfix / virtual:

postmaster@example.com account1
info@example.com       account1
sales@example.com      account2
@example.com         catchall

Pero si lo hago, la dirección general captura todo mi correo en lugar de solo el correo a direcciones no definidas explícitamente. ¿Por qué es eso y cómo lo cambio?

Hice postmap virtual y también reinicié Postfix. No hay errores en el registro, solo registra la entrega en la dirección general. Y hay una advertencia "no enumere el dominio example.com en AMBOS mydestination y virtual_alias_domains", ¡pero no hice eso! Ni siquiera tengo una directiva de destino. (Hay uno en la configuración a continuación, pero lo agregué después de que NickW lo sugirió).

Aquí está mi conf completa:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -m "${EXTENSION}"
mailbox_size_limit = 0
mydestination = $myhostname
myhostname = mydomain.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/dovecot/dovecot.pem
smtpd_tls_key_file = /etc/dovecot/private/dovecot.pem
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
virtual_alias_domains = $myhostname, myotherdomain.com
virtual_alias_maps = hash:/etc/postfix/virtual

Respuestas:


4

Si incluye capturar todas las direcciones de correo electrónico en un alias virtual, funcionará.

en main.cf:

 virtual_alias_maps = hash:/etc/postfix/virtual

en virtual:

user1@example.com           user1@example.com
user2@example.com           user2@example.com
...
catchall@example.com        catchall@example.com
@example.com                catchall@example.com

Esta solución es la más fácil de implementar y funciona como se espera. ¡Gracias!
EdwardTeach

1
Nota: la final sen virtual_alias_maps.
FMCorz

3

Entonces, lo descubrí. Algunas personas sugieren que el conjunto debe estar en la parte superior del archivo de alias virtual, pero lo intenté antes y no ayudó (aunque encontré que la solución era bastante lógica).

Lo que funcionó es:

  1. Conjunto mydestination=localhost(eso no es $myhostname)
  2. Agregue el catchall en la parte superior del archivo de alias virtual: @domain.com catchall-account@localhost
  3. Agregue todos los demás alias virtuales a continuación: contact@domain.com contact@localhost

El ejemplo supone que tiene usuarios UNIX nombrados catchall-accounty contact. Los correos a contact@domain.com se enviarán al usuario del contacto, mientras que todos los demás correos se enviarán a la cuenta general.

Tal vez esto no sea necesario en todos los casos, pero en mi caso especial quiero usar una cuenta para guardar el correo de algunas direcciones, pero el correo enviado directamente a esa cuenta debería terminar en el todo.

Después de todo, parece que Postfix no funciona a través de los alias virtuales de arriba a abajo, y adicionalmente, los comodines tienen alguna prioridad especial. Estaré encantado de recibir más comentarios en caso de que alguien pueda explicar este comportamiento.


En postfix.org/postconf.5.html#virtual_mailbox_maps , existe la siguiente oración: "En una tabla de búsqueda, especifique un lado izquierdo de" @ domain.tld "para que coincida con cualquier usuario en el dominio especificado que no tiene una entrada específica "usuario@dominio.tld". - Creo que es similar en virtual_alias_maps, por lo que el orden no hace ninguna diferencia
Daniel Alder

0

Intenta configurar el mydestination = $myhostname, y asegúrese de que esté configurado el nombre de host en main.cf, por ejemplo, myhostname = mail.example.com.


Eso no cambió nada. La advertencia sigue ahí y el mensaje sigue siendo de gran alcance.
Konzertheld

¿Te importaría poner el resto de tu main.cf en la pregunta?
NickW
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.