Em que ordem o Postfix > 2.10 avalia as seguintes diretivas?
smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_relay_restrictions
smtpd_recipient_restrictions
Eu li o relé SMTP do Postfix e o controle de acesso (ACCESS README) e os parâmetros de configuração do Postfix , bem como os comentários em main.cf
, mas IMHO os conselhos não são absolutamente claros ou mesmo contraditórios.
Nota: Quando falo sobre um "endereço local", refiro-me a qualquer endereço de destinatário cujo Postfix seja de alguma forma o destino final, ou seja, um endereço cuja parte do domínio esteja listada em mydestination
, virtual_alias_domains
ou virtual_mailbox_domains
. Todo o resto é um endereço não local e o Postfix deve encaminhar o email para outro MTA.
Pergunta 1: As duas primeiras diretivas são sempre avaliadas para qualquer tipo de cliente (MUA e outros servidores SMTP) e qualquer endereço de destino na ordem especificada? Presumo que sim.
Pergunta 2: a) é smtpd_relay_restrictions
sempre avaliado ou b) avaliado apenas para domínios de correio não locais?
Pergunta 3: a) é smtpd_recipient_restrictions
sempre avaliado ou b) avaliado apenas para endereços locais?
Algumas citações da documentação
A documentação indica smtpd_recipient_restrictions
restrições opcionais que o servidor Postfix SMTP aplica no contexto de um comando RCPT TO do cliente, após smtpd_relay_restrictions. Isso sugere que smtpd_relay_restrictions
é sempre avaliado, incl. endereços locais. Mas o nome da diretiva implica que ela só é considerada para endereços não locais que são encaminhados/retransmitidos.
A documentação para smtpd_recipient_restrictions
estados a partir do Postfix 2.10, regras de permissão de retransmissão são preferencialmente implementadas com smtpd_relay_restrictions
, de modo que uma política permissiva de bloqueio de spam smtpd_recipient_restrictions
não resultará mais em uma política permissiva de retransmissão de e-mail. Isto sugere que isso smtpd_recipient_restrictions
é considerado apenas para endereços locais, mas ignorado para endereços não locais.
No entanto, há um comentário smtpd_relay_resrictions
no padrão main.cf
que afirma que nenhuma ação padrão (permitir ou rejeitar) é colocada no final, porque para servidores de correio externos, esta lista é combinada smtpd_recipient_restrictions
e, portanto, uma ação antecipada reject
seria abortada prematuramente. Isso sugere que smtpd_recipient_restrictions
é sempre avaliado.
Esses nomes correspondem principalmente aos estágios da sessão SMTP. O documento principal a ser consultado é SMTPD ACCESS README .
A primeira é a conexão do cliente, por isso
smtpd_client_restrictions
são avaliadas. Nesta fase o que está disponível é o endereço IP remoto, seu DNS reverso e avanço do reverso.Em seguida emite HELO ou EHLO, que
smtpd_helo_restrictions
são avaliados a seguir. O nome apresentado também está disponível nesta fase.O próximo é
MAIL FROM
, assim comosmtpd_sender_restrictions
o próximo com informações adicionais - remetente do envelope.O próximo é
RCPT TO
o que disponibiliza o destinatário do envelope. Mas aqui está o truque: o servidor agora decide como irá retransmitir o e-mail; entãosmtpd_relay_restrictions
é avaliado aqui.smtpd_recipient_restrictions
é avaliado a seguir. Isto é explicado emman 5 postconf
.Em seguida estão
smtpd_data_restrictions
esmtpd_end_of_data_restrictions
, que raramente são usados.Todas essas restrições são sempre avaliadas nesta ordem para cada correspondência até que a decisão seja tomada. Isso não depende deste servidor ser o destino final ou não. Ele interrompe a avaliação quando uma decisão definitiva (permitir, rejeitar, adiar) é tomada; por exemplo, se o cliente foi rejeitado no estágio HELO (por algo em
smtpd_helo_restrictions
),smtpd_recipient_restrictions
não será avaliado. Porém, sesmtpd_delay_reject = yes
, a conexão ainda avançará para o estágio RCPT TO, mas como a decisão já foi tomada, nenhuma lista de restrições será avaliada; O Postfix simplesmente pula tudo rapidamente e adia a alegria de rejeitar o cliente depois de também fornecer o remetente e o destinatário do envelope, para que também registre essas informações.Além disso, milters são chamados para cada estágio. Milters são chamados após a lista de restrições correspondente.
Para completar: o caminho de controle do ETRN é totalmente diferente. Em primeiro lugar,
smtpd_client_restrictions
esmtpd_helo_restrictions
são avaliados, e seETRN
o comando for usado (em vez doMAIL FROM
que normalmente é usado aqui), a conexão é desviada para esse caminho, onde apenas verificasmtpd_etrn_restrictions
.