Röviden: Ha a szerver spamet küld, többnyire három ok egyike áll mögötte: egy beszúrt vagy visszaélésre használt PHP-szkript, egy ellopott jelszavú postafiók vagy egy rosszul beállított levelezőszerver. Mentsen el néhányat a várakozó levelek közül, olvassa el a fejléceiket és a levelezési naplót, és a legtöbb esetben megtalálja a forrást. Ezután állítsa le a küldést, zárja le az okot, és csak azután kérje a tiltólistákról való törlést.
Ha az ügyfelek a számláit a spam mappában találják
Ritkán kezdődik biztonsági jelzéssel. Többnyire olyan ügyfelek jelentkeznek, akik már nem kapják meg az ajánlatait, vagy a postafiók megtelik visszapattanó üzenetekkel olyan levelekről, amelyeket soha senki sem írt. Néha a tárhelyszolgáltató zárolja a küldést, és okként feltűnő levélforgalmat nevez meg.
A vállalat számára ennek gyorsan érezhető következményei vannak. Ha a szerver címe egy tiltólistán szerepel, más levelezőszerverek az Ön valódi leveleit is elutasítják: számlákat, megrendelés-visszaigazolásokat, a webshop jelszó-linkjeit. A domain hírneve megsínyli, és a kár minden órával nő, amelyben a küldés tovább fut.
A spamküldés a kompromittálás ismert következményei közé tartozik. A PHP2Shell után, a bejelentkezés nélküli kódvégrehajtást lehetővé tevő CVE-2026-109618 és CVE-2026-109619 résekkel ez még egy ok arra, hogy alaposabban megnézze. A spam azonban nem sajátos PHP2Shell-jelzés; megerősített Indicators of Compromise nincsenek. További általános jeleket ír le a Megfertőzték már a rendszeremet? oldal.
Három tipikus ok, ha a szerver spamet küld
| Ok | Tipikus kép | Hol nézzen utána |
|---|---|---|
| Beszúrt PHP-szkript | bejelentkezés nélküli levelek, helyben a sendmail-en át beadva |
fejlécek, PHP-levélnapló, új PHP-fájlok |
| Visszaélésre használt űrlap | levelek egy kapcsolatfelvételi vagy ajánlóűrlapon át idegen címzetteknek | az űrlap hozzáférési naplója, fejlécek |
| Eltérített postafiók | küldés érvényes bejelentkezéssel a levelezőszerveren | levelezési napló a bejelentkezési névvel, bejelentkezési helyek |
| Nyitott levelezőszerver | idegen feladók a szerverét használják továbbítóként | a levelezőszerver konfigurációja, külső ellenőrzés |
Az első két ok a weboldalt, a harmadik a levelezési fiókokat, a negyedik a szerverkonfigurációt érinti. A megkülönböztetés azért fontos, mert az ellenintézkedések teljesen különbözők.
A levélsor olvasása
A Postfixet használó szervereken a levélsor megmutatja, mit kell éppen elküldeni. A következő parancsok csak olvasnak:
# A levélsor tartalmának megjelenítése (megfelel a mailq-nak)
postqueue -p | tail -30
# Egy egyedi levél fejléceinek megjelenítése (a sor-azonosító a listából behelyettesítendő)
sudo postcat -q -h QUEUE-ID
# Sikeres bejelentkezések a levelezőszerveren felhasználónévvel
sudo grep 'sasl_username=' /var/log/mail.log | awk -F'sasl_username=' '{print $2}' | sort | uniq -c | sort -rn | head
A fejlécek gyakran már elárulják a forrást. Ha a levél egy bejelentkezett postafiókból származik, a bejelentkezési név megjelenik a levelezési naplóban. Ha ott egyetlen fiók halmozódik idegen országokból érkező bejelentkezésekkel, ennek a postafiókjának a jelszava nagy valószínűséggel kiszivárgott. Ha a levelet ezzel szemben helyben adták be, többnyire a szerveren lévő szkriptből származik.
Ha a szerverén más levelezőszerver fut, például Exim, a parancsok másképp hívják, az elv azonban ugyanaz marad: levélsor megtekintése, fejlécek olvasása, bejelentkezések számolása a naplóban. Shell-hozzáférés nélküli megosztott tárhelynél kérjen írásban a tárhelyszolgáltatótól egy kivonatot a levelezési naplóból és néhány példalevelet teljes fejlécekkel. Sok szolgáltató kérésre megadja ezeket az adatokat, mert saját érdeke a küldés megszüntetése.
Mentsen el néhány teljes levelet, mielőtt megállítja vagy kiüríti a levélsort. Bizonyítékok a későbbi elemzéshez és a tárhelyszolgáltatóval vagy a tiltólisták üzemeltetőivel folytatott beszélgetésekhez.
A felelős PHP-szkript megtalálása
Ha a küldés PHP-n keresztül fut, a PHP levelezési konfigurációja segít. A PHP-kézikönyv szerint a mail.log a mail() függvény minden hívását naplózza a teljes szkript-útvonallal, a sorszámmal, a címzettel és a fejlécekkel. A mail.add_x_header emellett egy X-PHP-Originating-Script fejlécet ír minden levélbe a felhasználói azonosítóval és a fájlnévvel.
; A php.ini-ben vagy az FPM-poolban, utána az összes workert újra kell indítani
mail.add_x_header = On
mail.log = /var/log/php/mail.log
A naplófájlnak írhatónak kell lennie a PHP-folyamat számára. A fejléc fájlnevet árul el a címzetteknek; az elemzés után kapcsolja ki újra, ha nem szeretné tartósan.
Ha feladóként egy ismeretlen fájl szerepel, például a feltöltési vagy a gyorsítótár-mappában, az webshellre utal. Hogyan sorolja be az ilyen fájlokat, azt a Webshellek felismerése és eltávolítása írja le. Ha viszont egy ismert kapcsolatfelvételi űrlap, valószínűleg visszaéltek vele, például mert a címzetteket vagy a fejléceket az űrlapbevitelekből veszik át. Ez a kód hibája, nem behatolás, de ugyanolyan gyorsan ki kell javítani.
Nem minden spam használja a mail() függvényt. A kártékony kód közvetlenül is felépíthet kapcsolatot idegen levelezőszerverekkel. Ilyenkor a küldés sem a levélsorban, sem a PHP-levélnaplóban nem jelenik meg, viszont megjelenik kimenő kapcsolatként a 25-ös porton. Hogyan ellenőrzi ezeket, azt az Egy szerver kimenő kapcsolatainak ellenőrzése írja le.
A küldés leállítása és tiszta újraindítás
Ha a forrást megtalálta, a tisztítás ebben a sorrendben következik:
- A küldés megállítása: Zárolja az érintett utat, vagyis kapcsolja ki a szkriptet, zárolja a postafiókot, vagy állítsa meg a levélsort. A várakozó leveleket mentse bizonyítékként.
- Az ok lezárása: Webshellnél hozza a PHP-t kijavított állapotba (8.5.12, 8.4.27, 8.3.36, 8.2.35 vagy megerősített backport), indítsa újra az összes workert, és tisztítsa meg a weboldalt. Űrlapnál javítsa ki a kódot. Postafióknál cserélje a jelszót, és ellenőrizze a felhasználó eszközét.
- További nyomok keresése: Aki webshellen át spamet küld, gyakran további hátsó kapukat is létrehozott.
- A kimenő forgalom korlátozása: A 25-ös porton a kimenő kapcsolatokat csak a levelezőszervernek engedélyezze, ne a webszerver-felhasználónak.
- A tiltólisták megtisztítása: Csak most kérje a tiltólisták üzemeltetőitől a törlést, és röviden írja le, mit javítottak ki.
Ez alkalommal ellenőrizze a domainje SPF-, DKIM- és DMARC-bejegyzéseit. Ezek a DNS-bejegyzések határozzák meg, mely szerverek küldhetnek a domainje nevében, és megnehezítik az idegenek számára a feladói címe visszaélésszerű használatát.
Hogyan segít konkrétan a PHP SOS?
- Kiértékeljük a levélsort, a fejléceket és a levelezési naplókat, és megállapítjuk, hogy szkript, űrlap, postafiók vagy konfiguráció az ok.
- Ellenőrzötten leállítjuk a küldést, és bizonyítékokat mentünk a tárhelyszolgáltatónak és a tiltólistáknak.
- A kártevő-eltávolítás keretében megtisztítjuk a weboldalt, és lezárjuk a bejutási pontot.
- Szerverszinten korlátozzuk a kimenő levélforgalmat, és kísérjük a tiltólistákról való törlést.
Gyakori kérdések
Honnan veszem észre, hogy a szerverem spamet küld?
Tipikusak a visszapattanó üzenetek olyan levelekről, amelyeket senki sem írt, a tárhelyszolgáltató figyelmeztetései, a tele levélsor és az ügyfelek, akik a leveleit hirtelen a spam mappában találják. A szervere címének szerepe nyilvános tiltólistákon is egyértelmű jel.
Hogyan találom meg a spamet küldő PHP-szkriptet?
A PHP a mail() függvény minden hívását naplózhatja a szkript útvonalával, ha a mail.log be van állítva. A mail.add_x_header opcióval a PHP a szkript nevét minden levél fejlécébe is beírja. A már elküldött vagy várakozó levelekben segít egy pillantás a fejlécekbe.
Azonnal ki kell ürítenem a levélsort?
Nem, amíg néhány levelet nem mentett bizonyítékként. A fejlécek gyakran megmutatják, melyik szkript vagy melyik postafiók váltotta ki a küldést. A megállítás többnyire jobb a törlésnél, amíg a forrás nem ismert.
Hogyan kerülök le újra a tiltólistákról?
Először szüntesse meg az okot, azután kérje a törlést a tiltólisták üzemeltetőitől. A legtöbben magyarázatot kérnek arról, mit javítottak ki. Aki túl korán kéri, és tovább küld spamet, újra felkerül a listára.