Instalacion y configuracion de Policyd para Postfix en Gentoo Linux. Introduccion: Greylisting es un nuevo metodo para bloquear cantidades significantes de SPAM a nivel de servidor de correo. Greylisting obtuvo su nombre porque es como una mezcla entre listas blancas (whitelists) y listas negras (blacklists), que son automaticamente mantenidas. Este mantenimiento de las listas es un elemento clave de el metodo Greylisting. El metodo Greylisting es muy simple. Estan involucradas tres piezas de informacion (a las cuales nos referiremos de ahora en adelante como "triplet") para cualquier intento de envio de corero: 1. La direccion IP de el host que intenta el envio. 2. La direccion de el remitente. 3. La direccion de el destinatario. Partiendo de esta informacion, ahora tenemos un unico triplet para identificar "la relacion" de un correo. Con estos datos, simplemente seguiremos una regla basica, la cual es: Si nunca hemos visto este triplet, entonces Rechazar con un mensaje de falla temporal este envio y cualquier otro que lleguen en cierto periodo de tiempo. Puesto que el protocolo SMTP es considerado como un transporte no confiable, la posibilidad de fallas temporales estan incluidas dentro de las especificaciones de el protocolo (ver RFC 821). Asi, cualuquier Agente de Transporte de Correo (MTA) que siga las especificaciones de el protocolo SMTP debera de reintentar el envio es que recibe un codigo de falla temporal apropiado. La mayoria de el SPAM parece que es enviado desde apliaciones especializadas diseñadas para enviar SPAM. estas aplicaciones parecen adoptar la metodologia de "enviar y olvidar". Esto es, ellos intentan enviar el spam a uno o varios hosts MX (Mail Exchangers) para un dominio, pero nunca haran el intento de reenviar el mensaje como un verdadero MTA lo haria. Ademas, con la reciente proliferacion de virus basados en email, Greylisting ha mostrado ser extremadamente efectivo bloqueando estos virus, ya que ellos tampoco tienden a reintentar el envio del mensaje. Y puesto que estos virus son algo largos, el ahorro de ancho de banda y procesos son significantes en comparacion de el metodo estandar de aceptar el el mensaje y entonces escanearlo por virus localmente. En terminos de gasto de recursos locales, este bloqueo viene con un precio minimo. Asumiendo el uso de el almacenamiento local para el triplet y otros metadatos, Greylisting no requiere trafico de red que no sea el asociado con la conexion en si. puesto que no estamos revisando el contenido de el mensaje del todo hay muy poca carga de procesamiento, a diferencia de otros metodos para bloquear spam. Hay un efeto que se podria ver como positivo o negativo. Puesto que el metodo de Greylisting retraza el recibimiento de correo desconocido, eso generara un poquito mas de trabajo para el MTA que envia el correo legitimo. La mejor parte es que puesto que nosotros nunca hacemos fallido el envio de un mensaje permanentemente, por lo menos cuando el MTA que envia se comporta bien, nunca causaremos que email legitimo sea rechazado asi que nunca habra falsos positivos. Implementacion de el metodo de Greylisting en el MTA Postfix usando el plugin policyd (http://policyd.sourceforge.net). Policyd es un plugin anti-spam para Postfix que hace Greylisting, Sender-(envelope, SASL or host/ip)-based throttling (on messages and/or volume per defined time unit), Recipient rate limiting, Spamtrap monitoring / blacklisting, HELO auto blacklisting y prevencion de HELO randomization (HRP). La base de datos de policyd es una base de datos MySQL. Ya que policyd no esta oficialmente en portage, usaremos un ebuild que se encuentra en: http://bugs.gentoo.org/show_bug.cgi?id=112261 Para esto tendremos que instalar el ebuild en nuestro OVERLAY. - Crear OVERLAY: Primero agregar la ruta de el overlay a /etc/make.conf # echo "PORTDIR_OVERLAY="/usr/local/portage"" >> /etc/make.conf Crear la estructura de el overlay: # mkdir -p /usr/local/portage Crear categoria para policyd: # cd /usr/local/portage # mkdir mail-filter Crear directorio para policyd # cd mail-filter # mkdir policyd Descargar los ebuilds: # cd policyd - Descargar el ebuild: # wget http://bugs.gentoo.org/attachment.cgi?id=91977 # mv attachment.cgi\?id\=91977 policyd-1.80.ebuild - Descargar el archivo init para policyd: # wget http://bugs.gentoo.org/attachment.cgi?id=91978 # mv attachment.cgi\?id\=91978 policyd.init # mkdir files # cd files Descargar archivos de cron para stats y cleanup: # wget http://bugs.gentoo.org/attachment.cgi?id=77158 # mv attachment.cgi?id=77158 policyd-stats.cron # wget http://bugs.gentoo.org/attachment.cgi?id=77160 # mv attachment.cgi?id=77160 policyd.gentoo.cron Crear el digest y manifset para el ebuild y sus archivos: # /usr/local/portage/mail-filter/policyd/ # ebuild policyd-1.80.ebuild digest Desenmascarar policyd para que se pueda instalar: # echo "mail-filter/policyd ~x86" >> /etc/portage/package.keywords Ahora instalar policyd: # emerge mail-filter/policyd Crear y configurar la base de datos para policyd: Ir a la ruta donde esta la estructura de la base de datos # cd /usr/share/doc/policyd-1.80/ # zcat DATABASE.mysql.gz > DATABASE.mysql Entrar a mysql: # mysql -u mydbadmin -p mysql> create database policyd; mysql> use policyd; mysql> source DATABASE.mysql; Crear usuario para acceso a la base de datos policyd: mysql> GRANT ALL ON policyd.* TO postfix@localhost IDENTIFIED by 'p0stf1x'; mysql> flush privileges; mysql> quit; Si se desean configurar que modulos de policyd activar y cuales no, como whitelisting, blacklisting, throttling, o cualquier otro, se tendra que modificar el archivo /etc/policyd.conf Para mas detalles ver el readme oficial: http://policyd.sourceforge.net/readme.html Bien con esta configuracion basica funciona el greylisting. Ahora iniciaremos el demonio policyd: # /etc/init.d/policyd start Si queremos que sea iniciado al inicio de el sistema haremos: # rc-update add policyd default Ahora lo integraremos a postfix: # vim /etc/postfix/main.cf smtpd_recipient_restrictions = .. reject_unauth_destination reject_unlisted_recipient check_policy_service inet:127.0.0.1:10031 .. Ahora reiniciar postfix y se recomienda ver los logs para ver que si este funcionando bien: # /etc/init.d/postfix restart # tail -f /var/log/mail.log Veremos algo asi: Jul 31 10:57:20 ns1 postfix/smtpd[17328]: connect from web34402.mail.mud.yahoo.com[66.163.178.151] Jul 31 10:57:20 ns1 policyd: connection from: 127.0.0.1 port: 2466 slots: 0 of 4096 used Jul 31 10:57:20 ns1 policyd: connecting to mysql database: 127.0.0.1 Jul 31 10:57:20 ns1 policyd: connected.. Jul 31 10:57:20 ns1 policyd: rcpt=3, greylist=new, host=66.163.178.151 (web34402.mail.mud.yahoo.com), from=jorgearma1982@yahoo.com.mx, to=jmedina@tuxjm.net, size=0 Jul 31 10:57:20 ns1 postfix/smtpd[17328]: NOQUEUE: reject: RCPT from web34402.mail.mud.yahoo.com[66.163.178.151]: 450 : Recipient address rejected: Policy Rejection- Please try later.; from= to= proto=SMTP helo= Jul 31 10:57:20 ns1 postfix/smtpd[17328]: disconnect from web34402.mail.mud.yahoo.com[66.163.178.151] Y la segunda vez: Jul 31 11:03:58 ns1 postfix/smtpd[17856]: connect from web34402.mail.mud.yahoo.com[66.163.178.151] Jul 31 11:03:59 ns1 policyd: connection from: 127.0.0.1 port: 1470 slots: 0 of 4096 used Jul 31 11:03:59 ns1 policyd: connecting to mysql database: 127.0.0.1 Jul 31 11:03:59 ns1 policyd: connected.. Jul 31 11:03:59 ns1 policyd: rcpt=4, greylist=update, host=66.163.178.151 (web34402.mail.mud.yahoo.com), from=jorgearma1982@yahoo.com.mx, to=jmedina@tuxjm.net, size=0 Jul 31 11:03:59 ns1 postfix/smtpd[17856]: 0FBF532CA8: client=web34402.mail.mud.yahoo.com[66.163.178.151] Jul 31 11:03:59 ns1 postfix/cleanup[17979]: 0FBF532CA8 : message-id=<20060731175717.96070.qmail@web34402.mail.mud.yahoo.com> Jul 31 11:03:59 ns1 postfix/qmgr[16980]: 0FBF532CA8: from=, size=1750, nrcpt=1 (queue active) Jul 31 11:03:59 ns1 postfix/smtpd[17856]: disconnect from web34402.mail.mud.yahoo.com[66.163.178.151] Jul 31 11:03:59 ns1 postfix/local[17980]: 0FBF532CA8: to=, relay=local, delay=1, status=sent (delivered to command: /usr/bin/procmail -a "DOMAIN") Jul 31 11:03:59 ns1 postfix/qmgr[16980]: 0FBF532CA8: removed