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_*