informa ao Postfix para fechar a conexão logo após “Acesso ao relé negado”

3

Eu já vi em alguns bons servidores de email de configuração, eles terminam a conexão logo após o erro

454 4.7.1 <[email protected]>: Relay access denied

que provavelmente está economizando muitos recursos e tráfego. E o meu postfix ainda mantém a sessão SMTP aberta para comandos futuros, que, provavelmente, serão apenas spam.

Como posso dizer ao Postfix para encerrar a sessão (como esses servidores inteligentes) logo após esse erro ter sido dado ao spammer?

Info

  • Versão do postfix 2.10.1

  • Saída de postconf -n

    [root@mail ~]# postconf -n
    config_directory = /etc/postfix
    header_checks = pcre:/etc/postfix/header_check
    inet_protocols = ipv4
    local_recipient_maps =
    mydestination = example.com, $myhostname, localhost.$myhostname, $mydomain, localhost.$mydomain
    mydomain = example.com
    myhostname = mail.example.com
    mynetworks = 127.0.0.0/8 10.0.0.0/16
    myorigin = example.com
    relay_domains = example.com
    smtpd_banner = $myhostname ESMTP
    smtpd_recipient_restrictions = 
        permit_mynetworks, 
        reject_unauth_destination, 
        reject_invalid_hostname, 
        reject_unauth_pipelining, 
        reject_non_fqdn_sender, 
        reject_unknown_recipient_domain, 
        reject_unknown_sender_domain, 
        check_sender_access hash:/etc/postfix/access
    smtpd_sender_restrictions = 
        check_recipient_access hash:/etc/postfix/recipients,
        reject_non_fqdn_sender,
        reject_rhsbl_sender blackhole.securitysage.com,
        reject_unknown_sender_domain
    transport_maps = hash:/etc/postfix/transport
    
por Shirker 19.11.2014 / 12:26

1 resposta

5

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 = 
    
por 22.11.2014 / 05:26

Tags