Estou meio que me encarando cego em como fazer o ActiveSync funcionar corretamente com meu servidor de e-mail, então talvez alguém aqui tenha uma ideia?
O negócio é que o servidor de e-mail está hospedando quatro domÃnios e eu quero que todos os e-mails enviados tenham assinatura DKIM.
Consegui que funcione ao enviar via SMTP, mas falha na assinatura quando o cliente usa o ActiveSync para enviar o email.
De qualquer forma, aqui está um diagrama de como funciona para o SMTP:
A maior parte da mágica em como o Postfix decide como identificar e-mails enviados de um usuário autenticado, que pertence a um dos meus domÃnios hospedados versus um e-mail de algum lugar na Internet vem desta linha em /etc/postfix/main.cf
:
smtpd_sender_restrictions =
check_sender_access regexp:/etc/postfix/tag_as_originating.re,
permit_mynetworks,
permit_sasl_authenticated,
check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf,
check_sender_access regexp:/etc/postfix/tag_as_foreign.re
content_filter = amavis:[127.0.0.1]:10024
O conteúdo de /etc/postfix/tag_as_foreign.re
:
/^/ FILTER amavis:[127.0.0.1]:10024
Amavis enviou o resultado de volta ao Postfix usando a porta 10025 que é tratada /etc/postfix/master.cf
com esta configuração:
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks, reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks, no_header_body_checks
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
O conteúdo de /etc/postfix/tag_as_originating.re
:
/^/ FILTER amavis:[127.0.0.1]:10026
O resultado é enviado de volta ao Postfix usando a porta 10027 e tratado por este código em /etc/postfix/master.cf
:
127.0.0.1:10027 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks, reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks, no_header_body_checks
-o smtp_send_xforward_command=yes
-o milter_default_action=accept
-o milter_macro_daemon_name=ORIGINATING
-o disable_dns_lookups=yes
Finalmente, aqui estão as linhas relevantes master.cf
sobre como os e-mails são apresentados ao Postfix em primeiro lugar:
smtp inet n - y - - smtpd
pickup unix n - y 60 1 pickup
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated, reject
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated, reject
Estou usando Z-push
para lidar com conexões via ActiveSync, mas meu problema é o seguinte:
Eu notei no mail.log que, embora declarado nos arquivos de configuração do z-push que ele deve passar os e-mails de entrada para o postfix via SMTP, ele ainda insiste em colocar os e-mails de entrada diretamente no diretório maildrop que, por sua vez, é tratado pelo deamon de coleta do Postfix.
A partir daÃ, o correio é encaminhado diretamente para o endereço de destino, mesmo sem ser DKIM assinado pela Amavis.
A questão é: Como posso fazer com que o Postfix passe e-mails do daemon de coleta para o Amavis, para que ele possa obter uma assinatura DKIM, antes de ser encaminhado ao destino?
É tão simples como apenas inserir uma linha abaixo pickup
com master.cf
o texto:
-o content_filter = amavis:[127.0.0.1]:10026
... ou o conflito com a configuração já existente? :-)
Depois de um pouco mais de ajustes, finalmente consegui fazê-lo funcionar.
Aqui está uma explicação do que está acontecendo.
O Z-push é escrito em PHP e o que pude encontrar na Internet foi que as configurações de email do PHP são controladas via
php.ini
.Em
php-ini
-file, você será informado de que a única opção disponÃvel ao enviar e-mail é atravéssendmail
e, portanto, todos os e-mails recebidos do Z-push sempre serão enviados para a pasta maildrop, que o deamon de coleta do Postfix trata.As configurações de SMTP só funcionam se instaladas em um host Windows.
Isso é um pouco estúpido se você me perguntar, mas de qualquer maneira eu preciso tomar outro caminho se eu quiser assinar e-mails com assinatura DKIM recebidos via protocolo ActiveSync (também conhecido como Z-push).
Eu precisava, como suspeito, adicionar
content_filter
à linha seguindo apickup
linha em/etc/postfix/master.cf
, mas também precisava ajustar um pouco meu arquivo de configuração do Amavis.O arquivo
/etc/postfix/master.cf
é basicamente como antes, exceto quando você vai para a linha de coleta, agora afirma:Adicionei a seção amavis, pois descobri que, se for comentada, o Amavis nunca será chamado. Apenas para completar tudo. :-)
Na
/etc/amavis/conf.d/50-user
configuração a seguir está como o Amavis distingue entre e-mail de entrada de qualquer lugar para minhas contas de e-mail versus e-mail enviado de uma de minhas contas para qualquer lugar:O ajuste que mencionei foi que antes eu tinha as seguintes linhas em
/etc/amavis/conf.d/50-user
:A maneira como
*
funciona é que tudo o que Amavis receber em uma porta (por exemplo, '10025') será respondido de volta em uma porta superior (por exemplo, '10026').O que eu precisava era ser um pouco mais explÃcito - para evitar confusão.
Espero que isso ajude se houver mais alguém xingando na tela tentando fazer o DKIM funcionar com o Postfix e o Amavis. :-)