Com crear un registre de correus electrònics enviats amb un script PHP

Si tenim un servidor que sospitem que pot generar SPAM des d’un script PHP, podem crear un fitxer de log per tal de veure quin fitxer l’està generant.

Aquest exemple és per un servidor plesk onix amb una distribuió linux basada en debian.

Preparem els fitxers que necessitarem pel procés…

# creem els fitxers que necessitarem més endavant
touch /var/log/mail_send_php.log
touch /usr/sbin/sendmail_logphp
# assignem els permisos corresponents
chmod a+rw /var/log/mail_send_php.log
chmod a+x /usr/sbin/sendmail_logphp
# fem còpia del fitxer orignal
cp /usr/sbin/sendmail /usr/sbin/sendmail_original

Posem el codi necessari al nou executable per tal d’afegir el path a la capçalera del correu i llavors passar-ho al nou log…

nano /usr/sbin/sendmail_logphp
  #!/bin/sh
  (echo X-Additional-Header: $PWD ;cat) | tee -a /var/log/mail_send_php.log|/usr/lib/plesk-9.0/postfix-sendmail-wrapper "$@"

Fins aquí no s’ha canvia res del funcionament del procés d’enviament de correus. El proper pas és deixar d’utilitzar el binari sendmail original i començar a utilitzar el que acabem de crear. Per fer-ho, esborrem l’executable original i creerem un enllaç simbòlic al nou executable…

rm /usr/sbin/sendmail
ln -s /usr/sbin/sendmail_logphp /usr/sbin/sendmail

Per assegurar-nos que te efecte, reiniciem el servei…

/etc/init.d/postfix restart

Des d’ara mateix ja estem interceptant tots els mails que genera qualsevol script PHP i el trobarem al fitxer de log que hem creat. Podem veure en directe el què està passat amb tail …

tail -f /var/log/mail_send_php.log

Per desfer els canvis i deixar de guardar al log el correus enviats via PHP…

rm /usr/sbin/sendmail
ln -s /usr/lib/plesk-9.0/postfix-sendmail-wrapper /usr/sbin/sendmail
/etc/init.d/postfix restart

En cas que encara generem SPAM i no aparegui res al log anterior, potser tenim algun compte de correu compromès. Primer mirem la quantitat de logins dels últims dies…

zgrep -c 'sasl_method=LOGIN' /usr/local/psa/var/log/maillog*
  /usr/local/psa/var/log/maillog:221000
  /usr/local/psa/var/log/maillog.processed:362327
  /usr/local/psa/var/log/maillog.processed.1.gz:308956

Si realment el número és molt elevat, buscarem l’usuari concret que està fent tants logins…

zgrep 'sasl_method=LOGIN' /usr/local/psa/var/log/maillog* | awk '{print $9}' | sort | uniq -c | sort -nr | head
  891574 sasl_username=usuari@domini.tld

Si realment hi ha un usuari compromès, la primera mesura és canviar-li la contrasenya i reiniciar el servei postfix.

Un apunt extra, per automatizar el canvi, podem crear un parell d’scripts…

#!/bin/bash
\rm /usr/sbin/sendmail
ln -s /usr/sbin/sendmail_logphp /usr/sbin/sendmail
/etc/init.d/postfix restart
#!/bin/bash
\rm /usr/sbin/sendmail
ln -s /usr/lib/plesk-9.0/postfix-sendmail-wrapper /usr/sbin/sendmail
/etc/init.d/postfix restart

Finalment,els donem permís d’execució…

chmod 700 /ruta/a/lscript/phpmail_*
2019-08-02T09:37:27+02:0020 01 2019|linux, mail, php|