# Il server invia spam: trovare le cause

> Il Suo server invia spam? Come trovare la fonte nella coda di posta, negli script PHP e nelle caselle, fermare l'invio e uscire dalle blacklist.

Fonte: https://phpsos.de/it/blog/server-verschickt-spam/  
Stato: 25/10/2026  
Fornitore: PHP SOS, Assistenza di emergenza PHP e sicurezza dei server. Assistenza immediata su WhatsApp: https://wa.me/491736494914?text=Buongiorno%20PHP%20SOS%2C%20abbiamo%20bisogno%20di%20aiuto%20con%20il%20nostro%20server%20PHP.%20Azienda%3A%20%E2%80%A6%20Sito%20web%3A%20%E2%80%A6

**In breve:** quando il server invia spam, c'è di solito una di tre cause: uno script PHP inserito o usato impropriamente, una casella con password rubata o un server di posta configurato male. Conservi alcune delle e-mail in attesa, legga le loro intestazioni e il log della posta, e nella maggior parte dei casi trova la fonte. Poi fermare l'invio, chiudere la causa e solo allora chiedere la rimozione dalle blacklist.

## Quando i clienti trovano le Sue fatture nella cartella spam

Raramente comincia con una segnalazione di sicurezza. Di solito si fanno vivi clienti che non ricevono più le Sue offerte, oppure la casella si riempie di messaggi di rimbalzo per e-mail che nessuno ha mai scritto. A volte l'hoster blocca l'invio e indica come motivo un traffico di posta anomalo.

Per l'azienda le conseguenze si sentono presto. Se l'indirizzo del server è su una blacklist, altri server di posta rifiutano anche le Sue e-mail vere: fatture, conferme d'ordine, link per le password dello shop. La reputazione del dominio ne soffre, e il danno cresce a ogni ora in cui l'invio continua.

