Ukratko: Kad poslužitelj šalje spam, uglavnom postoji jedan od tri uzroka: ubačena ili zlouporabljena PHP skripta, sandučić s ukradenom lozinkom ili pogrešno konfiguriran poslužitelj e-pošte. Osigurajte nekoliko poruka koje čekaju, pročitajte njihova zaglavlja i zapisnik pošte i u većini slučajeva pronaći ćete izvor. Zatim zaustavite slanje, zatvorite uzrok i tek tada zatražite uklanjanje s crnih lista.
Kad klijenti Vaše račune nalaze u mapi spama
Rijetko počinje sigurnosnom obavijesti. Uglavnom se jave klijenti koji više ne primaju Vaše ponude ili se sandučić puni povratnim porukama o porukama koje nikad nitko nije napisao. Ponekad hoster blokira slanje i kao razlog navodi upadljiv promet pošte.
Za tvrtku to brzo ima osjetne posljedice. Ako je adresa poslužitelja na crnoj listi, drugi poslužitelji e-pošte odbijaju i Vaše prave poruke: račune, potvrde narudžbi, poveznice za lozinke iz shopa. Ugled domene trpi, a šteta raste sa svakim satom u kojem slanje traje.
Slanje spama spada u poznate posljedice kompromitacije. Nakon PHP2Shella, ranjivosti CVE-2026-109618 i CVE-2026-109619 s izvršavanjem koda bez prijave, to je još jedan razlog da pogledate pomnije. Spam ipak nije specifična naznaka PHP2Shella; potvrđenih Indicators of Compromise nema. Daljnje opće znakove opisuje članak Jesam li već kompromitiran?.
Tri tipična uzroka kad poslužitelj šalje spam
| Uzrok | Tipična slika | Gdje pogledati |
|---|---|---|
| Ubačena PHP skripta | poruke bez prijave, lokalno predane putem sendmail |
zaglavlja, PHP zapisnik pošte, nove PHP datoteke |
| Zlouporabljen obrazac | poruke putem kontaktnog obrasca ili obrasca za preporuke prema stranim primateljima | pristupni zapisnik obrasca, zaglavlja |
| Preuzet sandučić | slanje uz valjanu prijavu na poslužitelj e-pošte | zapisnik pošte s korisničkim imenom, mjesta prijave |
| Otvoreni poslužitelj e-pošte | strani pošiljatelji koriste Vaš poslužitelj kao prosljeđivanje | konfiguracija poslužitelja e-pošte, vanjska provjera |
Prva dva uzroka tiču se web-stranice, treći sandučića, četvrti konfiguracije poslužitelja. Razlika je važna jer su protumjere posve različite.
Čitati red čekanja pošte
Na poslužiteljima s Postfixom red čekanja pokazuje što se upravo treba poslati. Sljedeće naredbe samo čitaju:
# Prikazati sadržaj reda čekanja (odgovara naredbi mailq)
postqueue -p | tail -30
# Prikazati zaglavlja pojedine poruke (umetnuti ID reda iz popisa)
sudo postcat -q -h QUEUE-ID
# Uspješne prijave na poslužitelj e-pošte s korisničkim imenom
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head
Zaglavlja često već odaju izvor. Ako poruka potječe iz prijavljenog sandučića, korisničko ime pojavljuje se u zapisniku pošte. Ako se tamo nakuplja jedan račun s prijavama iz stranih zemalja, lozinka tog sandučića vrlo je vjerojatno postala poznata. Ako je poruka pak predana lokalno, uglavnom dolazi iz skripte na poslužitelju.
Ako na Vašem poslužitelju radi drugi poslužitelj e-pošte, primjerice Exim, naredbe se zovu drukčije, a načelo ostaje isto: pogledati red čekanja, čitati zaglavlja, brojiti prijave u zapisniku. Kod zajedničkog hostinga bez pristupa ljusci zatražite od hostera pisanim putem izvadak iz zapisnika pošte i nekoliko primjera poruka s potpunim zaglavljima. Mnogi hosteri te podatke daju na upit jer i sami imaju interes zaustaviti slanje.
Osigurajte nekoliko potpunih poruka prije nego red čekanja zaustavite ili ispraznite. One su dokaz za kasniju analizu i za razgovore s hosterom ili operaterima crnih lista.
Pronaći odgovornu PHP skriptu
Ako se slanje odvija putem PHP-a, pomaže PHP konfiguracija pošte. Prema PHP priručniku mail.log bilježi svaki poziv funkcije mail() s punim putem skripte, brojem retka, primateljem i zaglavljima. mail.add_x_header dodatno u svaku poruku upisuje zaglavlje X-PHP-Originating-Script s identifikatorom korisnika i nazivom datoteke.
; U php.ini ili u FPM poolu, zatim ponovno pokrenuti sve workere
mail.add_x_header = On
mail.log = /var/log/php/mail.log
Datoteka zapisnika mora biti zapisiva za PHP proces. Zaglavlje primateljima odaje naziv datoteke; nakon analize ga ponovno isključite ako ga ne želite trajno.
Ako se kao pošiljatelj pojavi nepoznata datoteka, primjerice u direktoriju za prijenose ili predmemoriju, to je naznaka web shella. Kako takve datoteke razvrstati, opisuje članak Prepoznati i ukloniti web shellove. Ako je pak riječ o poznatom kontaktnom obrascu, vjerojatno je zlouporabljen, primjerice jer se primatelji ili zaglavlja preuzimaju iz unosa obrasca. To je pogreška u kodu, a ne provala, ali je treba jednako brzo otkloniti.
Ne koristi svaki spam funkciju mail(). Zlonamjerni kod može i izravno uspostaviti vezu prema stranim poslužiteljima e-pošte. Tada se slanje ne pojavljuje ni u redu čekanja ni u PHP zapisniku pošte, ali se pojavljuje kao odlazne veze na portu 25. Kako ih provjeriti, piše pod Provjeriti odlazne veze poslužitelja.
Zaustaviti slanje i uredno ponovno pokrenuti
Kad je izvor pronađen, slijedi čišćenje ovim redoslijedom:
- Zaustaviti slanje: Blokirati zahvaćeni put, dakle deaktivirati skriptu, blokirati sandučić ili zaustaviti red čekanja. Poruke koje čekaju osigurati kao dokaz.
- Zatvoriti uzrok: Kod web shella PHP dovesti na ispravljeno stanje (8.5.12, 8.4.27, 8.3.36, 8.2.35 ili potvrđeni backport), ponovno pokrenuti sve workere i očistiti web-stranicu. Kod obrasca ispraviti kod. Kod sandučića promijeniti lozinku i provjeriti korisnikov uređaj.
- Tražiti daljnje tragove: Tko šalje spam putem web shella, često je postavio i daljnja stražnja vrata.
- Ograničiti izlaz: Odlazne veze na portu 25 dopustiti samo poslužitelju e-pošte, ne korisniku web-poslužitelja.
- Očistiti crne liste: Tek sada kod operatera crnih lista zatražiti uklanjanje i ukratko opisati što je ispravljeno.
Tom prilikom provjerite SPF, DKIM i DMARC svoje domene. Ti DNS zapisi određuju koji poslužitelji smiju slati u ime Vaše domene i otežavaju strancima zlouporabu Vaše adrese pošiljatelja.
Kako PHP SOS konkretno pomaže?
- Analiziramo red čekanja, zaglavlja i zapisnike pošte i utvrđujemo je li uzrok skripta, obrazac, sandučić ili konfiguracija.
- Kontrolirano zaustavljamo slanje i osiguravamo dokaze za hostera i crne liste.
- Web-stranicu čistimo u okviru uklanjanja zlonamjernog softvera i zatvaramo ulazna vrata.
- Ograničavamo odlazni promet pošte na razini poslužitelja i pratimo uklanjanje s crnih lista.
Česta pitanja
Po čemu primjećujem da moj poslužitelj šalje spam?
Tipične su povratne poruke o porukama koje nitko nije napisao, obavijesti hostera, pun red čekanja pošte i klijenti koji Vaše poruke iznenada nalaze u mapi spama. Jasan znak su i unosi adrese Vašeg poslužitelja na javnim crnim listama.
Kako pronaći PHP skriptu koja šalje spam?
PHP može zabilježiti svaki poziv funkcije mail() s putem skripte ako je postavljen mail.log. Uz mail.add_x_header PHP naziv skripte upisuje i u zaglavlje svake poruke. U već poslanim ili čekajućim porukama pomaže pogled u zaglavlja.
Trebam li red čekanja pošte odmah isprazniti?
Ne prije nego što osigurate nekoliko poruka kao dokaz. Zaglavlja često pokazuju koja je skripta ili koji je sandučić pokrenuo slanje. Zaustaviti je uglavnom bolje nego brisati dok izvor nije poznat.
Kako se ponovno maknuti s crnih lista?
Najprije otkloniti uzrok, zatim kod operatera pojedinih crnih lista zatražiti uklanjanje. Većina traži objašnjenje što je ispravljeno. Tko zatraži prerano i nastavi slati spam, ponovno se unosi na popis.