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]
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.