Spamassassin, procmail y Postfix
Bueno pues esto ya me traía de caeza. Se trata de filtrar el correo con procmail (adorado Procmail) en un sistema de correo Postfix con usuarios virtuales.
Cabe decir que a mí personalmente no me gusta la idea de eliminar el spam antes de entregarlo, pero es cuestión de ahorro de ancho de banda, uno de los bienes más preciados a nivel mundial, y de los más altamente cotizados en el mercado del hosting español (y nos quejamos de la gasolina…)
EL roblema radica en que, siendo usuarios físicos basta con poner un fichero .procmailrc en cada home, que compruebe si el mensaje está tageado como spam, y entonces lo borre. Ahora bien, siendo usuarios virtuales (mapeados en mysql) la cosa cambia y el fichero de filtrado se lee por defecto de /etc/procmailrc (en FreeBSD como es el caso, /usr/local/etc/procmailrc).
No es que eso suponga un problema, pero el caso es que no he sabido encontrar por ahí la manera de pasar el filtro primero a Spamassassin, luego dejar caer el mensaje en procmail (spamc -e, prueba superada) para que siga la ejecución del transport, y finalmente de procmail pasarlo al binario sendmail de postfix. Este último paso es el que me mataba.
Bien, pues he encontrado la solución, y la dejo aquí por si a alguien le sirve. Seguro que a muchos usuarios de VHCS les será útil
En el transport he incorporado el filtro de procmail en el lugar del binario de sendmail, que invoco después desde el procmailrc. Queda así (master.cf):
spamassassin unix - n n - - pipe
user=nobody argv=/usr/local/bin/spamc -f -e
/bin/procmail -m /usr/local/etc/procmailrc ${sender} ${recipient}
Después, el procmailrc que dejo por defecto es este:
FROM="<$1>” :0 * ^X-Spam-Status: Yes /dev/null :0 ! -f $FROM “$@”
Recogiendo las direcciones de orígen y destino del entorno, todo el problema se resuelve. Ahora bien… la sintaxis no es muy deducible, y en el site oficial de procmail la documentación no brilla precisamente por su abundancia.
Por otro lado, en los ejemplos de Spamassassin recomiendan filtrar por la cabecera X-Spam-Level, pero eso significa que para aumentar o disminuir el nivel a partir del que hay que borrar, es necesario editar el procmailrc y añadir o quitar asteriscos a la puntuación. Filtrando por status sólo hay que poner la puntuación en el local.cf de Spamassassin y relanzar el demonio.
Y eso es todo ![]()
