%2C%20%D0%BD%D0%BE%20%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%82%20%D0%B2%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D1%83%D1%8E%20%D0%BF%D0%BE%D1%87%D1%82%D1%83.png)
Мы медленно переходим на 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
списка, что позволит запускать доставку для Office 365, но затем сломает старую систему.
Я рассмотрел возможность transport_maps
отправки всех писем на определенные адреса электронной почты (например, те, которые перемещены в Office 365) через ретранслятор, и все остальное работает локально, но указанные там значения, похоже, всегда игнорируются.
У меня совсем нет идей, так что если у кого-то они есть, буду признателен.
решение1
Ладно, я не совсем доволен этим, но у меня это работает. Мне кажется, что есть более простой способ, но я не могу его понять.
После дальнейшего исследования я обнаружил, что это virtual_alias_maps
работаетдочто угодно в transport_maps
, поэтому я и думал, что это игнорируется. Так что если у вас есть адреса, которые переписываются, то все, что выводится из виртуального псевдонима rewrites, должно соответствовать тому, что вы собираетесь передать в transport_maps
. Тогда мой transport_maps
хэш выглядит так:
[email protected] smtp:example-com.mail.protection.outlook.com
@example.com :
* :
Это приведет к тому, что электронное письмо будет отправлено[email protected]для передачи в Office 365, но все остальное доставляется локально.
Это работает, но мне все равно кажется, что есть лучший способ справиться с этой проблемой.