Aktuální situace: PHP2Shell. Dvě kritické zranitelnosti PHP (CVSS 9.2) umožňují spustit škodlivý kód bez přihlášení. Záplaty od 21. 10. 2026.Co nyní udělat →

Server rozesílá spam: jak najít příčiny

Nedoručitelné maily, blacklisty, stížnosti: Když vlastní server rozesílá spam, stojí za tím většinou skript nebo unesená schránka. Jak najít zdroj.

Stav 5 min čteníDetekce a forenzní analýza

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?.

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:

# 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.

; 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ů. 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.

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 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

Okamžitý kontakt

Každá hodina se počítá. Napište nám hned.

Stručně popište systém, verzi PHP a pozorování. Ozveme se, vyjasníme situaci a budeme pracovat na dálku, dokud nebude incident uzavřen a zdokumentován.

Okamžitá pomoc