Pe scurt: Dacă serverul trimite spam, există de obicei una dintre trei cauze: un script PHP introdus sau folosit abuziv, o căsuță poștală cu parola furată sau un server de e-mail configurat greșit. Păstrați câteva dintre e-mailurile aflate în așteptare, citiți antetele lor și jurnalul de e-mail, și în majoritatea cazurilor găsiți sursa. Apoi opriți trimiterea, închideți cauza și abia după aceea solicitați eliminarea de pe listele de blocare.
Când clienții găsesc facturile dumneavoastră în folderul de spam
Rareori începe cu o notificare de securitate. De obicei se anunță clienți care nu mai primesc ofertele dumneavoastră sau căsuța poștală se umple cu mesaje de întoarcere pentru e-mailuri pe care nu le-a scris niciodată nimeni. Uneori furnizorul de hosting blochează trimiterea și indică drept motiv un trafic de e-mail remarcabil.
Pentru companie, aceasta are rapid consecințe sensibile. Dacă adresa serverului se află pe o listă de blocare, alte servere de e-mail resping și e-mailurile dumneavoastră reale: facturi, confirmări de comandă, linkuri de parolă din magazin. Reputația domeniului suferă, iar paguba crește cu fiecare oră în care trimiterea continuă.
Trimiterea de spam face parte dintre consecințele cunoscute ale unei compromiteri. După PHP2Shell, vulnerabilitățile CVE-2026-109618 și CVE-2026-109619 cu execuție de cod fără autentificare, este un motiv în plus să priviți mai atent. Spamul nu este însă un indiciu specific PHP2Shell; Indicators of Compromise confirmate nu există. Alte semne generale descrie Sunt deja compromis?.
Trei cauze tipice când serverul trimite spam
| Cauză | Imagine tipică | Unde vă uitați |
|---|---|---|
| Script PHP introdus | E-mailuri fără autentificare, livrate local prin sendmail |
Antete, jurnalul de e-mail PHP, fișiere PHP noi |
| Formular folosit abuziv | E-mailuri prin formular de contact sau de recomandare către destinatari străini | Logul de acces al formularului, antete |
| Căsuță poștală deturnată | Trimitere cu autentificare valabilă la serverul de e-mail | Jurnalul de e-mail cu numele de autentificare, locurile de autentificare |
| Server de e-mail deschis | Expeditori străini folosesc serverul dumneavoastră ca releu | Configurația serverului de e-mail, verificare externă |
Primele două cauze privesc site-ul, a treia conturile de e-mail, a patra configurația serverului. Distincția este importantă, deoarece contramăsurile sunt complet diferite.
Citirea cozii de e-mail
Pe serverele cu Postfix, coada arată ce urmează să fie trimis. Comenzile următoare doar citesc:
# Afișarea conținutului cozii (corespunde lui mailq)
postqueue -p | tail -30
# Afișarea antetelor unui singur e-mail (introduceți ID-ul de coadă din listă)
sudo postcat -q -h QUEUE-ID
# Autentificările reușite la serverul de e-mail, cu nume de utilizator
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head
Antetele trădează adesea deja sursa. Dacă e-mailul provine dintr-o căsuță poștală autentificată, numele de autentificare apare în jurnalul de e-mail. Dacă acolo se acumulează un singur cont cu autentificări din țări străine, parola acestei căsuțe a devenit foarte probabil cunoscută. Dacă e-mailul a fost în schimb livrat local, provine de obicei de la un script de pe server.
Dacă pe serverul dumneavoastră rulează alt server de e-mail, de exemplu Exim, comenzile se numesc altfel, principiul rămâne același: priviți coada, citiți antetele, numărați autentificările în jurnal. La shared hosting fără acces shell, cereți în scris furnizorului un extras din jurnalul de e-mail și câteva e-mailuri exemplu cu antete complete. Mulți furnizori livrează aceste date la cerere, deoarece au și ei un interes să oprească trimiterea.
Păstrați câteva e-mailuri complete înainte de a opri sau goli coada. Ele sunt dovezi pentru analiza ulterioară și pentru discuțiile cu furnizorul sau cu operatorii listelor de blocare.
Găsirea scriptului PHP responsabil
Dacă trimiterea se face prin PHP, ajută configurația de e-mail a PHP. Conform manualului PHP, mail.log consemnează fiecare apel al funcției mail() cu calea completă a scriptului, numărul rândului, destinatarul și antetele. mail.add_x_header scrie suplimentar în fiecare e-mail un antet X-PHP-Originating-Script cu identificatorul utilizatorului și numele fișierului.
; În php.ini sau în pool-ul FPM, apoi reporniți toți workerii
mail.add_x_header = On
mail.log = /var/log/php/mail.log
Fișierul de jurnal trebuie să poată fi scris de procesul PHP. Antetul trădează destinatarilor un nume de fișier; dezactivați-l din nou după analiză, dacă nu îl doriți permanent.
Dacă drept expeditor apare un fișier necunoscut, de exemplu în directorul de upload sau de cache, este un indiciu de webshell. Cum încadrați astfel de fișiere descrie Recunoașterea și eliminarea webshell-urilor. Dacă este în schimb un formular de contact cunoscut, a fost probabil folosit abuziv, de exemplu pentru că destinatarul sau antetele sunt preluate din datele introduse în formular. Aceasta este o eroare în cod, nu o intruziune, dar trebuie remediată la fel de repede.
Nu orice spam folosește funcția mail(). Codul malițios poate stabili și direct o conexiune la servere de e-mail străine. Atunci trimiterea nu apare nici în coadă, nici în jurnalul de e-mail PHP, ci ca conexiuni de ieșire pe portul 25. Cum le verificați se află la Verificarea conexiunilor de ieșire ale unui server.
Oprirea trimiterii și repornirea curată
Când sursa este găsită, urmează curățarea în această ordine:
- Opriți trimiterea: Blocați calea afectată, adică dezactivați scriptul, blocați căsuța poștală sau opriți coada. Păstrați ca dovadă e-mailurile aflate în așteptare.
- Închideți cauza: La un webshell, aduceți PHP la un nivel corectat (8.5.12, 8.4.27, 8.3.36, 8.2.35 sau backport confirmat), reporniți toți workerii și curățați site-ul. La un formular, corectați codul. La o căsuță poștală, schimbați parola și verificați dispozitivul utilizatorului.
- Căutați alte urme: Cine trimite spam printr-un webshell a creat adesea alte uși din spate.
- Limitați ieșirea: Permiteți conexiunile de ieșire pe portul 25 doar serverului de e-mail, nu utilizatorului serverului web.
- Curățați listele de blocare: Abia acum solicitați eliminarea la operatorii listelor de blocare și descrieți pe scurt ce s-a remediat.
Verificați cu această ocazie SPF, DKIM și DMARC pentru domeniul dumneavoastră. Aceste înregistrări DNS stabilesc ce servere au voie să trimită în numele domeniului dumneavoastră și îngreunează străinilor abuzul adresei dumneavoastră de expeditor.
Cum ajută PHP SOS concret?
- Evaluăm coada, antetele și jurnalele de e-mail și stabilim dacă cauza este scriptul, formularul, căsuța poștală sau configurația.
- Oprim trimiterea controlat și păstrăm dovezi pentru furnizor și pentru listele de blocare.
- Curățăm site-ul în cadrul eliminării malware-ului și închidem poarta de intrare.
- Limităm traficul de e-mail de ieșire la nivel de server și însoțim eliminarea de pe listele de blocare.
Întrebări frecvente
Cum observ că serverul meu trimite spam?
Tipice sunt mesajele de întoarcere pentru e-mailuri pe care nu le-a scris nimeni, indicațiile furnizorului de hosting, o coadă de e-mail plină și clienți care găsesc brusc e-mailurile dumneavoastră în folderul de spam. Și intrările adresei serverului dumneavoastră pe liste de blocare publice sunt un semn clar.
Cum găsesc scriptul PHP care trimite spam?
PHP poate consemna fiecare apel al funcției mail() cu calea scriptului, dacă este setat mail.log. Cu mail.add_x_header, PHP scrie suplimentar numele scriptului în antetul fiecărui e-mail. La e-mailurile deja trimise sau aflate în așteptare ajută o privire în antete.
Ar trebui să golesc imediat coada de e-mail?
Nu înainte de a fi păstrat câteva e-mailuri ca dovadă. Antetele arată adesea ce script sau ce căsuță poștală a declanșat trimiterea. Oprirea este de obicei mai bună decât ștergerea, până când sursa este cunoscută.
Cum ies din nou de pe listele de blocare?
Eliminați mai întâi cauza, apoi solicitați eliminarea la operatorii respectivi ai listelor de blocare. Majoritatea cer o explicație privind ce s-a remediat. Cine solicită prea devreme și continuă să trimită spam este listat din nou.