a leveleket ki küldi?

Sziasztok!

Mostanában elég nagyra nő a szerveren a mailq, több száz levélre. A levelek címzettjei elég zagyvaságok, így biztosan valaki spamel a szerveren. A feladó minden esetben a www-data.

A tárhelyek virtuálhostok, a log file-ok pedig szét vannak darabolva hostonként, ezért az access.log nézése szerintem nem járható út.

Tudnátok segíteni valamit, hogy hogyan tudnám kideríteni, hogy melyik tárhelyről küldődnek a levelek? www-data a feladó, ebből gondolom, hogy php-ből megy a küldés, de ki, vagy melyik file szemtelenkedik?

Köszönöm a segítséget, kezdő kategóriába tartozom, így minden segítségnek örülnék. :)

Hozzászólások

tail -f /var/log/mail parancsból nem tudod megállapítani?

Szia!

Ami szerintem ehhez tartozik az "csak ennyi", vagy kell még valamit néznem? Ilyen sorok vannak elég bőven...

Mar 27 03:32:34 host postfix/smtp[25938]: AE988395735: to=, relay=none, delay=76988, delays=76957/0.08/30/0, dsn=4.4.1, status=deferred (connect to mettaonline.com.br[192.168.10.5]:25: Connection timed out)
Mar 27 03:32:34 host postfix/smtp[25939]: B5DB6398387: to=, relay=none, delay=11714, delays=11684/0.08/30/0, dsn=4.4.1, status=deferred (connect to vivax.com.br[189.89.96.97]:25: Connection timed out)
Mar 27 03:32:34 host postfix/smtp[25941]: E2550398379: to=, relay=none, delay=11727, delays=11697/0.08/30/0, dsn=4.4.1, status=deferred (connect to vivax.com.br[189.89.96.97]:25: Connection timed out)

Általában akkor van www-data feladó ha a szerencsétlen programozó a php mail függvényét használja és nem ad meg envelope sender-t mert az opcionális.
Ha postfix van a szeveren akkor telepítsd fel a pfqueue programot. Segítségével egy karakteres felületen böngészheted a várakozási sorokat és olvashatod a leveleket is. A levelek fejléceiben megtalálod a feladót.

--
maszili

Ja, hogy betörtek a szerverre és a kártékony kód küldi a levelet?
Az ilyen fájlok tartalma általában kódolva van pont azért, hogy egyszerű tartalom kereséssel (pl. levél részlet) ne lehessen magtalálni.
Mivel esetedben minden php processz ugyanazon felhasználó nevében fut (www-data) így elég nehéz lesz megtalálni.

--
maszili

te kapod vagy tőled megy ki?

Ha tőled megy ki... akkor:

de lehet,hogy nagy baromságot mondok....
próbáld meg,hogy kilistázod a mail mappa méreteit és a legnagyobbakat átnézed:)

Ezt az elvet erdemes meg akar azzal is kiegesziteni, hogy oldalankent letarolsz akar sql-ben egy idoszaki limietet, pl. napi x kikuldheto level. A wrapper nezni, hogy ebbol mennyit teljesitett mar, amikor tullepi, onnantol a levelek a kukaba, es logolja, hogy tullot a celon. Nem csak a feltort oldalak miatt hasznos, az sem jo feltetlen, ha a webhostos ugyfel hirtel ugy gondol, hogy akkor o most kikuld nehany ezer hirlevelet a tarhelyen keresztul..

Számold meg a log fájlokban a POST-al küldött sorokat domainenként, valahogy így:
grep "POST" /var/log/apache2/*.log|awk '{print $1}'|sort|uniq -c|sort -n

Ha rosszul ellenőrzött űrlapon keresztül küldik az POST-al megy, ha valami feltölött scripttel jó eséllyel az is.

Anno használtam erre egy php patchet ami hozzáadott a mailhez egy plusz headert és így szépen láttad, honnan jött a levél.

Nálam pár hete egy infowt6.php és egy newsletter.php okozta ezt a problémát. Egyik ügyfelünk tárhelyére tolták fel és onnan spammeltek vele. Próbálj ezekre rákeresni.

"A +1 az a proletárlájk."

php.ini (5.3+):
; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
mail.log = /path/to/mail.log (a www-data user tudja írni)

Szia!

Én a következőt használom:
http://cvk.hu/mail/phpsendmail

A fájlt mentsd le az /usr/local/bin/ alá:
wget -O /usr/local/bin/phpsendmail http://cvk.hu/mail/phpsendmail

Adj neki futtatás jogot:
chmod +x /usr/local/bin/phpsendmail

Hozzd létre a logot, amibe írni fog:
touch /var/log/mail.form
chmod 777 /var/log/mail.form

Módosítsd a php.ini -ben a sendmail beállítását:
sed -i 's/;sendmail_path =/sendmail_path=\/usr\/local\/bin\/phpsendmail/g' /etc/php5/apache2/php.ini /etc/php5/cli/php.ini

Indítsd újra az apache -t:
/etc/init.d/apache2 restart

Ezután már lehet tesztelni:
<?php
mail('ahova@kuldod.hu','Ez a mail tárgya','Teszt üzenet');
echo 'Mail elküldve.';
?>

Ezt ha futtatod a fenti php-t az egyik vhostban, akkor a /var/log/mail.form -ba bejegyzi hogy mikor, honnan, ki, és hova küldte.

2012-03-28 14:20:24 /var/www/clients/client39/web28/web/forum To: 'aki@kapja.hu' From: Kuldő neve <'aki@kuldi.hu'> Reply-To: 'aki@kuldi.hu'

________________
Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz, 4 Gb ram, x86_64 3.2.1-gentoo-r2