Postfix: comprobaciones de encabezado condicional

Postfix: comprobaciones de encabezado condicional

Aquí está mi situación SMTP.

El flujo de correo está etiquetado por un proveedor de retransmisión en línea (!!SPAM!!, !!BULK!!, etc.)

El flujo de correo se recibe mediante un sufijo interno. El transporte está configurado para transmitir a nuestro Exchange interno si el sujeto está etiquetado. Lo hago usando Header_checks. El flujo de correo etiquetado se envía a nuestro servidor de cuarentena (webUI para usuarios individuales, 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 bien. Nuestro servidor de cuarentena puede generar una lista de remitentes confiables para los usuarios. Esta lista blanca está disponible y puedo descargarla en mi postfix.

Mi pregunta es: ¿cómo puedo aplicar mi lista blanca antes de verificar el encabezado?

 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

No sé cómo hacer eso. ¿Alguna pista?

Respuesta1

Después del comentario de @masegaloeh, encontré una solución. La idea es tener un segundo servidor SMTP postfix escuchando en 10025 con un servidor de políticas para enviar correos al servidor normal (si está en la lista blanca) o al servidor de cuarentena.

La idea comenzó como su solución header_checks, en main.cf:

header_checks = regexp:/etc/postfix/header_checks

En header_checks:

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

Luego en master.cf (editado con comentarios de @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

Esto hace que la segunda instancia de postfix anule el uso de header_checks.

Y en main.cf

my_switcher_restrictions = check_policy_service unix:private/policy

Y el contenido de 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

Por supuesto, necesitará programar su servidor de políticas para cargar la lista blanca desde la base de datos o LDAP; aquí hay solo un ejemplo para hacerse una idea.

Pero esto todavía tiene algunas salvedades, supongamos que envío un correo con esto

De:[correo electrónico protegido]

A:[correo electrónico protegido]

A:[correo electrónico protegido]

Esto irá al servidor normal para alphamikevictor y para thomas, en la medida en que la última prueba contra el servidor de políticas devuelva FILTER a la normalidad, pero si coloca a alphamikevictor en la segunda posición, enviará correo para que ambos destinatarios se pongan en cuarentena.

información relacionada