Por que isso não funciona?

Por que isso não funciona?

Eu gostaria de ter um postfix que permitisse a retransmissão de e-mail para um retransmissor quando

a) o domínio do remetente é permitido

e um dos:

b) o remetente foi autenticado c) o cliente tem uma entrada na lista de permissões de IP

minha abordagem atual até agora é:

relayhost = [RELAYHOST]:25
smtpd_reject_unlisted_sender = yes
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/restricted_senders

smtpd_recipient_restrictions = 
  check_client_access cidr:/etc/postfix/ip_whitelist, 
  permit_sasl_authenticated, 
  reject_unauth_destination

com strict_senders contendo

example.com   OK

e ip_whitelist contendo

192.168.1.3   OK

Embora o envio de e-mails de clientes autenticados ou de clientes com IP na lista de permissões funcione, a restrição do domínio do remetente não funciona. Parece que assim que a autenticação ou o client_access corresponderem, a restrição do remetente não será mais verificada.

Responder1

Por que isso não funciona?

Osmtpd_sender_restrictions:

O padrão é permitir tudo.

Especifique uma lista de restrições, separadas por vírgulas e/ou espaços em branco. Continue linhas longas iniciando a próxima linha com espaços em branco. As restrições são aplicadas na ordem especificada; a primeira restrição que corresponder vence.

e

check_sender_access type:table

Pesquise o especificadoacesso(5)banco de dados para o MAIL FROMendereço, domínio, domínios pai ou localpart@e execute a ação correspondente.

Portanto, sua configuração primeiro permite example.come /etc/postfix/restricted_sendersdepois permite todo o resto. Osmtpd_reject_unlisted_sendernão muda isso, porque:

Um endereço é considerado "desconhecido" quando 1) não corresponde a umvirtual(5)apelido oucanônico (5)mapeamento e 2) o endereço não é válido para sua classe de endereço. Para obter uma definição de validação de endereço baseada em classe, consulteADDRESS_CLASS_README.

O domínio, por exemplo,example.org não está emlocal,apelido virtual,caixa de correio virtualnemretransmissãoclasse de domínio, então ele cai naclasse de domínio padrão. Esta classe não possui destino nem tabelas de destinatários válidas. Aparentemente qualquer endereço que não pertença às outras classes de domínio é válido para esta classe de endereço. Isto é lógico, pois o sistema local não saberia quais endereços estão disponíveis no sistema remoto.

smtpd_sender_restrictionssão suficientes para isso

Esqueça osmtpd_reject_unlisted_senderpois isso poderia ser feito usando smtpd_sender_restrictionssozinho.

  • A configuração mais fácil seria:

    smtpd_sender_restrictions = 
        check_sender_access hash:/etc/postfix/restricted_senders,
        reject
    
  • Uma alternativa poderia ser usar regex:tabelas:

    smtpd_sender_restrictions = 
        check_sender_access regex:/etc/postfix/restricted_senders
    

    Isso permite usarexpressões regulares:

    /example\.com$/  OK
    //               550 You are not allowed to use this sender address.
    

    Você pode testar os resultados da pesquisa compostmap -q:

    $ /usr/sbin/postmap -q [email protected] regexp:/etc/postfix/restricted_senders
    550 You are not allowed to use this sender address.
    
    $ /usr/sbin/postmap -q [email protected] regexp:/etc/postfix/restricted_senders
    OK
    

informação relacionada