Postfix: Come identificare uno script PHP che invia spam
Il vostro dominio è in hosting su un server Linux che utilizza Postfix per l’invio delle email ed è in blacklist per spam?
Probabilmente avete uno script malevolo che invia un elevato numero di email direttamente dal server… insomma, avete il nemico in casa!
Se il vostro demone di posta in uscita (ossia il software utilizzato per inviare le email) è Postfix, è possibile identificare l’origine dello spam in pochi semplici passi.
La risoluzione del problema può essere altrettanto agevole, anche se nella maggior parte dei casi necessita di ulteriori approfondimenti.
È infatti necessario evitare che la situazione si ripresenti, in quanto se qualcuno è riuscito a caricare uno script sul vostro server, potreste avere qualche falla di sicurezza.
La prima cosa da fare è accedere al vostro mailserver con un utente con diritti amministrativi (sudo) ed essere sicuri che il file php.ini del vostro dominio (e/o quello globale del server) contenga la seguente riga:
mail.add_x_header = On
senza la quale quanto andremo a fare di seguito non produrrà alcun risultato utile.
Verificato ciò, sarà necessario esaminare la coda degli invii delle email con il comando:
mailq
Nella prima colonna verrà mostrato l’ID univoco delle singole email in uscita, ad esempio:
DA5E8647235C 369763 Wed Mar 29 16:30:19 someotheruser@someotherdomain.com (connect to somedomain.com[123.123.123.123]:25: Connection refused) someuser@somedomain.com
Identificata una di queste email che sia ovviamente di spam, andremo ad esaminarne i dettagli con il comando:
postcat -q <ID>
e cercheremo una riga che inizi con “X-PHP-Originating-Script” (presente in virtù della riga del file php.ini di cui sopra).
Ad esempio, utilizzando grep per evitare di dover scorrere manualmente tutto il contenuto dell’email:
postcat -q DA5E8647235C | grep X-PHP-Originating-Script
potremmo ottenere un output del genere:
X-PHP-Originating-Script: 45:badmailer.php
Il numero 45 è l’UID, ossia l’ID dell’utente Linux che ha eseguito lo script, mentre badmailer.php è lo script che sta inviando le email di spam.
A questo punto non vi resta altro da fare che localizzare il file badmailer.php, cancellarlo o ripulirlo e soprattutto capire come è stato inviato al vostro server e da lì eseguito.
Se la riga X-PHP-Originating-Script non è presente nel vostro header, molto probabilmente un vostro account di posta è stato hackerato, e viene utilizzato per inviare spam in maniera “legittima” dal vostro server. In questo caso, individuata un’email di spam in uscita, sarà opportuno lanciare il seguente comando per capire qual è l’account che è stato utilizzato per autenticarsi:
postcat -q DA5E8647235C | grep sasl_username
Otterrete un output di questo tipo:
named_attribute: sasl_username=info@nullalo.com
Nell’esempio, provvedete immediatamente a cambiare la password dell’account info@nullalo.com con una più robusta (lunga, con caratteri speciali, maiuscole e minuscole).
Un’altra cosa che potete fare per limitare i danni è svuotare la coda di posta in uscita con il seguente comando:
postsuper -d ALL
Se, tuttavia, oltre alle email di spam sono in coda anche email importanti, vi toccherà eliminare le email singolarmente con il comando:
postsuper -d <ID>
Quindi, nell’esempio lanceremo il seguente comando:
postsuper -d DA5E8647235C
Questo è tutto… se avete difficoltà, commentate l’articolo e cercheremo di aiutarvi!
5 Commenti
Ciao!
Il tuo articolo è utilissimo per tutti coloro che hanno questo problema visto che è la risoluzione definitiva.
Nel mio caso però nelle email di spam che vengono inviate non c’è nessuna riga “X-PHP-Originating-Script”, nonostante l’header appare completo.
Come si può capire cosa le sta generando? Grazie.
Ciao Lorenzo,
se la riga “X-PHP-Originating-Script” manca, molto probabilmente lo spam ha origine da un account di posta elettronica che è stato “bucato”, e che quindi invia posta dal tuo server in maniera “legittima”.
In questo caso ti consiglio di esaminare bene l’header per risalire al mittente dell’email e cambiare tempestivamente la password di quell’account, utilizzandone magari una più complessa.
Ad ogni modo, ho aggiornato l’articolo con quanto sopra accennato, facci sapere!
how to increase security in postfix for spam ?
Thank you for this great article
One thing I’ve learned the hard way – if you’re using PHP Mailer, or any other library for sending emails from your server, be sure to change the script’s default path and directory names to a string consisting of random characters.
For example, if the directory name is phpmailer, rename it, so it’s 7PSBYyAFFD.
The path to the script becoms:
public_html/mysite/7PSBYyAFFD/PHPMailerAutoLoad.php
If you do this, you also need to change your PHP code which calls the mailer, so that it uses the new directory name.
Of course, this won’t help much, if there are other problems with your site – backdoors, compromised email accounts, or other security holes.