L'invio di spam rientra tra le conseguenze note di una compromissione. Dopo PHP2Shell, con le vulnerabilità CVE-2026-109618 e CVE-2026-109619 e l'esecuzione di codice senza autenticazione, è un motivo in più per guardare con attenzione. Lo spam, però, non è un indizio specifico di PHP2Shell; non esistono Indicators of Compromise confermati. Altri segni generali li descrive [Sono già compromesso?](https://phpsos.de/it/php2shell/bin-ich-gehackt-anzeichen/).

## Tre cause tipiche quando il server invia spam

| Causa | Quadro tipico | Dove guardare |
|---|---|---|
| Script PHP inserito | E-mail senza autenticazione, consegnate localmente tramite `sendmail` | Intestazioni, log di posta PHP, nuovi file PHP |
| Modulo usato impropriamente | E-mail tramite un modulo di contatto o di raccomandazione a destinatari estranei | Log di accesso del modulo, intestazioni |
| Casella compromessa | Invio con autenticazione valida sul server di posta | Log di posta con nome di accesso, luoghi di accesso |
| Server di posta aperto | Mittenti estranei usano il Suo server come inoltro | Configurazione del server di posta, verifica esterna |

Le prime due cause riguardano il sito, la terza gli account di posta, la quarta la configurazione del server. La distinzione è importante, perché le contromisure sono completamente diverse.

## Leggere la coda di posta

Sui server con Postfix la coda mostra cosa sta per essere inviato. I comandi seguenti leggono soltanto:

```bash
# Mostrare il contenuto della coda (equivale a mailq)
postqueue -p | tail -30

# Mostrare le intestazioni di una singola e-mail (inserire l'ID di coda dall'elenco)
sudo postcat -q -h QUEUE-ID

# Accessi riusciti al server di posta con nome utente
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head
```

Le intestazioni rivelano spesso già la fonte. Se l'e-mail proviene da una casella autenticata, nel log della posta compare il nome di accesso. Se vi si accumula un singolo account con accessi da paesi stranieri, è molto probabile che la password di quella casella sia diventata nota. Se invece l'e-mail è stata consegnata localmente, di solito proviene da uno script sul server.

Se sul Suo server gira un altro server di posta, ad esempio Exim, i comandi si chiamano diversamente, ma il principio resta lo stesso: guardare la coda, leggere le intestazioni, contare gli accessi nel log. Nell'hosting condiviso senza accesso shell chieda all'hoster per iscritto un estratto del log di posta e alcune e-mail di esempio con le intestazioni complete. Molti hoster forniscono queste indicazioni su richiesta, perché hanno essi stessi interesse a far cessare l'invio.

Conservi alcune e-mail complete prima di fermare o svuotare la coda. Sono prove per l'analisi successiva e per le conversazioni con l'hoster o i gestori delle blacklist.

## Trovare lo script PHP responsabile

Se l'invio passa da PHP, aiuta la configurazione della posta di PHP. Secondo il manuale PHP, `mail.log` registra ogni chiamata della funzione `mail()` con percorso completo dello script, numero di riga, destinatario e intestazioni. `mail.add_x_header` scrive inoltre in ogni e-mail un'intestazione `X-PHP-Originating-Script` con l'identificativo utente e il nome del file.

```ini
; In php.ini o nel pool FPM, poi riavviare tutti i worker
mail.add_x_header = On
mail.log = /var/log/php/mail.log
```

Il file di log deve essere scrivibile dal processo PHP. L'intestazione rivela ai destinatari un nome di file; la disattivi dopo l'analisi, se non la vuole in modo permanente.

Se come mittente compare un file sconosciuto, ad esempio nella cartella di upload o di cache, è un indizio di una webshell. Come inquadrare tali file lo descrive [Riconoscere e rimuovere le webshell](https://phpsos.de/it/ratgeber/webshell-erkennen/). Se invece è un modulo di contatto noto, è probabile che sia stato usato impropriamente, ad esempio perché destinatario o intestazioni vengono ripresi da input del modulo. È un errore nel codice, non un'intrusione, ma va risolto altrettanto in fretta.

Non ogni spam usa la funzione `mail()`. Il codice dannoso può anche stabilire direttamente una connessione con server di posta estranei. In tal caso l'invio non compare né nella coda né nel log di posta PHP, ma come connessioni in uscita sulla porta 25. Come verificarle lo descrive [Verificare le connessioni in uscita di un server](https://phpsos.de/it/blog/ausgehende-verbindungen-pruefen/).

## Fermare l'invio e ripartire in modo pulito

Una volta trovata la fonte, segue la bonifica in quest'ordine:

1. **Fermare l'invio:** bloccare la via interessata, quindi disattivare lo script, bloccare la casella o fermare la coda. Conservare come prova le e-mail in attesa.
2. **Chiudere la causa:** con una webshell portare PHP a uno stato corretto (8.5.12, 8.4.27, 8.3.36, 8.2.35 o backport confermato), riavviare tutti i worker e bonificare il sito. Con un modulo correggere il codice. Con una casella cambiare la password e verificare il dispositivo dell'utente.
3. **Cercare altre tracce:** chi invia spam tramite una webshell ha spesso creato altre backdoor.
4. **Limitare l'uscita:** consentire le connessioni in uscita sulla porta 25 solo al server di posta, non all'utente del server web.
5. **Ripulire le blacklist:** solo ora chiedere la rimozione ai gestori delle blacklist e descrivere brevemente cosa è stato risolto.

> **Consiglio:**
> Colga l'occasione per verificare SPF, DKIM e DMARC del Suo dominio. Questi record DNS stabiliscono quali server possano inviare a nome del Suo dominio e rendono più difficile a estranei l'uso improprio del Suo indirizzo mittente.

## Come aiuta concretamente PHP SOS?

- Valutiamo coda, intestazioni e log di posta e determiniamo se la causa sia uno script, un modulo, una casella o la configurazione.
- Fermiamo l'invio in modo controllato e conserviamo prove per hoster e blacklist.
- Bonifichiamo il sito nell'ambito della [rimozione del malware](https://phpsos.de/it/leistungen/malware-entfernung/) e chiudiamo il punto d'ingresso.
- Limitiamo il traffico di posta in uscita a livello di server e accompagniamo la rimozione dalle blacklist.


## Domande frequenti

**Da cosa capisco che il mio server invia spam?**  
Tipici sono i messaggi di rimbalzo per e-mail che nessuno ha scritto, le segnalazioni dell'hoster, una coda di posta piena e clienti che trovano improvvisamente le Sue e-mail nella cartella spam. Anche le voci del Suo indirizzo server nelle blacklist pubbliche sono un segno evidente.

**Come trovo lo script PHP che invia spam?**  
PHP può registrare ogni chiamata della funzione mail() con il percorso dello script, se mail.log è impostato. Con mail.add_x_header PHP scrive inoltre il nome dello script nell'intestazione di ogni e-mail. Nelle e-mail già inviate o in attesa aiuta uno sguardo alle intestazioni.

**Devo svuotare subito la coda di posta?**  
Non prima di aver conservato alcune e-mail come prova. Le intestazioni mostrano spesso quale script o quale casella abbia causato l'invio. Fermare è di solito meglio che cancellare, finché la fonte non è nota.

**Come esco di nuovo dalle blacklist?**  
Prima eliminare la causa, poi chiedere la rimozione ai rispettivi gestori delle blacklist. La maggior parte richiede una spiegazione di cosa sia stato risolto. Chi chiede troppo presto e continua a inviare spam viene inserito di nuovo.

## Fonti

- [Manuale PHP: configurazione della posta](https://www.php.net/manual/en/mail.configuration.php)
- [OWASP Cheat Sheets](https://cheatsheetseries.owasp.org/)
- [BSI: indicazioni sugli incidenti di sicurezza IT](https://www.bsi.bund.de/)
