Aktualna sytuacja: PHP2Shell. Dwie krytyczne luki w PHP (CVSS 9,2) umożliwiają wykonanie złośliwego kodu bez logowania. Poprawki od 21.10.2026.Co należy teraz zrobić →

Serwer rozsyła spam: znajdowanie przyczyn

Niedostarczalne maile, listy blokujące, skargi: gdy własny serwer wysyła spam, zwykle stoi za tym skrypt lub przejęta skrzynka. Oto jak znaleźć źródło.

Stan 5 min czytaniaWykrywanie i informatyka śledcza

Krótko: Gdy serwer rozsyła spam, przyczyna jest zwykle jedna z trzech: wprowadzony lub nadużywany skrypt PHP, skrzynka ze skradzionym hasłem albo źle skonfigurowany serwer pocztowy. Proszę zabezpieczyć kilka oczekujących maili, przeczytać ich nagłówki i log poczty, a w większości przypadków znajdą Państwo źródło. Potem zatrzymać wysyłkę, zamknąć przyczynę i dopiero wtedy złożyć wniosek o usunięcie z list blokujących.

Gdy klienci znajdują Państwa faktury w folderze ze spamem

Rzadko zaczyna się od komunikatu bezpieczeństwa. Zwykle odzywają się klienci, którzy nie otrzymują już Państwa ofert, albo skrzynka zapełnia się komunikatami zwrotnymi o mailach, których nikt nigdy nie napisał. Czasem dostawca hostingu blokuje wysyłkę, podając jako powód rzucający się w oczy ruch pocztowy.

Dla firmy ma to szybko odczuwalne skutki. Jeśli adres serwera trafi na listę blokującą, inne serwery pocztowe odrzucają także Państwa prawdziwe maile: faktury, potwierdzenia zamówień, linki do resetu hasła ze sklepu. Reputacja domeny cierpi, a szkoda rośnie z każdą godziną, w której wysyłka trwa.

Wysyłka spamu należy do znanych skutków kompromitacji. Po PHP2Shell, czyli lukach CVE-2026-109618 i CVE-2026-109619 z wykonaniem kodu bez logowania, to dodatkowy powód, by przyjrzeć się dokładniej. Spam nie jest jednak swoistą wskazówką PHP2Shell; potwierdzonych wskaźników kompromitacji (Indicators of Compromise) nie ma. Dalsze ogólne oznaki opisuje Czy już zostałem skompromitowany?.

Trzy typowe przyczyny, gdy serwer rozsyła spam

Przyczyna Typowy obraz Gdzie zajrzeć
Wprowadzony skrypt PHP maile bez logowania, dostarczane lokalnie przez sendmail nagłówki, log poczty PHP, nowe pliki PHP
Nadużyty formularz maile przez formularz kontaktowy lub polecający do obcych odbiorców log dostępu formularza, nagłówki
Przejęta skrzynka wysyłka z prawidłowym logowaniem do serwera pocztowego log poczty z nazwą logowania, miejsca logowania
Otwarty serwer pocztowy obcy nadawcy używają Państwa serwera jako przekaźnika konfiguracja serwera pocztowego, kontrola zewnętrzna

Dwie pierwsze przyczyny dotyczą strony internetowej, trzecia kont pocztowych, czwarta konfiguracji serwera. Rozróżnienie jest ważne, ponieważ środki zaradcze są zupełnie różne.

Czytanie kolejki poczty

Na serwerach z Postfix kolejka pokazuje, co właśnie ma być wysłane. Poniższe polecenia tylko odczytują dane:

# Wyświetlić zawartość kolejki (odpowiada mailq)
postqueue -p | tail -30

# Wyświetlić nagłówki pojedynczego maila (wstawić ID kolejki z listy)
sudo postcat -q -h QUEUE-ID

# Udane logowania do serwera pocztowego z nazwą użytkownika
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head

Nagłówki często już zdradzają źródło. Jeśli mail pochodzi z zalogowanej skrzynki, w logu poczty pojawia się nazwa logowania. Jeśli skupiają się tam logowania jednego konta z obcych krajów, hasło tej skrzynki jest bardzo prawdopodobnie znane. Jeśli mail został natomiast dostarczony lokalnie, pochodzi zwykle ze skryptu na serwerze.

Jeśli na Państwa serwerze działa inny serwer pocztowy, na przykład Exim, polecenia nazywają się inaczej, ale zasada jest ta sama: obejrzeć kolejkę, przeczytać nagłówki, policzyć logowania w logu. W hostingu współdzielonym bez dostępu do powłoki proszę pisemnie poprosić dostawcę hostingu o wyciąg z logu poczty i kilka przykładowych maili z pełnymi nagłówkami. Wielu dostawców dostarcza te dane na prośbę, bo sami są zainteresowani zakończeniem wysyłki.

Proszę zabezpieczyć kilka pełnych maili, zanim wstrzymają lub opróżnią Państwo kolejkę. Są dowodami do późniejszej analizy i do rozmów z dostawcą hostingu lub operatorami list blokujących.

Znalezienie odpowiedzialnego skryptu PHP

Jeśli wysyłka przebiega przez PHP, pomaga konfiguracja poczty PHP. Według podręcznika PHP mail.log protokołuje każde wywołanie funkcji mail() z pełną ścieżką skryptu, numerem wiersza, odbiorcą i nagłówkami. mail.add_x_header dopisuje dodatkowo w każdym mailu nagłówek X-PHP-Originating-Script z identyfikatorem użytkownika i nazwą pliku.

