header_checks
FreeBSD Postfix

Principal
Arriba

Obtener Postfix
Instalar Postfix
Configurar Postfix
main.cf
header_checks
body_checks
Lista de Acceso
RBLs
Final

Controles ANTI-SPAM (1):

Para comenzar a controlar el SPAM o Correo Comercial no Solicitado ( UCE en inglés ) hemos de empezar a aplicar restricciones en los mensajes entrantes y salientes.

Para ello, editamos de los archivos indicados por el main.cf, el archivo header_checks.regexp ( o header_checks.pcre si la compilación de Postfix fue hecha con PCRE ). Ahí le indicamos al Postfix qué buscar en el encabezado del mensaje.

La siguiente línea hace el mapeo:

header_checks = regexp:/etc/postfix/header_checks.regexp
#header_checks = pcre:/etc/postfix/header_checks.regexp # para PCRE

EL formato de cada línea en el archivo header_checks.regexp es:

/^ENCABEZADO: .*contenido_sobre_el_que_se_actúa/ ACCION

El ENCABEZADO listado, puede ser cualquier cadena de lo disponible en el encabezado del correo. El ASUNTO es lo mas popular para filtrar por encabezado. También el encabezado X-Mailer se puede utilizar para filtrar por software que se usa casi exclusivamente para SPAM.

El contenido_sobre_el_que_se_actúa va precedido por un .* el cual indica que no importa que caracteres había antes del contenido_sobre_el_que_se_actúa.

La ACCION es lo que haremos con el mensaje filtrado, y hay varias opciones:

bulletREJECT  es la mas común, e implica rechazar el mensaje por el Postfix. El correo será bloqueado ANTES de entrar al servidor de correo. Opcionalmente, se puede agregar una frase luego de la palabra REJECT para que aparezca tanto en el log y en el mensaje de rechazo al emisor del correo filtrado. Como práctica usual, se recomienda numerarla para identificar los 'falsos positivos' en forma rápida. A modo de ejemplo:

/^Subject .*Free Money/ REJECT Spam Header Rule #42

Esto causa que cualquier correo que posea las palabras "Free Money" en el asunto sea rechazado. El mensaje de rechazo al que envió el mensaje poseerá el texto "Spam Header Rule #42" en él.
 
bulletIGNORE eliminará del encabezado esa frase y continuará normalmente. Puede ser útil en determinadas situaciones ( ver http://www.securitysage.com/guides/postfix_anonym.html para mas info ).
 
bulletWARN se utiliza mucho en el test de nuevos filtros, ya que deja pasar el correo y loguea la alerta en el /var/log/maillog para que revisemos si la regla creada satisface nuestras expectativas.
 
bulletHOLD mantiene el correo en 'espera' de forma tal que el administrador del sistema pueda luego tomar acción sobre el mismo, como borrarlo o dejarlo pasar ).
 
bulletDISCARD Descarta el mensaje sin notificación de falla al emisor, haciéndole creer que el envío fue satisfactorio.
bulletFILTER permite especificar otras instancia de Postfix, filtro o servidor donde enviar el correo. Luego de la palabra FILTER debe agregarse una línea como en  el archivo transport.map.
 

A medida que los 'spammers' se hacen mas inteligentes y cubren mejor sus rastros, header_checks se hace mas complejo para detectarlos. Aquí hay algunos ejemplos:

/^Subject: .*        / REJECT Spam Header Many Spaces 1
En este ejemplo, cualquier correo con 8 o más espacios en el asunto será rechazado. No es común en el envío de correos válidos, enviar 8 espacios entre palabras, pero es muy común que los programas de envío masivo, agreguen luego del asunto, espacios y un ID de mensaje.

/^Date: .* 200[0-2]/ REJECT Spam Header Past Date 1
/^Date: .* 19[0-9][0-9]/ REJECT Spam Header Past Date 2

Estos dos ejemplos detectan la fecha, y si es anterior al año 2003, entonces lo rechazan. Muchos spammers usan fechas antiguas para aparecer primeros en la carpeta de correo recibido.

/^Subject: .*f[ _\.\*\-]+r[ _\.\*\-]+e[ _\.\*\-]+e/ REJECT Hidden Word 1
Este ejemplo muestra una de las varias posibilidades de detectar palabras 'escondidas' en el asunto. Aquí se ve la palabra 'free' con caracteres intermedios como el '_', el '.', el '*' y el '-'.

Seguramente, algunos correos legítimos serán rechazados por alguna regla. Habrá que lidiar con ello, ajustándolas acorde a las necesidades. En Security Sage se puede obtener el último archivo header_checks que Jeffrey Poslums pone a disposición.


Realizado por Andrés Gallo ( agallo@gesell.com.ar ) / Copyright © 2003-2004-2005 Cooperativa Telefónica de Villa Gesell Ltda.
Última modificación: 18 de Junio de 2005