giovedì 13 Dicembre 2018

Come pulire la coda exim dallo spam

La guida è utilizzabile su macchine linux con cPanel ed exim attivato con accesso SSH ed è un aiuto nel caso in cui ci sia invio di spam da parte di una casella email.

Dopo aver eseguito l’accesso alla macchina verifichiamo quante email ci sono in coda di invio con il comando:

exim -bpc

Se il comando restituirà tante email sicuramente c’è spam nella coda di invio. Bisogna allora passare a scovare “chi” sta inviando spam (perché è stata rubata la password o perché sta inviando spam 🙂 ).
Visualizziamo tutta la coda exim (se è tanto lunga stoppate con un ctrl-C):

exim -bp

Se con questo comando non riuscite a trovare l’indirizzo incriminato potete dare il seguente comando, che visualizza il sommario della coda exim:

exim -bp | exiqsumm

Una volta scovata la casella che sta inviando spam controlliamo se si sta autenticando con la password o se sta inviando utilizzando uno script php inserito nella public_html del dominio (sicuramente un file malevolo). Per capirlo occorre visualizzare l’header di un messaggio in coda. Prima passiamo a contare tutte le email in coda inviate dalla casella incriminata (prendo per esempio email@spam.xx):

exim -bp | grep email@spam.xx | wc -l

Questo comando ci viene in aiuto anche durante la ricerca della casella spammosa.

Ora diamo un bel:

exim -bp | grep email@spam.xx

Questo comando visualizzerà tutte le email in invio da email@spam.xx, il tempo che sono in coda, il mittente (quindi la nostra casella) e soprattutto il codice dell’email o ID.
Il formato dell’ID è XXXXXX-YYYYYY-ZZ.

Con questo codice andiamo a vedere l’header con il comando:

exim -Mvh XXXXXX-YYYYYY-ZZ

dove XXXXXX-YYYYYY-ZZ è, appunto, il codice di un’email in coda visualizzato dal comando precedente.

Nell’header andiamo a vedere il campo “auth_id“. Se questo campo è proprio email@spam.xx vuol dire che si sta autenticando per inviare spam. Probabilmente la password della casella è stata rubata utilizzando un malware o trojan installato nel pc che utilizza il client di posta (con la password salvata).

Per avere la certezza che l’email sia spam andiamo a vedere, sempre nell’header, l’oggetto dell’email che non è nient’altro che il campo “Subject:“. Volendo, per un controllo, possiamo visualizzare anche il corpo dell’email (body) con il comando:

exim -Mvb XXXXXX-YYYYYY-ZZ

Prima di passare all’eliminazione dei messaggi in coda occorre accedere al cPanel del dominio e cambiare la password della casella (inserendo una password con strenght di almeno 80 così da stare tranquilli). Ovviamente questa nuova password non deve essere impostata subito nel client di posta, prima occorre effettuare una scansione completa di tutti i pc che utilizzano un client di posta con questa casella configurata. Inoltre consiglio di non impostare in un secondo momento la vecchia password rubata.

Passiamo all’eliminazione dei messaggi. Ci sono molti modi, quello che preferisco è il seguente (che è anche molto veloce ed elimina solamente i messaggi in partenza da quella casella):

exim -bp | grep email@spam.xx | awk ‘{print $3}’ | xargs exim -Mrm

Il comando:

exim -Mrm XXXXXX-YYYYYY-ZZ

elimina l’email con quell’ID dalla coda.
Com awk ‘{print $3}’ andiamo a selezionare proprio l’ID dei messaggi dalla lista restituita da exim -bp (essendo l’ID la terza occorrenza dell’output) prendendo solamente quelli che vengono inviati dall’email email@spam.xx. Con xargs passiamo l’ID al comando exim -Mrm.

Così facendo exim inizierà a darvi il responso dell’eliminazione del messaggio. A volte può capitare che vi dia un errore e non riesca ad eliminare il messaggio dalla coda. In questo caso, prima di ripetere il comando, occorre stoppare il demone exim:

/etc/init.d/exim stop

Per riattivarlo quando finito:

/etc/init.d/exim start

Tutto finito. La nostra coda exim è pulita dallo spam. Per controllare che non stia ancora inviando diamo un bel exim -bp e controlliamo la coda. Meglio ancora visualizzare solamente gli eventuali messaggi in coda della casella:

exim -bp | grep email@spam.xx

Ricordo il comando per contarli:

exim -bp | grep email@spam.xx | wc -l

wc -l non fa nient’altro che contare le occorrenze (righe) dell’output.

Sicuramente le molte email in coda avranno generato dei bounce di ritorno visto che, in genere, lo spam viene inviato a caselle casuali e quindi a volte non esistenti (generando quindi un’email di ritorno Mail Delivery Failure).
Per pulire la coda dai bounce di ritorno dare questo comando:

exim -bp | grep “<>” | awk ‘{print $3}’ | xargs exim -Mrm

che non è nient’altro che lo stesso comando per la rimozione delle email di spam ma questa volta greppiamo “<>”, che è il codice visualizzato dalla coda exim per i bounce.

Riepiloghiamo i comandi utilizzati:

– Visualizzare coda intera exim:

exim -bp

– Contare le email in coda exim:

exim -bpc

– Contare le occorrenza di una casella email specifica:

exim -bp | grep casella@casella.ext | wc -l

– Vedere la coda di invio di una casella:

exim -bp | grep casella@casella.ext

– Visualizzare l’header di un messaggio:

exim -Mvh XXXXXX-YYYYYY-ZZ

– Visualizzare il body (corpo) di un messaggio:

exim -Mvb XXXXXX-YYYYYY-ZZ

– Eliminare un messaggio dalla coda:

exim -Mrm XXXXXX-YYYYYY-ZZ

– Eliminare tutti i messaggi dalla coda di una specifica casella:

exim -bp | grep casella@casella.ext | awk ‘{print $3}’ | xargs exim -Mrm

– Eliminare i bounce di ritorno causati dal molteplice spam inviato:

exim -bp | grep “<>” | awk ‘{print $3}’ | xargs exim -Mrm

– Vedere il log di un messaggio:

exim -Mvl XXXXXX-YYYYYY-ZZ

– Eliminare messaggi in coda più vecchi di X giorni. Il tempo va inserito in secondi, quindi bisogna moltiplicare 86400 per il numero dei giorni:

exiqgrep -o 86400 -i | xargs exim -Mrm

– Stoppare il demone exim, avviarlo:

/etc/init.d/exim stop

/etc/init.d/exim start

P.S.: Mi sono accorto che il comando xargs exim -Mrm, in caso di molte email in coda, ci mette veramente troppo tempo e non è possibile vedere se la cancellazione sta andando avanti. Quando la coda è molto lunga (parlo di migliaia di email) vi consiglio di usare questi comandi (usando semplicemente un ciclo):

– Eliminare tutti i messaggi dalla coda di una specifica casella:

exim -bp | grep casella@casella.ext | awk ‘{print $3}’ | while read a; do exim -Mrm $a; done

– Eliminare i bounce di ritorno causati dal molteplice spam inviato:

exim -bp | grep “<>” | awk ‘{print $3}’ | while read a; do exim -Mrm $a; done

 

About The Author

Related posts