Postfix 拒絕從 O365 轉發的電子郵件
我必須使用 Sogo 從 Postfix 遷移 Office 365。我的目標是配置 Office 365 與 Postfix 的小型混合,有點像使用 Exchange On-premises 的方式。
目前,postfix 是一個擁有 1000 個使用者的主伺服器,它發送和接收domain.xyz的所有電子郵件。我已經配置了 Office 365 並向其添加了相同的域。我在上面創建了 2 個郵箱並配置了將domain.xyz設置為 InternalRelay 域的 Exchange Online。
Exchange Online 到目前為止有 2 個帳戶
Exchange 配置為,如果 Exchange 上的某人向 domain.xyz 發送電子郵件並且郵箱位於 Exchange 上,則電子郵件應保留在 Exchange 上,但如果 Exchange 找不到 domain.xyz 的郵箱,則應使用我已經使用的傳出連接器配置為將電子郵件轉發到 postfix。這意味著從 userA 發送到 userB 的任何電子郵件都可以正常工作,但是當 userA 向駐留在 postfix 上的 userC 發送電子郵件時,它會阻止它。
報告錯誤:554 5.7.1 userC@domain.xyz:收件人地址被拒絕:策略拒絕未登錄
我的理解是,Postfix 認為它是唯一擁有域 domain.xyz 的伺服器,它將來自 domain.xyz 的任何電子郵件視為某些使用者/服務試圖在未經授權的情況下發送電子郵件並拒絕它。這證明了當我們在 Office 365 中創建完全隨機的電子郵件時,在 postfix 中沒有相應的帳戶,並且當我們嘗試從 test.user123456@domain.xyz 向 UserC@domain.xyz 發送電子郵件時,我們得到
遠端伺服器返回“550 5.1.0 test.user123456@domain.xyz:發件人地址被拒絕:虛擬郵箱表中的使用者未知”
有什麼方法可以告訴 postfix (SoGo) 開始信任 Office 365(IP 地址範圍)並允許它接收來自它認為自己擁有的域以及它擁有的帳戶的電子郵件。在將 postfix 遷移到 Office 365 的最後一步中,postfix 中的每個帳戶將在 O365 中擁有相同的帳戶,我們將使用電子郵件重定向 1 個郵箱到 onmicrosoft.com 地址,以確保使用者可以使用 O365 而無需擔心他們的後綴帳戶。但要做到這一點,O365 和 postfix 之間的流量需要正常工作。
我猜這不僅是 Office 365 共存的問題,而且有人會使用的任何服務(例如 SendGrid 或類似服務)都會有相同的問題。
最後 - 我無法訪問 postfix/sogo。我只“擁有” o365 方面。我正在嘗試向 Linux/Postfix 團隊提供意見以解決此問題
我從團隊獲得的潛在相關配置位,但我自己不知道這是否正確
# HELO restriction smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated reject_non_fqdn_helo_hostname reject_invalid_helo_hostname check_helo_access pcre:/etc/postfix/helo_access.pcre # Sender restrictions smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender, reject_unlisted_sender, permit_mynetworks, permit_sasl_authenticated, check_sender_access pcre:/etc/postfix/sender_access.pcre #reject_sender_login_mismatch # Recipient restrictions smtpd_recipient_restrictions = reject_unknown_recipient_domain, reject_non_fqdn_recipient, reject_unlisted_recipient, check_policy_service inet:127.0.0.1:7777, permit_mynetworks, permit_sasl_authenticated, #reject_unauth_destination # Data restrictions smtpd_data_restrictions = reject_unauth_pipelining # O365 addresses mynetworks = 127.0.0.0/8, 40.92.0.0/15, 40.107.0.0/16, 52.100.0.0/14, 104.47.0.0/17 # # Lookup virtual mail accounts # transport_maps = #regexp:/etc/postfix/transport_regexp proxy:ldap:/etc/postfix/ldap/transport_maps_user.cf proxy:ldap:/etc/postfix/ldap/transport_maps_domain.cf sender_dependent_relayhost_maps = proxy:ldap:/etc/postfix/ldap/sender_dependent_relayhost_maps_user.cf proxy:ldap:/etc/postfix/ldap/sender_dependent_relayhost_maps_domain.cf # Lookup table with the SASL login names that own the sender (MAIL FROM) addresses. smtpd_sender_login_maps = proxy:ldap:/etc/postfix/ldap/sender_login_maps.cf virtual_mailbox_domains = proxy:ldap:/etc/postfix/ldap/virtual_mailbox_domains.cf relay_domains = $mydestination proxy:ldap:/etc/postfix/ldap/relay_domains.cf virtual_mailbox_maps = proxy:ldap:/etc/postfix/ldap/virtual_mailbox_maps.cf virtual_alias_maps = #regexp:/etc/postfix/transport_regexp proxy:ldap:/etc/postfix/ldap/virtual_alias_maps.cf proxy:ldap:/etc/postfix/ldap/virtual_group_maps.cf proxy:ldap:/etc/postfix/ldap/virtual_group_members_maps.cf proxy:ldap:/etc/postfix/ldap/catchall_maps.cf proxy:ldap:/etc/postfix/ldap/sender_login_maps.cf sender_bcc_maps = proxy:ldap:/etc/postfix/ldap/sender_bcc_maps_user.cf proxy:ldap:/etc/postfix/ldap/sender_bcc_maps_domain.cf recipient_bcc_maps = proxy:ldap:/etc/postfix/ldap/recipient_bcc_maps_user.cf proxy:ldap:/etc/postfix/ldap/recipient_bcc_maps_domain.cf
在 master.cf
smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o smtpd_client_restrictions=permit_sasl_authenticated,permit_mynetworks # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
任何想法都會受到歡迎。
看來規則的順序很重要!
- smtpd_helo_restrictions
- smtpd_sender_restrictions
- smtpd_recipient_restrictions
這意味著如果您希望始終允許所有 o365 地址,則該
permit_mynetworks
規則必須位於每個規則(或負責阻止的規則)之上。一旦規則被移到頂部,一切都開始工作,它解決了第一個問題。第二個錯誤很可能與全域設置有關
# Reject unlisted sender and recipient smtpd_reject_unlisted_recipient = yes smtpd_reject_unlisted_sender = yes
其優先於發件人限制和收件人限制下定義的規則 - 因此似乎通過禁用這些規則 - 規則也將被允許。我還沒有測試過——但這是我的賭注,因為我們不需要測試它,所以我會把它留給其他人去發現:-)