www.alvaromarin.com

Blog sobre spam, sistemas antispam y correo electrónico

Plugin para qmail

Procedo a “liberar” un plugin que hice hace unos meses para qmail mediante el cuál, se puede realizar un rate limit de los emails que envía una cierta dirección.

El proceso consiste en guardar en una tabla en MySQL las direcciones que qmail va “viendo”. Existe otra tabla en la que se guarda el valor por defecto que se le quiere dar al límite (por ejemplo, 100 mensajes) y si se llega a dicho límite en un rango de tiempo (por defecto, en 1 hora) el mensaje es rechazado a nivel de SMTP temporalmente.

Existe también la posibilidad de poner límites diferentes para determinadas direcciones; por ejemplo, alguna persona que por X razón legítima necesite enviar más correos.

Además, existe una lista blanca para IPs a las cuáles no aplicar dichos límites. Por ejemplo, si tenemos unos relays de entrada.

Qmail debe estar parcheado con SPP para poder usar este plugin. Por ejemplo, el qmail de Plesk viene de serie ya parcheado, por lo que no hay más que copiarlo en /var/qmail/plugins/ y añadirlo en el archivo /var/qmail/control/smtpplugins.

En la siguiente URL puede ser descargado:

http://postmaster.hostalia.com/rate_from

Comentarios

  1. oscar
    Octubre 30th, 2008 | 2:32 am

    hola Alvaro

    Voy a probar tu script.
    En teoría esto no sirve para limitar los emails que puede enviar un SCRIPT Via PHP, correcto ?

    Creo que he visto un script parecido en
    http://www.enderunix.org/spamguard/

    ¿Que soluciones usas para limitar los envios via php?

    Un saludo

    Oscar

  2. Alvaro Marín Illera
    Octubre 30th, 2008 | 10:31 am

    Efectivamente, los envíos desde PHP se hacen vía qmail-inject en vez de por qmail-smtpd, por lo que no pueden limitarse con este script.

    Para controlar esos mensajes (y todos en general), puedes usar un servidor externo a modo de relay de salida.

  3. Alvaro Marín Illera
    Octubre 30th, 2008 | 1:25 pm
  4. oscar
    Noviembre 1st, 2008 | 9:13 pm

    Hola Alvaro,

    Has comentado que un servidor externo en modo de relay para controlar la salida de mensajes… Me he quedado casi igual …

    ¿porque ayudaría un servidor externo? Tienes alguna referencia que pueda usar para comprenderlo?

    ¿Qué haces tu para controlarlo desde el propio servidor?
    Me refiero sobre todo al envio de mensajes desde scripts php spammers que puedan haber infectado algun dominio y han subido mailers. En hotmail este mes me están fundiendo a bloqueos y no logro encontrar a los scripts malignos.

    Estoy usando el Smart Network Data Services de Hotmail para que me dé más información y he encontrado a algun dominio valido que envia mucho email pero a los scripts “malos” nó.

    Uso qmail y Plesk y sigo lo que describe en los articulos principalmente para encontrar a los sospechosos.
    http://kb.parallels.com/article_22_1711_en.html
    http://kb.parallels.com/en/766

    Que “protocolo” sigues tú ?

    Un abrazo

    Oscar

  5. Alvaro Marín Illera
    Noviembre 3rd, 2008 | 11:50 am

    Hola Oscar,

    enrutando por un servidor externo todo el tráfico SMTP saliente, todos los mensajes le llegan por qmail-smtpd a dicho servidor, por lo que el 100% de los mensajes salientes pueden ser controlados.

    Los artículos que enlazas, dan medidas para detectar esos envíos fraudulentos, sí. El protocolo que seguimos, obviamente, no puede hacerse público por medidas de seguridad.

    Un saludo,
    Álvaro.

  6. Anónimo
    Noviembre 3rd, 2008 | 4:58 pm

    Buenos dias Alvaro

    Tienes alguna referencia para ver como se puede enrutar el trafico SMTP Saliente a un servidor externo ?

    Lo que no veo claro es como controlas los envios desde scripts php desde ese servidor externo…

    No he visto nada parecido en los foros habituales…

    A ver si puedes ilustrarnos sin dar los detalles del “protocolo” especifico que sigues para no desvelar el “secreto”.

  7. Alvaro Marín Illera
    Noviembre 3rd, 2008 | 5:31 pm

    No es cuestión de secretismos, es cuestión de seguridad.

    Respecto a enrutar los mensajes:

    http://wiki.qmailtoaster.com/index.php/Smtproutes

    Y en el servidor externo, con este plugin por ejemplo, limitas los envíos que puede realizar una cuenta en concreto y por tanto, puedes controlarlos.

  8. Aldo
    Mayo 29th, 2009 | 9:21 pm

    Alvaro, solo queria agradecerte y felicitarte, muy bueno tu script y explicacion, me fue de mucha utilidad.

  9. Marcelo
    Enero 21st, 2010 | 1:30 am

    Hola Álvaro,

    Soy un usuario de plesk y estoy intentando poner tu script para funcionar, pero tengo una duda.

    Que quieres decir como “añadirlo en el archivo /var/qmail/control/smtpplugins.”

    Que es lo que debo añadir y como exactamente?

    Gracias de ante mano
    Un saludo.

  10. Alvaro Marín Illera
    Febrero 24th, 2010 | 10:45 am

    Gracias Aldo!

    Marcelo, perdona el retraso, en el archivo /var/qmail/control/smtpplugins del qmail instalado por Plesk, tendrás algo como:

    [rcpt]
    plugins/chkrcptto
    plugins/badhelo

    Simplemente, debes añadir la línea de rate_from para dejarlo como:

    [rcpt]
    plugins/chkrcptto
    plugins/badhelo
    plugins/rate_from

    habiendo dejado el script de rate_from en /var/qmail/plugins/ con permisos de ejecución.

  11. edu
    Marzo 22nd, 2010 | 10:22 pm

    Hola,

    Lo instalé y veo que genera registros en la tabla rate_frame pero no me funciona la limitación. Por ejemplo, si le pongo para el correo xxx@xxx.com un máximo de 8 correos a enviar (lo doy de alta en rate_from_default), cuando envio desde ese correo mas de 8 mensajes/hora pues me permite seguir enviando. Uso plesk con centos5.

    ¿Alguna pista?

    Gracias!

  12. edu
    Marzo 22nd, 2010 | 10:37 pm

    Vaya ahora me sale esto al enviar un correo: ”
    Insecure dependency in “ while running setuid at plugins/rate_from line 158.”

    ¿pistas?

  13. Alvaro Marín Illera
    Abril 13th, 2010 | 11:06 am

    Hola edu,

    ¿qué te sale en el archivo /var/log/rate_from.log ? Algún mensaje de REJECT, UPDATE…etc?

Deja un comentario