En aquest article us expliquem diferents maneres de localitzar l'origen dels enviaments de correu brossa. El correu brossa se sol originar des d'un lloc web, per SMTP o mitjançant algun script en Perl.
Si tenim missatges de correu a la cua, el millor és obrir-ne un, ja que les capçaleres poden contenir informació molt valuosa.
Si no tenim missatges de correu a la cua, podem cercar als registres dels nostres llocs web o als registres de correu.
Partim de la base que el remitent es pot falsificar, de manera que no sabem des de quin domini o compte de correu electrònic s'envia el correu brossa.
Si el correu brossa s'envia des d'un lloc web, la clau és cercar X-PHP-Script o userid, que ens indica des de quin URL o domini s'envia.
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 tenim una versió antiga del Plesk, pot ser que no inclogui la capçalera X-PHP-Script. Si executem grep per SSH per cercar el userid, sabrem des de quin domini s'envia el correu brossa:
# grep 10039 /etc/passwd
ftpUser:x:10039:10039::/var/www/vhosts/midominio.com:/bin/false
Les capçaleres dels missatges de correu enviats des de fora del servidor (accés SMTP) no inclouen la capçalera 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 aquest cas, el que importa és l'adreça IP. Si cerquem les autenticacions d'aquesta adreça IP al registre de correu, veurem des de quin compte s'envia el correu brossa.
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
Normalment, tot el correu brossa enviat des de llocs web es genera mitjançant peticions POST. Una manera de localitzar-lo és cercar aquestes peticions a tots els nostres dominis:
# grep POST /var/www/vhosts/system/*/logs/access_log |grep -v '" 30' |grep -v '" 50' |grep -v '" 40'
Les versions antigues del Plesk fan servir un altre camí:
# grep POST /var/www/vhosts/*/statistics/logs/access_log |grep -v '" 30'|grep -v '" 50' |grep -v '" 40'
Si tenim WordPress o un altre CMS, podem ometre algunes peticions que sabem que no corresponen a enviaments de correu brossa, per exemple, les peticions a wp-login.php, wp-cron.php, xmlrpc.php
Per tant, podem afegir el següent al final de les ordres anteriors: |grep -v wp-login.php |grep -v wp-cron.php |grep -v xmlrpc.php
Postfix: llista ordenada pel nombre d'autenticacions:
# grep 'sasl_username' /var/log/maillog | awk '{print $9}'| sort | uniq -c | sort -nr | head
Qmail: llista ordenada pel nombre d'autenticacions:
# grep smtp_auth /var/log/maillog |grep user |awk '{print $11}' |sort |uniq -c |sort -nr | head
Una altra manera d'enviar correu brossa és mitjançant algun procés de Perl. Sovint es puja algun fitxer a un dels nostres llocs web perquè no està actualitzat. Una manera senzilla de localitzar-lo és executar top al servidor i cercar el PID del procés de Perl. Amb aquest PID, executarem:
cat /proc/PID/cwd
Una altra opció és
lsof -p PID
Un cop hàgim localitzat el procés de Perl, és recomanable eliminar-lo i finalitzar tots els processos de Perl:
killall -9 perl
Suprimir missatges de correu de la cua per SSH
Qmail: suprimir els missatges de correu que contenen un text determinat a l'assumpte:
/usr/local/psa/admin/bin/mailq -STextoAsuntoQmail: suprimir tots els missatges de correu:
/usr/local/psa/admin/bin/mailq -DPostfix: suprimir els missatges de correu que contenen un text determinat:
find /var/spool/postfix/ -type f -exec grep -l 'Texto-del-Email' '{}' \; | xargs -n1 basename | xargs -n1 postsuper -dPostfix: suprimir els missatges de correu d'una bústia determinada:
mailq | tail -n +2 | grep -v '^ *(' | awk 'BEGIN { RS = "" } { if ($7 == "usuario@ejemplo.com") print $1 }' | tr -d '*!' | postsuper -d -Postfix: suprimir tots els missatges de correu:
postsuper -d ALL