# O servidor envia spam: encontrar as causas

> O seu servidor envia spam? Como encontrar a origem na fila de correio, em scripts PHP e caixas de correio, parar o envio e sair das listas de bloqueio.

Fonte: https://phpsos.de/pt/blog/server-verschickt-spam/  
Atualizado em: 25/10/2026  
Prestador: PHP SOS, Assistência de emergência PHP e segurança de servidores. Ajuda imediata por WhatsApp: https://wa.me/491736494914?text=Ol%C3%A1%2C%20PHP%20SOS%2C%20precisamos%20de%20ajuda%20com%20o%20nosso%20servidor%20PHP.%20Empresa%3A%20%E2%80%A6%20Site%3A%20%E2%80%A6

**Em resumo:** Quando o servidor envia spam, costuma haver uma de três causas: um script PHP introduzido ou usado indevidamente, uma caixa de correio com palavra-passe roubada ou um servidor de correio mal configurado. Guarde alguns dos e-mails em espera, leia os seus cabeçalhos e o registo de correio e, na maioria dos casos, encontrará a origem. Depois parar o envio, fechar a causa e só então pedir a remoção das listas de bloqueio.

## Quando os clientes encontram as suas faturas na pasta de spam

Raramente começa com um aviso de segurança. Normalmente são clientes que já não recebem as suas propostas, ou a caixa de correio enche-se de mensagens de devolução de e-mails que nunca ninguém escreveu. Por vezes, o fornecedor de alojamento bloqueia o envio e indica como motivo tráfego de correio invulgar.

Para a empresa, isto tem depressa consequências sentidas. Se o endereço do servidor estiver numa lista de bloqueio, outros servidores de correio rejeitam também os seus e-mails verdadeiros: faturas, confirmações de encomenda, ligações de palavra-passe da loja. A reputação do domínio sofre, e o dano cresce a cada hora em que o envio continua.

