Postfix, alias virtuali e catchall per indirizzi non definiti


8

In Postfix 2.10.2, ho una configurazione con più domini e diversi alias virtuali per assegnare indirizzi di posta agli utenti locali. Funziona bene fino a quando non aggiungo un catchall.

Prima di usare gli alias virtuali, avevo definito un catchall

local_recipient_maps =
luser_relay = catchall

ma poiché ho bisogno di ordinare indirizzi di posta da domini diversi, ho dovuto usare alias virtuali.

Ora postfix.org dice che dovrei farlo in questo modo, cosa che ho fatto:

/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

Ma se lo faccio, l'indirizzo catchall prende tutta la mia posta anziché solo la posta verso indirizzi non esplicitamente definiti. Perché è così e come lo cambio?

Ho fatto Postmap virtuale e ho anche riavviato Postfix. Non ci sono errori nel registro, registra solo la consegna all'indirizzo catchall. E c'è un avvertimento "non elencare il dominio example.com in ENTRAMBI mydestination e virtual_alias_domains", ma non l'ho fatto! Non ho nemmeno una direttiva mydestination. (Ce n'è uno nella configurazione di seguito, ma l'ho aggiunto dopo che NickW lo ha suggerito.)

Ecco la mia 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

Risposte:


4

Se includi catturare tutti gli indirizzi e-mail in un alias virtuale, funzionerà.

in main.cf:

 virtual_alias_maps = hash:/etc/postfix/virtual

in virtual:

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

Questa soluzione è la più semplice da implementare e funziona come previsto. Grazie!
Edward:

1
Nota: il finale sin virtual_alias_maps.
FMCorz,

3

Quindi l'ho capito. Alcune persone suggeriscono che il catch-all deve essere in cima al file alias virtuale, ma l'ho provato prima e non ha aiutato (anche se ho trovato quella soluzione abbastanza logica).

Ciò che ha funzionato è:

  1. Imposta mydestination=localhost(che non è $myhostname)
  2. Aggiungi il catchall sopra il file alias virtuale: @domain.com catchall-account@localhost
  3. Aggiungi tutti gli altri alias virtuali di seguito: contact@domain.com contact@localhost

L'esempio presuppone che tu abbia utenti UNIX nominati catchall-accounte contact. Le e-mail a contact@domain.com verranno recapitate all'utente di contatto mentre tutte le altre e-mail verranno recapitate sull'account catch-all.

Forse questo non è necessario in tutti i casi, ma nel mio caso speciale voglio usare un account per salvare la posta per alcuni indirizzi, ma la posta inviata direttamente a quell'account dovrebbe finire nel "catch-all".

Dopotutto, sembra che Postfix non stia funzionando attraverso gli alias virtuali dall'alto verso il basso e inoltre tutti hanno una priorità speciale. Sarò felice di ulteriori commenti nel caso in cui qualcuno sia effettivamente in grado di spiegare questo comportamento.


In postfix.org/postconf.5.html#virtual_mailbox_maps è presente la frase seguente: "In una tabella di ricerca, specificare un lato sinistro di" @ domain.tld "in modo che corrisponda a qualsiasi utente nel dominio specificato che non ha una voce "user@domain.tld" specifica. " - Penso che sia simile in virtual_alias_maps, quindi l'ordine non fa alcuna differenza
Daniel Alder,

0

Prova a impostare il tuo mydestination = $myhostnamee assicurati che il tuo nome host sia configurato in main.cf, ad esempio myhostname = mail.example.com.


Ciò non ha cambiato nulla. L'avviso è ancora presente e il messaggio continua a essere visualizzato.
Konzertheld,

Ti dispiacerebbe mettere il resto del tuo main.cf nella domanda?
NickW,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.