[server] 정의되지 않은 주소에 대한 접미사, 가상 별칭 및 catchall

Postfix 2.10.2에는 메일 주소를 로컬 사용자에게 할당하기 위해 여러 개의 도메인과 여러 개의 가상 별칭이있는 설정이 있습니다. catchall을 추가하지 않는 한 제대로 작동합니다.

가상 별칭을 사용하기 전에 다음과 같이 정의 된 catchall이있었습니다.

local_recipient_maps =
luser_relay = catchall

그러나 다른 도메인에서 메일 주소를 정렬해야하므로 가상 별칭을 사용해야했습니다.

이제 postfix.org 는 다음과 같이해야한다고 말합니다.

/etc/postfix/main.cf :

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

/ etc / postfix / 가상 :

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

그러나 그렇게하면 포괄 주소는 명시 적으로 정의되지 않은 주소로 메일 대신 모든 메일을 가져옵니다. 그 이유는 무엇이며 어떻게 변경합니까?

포스트 맵 가상을 수행하고 Postfix를 다시 시작했습니다. 로그에 오류가 없으며 전달을 포괄 주소로 기록합니다. 그리고 “mydestination 및 virtual_alias_domains에 도메인 example.com을 나열하지 마십시오”라는 경고가 있지만 그렇게하지 않았습니다! 나는 신비로운 지시조차하지 않습니다. (아래 구성에 하나가 있지만 NickW가 제안한 후에 ​​추가했습니다.)

내 완전한 conf는 다음과 같습니다.

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



답변

가상 별칭에 모든 이메일 주소를 포함시키는 경우 작동합니다.

에서 main.cf:

 virtual_alias_maps = hash:/etc/postfix/virtual

에서 virtual:

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


답변

그래서 나는 그것을 알아 냈습니다. 어떤 사람들은 catch-all이 가상 별칭 파일 위에 있어야한다고 제안했지만 이전에 시도했지만 도움이되지 않았습니다 (그러나 솔루션이 상당히 논리적이라는 것을 알았습니다).

효과가 있었던 것은 :

  1. 세트 mydestination=localhost(그렇지 않은 $myhostname)
  2. 가상 별명 파일 위에 catchall을 추가하십시오. @domain.com catchall-account@localhost
  3. 아래에 다른 모든 가상 별칭을 추가하십시오. contact@domain.com contact@localhost

이 예는 UNIX 사용자 이름이 있다고 가정 catchall-account하고 contact. contact@domain.com으로 보내는 메일은 연락 담당자에게 전달되고 다른 모든 메일은 범용 계정으로 전달됩니다.

어쩌면 이것이 모든 경우에 필요하지는 않지만, 특별한 경우에는 계정을 사용하여 일부 주소에 대한 메일을 저장하고 싶지만 해당 계정으로 직접 발송 된 메일은 모든 것을 처리해야합니다.

결국 Postfix가 가상 별칭을 통해 위에서 아래로 작동하지 않는 것처럼 보이며, 포괄 모두 특별한 우선 순위를 갖습니다. 누군가가 실제로이 행동을 설명 할 수있는 경우에 대비하여 추가 의견에 대해 기쁠 것입니다.


답변

을 설정 mydestination = $myhostname하고 호스트 이름이 main.cf에 구성되어 있는지 확인하십시오 (예 🙂 myhostname = mail.example.com.


답변