Postfix e Office 365: retransmitir todo o email de saída (incluindo local), mas entregar email de entrada

1

Estamos migrando lentamente para o Office 365, longe do Postfix / Dovecot, com o objetivo de habilitar alguns usuários por vez. O email do nosso domínio deve entrar no Office 365 e, se não houver correspondência de endereço encontrada no Office 365, ele deverá ser encaminhado para o Postfix, que o entregará a uma caixa de correio Dovecot (estamos usando uma configuração de usuários virtuais. servidor LDAP separado). Isso nos permite usar o Office 365 para usuários que foram configurados, mas para outros que não foram, o email vai para o sistema Postfix / Dovecot existente.

Eu segui estas instruções para criar conectores etc. e ele funciona - após a lista branca de IPs do EOP, o Office 365 fornecerá o Postfix fine. O problema é fazer as coisas seguirem na direção oposta. Todos os emails de saída devem ser retransmitidos pelo Office 365 e, se eu definir uma variável relayhost e remover nosso domínio local de mydestinations , isso funcionará ... mas o Postfix não entregará nenhuma mensagem de entrada (resulta em um loop de retorno ). Se eu mantiver nosso domínio em mydestinations , o e-mail será entregue localmente e não passará pelo relay, o que significa que os usuários que ainda estão no sistema Postfix não podem enviar e-mails para usuários do Office 365.

Existe uma maneira de forçar todos os emails de saída (inclusive entregues localmente) para o revezamento, mas ainda aceitar emails de entrada para o mesmo domínio? Eu estive correndo contra uma parede ontem e a única solução real que consigo pensar é executar duas instâncias separadas do Postfix - uma que retransmite tudo e outra que é usada apenas para mensagens recebidas. Mas certamente há uma maneira de fazer isso com apenas uma instância? Eu pesquisei, mas em todos os lugares parece apenas supor que você está apenas transmitindo e-mails e não fazendo mais nada.

postconf -n se parece com isso (domínio alterado para exemplo.com). Eu tirei todas as alterações que fiz na tentativa de retransmitir o 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

Para obter todas as retransmissões de e-mail, posso definir relayhost = example-com.mail.protection.outlook.com e remover exemplo.com da lista mydestinations , que obtém a entrega funcionando para o Office 365, mas quebra o sistema antigo.

Eu procurei usar transport_maps para tentar enviar todos os emails para endereços de email específicos (ou seja, os movidos para o Office 365) por meio do relay e tudo o mais funciona localmente, mas os valores parecem sempre ser ignorados. / p>

Estou totalmente sem ideias, por isso, se alguém tiver alguém, ficarei grato.

    
por David M 12.12.2017 / 00:23

1 resposta

0

OK, eu não estou totalmente feliz com isso, mas eu consegui trabalhar. Eu sinto que há uma maneira mais direta, mas eu não consigo entender isso.

Depois de mais pesquisas, descobri que virtual_alias_maps é executado antes de transport_maps , e é por isso que pensei que estava sendo ignorado. Portanto, se você tiver endereços sendo reescritos, qualquer que seja a saída do alias virtual que for reescrita, será necessário corresponder ao que você vai alimentar em transport_maps . Então meu transport_maps hash é assim:

[email protected]        smtp:example-com.mail.protection.outlook.com
@example.com  :
*       :

Isso faria com que o email enviado para o [email protected] fosse retransmitido para o Office 365, mas todo o restante será entregue localmente.

Funciona, mas ainda sinto que há uma maneira melhor de lidar com isso.

    
por 12.12.2017 / 23:07