Postfix 및 Office 365: 모든 아웃바운드 이메일(로컬 포함)을 릴레이하지만 인바운드 이메일은 전달합니다.

Postfix 및 Office 365: 모든 아웃바운드 이메일(로컬 포함)을 릴레이하지만 인바운드 이메일은 전달합니다.

한 번에 몇 명의 사용자를 지원한다는 목표로 Postfix/Dovecot에서 Office 365로 천천히 마이그레이션하고 있습니다. 우리 도메인의 메일은 Office 365로 들어와야 하며 Office 365 내에서 일치하는 주소가 없으면 Dovecot 사서함으로 전달하는 Postfix로 전달되어야 합니다(우리는 가상 사용자 설정을 사용하고 있으며 모든 사용자는 별도의 LDAP 서버). 이를 통해 설정된 사용자에 대해서는 Office 365를 사용할 수 있지만 그렇지 않은 사용자에 대해서는 메일이 기존 Postfix/Dovecot 시스템으로 이동됩니다.

나는 팔로우했다이 지침커넥터 등을 만드는 데 성공하면 EOP IP를 허용 목록에 추가한 후 Office 365가 Postfix에 제대로 전달됩니다. 문제는 일이 반대 방향으로 진행되도록 하는 것입니다. 보내는 모든 이메일은 Office 365를 통해 릴레이되어야 하며 relayhost변수를 설정하고 로컬 도메인을 제거 하면 mydestinations작동하지만 Postfix는 들어오는 메일을 배달하지 않습니다(반송 루프가 발생함). 도메인을 그대로 유지하면 mydestinations메일이 로컬로 배달되고 릴레이를 거치지 않습니다. 즉, 여전히 Postfix 시스템에 있는 사용자는 Office 365 사용자에게 이메일을 보낼 수 없습니다.

모든 아웃바운드 이메일(로컬 전송 포함)이 릴레이를 통과하도록 강제하면서도 동일한 도메인에 대한 인바운드 이메일을 허용하는 방법이 있습니까? 나는 어제 내내 벽에 부딪혔고 내가 생각할 수 있는 유일한 실제 해결책은 두 개의 별도 Postfix 인스턴스를 실행하는 것입니다. 하나는 모든 것을 중계하고 다른 하나는 수신 메일에 사용됩니다. 하지만 단 하나의 인스턴스로 이 작업을 수행할 수 있는 방법이 있을까요? 검색해 보았지만 모든 곳에서 귀하가 이메일만 전달하고 다른 작업은 수행하지 않는다고 가정하는 것 같습니다.

postconf -n은 다음과 같습니다(도메인이 example.com으로 변경됨). Office 365를 릴레이하기 위해 변경한 내용을 모두 제거했습니다.

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
content_filter = smtp-amavis:[127.0.0.1]:10024
dovecot_destination_recipient_limit = 1
inet_interfaces = all
inet_protocols = all
mailbox_command = /usr/lib/dovecot/deliver
mailbox_size_limit = 0
mailbox_transport = dovecot
message_size_limit = 20480000
mydestination = $myhostname, silver.example.com, localhost.example.com, localhost, example.com
myhostname = smtp.example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24 192.168.10.0/24
myorigin = /etc/mailname
readme_directory = no
receive_override_options = no_address_mappings
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
recipient_delimiter = +
relayhost =
smtp_tls_note_starttls_offer = yes
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recipient_access, check_sender_access hash:/etc/postfix/sender_access, check_sender_access cidr:/etc/postfix/o365, reject_authenticated_sender_login_mismatch, permit_sasl_authenticated, permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, reject_unauth_destination, reject_rbl_client bl.spamcop.net, reject_rbl_client b.barracudacentral.org, reject_rbl_client zen.spamhaus.org, reject_rbl_client cbl.abuseat.org
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_sender_login_maps = hash:/etc/postfix/local_senders, ldap:/etc/postfix/ldap_senders.cf
smtpd_tls_CAfile = /etc/ssl/certs/example.com.cabundle
smtpd_tls_cert_file = /etc/ssl/certs/example.com.crt
smtpd_tls_key_file = /etc/ssl/private/example.com.key
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
virtual_alias_domains = events.example.com
virtual_alias_maps = hash:/etc/postfix/redirect, ldap:/etc/postfix/ldap_virtual_users.cf, ldap:/etc/postfix/ldap_virtual_groups.cf
virtual_transport = dovecot

모든 메일 릴레이를 얻으려면 목록 relayhost = example-com.mail.protection.outlook.com에서 example.com을 설정하고 제거 할 수 있습니다 mydestinations. 이렇게 하면 Office 365에서 배달이 작동하지만 이전 시스템이 중단됩니다.

릴레이를 통해 특정 이메일 주소(예: Office 365로 이동한 이메일)에 대한 모든 이메일을 보내는 방법을 살펴봤고 transport_maps다른 모든 이메일은 로컬에서 작동하지만 거기에 있는 값은 항상 무시되는 것 같습니다.

나는 아이디어가 전혀 없으므로 누구든지 아이디어가 있으면 감사하겠습니다.

답변1

좋아, 나는 이것이 완전히 만족스럽지는 않지만 작동하게 했습니다. 좀 더 간단한 방법이 있을 것 같지만 알 수 없습니다.

virtual_alias_maps추가 조사 끝에 실행되는 것을 발견했습니다.~ 전에에 있는 모든 것이 transport_maps무시되고 있다고 생각한 이유입니다. 따라서 주소를 다시 쓰는 경우 가상 별칭 다시 쓰기의 출력이 무엇이든 입력할 내용과 일치해야 합니다 transport_maps. 그러면 내 transport_maps해시는 다음과 같습니다.

[email protected]        smtp:example-com.mail.protection.outlook.com
@example.com  :
*       :

이로 인해 다음 주소로 이메일이 전송됩니다.[이메일 보호됨]Office 365로 릴레이되지만 다른 모든 항목은 로컬로 전달됩니다.

작동하지만 여전히 이 문제를 처리하는 더 좋은 방법이 있다고 생각합니다.

관련 정보