Мы медленно переходим на Office 365 с Postfix / Dovecot с целью задействовать несколько пользователей одновременно. Почта для нашего домена должна поступать в Office 365, а затем, если в Office 365 не найдено совпадений адресов, они должны быть перенаправлены на Postfix, который доставляет их в почтовый ящик Dovecot (мы используем настройку виртуальных пользователей, все пользователи хранятся в отдельный сервер LDAP). Это позволяет нам использовать Office 365 для пользователей, которые были настроены, но для других, которые этого не сделали, почта отправляется в существующую систему Postfix / Dovecot.
Я следил эти инструкции о создании соединителей и т. д., и это работает - после внесения IP-адресов EOP в белый список 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
list, который запускает доставку для Office 365, но затем ломает старую систему.
Я изучал использование transport_maps
чтобы попытаться отправить все электронные письма для определенных адресов электронной почты (например, тех, которые были перенесены в Office 365) через ретранслятор, а все остальное работает локально, но значения там, кажется, всегда игнорируются.
У меня совершенно нет идей, так что, если у кого-то есть, буду благодарен.
Хорошо, я не совсем доволен этим, но у меня это работает. Я чувствую, что есть более простой способ, но я не могу его понять.
После дальнейших исследований я обнаружил, что virtual_alias_maps
запущен перед что-нибудь в transport_maps
, поэтому я думал, что его игнорируют. Итак, если у вас есть перезаписываемые адреса, то все, что выводит перезапись виртуального псевдонима, должно соответствовать тому, что вы собираетесь вводить. transport_maps
. Тогда мой transport_maps
хеш выглядит так:
email@example.com smtp:example-com.mail.protection.outlook.com
@example.com :
* :
Это приведет к тому, что электронное письмо, отправленное на адрес email@example.com, будет ретранслировано в Office 365, а все остальное будет доставлено локально.
Это работает, но я все еще чувствую, что есть способ лучше справиться с этим.