O envio de spam pertence às consequências conhecidas de um comprometimento. Depois do PHP2Shell, as vulnerabilidades CVE-2026-109618 e CVE-2026-109619 com execução de código sem autenticação, é mais uma razão para olhar com mais atenção. Spam não é, porém, uma indicação específica do PHP2Shell; não existem Indicators of Compromise confirmados. Outros indícios gerais descreve-os [Já fui comprometido?](https://phpsos.de/pt/php2shell/bin-ich-gehackt-anzeichen/).

## Três causas típicas quando o servidor envia spam

| Causa | Imagem típica | Onde procurar |
|---|---|---|
| Script PHP introduzido | e-mails sem autenticação, entregues localmente através do `sendmail` | cabeçalhos, registo de correio do PHP, novos ficheiros PHP |
| Formulário usado indevidamente | e-mails através de um formulário de contacto ou de recomendação para destinatários estranhos | registo de acessos do formulário, cabeçalhos |
| Caixa de correio sequestrada | envio com autenticação válida no servidor de correio | registo de correio com nome de autenticação, locais de autenticação |
| Servidor de correio aberto | remetentes estranhos usam o seu servidor como reencaminhamento | configuração do servidor de correio, verificação externa |

As duas primeiras causas dizem respeito ao site, a terceira às contas de correio, a quarta à configuração do servidor. A distinção é importante, porque as contramedidas são totalmente diferentes.

## Ler a fila de correio

Em servidores com Postfix, a fila mostra o que está prestes a ser enviado. Os comandos seguintes só leem:

```bash
# Mostrar o conteúdo da fila (equivale ao mailq)
postqueue -p | tail -30

# Mostrar os cabeçalhos de um e-mail individual (inserir o ID da fila da lista)
sudo postcat -q -h QUEUE-ID

# Autenticações bem-sucedidas no servidor de correio com nome de utilizador
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head
```

Os cabeçalhos revelam muitas vezes logo a origem. Se o e-mail provém de uma caixa de correio autenticada, o nome de autenticação aparece no registo de correio. Se aí se acumular uma única conta com autenticações de países estranhos, a palavra-passe dessa caixa de correio tornou-se muito provavelmente conhecida. Se, em contrapartida, o e-mail foi entregue localmente, provém em regra de um script no servidor.

Se no seu servidor correr outro servidor de correio, como o Exim, os comandos têm outros nomes, mas o princípio mantém-se: ver a fila, ler os cabeçalhos, contar as autenticações no registo. No alojamento partilhado sem acesso à shell, peça ao fornecedor por escrito um extrato do registo de correio e alguns e-mails de exemplo com cabeçalhos completos. Muitos fornecedores fornecem estas indicações a pedido, porque eles próprios têm interesse em acabar com o envio.

Guarde alguns e-mails completos antes de suspender ou esvaziar a fila. São provas para a análise posterior e para conversas com o fornecedor ou os operadores das listas de bloqueio.

## Encontrar o script PHP responsável

Se o envio é feito por PHP, ajuda a configuração de correio do PHP. Segundo o manual do PHP, o `mail.log` regista cada chamada da função `mail()` com caminho completo do script, número de linha, destinatário e cabeçalhos. O `mail.add_x_header` escreve além disso em cada e-mail um cabeçalho `X-PHP-Originating-Script` com o identificador de utilizador e o nome do ficheiro.

```ini
; No php.ini ou no pool FPM, depois reiniciar todos os workers
mail.add_x_header = On
mail.log = /var/log/php/mail.log
```

O ficheiro de registo tem de ser gravável pelo processo PHP. O cabeçalho revela aos destinatários um nome de ficheiro; desligue-o depois da análise, se não o quiser de forma permanente.

Se como remetente aparecer um ficheiro desconhecido, por exemplo na pasta de upload ou de cache, é um indício de webshell. Como enquadrar tais ficheiros descreve-o [Reconhecer e remover webshells](https://phpsos.de/pt/ratgeber/webshell-erkennen/). Se, em contrapartida, for um formulário de contacto conhecido, foi provavelmente usado indevidamente, por exemplo porque destinatários ou cabeçalhos são tirados de entradas do formulário. É um erro no código, não uma intrusão, mas tem de ser igualmente corrigido depressa.

Nem todo o spam usa a função `mail()`. O código malicioso também pode estabelecer diretamente uma ligação a servidores de correio alheios. Nesse caso, o envio não aparece nem na fila nem no registo de correio do PHP, mas sim como ligações de saída na porta 25. Como as verificar está em [Verificar as ligações de saída de um servidor](https://phpsos.de/pt/blog/ausgehende-verbindungen-pruefen/).

## Parar o envio e voltar a pô-lo a funcionar de forma limpa

Depois de encontrada a origem, segue-se a limpeza por esta ordem:

1. **Suspender o envio:** bloquear o caminho afetado, ou seja, desativar o script, bloquear a caixa de correio ou suspender a fila. Guardar os e-mails em espera como prova.
2. **Fechar a causa:** no caso de uma webshell, pôr o PHP num estado corrigido (8.5.12, 8.4.27, 8.3.36, 8.2.35 ou backport confirmado), reiniciar todos os workers e limpar o site. No caso de um formulário, corrigir o código. No caso de uma caixa de correio, alterar a palavra-passe e verificar o dispositivo do utilizador.
3. **Procurar outros vestígios:** quem envia spam através de uma webshell criou muitas vezes outras portas dos fundos.
4. **Limitar a saída:** permitir ligações de saída na porta 25 apenas para o servidor de correio, não para o utilizador do servidor web.
5. **Limpar as listas de bloqueio:** só agora pedir a remoção junto dos operadores das listas de bloqueio e descrever brevemente o que foi corrigido.

> **Dica:**
> Aproveite a ocasião para verificar o SPF, o DKIM e o DMARC do seu domínio. Estas entradas DNS definem que servidores podem enviar em nome do seu domínio e dificultam que estranhos abusem do seu endereço de remetente.

## Como ajuda concretamente a PHP SOS?

- Analisamos fila, cabeçalhos e registos de correio e apuramos se a causa é um script, um formulário, uma caixa de correio ou a configuração.
- Paramos o envio de forma controlada e guardamos provas para o fornecedor de alojamento e as listas de bloqueio.
- Limpamos o site no âmbito da [remoção de malware](https://phpsos.de/pt/leistungen/malware-entfernung/) e fechamos a porta de entrada.
- Limitamos o tráfego de correio de saída ao nível do servidor e acompanhamos a remoção das listas de bloqueio.


## Perguntas frequentes

**Como noto que o meu servidor envia spam?**  
São típicas mensagens de devolução de e-mails que ninguém escreveu, avisos do fornecedor de alojamento, uma fila de correio cheia e clientes que de repente encontram os seus e-mails na pasta de spam. Também entradas do endereço do seu servidor em listas de bloqueio públicas são um sinal claro.

**Como encontro o script PHP que envia spam?**  
O PHP pode registar cada chamada da função mail() com o caminho do script, se mail.log estiver definido. Com mail.add_x_header, o PHP escreve ainda o nome do script no cabeçalho de cada e-mail. Em e-mails já enviados ou em espera, ajuda olhar para os cabeçalhos.

**Devo esvaziar logo a fila de correio?**  
Não antes de ter guardado alguns e-mails como prova. Os cabeçalhos mostram muitas vezes que script ou caixa de correio desencadeou o envio. Em regra, é melhor suspender do que apagar, até a origem ser conhecida.

**Como saio de novo das listas de bloqueio?**  
Primeiro eliminar a causa, depois pedir a remoção junto dos respetivos operadores das listas de bloqueio. A maioria exige uma explicação do que foi corrigido. Quem pede cedo demais e continua a enviar spam volta a ser listado.

## Fontes

- [Manual do PHP: configuração de correio](https://www.php.net/manual/en/mail.configuration.php)
- [OWASP Cheat Sheets](https://cheatsheetseries.owasp.org/)
- [BSI: indicações sobre incidentes de segurança informática](https://www.bsi.bund.de/)