; W php.ini lub w puli FPM, potem zrestartować wszystkie workery
mail.add_x_header = On
mail.log = /var/log/php/mail.log

Plik logu musi być zapisywalny dla procesu PHP. Nagłówek zdradza odbiorcom nazwę pliku; po analizie proszę go znów wyłączyć, jeśli nie chcą go Państwo na stałe.

Jeśli jako nadawca pojawia się nieznany plik, na przykład w katalogu uploadu lub cache, jest to wskazówka webshella. Jak klasyfikować takie pliki, opisuje Rozpoznawanie i usuwanie webshelli. Jeśli jest to natomiast znany formularz kontaktowy, prawdopodobnie został nadużyty, na przykład dlatego, że odbiorcy lub nagłówki są przejmowane z danych formularza. To błąd w kodzie, a nie włamanie, ale trzeba go naprawić równie szybko.

Nie każdy spam używa funkcji mail(). Złośliwy kod może też bezpośrednio nawiązywać połączenie z obcymi serwerami pocztowymi. Wtedy wysyłka nie pojawia się ani w kolejce, ani w logu poczty PHP, ale jako połączenia wychodzące na porcie 25. Jak je sprawdzić, opisuje Sprawdzanie połączeń wychodzących serwera.

Zatrzymanie wysyłki i czyste ponowne uruchomienie

Gdy źródło jest znalezione, oczyszczanie następuje w tej kolejności:

  1. Wstrzymać wysyłkę: Zablokować dotkniętą drogę, czyli dezaktywować skrypt, zablokować skrzynkę lub wstrzymać kolejkę. Oczekujące maile zabezpieczyć jako dowód.
  2. Zamknąć przyczynę: Przy webshellu doprowadzić PHP do poprawionego stanu (8.5.12, 8.4.27, 8.3.36, 8.2.35 lub potwierdzony backport), zrestartować wszystkie workery i oczyścić stronę. Przy formularzu poprawić kod. Przy skrzynce zmienić hasło i sprawdzić urządzenie użytkownika.
  3. Szukać dalszych śladów: Kto wysyła spam przez webshell, często założył dalsze tylne furtki.
  4. Ograniczyć wyjście: Połączenia wychodzące na porcie 25 zezwolić tylko dla serwera pocztowego, a nie dla użytkownika serwera WWW.
  5. Oczyścić listy blokujące: Dopiero teraz u operatorów list blokujących złożyć wniosek o usunięcie i krótko opisać, co naprawiono.
Wskazówka

Przy tej okazji proszę sprawdzić SPF, DKIM i DMARC swojej domeny. Te wpisy DNS określają, które serwery mogą wysyłać w imieniu Państwa domeny, i utrudniają obcym nadużywanie Państwa adresu nadawcy.

Jak konkretnie pomaga PHP SOS?

  • Analizujemy kolejkę, nagłówki i logi poczty i ustalamy, czy przyczyną jest skrypt, formularz, skrzynka czy konfiguracja.
  • Zatrzymujemy wysyłkę w sposób kontrolowany i zabezpieczamy dowody dla dostawcy hostingu i list blokujących.
  • Oczyszczamy stronę w ramach usuwania złośliwego oprogramowania i zamykamy punkt wejścia.
  • Ograniczamy wychodzący ruch pocztowy na poziomie serwera i towarzyszymy przy usuwaniu z list blokujących.

Częste pytania

Po czym poznać, że mój serwer wysyła spam?

Typowe są komunikaty zwrotne o mailach, których nikt nie napisał, uwagi dostawcy hostingu, pełna kolejka poczty i klienci, którzy nagle znajdują Państwa maile w folderze ze spamem. Wyraźnym znakiem są też wpisy adresu serwera na publicznych listach blokujących.

Jak znaleźć skrypt PHP, który wysyła spam?

PHP może protokołować każde wywołanie funkcji mail() ze ścieżką skryptu, jeśli ustawiono mail.log. Przez mail.add_x_header PHP wpisuje dodatkowo nazwę skryptu do nagłówka każdego maila. W już wysłanych lub oczekujących mailach pomaga spojrzenie na nagłówki.

Czy mam od razu opróżnić kolejkę poczty?

Nie, zanim nie zabezpieczą Państwo kilku maili jako dowodu. Nagłówki często pokazują, który skrypt lub która skrzynka wywołała wysyłkę. Wstrzymanie jest zwykle lepsze niż usunięcie, dopóki źródło nie jest znane.

Jak zdjąć serwer z list blokujących?

Najpierw usunąć przyczynę, potem u operatorów list blokujących złożyć wniosek o usunięcie. Większość wymaga wyjaśnienia, co naprawiono. Kto złoży wniosek zbyt wcześnie i dalej wysyła spam, zostanie wpisany ponownie.

Źródła

Kontakt natychmiast

Liczy się każda godzina. Proszę napisać do nas teraz.

Proszę krótko opisać system, wersję PHP i obserwacje. Skontaktujemy się z Państwem, ustalimy sytuację i będziemy pracować zdalnie, aż incydent zostanie zamknięty i udokumentowany.

Natychmiastowa pomoc