En el caso del SPAM, la mejor defensa, es una buena defensa, pero en Plesk, esto a veces es complicado porque carece de las herramientas y potencia necesaria para hacerlo. En este punto creo que cPanel está mucho más avanzado, pero si hemos elegido Plesk,posiblemente ya sea tarde para cambiar de dirección.
Comenzamos por diagnosticar problemas en el envío de spam. Lo habitual es recibir quejas de usuarios porque no les llegan correos, o porque los correos que ellos envían no llegan a sus destinatarios. Esto no es debido a un fallo, es debido a que las colas de correo tienen tanta carga por procesar, que cada correo que se envía tarda horas en salir o llegar a destinatario.
Para evitar que sea el usuario quien informe del error, se debería poner algún sistema de aviso temprano, pero ya hablaré de esto en otro post.
Para localizar estos errores, Plesk cuenta con una herramienta para gestionar las colas bastante interesante, pero cuando la cola es de 100.000 correos, no funciona nada bien; se cuelga y no ejecuta las ordenes, de modo que no queda otra opción que comprobar las queus desde la consola:
[root@servidor ~]# /var/qmail/bin/qmail-qstat
Lo que debería devolver algo similar a esto:
[root@servidor ~]# /var/qmail/bin/qmail-qstat messages in queue: 16784 messages in queue but not yet preprocessed: 14512
Casi sin duda se trata de un envío de spam.
Hay varias causas para que esto ocurra, pero las más probables son:
- Cuenta de correo de un cliente comprometida
- Script php o cgi comprometido
- Rootkit o similar instalado a través de una vulnerabilidad del sistema.
Vamos a describir cómo detectar de donde vienen los correos:
El primer caso es el más sencillo de diagnosticar y eliminar, puesto que visionando las listas de salida podremos ver el nombre de usuario que está enviando correo, y cambiar su clave inmediatamente. Hay que tener en cuenta que una cuenta de correo puede estar enviando spam o bien porque tiene un virus en su pc, y Outlook o cualquier otro MUA (Mail User Agent) está enviando correos, o bien su clave de correo se ha visto comprometida, y hay muchos MUAS repartidos por servidores enviando correos a través de nuestro servidor. Este segundo caso es el más habitual, y la solución pasa simplemente por cambiar la clave del correo y limpiar las colas.
Para ver que usuario está conectando más con el servidor, podemos lanzar el siguiente comando:
[root@servidor ~]# cat /usr/local/psa/var/log/maillog |grep -I smtp_auth |grep -I user |awk '{print $8}' |sort |uniq -c |sort –n
Tener en cuenta que según la versión de plesk, el print $8 puede cambiar a $9, $10, o $7… probar hasta que la salida sea la siguiente:
[root@servidor~]# cat /usr/local/psa/var/log/maillog |grep -I smtp_auth |grep -I user |awk '{print $8}' |sort |uniq -c |sort -n 2 correo1@correo.es 5 correo2@correo.es 7 correo3@correo.es 10 correo4@correo.es 19 correo5@correo.es 458 correo6@correo.es
Esto no dice que el correo correo6@correo.es ha conectado 458 veces al SMTP en las últimas horas, pero esto no tiene por qué ser algo definitivo, no obstante da que pensar.
Una vez visto esto, podemos mirar las colas de correo buscando el correo del que sospechamos:
[root@servidor ~]# /var/qmail/bin/qmail-qread | grep -c correo6@correo.es 14584
Esto nos indica que solo tiene 14584 correos pendientes de procesar.
En el ejemplo podemos ver que correo6@correo.es está mandando spam. Una vez llegados a este punto, lo primero es cambiar la contraseña para este correo, podemos aprovechar ya que estamos en la consola para cambiarla con el siguiente comando:
/usr/local/psa/bin/mail -u correo6@correo.es -passwd claveparaelcorreo
Una vez hecho esto, podemos o bien borrar la cola de correo completa, lo cual no recomiendo, por la más que posible pérdida de correos legítimos de otros clientes y usuarios:
/usr/local/psa/admin/bin/mailqueuemng -D
O por otro lado podemos borrar de un modo más selectivo, a través del subject.
/usr/local/psa/admin/bin/mailqueuemng -S"texto"
Recomiendo borrar este subject en concreto, porque muchos servidores nos devolverán una notificación de correo no entregado:
/usr/local/psa/admin/bin/mailqueuemng -S"failure notice"
Muchas veces el envío de spam tiene el mismo subject para todos los correos. Para poder ver el correo, podemos localizarlo con la siguiente orden: Desde el listado /var/qmail/bin/qmail-qread, localizamos una id de correo, y la buscamos en el sistema:
[root@servidor ~]# /var/qmail/bin/qmail-qread | grep correo6@correo.es 17 Nov 2013 08:28:40 GMT #18090191 6113 correo6@correo.es 14 Nov 2013 08:56:50 GMT #18090652 6233 correo6@correo.es 15 Nov 2013 17:36:02 GMT #18091573 6212 correo6@correo.es 18 Nov 2013 12:39:54 GMT #18088744 26940 correo6@correo.es 18 Nov 2013 13:44:43 GMT #18090402 11468 correo6@correo.es
[root@servidor ~]# find /var/qmail/queue/ -name 18090191 /var/qmail/queue/mess/17/18090191 /var/qmail/queue/remote/17/18090191 /var/qmail/queue/info/17/18090191
Una vez localizado, lo podemos leer:
[root@servidor ~]# less /var/qmail/queue/mess/17/18090191 Received: (qmail 18402 invoked from network); 17 Nov 2013 12:35:31 +0100 Received: from 1.2.3.4 (HELO PCCLIENTE) (1.2.3.4) by servidor.com with ESMTPA; 17 Nov 2013 08:28:40 +0100 Subject: replica watches
A continuación solo hay que proceder a borrar este subject:
/usr/local/psa/admin/bin/mailqueuemng -S"replica watches"
Por ultimo, podemos borrar todos los correos de un remitente o dominio utilizando la siguiente orden:
/usr/local/psa/admin/bin/mailqueuemng `/var/qmail/bin/qmail-qread | grep correo6@correo.es | awk '{print $6}' | awk 'gsub("#","-d")' | tr "\n" " "`
Atención a esto, esta orden es muy destructiva, y recomiendo ejecutar esto antes:
/var/qmail/bin/qmail-qread | grep correo6@correo.es | awk '{print $6}' | awk 'gsub("#","-d")' | tr "\n" " "
De este modo nos aseguramos de que el comando que mostará el listado está correctamente ejecutado. Debería dar esta salida:
[root@servidor ~]# /var/qmail/bin/qmail-qread | grep correo6@correo.es | awk '{print $6}' | awk 'gsub("#","-d")' | tr "\n" " " -d18090191 -d18090652 -d18091573 -d18088917 -d18090666 -d18090602
Con esto hemos detectado el dominio y/o cuenta de correo que está dando problemas, y limpiado las colas de correo
Espero que sea de utilidad y algún sysadmin al que esto le sea de utilidad pueda agregar más información.
En los siguiente posts hablaré sobre los ataques por CGI o scripts PHP, y como localizarlos con un wrapper.
Excelente artículo, muy útil y bien explicado.
Saludos,
Me alegro de que sea util. La verdad es que desde que he conseguido que mis usuarios no utilicen claves fáciles, la cosa ha mejorado bastante (cruzo los dedos para que siga así), pero el hecho de que a través de ataques por fuerza bruta, se pueda descubrir la clave, y plesk no tenga herramientas de bloque de ips antes ataques de este tipo, es sangrante.
Un añadido: Creo que con solo cambiar la contraseña de la cuenta no se soluciona inmediatamente el envío, ya que si la sesión está iniciada previamente el envío continuará.
Si es el caso, cambiar la contraseña y reiniciar qmail a continuación. Desde el mismo panel de control es sencillo.
Gracias por la info. muy útil.
Llevas razón; aún que no lo puse en el artículo, yo también tengo la costumbre de reiniciar los servicios después de cambiar la clave.