Postfix: verificações de cabeçalho condicional

2

Aqui está a minha situação SMTP.

O fluxo de e-mail é marcado por um provedor de retransmissão on-line (!! SPAM !!, !! BULK !!, etc)

O fluxo de mensagens é recebido por um postfix interno. O transporte é configurado para retransmitir para nosso Exchange interno, se o assunto estiver marcado. Eu faço isso usando Header_checks. O fluxo de mensagens marcadas é enviado ao nosso servidor de quarentena (webUI para usuários individuais, etc.)

/^[sS]ubject:.*!!SPAM!!*/ FILTER smtp:192.168.11.250
/^[sS]ubject:.*!!BULK!!*/ FILTER smtp:192.168.11.250
/^[sS]ubject:.*!!SUSPECT!!*/ FILTER smtp:192.168.11.250

Funciona bem. Nosso servidor de quarentena pode gerar uma lista de remetentes confiáveis para os usuários. Esta lista de permissões está disponível e posso baixá-la no meu postfix.

Minha pergunta é: como posso aplicar minha lista de permissões antes da verificação do cabeçalho?

 If Subject contains *!!SPAM!!*
  then
   If from contains [email protected] AND if to contains [email protected]
    Then redirect to internal exchange server
    else redirect to quarantine server
  endif
 endif

Eu não sei como fazer isso. Alguma dica?

    
por Thomas 04.05.2015 / 18:01

1 resposta

3

Após comentar o @masegaloeh, encontrei uma solução. A idéia é ter um segundo servidor SMTP postfix escutando 10025 com um servidor de políticas para enviar e-mails para o servidor normal (se estiver na lista de permissões) ou para o servidor de quarentena.

A ideia estava começando como sua solução header_checks, em main.cf:

header_checks = regexp:/etc/postfix/header_checks

Em header_checks:

/^(S|s)ubject: .*!!(SPAM|BULK|SUSPECT)!!.*/ FILTER  smtp:127.0.0.1:10025

Em master.cf (editado com comentários @masegaloeh):

10025      inet  n       -       n       -       -       smtpd
        -o receive_override_options=no_header_body_checks
        -o smtpd_recipient_restrictions=${my_switcher_restrictions}
policy  unix    -       n       n       -       0       spawn   user=nobody argv=/etc/postfix/policy-server-switcher

Isso faz com que a segunda instância do postfix substitua o uso de header_checks.

e em main.cf

my_switcher_restrictions = check_policy_service unix:private/policy

E o conteúdo do policy-server-switcher

!/bin/bash

sender=""
recipient=""

while read line
    do
    key=$(echo $line | cut -f1 -d=)
    value=$(echo $line|cut -f2 -d=)
    if [ "$key" == "sender" ] 
        then
        sender=${value}
        logger -p mail.info -t PolicyServer "Sender is: ${value}"
        fi
    if [ "$key" == "recipient" ] 
        then
        recipient=${value}
        logger -p mail.info -t PolicyServer "Recipient is: ${value}"
        fi
    if [  "x${recipient}" != "x" ] && [  "x${sender}" != "x" ]
        then
        if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
            then
            echo "action=FILTER smtp:192.168.1.150"
            echo
            exit 0
            fi
        if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
            then
            echo "action=FILTER smtp:192.168.1.150"
            echo
            exit 0
            fi
        echo "action=FILTER smtp:192.168.1.151"
        echo
        exit 0
        fi
    done

É claro que você precisará programar seu servidor de políticas para carregar a lista de desbloqueio do banco de dados ou LDAP, aqui é apenas um exemplo para obter a idéia.

Mas isso ainda tem algumas ressalvas, suponha que eu envie um e-mail com isso

From: [email protected]

To: [email protected]

To: [email protected]

Isto irá para o servidor normal para o alphamikevictor e para o thomas, desde que o último teste contra o servidor de política retorne o FILTER ao normal, mas se você colocar o alphamikevictor na segunda posição então enviará o correio para ambos os destinatários para a quarentena .

    
por 09.05.2015 / 13:01

Tags