En este artículo os vamos a explicar diferentes formas de localizar envíos de spam, el spam se suele originar vía web, smtp o mediante algún script en perl.
Si tenemos emails en cola lo mejor es abrir uno de esos email, en las cabeceras se puede encontrar información muy valiosa.
En el caso de no tener emails en cola podemos buscar en los logs de nuestras webs o logs de email.
Partimos de la base que el remitente lo pueden falsear por lo cual no tenemos información desde que dominio o cuenta email envían spam.
Si el spam se envía desde una web, la clave es buscar X-PHP-Script o userid, nos dice desde que URL o dominio se envía spam.
Received: by miservidor.com (Postfix, from userid 10039)
id C8D5E9793; Sun, 25 Jun 2017 09:43:34 +0200 (CEST)
From: "Remitente" <remitente@miservidor.com>
To: "Destinatario" <destinatario@otroservidor.com>
Subject: Asunto del Email
Date: Fecha email +0200
X-PHP-Script: midominio.com/xmlrpc.php for XXX.XXX.XXX.XXX (no está en todas las versiones de Plesk)
X-PHP-Originating-Script: 10039:class-phpmailer.php
X-Mailer: PHPMailer 5.2.22 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
Si tenemos un Plesk más antiguo puede que no incluya la cabecera X-PHP-Script si ejecutamos desde SSH ungrep de userid nos dirá desde que dominio se envía spam:
# grep 10039/etc/passwd ftpUser:x:10039:10039::/var/www/vhosts/midominio.com:/bin/false
Cabeceras de emails enviados desde fuera del servidor (acceso stmp), no tienen cabecera X-PHP-Script
Received: from ordenador (hostconexion [XXX.XXX.XXX.XXX]) esta cabecera no existe en los emails enviados vía web, nos indica de que IP proviene el mensaje.
by miservidor.com (Postfix) with ESMTPA id 1429F61E0461
for <destinatario@otroservidor.com>; Fecha email
From: "Remitente" <remitente@miservidor.com>
To: "Destinatario" <destinatario@otroservidor.com>
Subject: Asunto del Email
Date: Fecha email +0200
Message-ID: <001301d2ebfe$6576c9f0$30645dd0$@miservidor.com>
MIME-Version: 1.0
Content-Type: multipart/related;
boundary="----=_NextPart_000_0014_01D2EC0F.2901E3E0"
X-Mailer: Microsoft Outlook 14.0
Thread-Index: AdLr/mTQpC2POA4VQoOOlh/3sCjutA==
Content-Language: es
X-PPP-Message-ID: <20170623085505.25595.16770@miservidor.com>
X-PPP-Vhost: miservidor.com
En este caso lo importante es la IP si buscamos autentificaciones en el log de correo por esa IP veremos desde que cuenta envían spam.
Postfix:
# grep 'sasl_method=' /usr/local/psa/var/log/maillog | grep XXX.XXX.XXX.XXX
Qmail:
# grep smtp_auth /usr/local/psa/var/log/maillog |grep user | grep XXX.XXX.XXX.XXX
Normalmente todo el spam vía web se genera por accesos POST, una manera es buscar esos accesos en todos nuestros dominios:
# grep POST /var/www/vhosts/system/*/logs/access_log |grep -v '" 30' |grep -v '" 50' |grep -v '" 40'
Plesk viejos tiene otra ruta:
# grep POST /var/www/vhosts/*/statistics/logs/access_log |grep -v '" 30'|grep -v '" 50' |grep -v '" 40'
Si tenemos WordPress u otro CMS podemos omitir algunos accesos que sabemos que no son envíos de spam, por ejemplo acceso a wp-login.php, wp-cron.php, xmlrpc.php
Por lo cual podemos añadir al final de los comandos anteriores: |grep -v wp-login.php |grep -v wp-cron.php |grep -v xmlrpc.php
Postfix Listado Ordenado por nº autentificaciones:
# grep 'sasl_username' /var/log/maillog | awk '{print $9}'| sort | uniq -c | sort -nr | head
Qmail Listado Ordenado por nº autentificaciones:
# grep smtp_auth /var/log/maillog |grep user |awk '{print $11}' |sort |uniq -c |sort -nr | head
Otra forma de envío de spam es mediante algún proceso perl. Muchas veces suelen subir algún fichero a una de nuestras webs por no estar actualizada. La forma fácil es hacer un top en el servidor y buscar el PID del proceso perl, con ese PID ejecutaremos:
cat proc/PID/cwd
Otra opción es
lsof -p PID
Cuando ya tengamos localizado el proceso perl lo recomendable es eliminarlo y matar todos los proceso perl:
killall -9 perl
Borrar emails en cola desde SSH
Qmail Borrar emails con cierto Texto en el asunto:
/usr/local/psa/admin/bin/mailq -STextoAsunto
Qmail Borrar todos los emails:
/usr/local/psa/admin/bin/mailq -D
Postfix Borrar emails con cierto Texto:
find /var/spool/postfix/ -type f -exec grep -l 'Texto-del-Email' '{}' ; | xargs -n1 basename | xargs -n1 postsuper -d
Postfix Eliminar correos de un determinado buzón:
mailq | tail -n +2 | grep -v '^ *(' | awk 'BEGIN { RS = "" } { if ($7 == "usuario@ejemplo.com") print $1 }' | tr -d '*!' | postsuper -d -
Postfix Borrar todos los emails:
postsuper -d ALL