TÍTULO: postfix+spamassassin+razor
VERSIÓN LFS: Todas
AUTOR: Gerard Beekmans <gerard@linuxfromscratch.org>
TRADUCTOR: Proyecto LFS-ES
SINOPSIS:
Spamassassing y Razor son unas maravillosas herramientas contra
el correo no solicitado (spam). Para hacer bien las cosas, lo mejor es
integrar estas herramientas en tu servidor SMTP para bloquear el correo
no deseado a este nivel, en vez de hacerlo al nivel del usuario con
procmail.
RECETA:
Versión 1.1 - 5 de abril de 2002
Historial de modificaciones:
1.1 - añadido el parche para el error del fichero
/usr/lib/perl5/site_perl/5.6.1/Mail/SpamAssassin/PerMsgStatus.pm
La razón principal para establecer un filtrado al nivel del SMTP en
linuxfromscratch.org es evitar que el correo no solicitado (spam) llegue
a las listas de correo. El correo no solicitado es enviado a Listar (no
lo envío directamente a /dev/null), pero marcándolo con unas cabeceras
especiales. Listar comprueba esas cabeceras y me envía esos mensajes
para que pueda revisarlos. Esta revisión la hago por si los mensajes
se han marcado como correo no solicitado erróneamente.
Esta receta no se encarga de explicar cómo se instalan los programas
Spamassassin o Razor. Tan sólo te indico donde encontrarlos:
Spamassassin: http://www.spamassassin.org
Razor: http://razor.sourceforge.net
En el momento de escribir esta receta la versión actual de Razor era la
1.20. Sin embargo existe un problema entre Spamassassin y Razor 1.20.
Así que recomiendo que obtengas la versión Razor-1.19, o quizás quieras
intentarlo con la versión CVS del Spamassassin (existe un error en
Razor-1.19 que se produce en el entorno de trabajo añadido a
Spamassassin. Este error se corrigió en Razor-1.20 lo cual rompe el
entorno de trabajo de spamassassin. La versión del CVS de spamassassin
se ha actualizado, pero aún no se ha liberado ninguna versión oficial).
Léete la documentación e instálalo. Es bastante sencillo. Sólo he tenido
que pelearme con la configuración para que trabaje con Postfix.
Si instalas Spamassassin-2.11 necesitas arreglar el error del fichero
/usr/lib/perl5/site_perl/5.6.1/Mail/SpamAssassin/PerMsgStatus.pm.
En él existe un pequeño error que hace que Razor realice mal la
comprobación en la mayoría de los casos (se olvida de añadir una nueva
línea entre la cabecera y el cuerpo del mensaje lo que hace que Razor no
siempre compruebe la SHA verdadera).
Edita el fichero, ve a la línea 443 que será como esto:
return join ("", $self->{msg}->get_all_headers(),
Añade "\n", de manera que quede así la línea:
return join ("", $self->{msg}->get_all_headers(), "\n",
Vamos a continuar con la configuración de postfix. La distribución de
postfix viene con el fichero README_FILES/FILTER_README que querrás
leer. Este fichero contiene información de cómo trabaja el filtrado
en Postfix que vamos a usar.
En FILTER_README se sugiere la creación de un usuario dedicado al
filtrado sin directorio principal (home) o interprete de comandos
(shell). Esto no nos sirve porque spamassassin y razor necesitan un directorio
principal (home) para trabajar. Quizás esto se pueda cambiar, pero no lo
he comprobado todavía. Seguramente existen opciones para la línea de
comando que te permitan utilizar ficheros de configuración alternativos
(se que Spamassasin lo permite, pero no tengo claro que de esta manera
se invoque a Razor con un fichero de configuración alternativo).
He creado el usuario 'postfixfilter' ejecutando:
groupadd -g 612 postfixfilter &&
useradd -u 612 -g 612 -m postfixfilter
Hay que crear el guión de filtrado que postfix ejecutará por cada
mensaje que llegue:
cat /home/postfixfilter/postfixfilter << "EOF"
#!/bin/bash
/usr/bin/spamassassin -P | /usr/sbin/sendmail -i "$@"
exit $?
EOF
Utiliza chown y chmod si no has creado este archivo como usuario
postfixfilter, si no como administrador (root) u otro.
¿Que hace esto? Postfix vuelca un mensaje a /usr/bin/postfixfilter. Lo
interceptamos y lo volcamos a spamassassin. Le hemos dicho a
spamassassin que lo escriba por la salida estándar (la opción -P) y
mediante una tubería lo enviamos a la entrada estándar de sendmail para
reinsertarlo en postfix y que continúe su envío. Una vez hecho esto
termina sea cual sea el valor de retorno de sendmail.
Lo siguiente es configurar postfix para que haga el filtrado.
Edita el fichero /etc/postfix/master.cf (o donde hayas colocado tus
ficheros de configuración). Encuentra la siguiente línea:
smtp inet n - n - - smtpd
Puede que sea un poco diferente, pero esta es la que se encuentra por
omisión. Esta línea es la que le indica a postfix que lea el correo de
entrada por el puerto smtp (25) y que el demonio smtpd se encargue de
él. Esto es lo que queremos modificar para realizar el filtrado antes
de el envío. Directamente debajo de esta línea añade esta otra:
-o content_filter=postfixfilter:
Es bueno que pongas sangría con un tabulador o espacios para que sea
fácil de ver que pertenece a la línea anterior. No olvides los dos puntos
al final de postfixfilter. No estoy muy seguro de lo que hace, pero el
FILTER_README lo advierte, por lo tanto yo también lo hago. Aun tengo
que comprenderlo.
Añade al final del fichero master.cf la siguientes líneas:
postfixfilter unix - n n - - pipe
flags=Rq user=postfixfilter argv=/home/postfixfilter/postfixfilter -f ${sender} -- ${recipient}
Bueno, si has hecho todo lo que te he dicho, y no se me ha olvidado
decirte nada, ya está todo configurado. Recarga el postfix ejecutando:
postfix reload
El correo de entrada será filtrado por spamassassin en busca de correo
no solicitado (spam). Puedes configurar spamassassin y razor mediante
los ficheros de configuración de /home/postfixfilter.
Desmentido: He escrito esta receta después de configurar
linuxfromscratch.org. Algunas cosas están distintas y no he usado el
comando groupadd/useradd, ni /home/postfixfilter. Lo que he escrito
aquí parece mas acertado (pensé en ello tras configurar
linuxfromscratch.org, así que lo cambiare algún día). No se si he
escrito todo correctamente porque no he probado todo paso a paso. Puede
que haya olvidado algunos pasos.
|