Trenutno stanje: PHP2Shell. Dve kritični ranljivosti PHP (CVSS 9,2) omogočata izvedbo škodljive kode brez prijave. Popravki od 21. 10. 2026.Kaj je zdaj treba storiti →

Strežnik pošilja neželeno pošto: iskanje vzrokov

Nedostavljena pošta, črne liste, pritožbe: če lastni strežnik pošilja neželeno pošto, je za tem večinoma skript ali ugrabljen poštni predal. Tako najdete vir.

Stanje 5 min branjaOdkrivanje in forenzika

Na kratko: Če strežnik pošilja neželeno pošto, so večinoma tri vzroki: vnesen ali zlorabljen skript PHP, poštni predal z ukradenim geslom ali napačno konfiguriran poštni strežnik. Zavarujte nekaj čakajočih sporočil, preberite njihove glave in poštni dnevnik ter v večini primerov boste našli vir. Nato ustavite pošiljanje, zaprite vzrok in šele nato zahtevajte odstranitev s črnih list.

Ko stranke vaše račune najdejo v mapi z neželeno pošto

Redko se začne z varnostnim obvestilom. Večinoma se oglasijo stranke, ki ne prejemajo več vaših ponudb, ali pa se poštni predal napolni z vrnjenimi sporočili o pošti, ki je nihče ni nikoli napisal. Včasih ponudnik gostovanja pošiljanje zaklene in kot razlog navede opazen poštni promet.

Za podjetje ima to hitro otipljive posledice. Če je naslov strežnika na črni listi, drugi poštni strežniki zavračajo tudi vašo pravo pošto: račune, potrditve naročil, povezave za geslo iz spletne trgovine. Ugled domene trpi, škoda pa raste z vsako uro, v kateri pošiljanje teče naprej.

Pošiljanje neželene pošte sodi med znane posledice ogrozitve. Po PHP2Shell, ranljivostih CVE-2026-109618 in CVE-2026-109619 z izvajanjem kode brez prijave, je to še en razlog za natančnejši pogled. Specifičen namig na PHP2Shell neželena pošta ni; potrjenih indikatorjev ogroženosti (Indicators of Compromise) ni. Nadaljnje splošne znake opisuje Ali smo že ogroženi?.

Trije tipični vzroki, ko strežnik pošilja neželeno pošto

Vzrok Tipična slika Kje pogledati
Vnesen skript PHP Pošta brez prijave, lokalno oddana prek sendmail Glave, poštni dnevnik PHP, nove datoteke PHP
Zlorabljen obrazec Pošta prek kontaktnega ali priporočilnega obrazca tujim prejemnikom Dnevnik dostopov obrazca, glave
Ugrabljen poštni predal Pošiljanje z veljavno prijavo na poštni strežnik Poštni dnevnik z imenom prijave, kraji prijav
Odprt poštni strežnik Tuji pošiljatelji uporabljajo vaš strežnik kot posrednika Konfiguracija poštnega strežnika, zunanje preverjanje

Prva dva vzroka zadevata spletno stran, tretji poštne račune, četrti konfiguracijo strežnika. Razlikovanje je pomembno, ker so protiukrepi povsem različni.

Branje poštne čakalne vrste

Na strežnikih s Postfixom čakalna vrsta pokaže, kaj se ravno namerava poslati. Naslednji ukazi samo berejo:

# Prikaz vsebine čakalne vrste (ustreza mailq)
postqueue -p | tail -30

# Prikaz glav posamezne pošte (vstavite ID čakalne vrste s seznama)
sudo postcat -q -h QUEUE-ID

# Uspešne prijave na poštni strežnik z uporabniškim imenom
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head

Glave pogosto že razkrijejo vir. Če pošta izvira iz prijavljenega poštnega predala, se ime prijave pojavi v poštnem dnevniku. Če se tam kopiči en sam račun s prijavami iz tujih držav, je geslo tega poštnega predala zelo verjetno postalo znano. Če je bila pošta oddana lokalno, praviloma izvira iz skripta na strežniku.

Če na vašem strežniku teče drug poštni strežnik, na primer Exim, se ukazi imenujejo drugače, načelo pa ostane: ogled čakalne vrste, branje glav, štetje prijav v dnevniku. Pri skupnem gostovanju brez dostopa do lupine ponudnika gostovanja pisno prosite za izvleček poštnega dnevnika in nekaj primerov pošte s popolnimi glavami. Mnogi ponudniki te podatke na zahtevo dajo, ker imajo sami interes, da pošiljanje preneha.

Nekaj popolnih sporočil zavarujte, preden čakalno vrsto ustavite ali izpraznite. So dokaz za poznejšo analizo in za pogovore s ponudnikom gostovanja ali upravljavci črnih list.

Poiščite odgovorni skript PHP

Če pošiljanje teče prek PHP, pomaga poštna konfiguracija PHP. Po priročniku PHP mail.log zabeleži vsak klic funkcije mail() s polno potjo skripta, številko vrstice, prejemnikom in glavami. mail.add_x_header v vsako pošto dodatno zapiše glavo X-PHP-Originating-Script z identifikatorjem uporabnika in imenom datoteke.

