Postfix 拒绝从 O365 中继的电子邮件

Postfix 拒绝从 O365 中继的电子邮件

我必须使用 Sogo 将 Office 365 从 Postfix 迁移。我的目标是配置 Office 365 与 Postfix 的小型混合系统,这有点类似于 Exchange On-site。

目前,postfix 是一个拥有 1000 个用户的主要服务器,它负责发送和接收域名.xyz。我已配置 Office 365 并向其添加了相同的域。我已在其上创建了 2 个邮箱并配置了 Exchange Online域名.xyz被设置为InternalRelay域。

Exchange online 目前有 2 个账户

Exchange 的配置是,如果 Exchange 上的某人向 domain.xyz 发送电子邮件,并且邮箱在 Exchange 上,则该电子邮件应保留在 Exchange 上,但如果 Exchange 找不到 domain.xyz 的邮箱,则应使用输出连接器我已将其配置为将电子邮件转发到 postfix。这意味着用户 A 发送给用户 B 的任何电子邮件都可以正常工作,但是当用户 A 向位于 postfix 上的用户 C 发送电子邮件时,它会阻止该电子邮件。

报告错误:554 5.7.1[电子邮件保护]:收件人地址被拒绝:政策拒绝未登录

我的理解是,Postfix 认为它是唯一拥有域 domain.xyz 的服务器,它将来自 domain.xyz 的任何电子邮件视为某些用户/服务试图在未经授权的情况下发送电子邮件,并拒绝它。当我们在 Office 365 中创建完全随机的电子邮件时,在 Postfix 中没有相应的帐户,并且尝试从[电子邮件保护][电子邮件保护]我们得到

远程服务器返回 '550 5.1.0[电子邮件保护]:发件人地址被拒绝:虚拟邮箱表中的用户未知”

有什么方法可以告诉 postfix (SoGo) 开始信任 Office 365(IP 地址范围)并允许它接收来自它认为拥有的域以及它拥有的帐户的电子邮件。在将 postfix 迁移到 Office 365 的最后一步,postfix 中的每个帐户在 O365 中都将拥有相同的帐户,我们将使用电子邮件重定向功能一次将 1 个邮箱重定向到 onmicrosoft.com 地址,以确保用户可以使用 O365 而无需担心他们的 postfix 帐户。但要做到这一点,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

欢迎任何想法。

答案1

看来规则的顺序很重要!

  • 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

哪些规则优先于发件人限制和收件人限制下定义的规则 - 因此似乎通过禁用这些规则 - 这些规则也将被允许。我没有测试过 - 但这是我的赌注,因为我们不需要测试它,所以我会把它留给别人去发现 :-)

相关内容