Crear Logs de Emails emitidos por PHP (OPCIONAL) en Linux

crear-logs-de-emails-emitidos-por-php-opcional-en-linux

OPCIONAL: Hace falta realizar pruebas.

PHP y Apache no hacen seguimiento de los usuarios que envían correos a través del usuario nobody (usuario estándar de PHP), causando debilidades en el uso de formmail y la posibilidad de no poder detectar usuarios malintencionados que envían spam.

Revisar el exim_mainlog no es de gran ayuda, se ve la salida del correo electrónico, pero no se puede hacer seguimiento de qué usuario o secuencia de comandos lo envió.

Si se analiza el archivo php.ini notamos que el programa de correo electrónico está establecido en: /usr/sbin/sendmail y el 99,99 % de los scripts PHP sólo utilizarán la función mail () por lo que todo irá a través de la /usr/sbin/sendmail.

Para poder disponer de un registro de eventos de emails enviados usando nobody debemos realizar el siguiente procedimiento:

Ingresar en la consola con el usuario root y apagar el servicio exim mientras se completa este procedimiento:

/etc/init.d/exim stop

Respaldar el archivo original /usr/sbin/sendmail :

mv /usr/sbin/sendmail /usr/sbin/sendmail.hidden

Crear el script de monitoreo de SPAM para el nuevo sendmail:

nano /usr/sbin/sendmail

Colocar en el archivo lo siguiente:

#!/usr/local/bin/perl
 # use strict;
 use Env;
 my $date = `date`;
 chomp $date;
 open (INFO, ">>/var/log/spam_log") || die "Failed to open file ::$!";
 my $uid = $>;
 my @info = getpwuid($uid);
 if($REMOTE_ADDR) {
 print INFO "$date - $REMOTE_ADDR ran $SCRIPT_NAME at $SERVER_NAME n";
 }
 else {
 print INFO "$date - $PWD - @infon";
 }
 my $mailprog = '/usr/sbin/sendmail.hidden';
 foreach (@ARGV) {
 $arg="$arg" . " $_";
 }
 open (MAIL,"|$mailprog $arg") || die "cannot open $mailprog: $!n";
 while (<stdin> ) {
 print MAIL;
 }
 close (INFO);
 close (MAIL);</stdin>

Salir y Guardar.

Debemos cambiar los permisos de ejecución de sendmail

chmod +x /usr/sbin/sendmail

Creamos un nuevo archivo log para guardar el histórico de todos los correos emitidos desde el servidor utilizando programas web:

touch /var/log/spam_log
chmod 0777 /var/log/spam_log

Volvemos a arrancar el EXIM:

/etc/init.d/exim start

Podemos entonces monitorear el archivo spam_log para ubicar el spam. Es posible usar cualquier aplicación de formmail o un script que use la función mail() de php.

tail - f /var/log/spam_log

Un ejemplo de lo guardado en el histórico sería:

Mon Apr 11 07:12:21 EDT 2005 - /home/usuario/public_html/directorio/subdirectorio - nobody x 99 99 Nobody / /sbin/nologin

Detalles de Rotación del Log

El archivo spam_log no se ha inicializado para ser rotado por lo que podría llegar a ser muy grande rápidamente. Debe entonces ser agregado logrotation, para ello debemos editar el archivo de configuración del mismo:

nano /etc/logrotate.conf

Buscar:

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

Y agregar debajo de eso:

# SPAM LOG rotation
/var/log/spam_log {
monthly
create 0777 root root
rotate 1
}

También podríamos querer evitar que nuestro sendmail sea sobre-escrito para lo cual podemos ejecutar:

chattr + i /usr/sbin/sendmail
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *