# Server rozesílá spam: jak najít příčiny

> Váš server rozesílá spam? Jak najít zdroj ve frontě pošty, skriptech PHP a schránkách, zastavit odesílání a dostat se z blacklistů.

Zdroj: https://phpsos.de/cs/blog/server-verschickt-spam/  
Stav: 25.10.2026  
Poskytovatel: PHP SOS, Nouzová pomoc pro PHP a bezpečnost serverů. Okamžitá pomoc přes WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20den%2C%20PHP%20SOS%2C%20pot%C5%99ebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20PHP%20serverem.%20Firma%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručně:** Když server rozesílá spam, jsou zpravidla tři příčiny: vložený nebo zneužitý skript PHP, schránka s odcizeným heslem nebo špatně nakonfigurovaný poštovní server. Zajistěte několik čekajících mailů, přečtěte jejich hlavičky a log pošty a ve většině případů zdroj najdete. Poté odesílání zastavit, uzavřít příčinu a teprve pak žádat o vyřazení z blacklistů.

## Když zákazníci najdou vaše faktury ve složce spamu

Málokdy to začíná bezpečnostním hlášením. Obvykle se ozvou zákazníci, kteří už nedostávají vaše nabídky, nebo se schránka plní zprávami o nedoručení k mailům, které nikdy nikdo nenapsal. Někdy hoster odesílání zablokuje a jako důvod uvede nápadný poštovní provoz.

Pro firmu to má rychle znatelné následky. Je-li adresa serveru na blacklistu, odmítají jiné poštovní servery i vaše skutečné maily: faktury, potvrzení objednávek, odkazy na heslo z e-shopu. Pověst domény trpí a škoda roste s každou hodinou, kdy odesílání běží.

