Postfix

Postfix 拒絕從 O365 轉發的電子郵件

  • June 11, 2021

我必須使用 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.xyzUserC@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

其優先於發件人限制和收件人限制下定義的規則 - 因此似乎通過禁用這些規則 - 規則也將被允許。我還沒有測試過——但這是我的賭注,因為我們不需要測試它,所以我會把它留給其他人去發現:-)

引用自:https://serverfault.com/questions/1066334