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 qué 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: 8bitSi tenemos un Plesk más antiguo puede que no incluya la cabecera X-PHP-Script si ejecutamos desde SSH un grep 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/falseCabeceras 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.comEn 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.XXXQmail:
# grep smtp_auth /usr/local/psa/var/log/maillog |grep user | grep XXX.XXX.XXX.XXXNormalmente 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 | headQmail Listado Ordenado por nº autentificaciones:
# grep smtp_auth /var/log/maillog |grep user |awk '{print $11}' |sort |uniq -c |sort -nr | headOtra 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/cwdOtra opción es
lsof -p PIDCuando 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 -STextoAsuntoQmail Borrar todos los emails:
/usr/local/psa/admin/bin/mailq -DPostfix Borrar emails con cierto Texto:
find /var/spool/postfix/ -type f -exec grep -l 'Texto-del-Email' '{}' \; | xargs -n1 basename | xargs -n1 postsuper -dPostfix 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