Rozesílání spamu patří ke známým následkům kompromitace. Po PHP2Shell, zranitelnostech CVE-2026-109618 a CVE-2026-109619 se spuštěním kódu bez přihlášení, je to další důvod podívat se pozorněji. Specifickým vodítkem PHP2Shell ale spam není; potvrzené indikátory kompromitace (Indicators of Compromise) neexistují. Další obecné příznaky popisuje článek [Jsem už kompromitován?](https://phpsos.de/cs/php2shell/bin-ich-gehackt-anzeichen/).

## Tři typické příčiny, když server rozesílá spam

| Příčina | Typický obraz | Kam se dívat |
|---|---|---|
| Vložený skript PHP | maily bez přihlášení, lokálně doručené přes `sendmail` | hlavičky, log pošty PHP, nové soubory PHP |
| Zneužitý formulář | maily přes kontaktní nebo doporučovací formulář cizím příjemcům | přístupový log formuláře, hlavičky |
| Unesená schránka | odesílání s platným přihlášením k poštovnímu serveru | log pošty s přihlašovacím jménem, místa přihlášení |
| Otevřený poštovní server | cizí odesílatelé využívají váš server jako přeposílač | konfigurace poštovního serveru, externí kontrola |

První dvě příčiny se týkají webu, třetí poštovních účtů, čtvrtá konfigurace serveru. Rozlišení je důležité, protože protiopatření jsou zcela odlišná.

## Číst frontu pošty

Na serverech s Postfixem ukazuje fronta, co se právě má odeslat. Následující příkazy jen čtou:

```bash
# Zobrazit obsah fronty (odpovídá mailq)
postqueue -p | tail -30

# Zobrazit hlavičky jednoho mailu (dosaďte ID fronty ze seznamu)
sudo postcat -q -h QUEUE-ID

# Úspěšná přihlášení k poštovnímu serveru s uživatelským jménem
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head
```

Hlavičky často zdroj prozradí už samy. Pochází-li mail z přihlášené schránky, objeví se přihlašovací jméno v logu pošty. Hromadí-li se tam jeden účet s přihlášeními z cizích zemí, je heslo této schránky velmi pravděpodobně známé. Byl-li mail naopak doručen lokálně, pochází většinou ze skriptu na serveru.

Běží-li na vašem serveru jiný poštovní server, například Exim, jmenují se příkazy jinak, princip zůstává stejný: prohlédnout frontu, přečíst hlavičky, spočítat přihlášení v logu. U sdíleného hostingu bez přístupu k shellu požádejte hostera písemně o výpis z logu pošty a o několik ukázkových mailů s úplnými hlavičkami. Mnoho hosterů tyto údaje na požádání dodá, protože mají sami zájem odesílání ukončit.

Zajistěte několik úplných mailů dříve, než frontu pozastavíte nebo vyprázdníte. Jsou důkazem pro pozdější analýzu a pro rozhovory s hosterem nebo provozovateli blacklistů.

## Najít odpovědný skript PHP

Probíhá-li odesílání přes PHP, pomáhá konfigurace pošty PHP. Podle příručky PHP protokoluje `mail.log` každé zavolání funkce `mail()` s úplnou cestou ke skriptu, číslem řádku, příjemcem a hlavičkami. `mail.add_x_header` zapíše navíc do každého mailu hlavičku `X-PHP-Originating-Script` s identifikátorem uživatele a názvem souboru.

```ini
; V php.ini nebo v poolu FPM, poté restartovat všechny workery
mail.add_x_header = On
mail.log = /var/log/php/mail.log
```

Soubor logu musí být pro proces PHP zapisovatelný. Hlavička prozrazuje příjemcům název souboru; po analýze ji opět vypněte, pokud ji nechcete trvale.

Objeví-li se jako odesílatel neznámý soubor, například ve složce uploadu nebo cache, je to vodítko k webshellu. Jak takové soubory zařadit, popisuje [Rozpoznání a odstranění webshellů](https://phpsos.de/cs/ratgeber/webshell-erkennen/). Jde-li naopak o známý kontaktní formulář, byl pravděpodobně zneužit, například protože se příjemci nebo hlavičky přebírají z údajů formuláře. To je chyba v kódu, ne průnik, musí se ale opravit stejně rychle.

Ne každý spam používá funkci `mail()`. Škodlivý kód může také přímo navázat spojení s cizími poštovními servery. Odesílání se pak neobjeví ani ve frontě, ani v logu pošty PHP, ale jako odchozí spojení na portu 25. Jak je zkontrolovat, stojí v článku [Kontrola odchozích spojení serveru](https://phpsos.de/cs/blog/ausgehende-verbindungen-pruefen/).

## Odesílání zastavit a čistě znovu rozběhnout

Je-li zdroj nalezen, následuje vyčištění v tomto pořadí:

1. **Pozastavit odesílání:** Zablokovat dotčenou cestu, tedy skript deaktivovat, schránku zablokovat nebo frontu pozastavit. Čekající maily zajistit jako doklad.
2. **Uzavřít příčinu:** U webshellu uvést PHP na opravený stav (8.5.12, 8.4.27, 8.3.36, 8.2.35 nebo potvrzený backport), restartovat všechny workery a web vyčistit. U formuláře opravit kód. U schránky změnit heslo a zkontrolovat zařízení uživatele.
3. **Hledat další stopy:** Kdo posílá spam přes webshell, často založil další zadní vrátka.
4. **Omezit odchozí provoz:** Odchozí spojení na portu 25 povolit jen pro poštovní server, ne pro uživatele webového serveru.
5. **Vyčistit blacklisty:** Teprve nyní u provozovatelů blacklistů žádat o vyřazení a stručně popsat, co bylo opraveno.

> **Tip:**
> Při této příležitosti zkontrolujte SPF, DKIM a DMARC své domény. Tyto záznamy DNS určují, které servery smějí odesílat jménem vaší domény, a ztěžují cizím zneužití vaší adresy odesílatele.

## Jak konkrétně pomáhá PHP SOS?

- Vyhodnocujeme frontu, hlavičky a logy pošty a zjišťujeme, zda je příčinou skript, formulář, schránka nebo konfigurace.
- Odesílání zastavujeme kontrolovaně a zajišťujeme doklady pro hostera a blacklisty.
- Web čistíme v rámci [odstranění malwaru](https://phpsos.de/cs/leistungen/malware-entfernung/) a uzavíráme vstupní bránu.
- Omezujeme odchozí poštovní provoz na úrovni serveru a provázíme vyřazení z blacklistů.


## Časté dotazy

**Jak poznám, že můj server rozesílá spam?**  
Typické jsou zprávy o nedoručení k mailům, které nikdo nenapsal, upozornění od hostera, plná fronta pošty a zákazníci, kteří najdou vaše maily náhle ve složce spamu. Zřetelným znamením jsou i záznamy adresy vašeho serveru na veřejných blacklistech.

**Jak najdu skript PHP, který spam rozesílá?**  
PHP může každé zavolání funkce mail() protokolovat s cestou ke skriptu, je-li nastaveno mail.log. Pomocí mail.add_x_header zapíše PHP název skriptu navíc do hlavičky každého mailu. U již odeslaných nebo čekajících mailů pomůže pohled do hlaviček.

**Mám frontu pošty okamžitě vyprázdnit?**  
Ne dřív, než si několik mailů zajistíte jako doklad. Hlavičky často ukazují, který skript nebo která schránka odesílání spustily. Pozastavit je většinou lepší než smazat, dokud není zdroj znám.

**Jak se dostanu zpět z blacklistů?**  
Nejprve odstranit příčinu, pak u provozovatelů příslušných blacklistů požádat o vyřazení. Většina vyžaduje vysvětlení, co bylo opraveno. Kdo žádá příliš brzy a dál posílá spam, bude opět zařazen.

## Zdroje

- [Příručka PHP: konfigurace pošty](https://www.php.net/manual/en/mail.configuration.php)
- [OWASP Cheat Sheets](https://cheatsheetseries.owasp.org/)
- [BSI: pokyny k bezpečnostním incidentům IT](https://www.bsi.bund.de/)
