Estou executando o Postfix 3.8.1 no Ubuntu 23.10. O Postfix atende a porta 25 para mensagens recebidas de outros MTAs e a porta 587 para MUAs autenticados.
O Postfix deve verificar o SPF para e-mails de outros MTAs na porta 25, mas não para e-mails de MUAs autenticados na porta 587. No entanto, o Postfix faz isso falsamente para MUAs autenticados e o SPF falha (porque o MUA não está listado como um servidor de e-mail permitido ).
Tenho a sensação de que o Postfix simplesmente ignora as regras especiais para MUAs, mas não encontro meu erro de configuração.
Meumaster.cnf
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o cleanup_service_name=header_cleanup
-o smtpd_client_restrictions=$mua_client_restrictions
-o smtpd_helo_restrictions=$mua_helo_restrictions
-o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_relay_restrictions=$mua_relay_restrictions
header_cleanup unix n - - - 0 cleanup
-o header_checks=regexp:/etc/postfix/submission_header_cleanup.cf
A ideia da configuração acima é que smtpd
na porta 587 ( submission
) seja utilizada alguma configuração especial.
Meumain.cf
smtpd_delay_reject = yes
smtpd_client_restrictions =
reject_unauth_pipelining,
reject_unknown_client_hostname
mua_client_restrictions =
reject_unauth_pipelining
smtpd_helo_required = yes
smtpd_helo_restrictions =
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname
mua_helo_restrictions =
reject_invalid_helo_hostname
strict_rfc821_envelopes = yes
smtpd_sender_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain
mua_sender_restrictions =
reject_non_fqdn_sender,
reject_unknown_sender_domain
reject_plaintext_session,
reject_sender_login_mismatch
smtpd_relay_restrictions =
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_destination
mua_relay_restrictions =
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject
smtpd_recipient_restrictions =
check_policy_service unix:private/policyd-spf,
permit
policyd-spf_time_limit = 3600
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
smtpd_sasl_auth_enable=no
A ideia é que mua_relay_restrictions
clientes autenticados passo a passo sejam permitidos incondicionalmente e todo o resto rejeitado. Isso significa que para clientes autenticados o controle de acesso deve parar por aí. Esta é também a razão pela qual existe apenas smtpd_recipient_restrictions
para clientes na porta 25 e nenhum correspondente mua_recipient_restriction
, porque o Postfix nunca deve chegar a esse ponto.
No entanto, se eu usar um cliente de e-mail para enviar um e-mail através do meu servidor de e-mail Postfix para outra caixa de e-mail minha (hospedada externamente), vejo os seguintes logs no meu servidor de e-mail:
postfix/submission/smtpd[515502]: Anonymous TLS connection established from pd9ecf27b.dip0.t-ipconnect.de[217.236.242.123]: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-sign>
policyd-spf[515508]: : prepend Received-SPF: Softfail (mailfrom) identity=mailfrom; client-ip=217.236.242.123; helo=my-touchpad.localnet; [email protected]; receiver=other-domain.tld
Que o SPF tem que falhar é óbvio. O MUA é um cliente (my-touchpad.localnet) em uma linha dial-up (pd9ecf27b.dip0.t-ipconnect.de[217.236.242.123]) que não está listado pela política SPF para my-domain.tld
. Claro, não é porque a política SPF lista apenas o próprio servidor de e-mail.
No entanto, eu me pergunto por que o Postfix executou essa verificação em primeiro lugar. A verificação do SPF é apenas parte do smtpd_recipient_restrictions
que não deve ser aplicado a MUAs autenticados.
Esta é uma falsa suposição. O
smtpd_recipient_restrictions
só faria isso se fosse configurado para permitir MUAs autenticados antes de verificar a política SPF, por exemplo,Porque...
Atualmente você tem uma configuração global para todas as instâncias do smtpd, incluindo envio que verifica o SPF e permite que qualquer mensagem passe na verificação do SPF:
Para não aplicar isso a MUAs autenticados, este parâmetro deve ser diferente para envio, o que é conseguido substituindo o parâmetro em
master.cf
:Ou, se você seguir seu padrão de ter variáveis personalizadas (ou seja, não um parâmetro de configuração do Postfix ) definidas como
mua_*_restrictions
em seumain.cf
e usá-las como variáveis emmaster.cf
, você teria:em
main.cf
:em
master.cf
:Não vejo nenhuma
-o smtpd_recipient_restrictions=$mua_recipient_restrictions
linhamaster.cf
que substitua seu padrão global main.cf.O que você acha que não deveria ser aplicado não está configurado exclusivamente para a instância da porta 25. Como você o colocou em main.cf, ele serve como padrão para ambos. O Postfix está aplicando a mesma classe de restrição de destinatário para ambas
smtpd
as instâncias (aquela que serve a função MX e aquela que manipula o envio autenticado), porque você modificou o padrão global e não o alterou novamente para esse serviço de envio especial.Você pode (não é a única solução, mas parece uma maneira consistente e legível de chegar onde deseja) substituí-la, assim como fez com as outras classes de restrição.
mua_recipient_restrictions = permit_sasl_authenticated, reject