Postfix, alias virtual dan catchall untuk alamat yang tidak ditentukan


8

Di Postfix 2.10.2, saya memiliki pengaturan dengan beberapa domain dan beberapa alias virtual untuk menetapkan alamat surat kepada pengguna lokal. Ini berfungsi dengan baik selama saya tidak menambahkan catchall.

Sebelum saya menggunakan alias virtual, saya memiliki catchall yang didefinisikan dengan

local_recipient_maps =
luser_relay = catchall

tetapi karena saya perlu memilah alamat email dari domain yang berbeda, saya harus menggunakan alias virtual.

Sekarang postfix.org mengatakan saya harus melakukannya seperti ini, yang saya lakukan:

/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

Tetapi jika saya melakukannya, alamat catchall mengambil semua email saya, bukan hanya email ke alamat yang tidak didefinisikan secara eksplisit. Mengapa begitu dan bagaimana cara mengubahnya?

Saya melakukan postmap virtual dan juga me-restart Postfix. Tidak ada kesalahan dalam log, itu hanya mencatat pengiriman ke alamat catchall. Dan ada peringatan "jangan daftarkan domain example.com di KEDUA mydestination dan virtual_alias_domains", tapi saya tidak melakukannya! Aku bahkan tidak punya petunjuk penentuan tujuan. (Ada satu di konfigurasi di bawah ini, tetapi saya menambahkannya setelah NickW menyarankan demikian.)

Ini conf lengkap saya:

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

Jawaban:


4

Jika Anda menyertakan tangkap semua alamat email dalam alias virtual maka itu akan berfungsi.

di main.cf:

 virtual_alias_maps = hash:/etc/postfix/virtual

di virtual:

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

Solusi ini adalah yang paling mudah diterapkan, dan berfungsi seperti yang diharapkan. Terima kasih!
EdwardTeach

1
Catatan: final sdi virtual_alias_maps.
FMCorz

3

Jadi, saya menemukan jawabannya. Beberapa orang menyarankan agar catch-all harus berada di atas file alias virtual, tetapi saya sudah mencobanya sebelumnya dan itu tidak membantu (walaupun saya menemukan solusi itu cukup logis).

Apa yang berhasil adalah:

  1. Setel mydestination=localhost(yang tidak $myhostname)
  2. Tambahkan catchall di atas file alias virtual: @domain.com catchall-account@localhost
  3. Tambahkan semua alias virtual lainnya di bawah: contact@domain.com contact@localhost

Contoh ini mengasumsikan Anda memiliki nama pengguna UNIX catchall-accountdan contact. Email ke contact@domain.com akan dikirimkan ke pengguna kontak sementara semua email lainnya akan dikirim ke akun catch-all.

Mungkin ini tidak perlu dalam semua kasus, tetapi dalam kasus khusus saya, saya ingin menggunakan akun untuk menyimpan email untuk beberapa alamat, tetapi email yang dikirim langsung ke akun itu harus berakhir di catch-all.

Lagipula, sepertinya Postfix tidak berfungsi dengan alias virtual dari atas ke bawah, dan catch-alls memiliki beberapa prioritas khusus. Saya akan senang dengan komentar lebih lanjut jika seseorang benar-benar dapat menjelaskan perilaku ini.


Di postfix.org/postconf.5.html#virtual_mailbox_maps , ada kalimat berikut: "Dalam tabel pencarian, tentukan sisi kiri" @ domain.tld "untuk mencocokkan pengguna mana pun di domain yang ditentukan yang tidak memiliki entri "user@domain.tld" tertentu. " - Saya pikir itu serupa di virtual_alias_maps, sehingga pesanannya tidak membuat perbedaan sama sekali
Daniel Alder

0

Coba atur mydestination = $myhostname, dan pastikan nama host Anda dikonfigurasi di main.cf, misalnya myhostname = mail.example.com,.


Itu tidak mengubah apa pun. Peringatan masih ada di sana dan pesannya tetap masuk ke catchall.
Konzertheld

Maukah Anda menempatkan sisa main.cf Anda dalam pertanyaan?
NickW
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.