Buscando al spammer “Nobody”

Probado en Plesk+Qmail en Ensim+Sendmail no logro arrancarlo y dicen que en Cpanel+Exim funciona perfecto.

Cuantas veces quisieramos saber quien esta enviando spam atraves de scripts php o cgi en nuestro server o que sitios estan comprometidos y los usan los spammers para sus cometidos. Si ud mira en su php.ini la funcion mail realiza un llamado directo a /usr/bin/sendmail esto es lo que pretendemos monitorear.

Este sencillo script crea un archivo log donde se almacena la actividad registrada por sendmail. Sirve tambien en caso de que nuestro servidor este comprometido en sus archivos temporales /tmp o /var/tmp o cualquier otro. La idea es intercambiar el binario de sendmail por este sript de perl y monitorear en /var/log/formmail.log toda al actividad de envio de correo.

Instalacion y configuracion.
1) Paramos qmail
service qmail stop
2) Hacemos Backup (Por nada te lo saltes; Respeta el nombre del backup ya que el perl lo usara)
mv /usr/sbin/sendmail /usr/sbin/sendmail.act
3) Crea el script de perl que reemplazara a /usr/sbin/sendmail
pico -w sendmail
4) Le asignanos permisos de ejecucion
chmod +x /usr/sbin/sendmail
5) Creamos el archivo de salida (El Log)
echo > /var/log/formmail.log
6) Le damos permisos al log
chmod 777 /var/log/formmail.log
7) Ya esta A hacer pruebas y a mirar el log


#!/usr/bin/perl

# use strict;

use Env;

my $date = `date`;

chomp $date;

open (INFO, “>>/var/log/formmail.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 – @info\n”;

}

my $mailprog = ‘/usr/sbin/sendmail.act’;

foreach (@ARGV) {

$arg=”$arg” . ” $_”;

}

open (MAIL,”|$mailprog $arg”) || die “cannot open $mailprog: $!\n”;

while ( ) {

print MAIL;

}

close (INFO);

close (MAIL);


5 opiniones en “Buscando al spammer “Nobody””

  1. Hola, estoy probando este script, uso Plesk+Qmail. El problema es que en esta parte del proceso :

    while ( ) {
    print MAIL;
    }

    parece que entre en un bucle infinito y se queda sendmail colapsando la máquina. Probando desde un formulario web, el formulario también está esperando respuesta.

    Si quito el bucle y dejo únicamente el print MAIL; el correo no se envío.

    Por lo demás, se registran perfectamente los accesos.

    ¿Alguna ayuda?

    Muchisimas gracias

Deja un comentario

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