; V php.ini ali v poolu FPM, nato znova zaženite vse workerje
mail.add_x_header = On
mail.log = /var/log/php/mail.log

Datoteka dnevnika mora biti zapisljiva za proces PHP. Glava prejemnikom razkrije ime datoteke; po analizi jo znova izklopite, če je ne želite imeti trajno.

Če je kot pošiljatelj najdena neznana datoteka, na primer v imeniku za nalaganje ali predpomnilnika, je to namig na webshell. Kako take datoteke razvrstite, opisuje Prepoznavanje in odstranjevanje webshellov. Če gre za znan kontaktni obrazec, je bil verjetno zlorabljen, na primer ker se prejemniki ali glave povzamejo iz vnosov obrazca. To je napaka v kodi, ne vdor, a jo je treba odpraviti enako hitro.

Ne uporablja vsa neželena pošta funkcije mail(). Škodljiva koda lahko tudi neposredno vzpostavi povezavo s tujimi poštnimi strežniki. Tedaj pošiljanje ni ne v čakalni vrsti ne v poštnem dnevniku PHP, je pa kot odhodne povezave na vratih 25. Kako jih preverite, piše pod Preverjanje odhodnih povezav strežnika.

Ustavite pošiljanje in ga čisto znova zaženite

Ko je vir najden, sledi čiščenje v tem vrstnem redu:

  1. Ustavite pošiljanje: Zaprite prizadeto pot, torej deaktivirajte skript, zaklenite poštni predal ali ustavite čakalno vrsto. Čakajočo pošto zavarujte kot dokaz.
  2. Zaprite vzrok: Pri webshellu PHP spravite na odpravljeno stanje (8.5.12, 8.4.27, 8.3.36, 8.2.35 ali potrjen backport), znova zaženite vse workerje in spletno stran očistite. Pri obrazcu popravite kodo. Pri poštnem predalu zamenjajte geslo in preverite napravo uporabnika.
  3. Poiščite druge sledi: Kdor pošilja neželeno pošto prek webshella, je pogosto uredil nadaljnja stranska vrata.
  4. Omejite izhod: Odhodne povezave na vratih 25 dovolite samo poštnemu strežniku, ne uporabniku spletnega strežnika.
  5. Očistite črne liste: Šele zdaj pri upravljavcih črnih list zahtevajte odstranitev in kratko opišite, kaj je bilo odpravljeno.
Nasvet

Ob tej priložnosti preverite SPF, DKIM in DMARC svoje domene. Ti vnosi DNS določajo, kateri strežniki smejo pošiljati v imenu vaše domene, in tujcem otežujejo zlorabo vašega naslova pošiljatelja.

Kako PHP SOS pomaga konkretno?

  • Ovrednotimo čakalno vrsto, glave in poštne dnevnike ter ugotovimo, ali je vzrok skript, obrazec, poštni predal ali konfiguracija.
  • Pošiljanje ustavimo nadzorovano in zavarujemo dokaze za ponudnika gostovanja in črne liste.
  • Spletno stran očistimo v okviru odstranjevanja škodljive programske opreme in zapremo vstopno točko.
  • Odhodni poštni promet omejimo na ravni strežnika in spremljamo odstranitev s črnih list.

Pogosta vprašanja

Po čem opazim, da moj strežnik pošilja neželeno pošto?

Tipična so vrnjena sporočila o pošti, ki je nihče ni napisal, opozorila ponudnika gostovanja, polna poštna čakalna vrsta in stranke, ki vašo pošto nenadoma najdejo v mapi z neželeno pošto. Jasen znak so tudi vnosi naslova vašega strežnika na javnih črnih listah.

Kako najdem skript PHP, ki pošilja neželeno pošto?

PHP lahko vsak klic funkcije mail() zabeleži s potjo skripta, če je nastavljen mail.log. Z mail.add_x_header PHP ime skripta dodatno zapiše v glavo vsake pošte. Pri že poslani ali čakajoči pošti pomaga pogled v glave.

Ali naj poštno čakalno vrsto takoj izpraznim?

Ne, preden ste nekaj sporočil zavarovali kot dokaz. Glave pogosto pokažejo, kateri skript ali poštni predal je sprožil pošiljanje. Ustavitev je večinoma boljša od brisanja, dokler vir ni znan.

Kako pridem spet z črnih list?

Najprej odpravite vzrok, nato pri upravljavcih črnih list zahtevajte odstranitev. Večina zahteva pojasnilo, kaj je bilo odpravljeno. Kdor zahteva prezgodaj in neželeno pošto pošilja naprej, je znova uvrščen.

Viri

Takojšnji stik

Vsaka ura šteje. Pišite nam zdaj.

Na kratko opišite sistem, različico PHP in opažanje. Odzovemo se, razjasnimo stanje in delamo na daljavo, dokler incident ni zaključen in dokumentiran.

Takojšnja pomoč