Postfix, bí danh ảo và Catchall cho các địa chỉ không xác định


8

Trong Postfix 2.10.2, tôi có một thiết lập với nhiều tên miền và một số bí danh ảo để gán địa chỉ thư cho người dùng cục bộ. Nó hoạt động tốt miễn là tôi không thêm một cái bẫy.

Trước khi tôi sử dụng các bí danh ảo, tôi đã xác định rõ

local_recipient_maps =
luser_relay = catchall

nhưng vì tôi cần sắp xếp các địa chỉ thư từ các miền khác nhau, tôi phải sử dụng các bí danh ảo.

Bây giờ postfix.org nói rằng tôi nên làm như thế này, điều mà tôi đã làm:

/etc/postfix/main.cf:

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

/ etc / postfix / ảo:

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

Nhưng nếu tôi làm như vậy, địa chỉ Catchall lấy tất cả thư của tôi thay vì chỉ thư đến địa chỉ không được xác định rõ ràng. Tại sao lại như vậy và làm thế nào để tôi thay đổi nó?

Tôi đã làm postmap ảo và cũng khởi động lại Postfix. Không có lỗi trong nhật ký, nó chỉ ghi nhật ký giao hàng đến địa chỉ Catchall. Và có một cảnh báo "không liệt kê domain example.com trong BOTH mydestination và virtual_alias_domains", nhưng tôi đã không làm điều đó! Tôi thậm chí không có một chỉ thị mydestination. (Có một cấu hình bên dưới, nhưng tôi đã thêm rằng sau khi NickW đề xuất như vậy.)

Đây là conf hoàn chỉnh của tôi:

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

Câu trả lời:


4

Nếu bạn bao gồm bắt tất cả địa chỉ email trong bí danh ảo thì nó sẽ hoạt động.

trong main.cf:

 virtual_alias_maps = hash:/etc/postfix/virtual

trong virtual:

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

Giải pháp này là dễ thực hiện nhất, và hoạt động như mong đợi. Cảm ơn bạn!
EdwardTeach

1
Lưu ý: trận chung kết strong virtual_alias_maps.
FMCorz

3

Vì vậy, tôi đã tìm ra nó. Một số người đề nghị rằng tất cả bắt phải ở trên cùng của tệp bí danh ảo, nhưng tôi đã thử điều đó trước đây và nó không có ích gì (mặc dù tôi thấy giải pháp đó khá logic).

Những gì đã làm việc là:

  1. Đặt mydestination=localhost(không phải $myhostname)
  2. Thêm phần bắt trên đầu tệp bí danh ảo: @domain.com catchall-account@localhost
  3. Thêm tất cả các bí danh ảo khác bên dưới: contact@domain.com contact@localhost

Ví dụ giả định rằng bạn có người dùng UNIX được đặt tên catchall-accountcontact. Thư đến contact@domain.com sẽ được gửi đến người dùng liên hệ trong khi tất cả các thư khác sẽ được gửi đến tài khoản bắt tất cả.

Có thể điều này không cần thiết trong mọi trường hợp, nhưng trong trường hợp đặc biệt của tôi, tôi muốn sử dụng tài khoản để lưu thư cho một số địa chỉ, nhưng thư được gửi trực tiếp đến tài khoản đó sẽ kết thúc trong tất cả.

Xét cho cùng, có vẻ như Postfix không hoạt động thông qua các bí danh ảo từ trên xuống dưới và tất cả các phần tử bắt có ưu tiên đặc biệt. Tôi sẽ vui mừng về những bình luận thêm trong trường hợp ai đó thực sự có thể giải thích hành vi này.


Trong postfix.org/postconf.5.html#virtual_mailbox_maps , có câu sau: "Trong bảng tra cứu, chỉ định phía bên trái của" @ domain.tld "để khớp với bất kỳ người dùng nào trong miền được chỉ định không có một mục "user@domain.tld" cụ thể. " - Tôi nghĩ nó giống với virtual_alias_maps, vì vậy thứ tự không tạo ra sự khác biệt nào cả
Daniel Alder

0

Thử đặt cài đặt của bạn mydestination = $myhostnamevà đảm bảo tên máy chủ của bạn được định cấu hình trong main.cf, ví dụ : myhostname = mail.example.com.


Điều đó không thay đổi gì cả. Cảnh báo vẫn còn đó và tin nhắn vẫn được gửi đến.
Konzertheld

Bạn có phiền khi đặt phần còn lại của main.cf vào câu hỏi không?
NickW
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.