Tenho boas e más notícias para você sobre essa questão.
A boa notícia é que o Postfix realmente tem um mecanismo para desconectar quando um cliente está se comportando mal. Está documentado em esta página . Três parâmetros controlam o comportamento: smtpd_soft_error_limit , smtpd_hard_error_limit , smtpd_error_sleep_time . Este pseudocódigo irá ilustrar como funciona.
While smtpd get connection from client
error_counter = 0
if there ERROR* in SMTP transaction
error_counter = error_counter + 1
if error_counter > $smtpd_soft_error_limit
show the error message with delay $smtpd_soft_error_delay
else if error_counter > $smtpd_hard_error_limit
DISCONNECT client
else
show the error message IMMEDIATELY
if one message transfered successfully
error_counter = 0 //reset the counter
Observação: nos termos do postfix, ERROR*
é acionado quando uma solicitação do cliente não é reconhecida ou não é implementada, quando uma solicitação do cliente viola as restrições de acesso ou quando ocorre algum outro erro.
Veja, se definirmos o smtpd_hard_error_limit
com 1, o postfix ficará feliz em desconectar o cliente quando ocorrer um erro.
A má notícia é que não podemos filtrar qual erro acionou o smtpd_hard_error_limit. Sua intenção de limitar esse comportamento de desconexão ao erro Relay Access Denied
não pode ser implementada. Depois de definir smtpd_hard_error_limit
para 1, cada erro como
Recipient access rejected, user not Found
ou
Sender address rejected: Domain not found;
resultará do cliente desconectado. A documentação do postfix apresenta algum efeito quando smtpd_hard_error_limit = 1
.
Under conditions of stress, use an smtpd_hard_error_limit of 1 instead of the default 20. This helps by disconnecting clients after a single error, giving other clients a chance to connect. However, this may cause significant delays with legitimate mail, such as a mailing list that contains a few no-longer-active user names that didn't bother to unsubscribe. No mail should be lost, as long as this measure is used only temporarily.
Solução alternativa
Para a solução alternativa para o cliente tipo zumbi, você pode ativar a pós-postagem no postfix . Postscreen adicionará uma camada ao processo smtpd para que o servidor lide com o cliente legítimo. Veja as documentações em aqui e aqui
Por que meu servidor mostra erro 4XX em vez de 5XX?
O postfix 2.10 introduz um parâmetro chamado smtpd_relay_restriction
. Você pode ler a documentação em postconf (5) . Por padrão, esse parâmetro tem valores
smtpd_relay_restrictions =
permit_mynetworks
permit_sasl_authenticated
defer_unauth_destination
O parâmetro defer_unauth_destination
lançará o erro 4xx em vez de 5xx.
O melhor conselho é dividir a restrição em dois parâmetros: smtpd_relay_restriction e smtpd_recipient_restriction. No entanto, se você insistir em manter a configuração antiga (por exemplo, somente em smtpd_recipient_restriction), poderá definir smtpd_relay_restriction em branco em main.cf
smtpd_relay_restriction =