• Publicidad

Perl como Daemon

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Perl como Daemon

Notapor rklz » 2007-05-30 23:25 @017

Buenas gente , necesito una ayudita, el script que intento hacer es para que el mismo esté corriendo como daemon de sistema y me vaya leyendo el log de autentificación; en el caso de Debian auth.log. Usé el módulo Proc::Daemon para que corra como demonio y File::Tail para que vaya leyendo la cola del log, pero cuando lo ejecuto, queda como log porque al tirar ps aux | grep x.pl aparece, pero no me muestra nada en pantalla. Les pego el script. ¡Muchas gracias! :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use warnings;

use Proc::Daemon;
Proc::Daemon::Init;

use File::Tail;
$archivo = File::Tail -> new("/var/log/auth.log");

        while (defined($line=$archivo->read)){
        print "$line";
        }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Publicidad

Notapor explorer » 2007-05-31 04:35 @232

¡Claro que no sale nada en pantalla!

Mira lo que hay en el código fuente de Proc::Daemon::Init()
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#...
    ## Reopen stderr, stdout, stdin to /dev/null
    open(STDIN,  "+>/dev/null");
    open(STDOUT, "+>&STDIN");
    open(STDERR, "+>&STDIN");
#...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Vamos... que todas las salidas están redirigidas a nulo.

Deberás abrir un fichero de salida donde dejar esas líneas... o no poner el script como daemon, con ese módulo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor rklz » 2007-05-31 10:38 @484

Y en que parte del codigo tengo que insertar el archivo de salida , como quedaria el script , y explorer si no lo pongo como Daemon como vos decis , como hago que lea continuamente el mismo archivo ? .
Mi idea de este script es que lea continuamente el log de autentificacion y filtre palabras clave como "invalid" , "root" , "failed" para mostrar en pantallas posibles intentos de entrada al sistema ..
Pero no se si estoy llendo por el mejor camino jeje
Muchas gracias por la ayuda !!
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Notapor explorer » 2007-05-31 11:15 @510

A ver... es necesario una descripción exacta de lo que quieres... porque si solo quieres sacar información a una pantalla, con el print del while, te vale.

Otra cosa es que quieras que esa salida se reparta entre varias pantallas y/o usuarios.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor rklz » 2007-05-31 11:26 @518

Nono , lo que quiero hacer , es lo que detalle un poco mas arriba , quiero tener el script este que lea y procese todo el tiempo el log de autentificacion , y filtrar palabras clave que permitan darse cuenta de un posible intento de entrada al sistema y cuando encuentre alguna de esas palabras , las muestre en consola , me explico ?
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Notapor explorer » 2007-05-31 11:55 @538

En ese caso no te hace falta ningún script: desde la línea de comandos puedes ejecutar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
tail -f /var/log/auth.log | grep -e "invalid|root|failed"
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
y en Perl... casi lo mismo... en el print:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $line if $line =~ /invalid|root|failed/;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor rklz » 2007-05-31 15:07 @671

Gracias por el tip , pero eso es lo que estoy haciendo actualmente y le agrego "tail -f /var/log/auth.log | ccze"
ccze es un lindo programita que te colorea la salida del log , pero esa no es la idea
La idea es que el script de perl corra como daemon al inicio del sistema y que muestre en consola los logs automaticamente , asi no tendria que poner tail -f /var/log/authlog , aparte futuramente le quiero dar otra utilidad a este "log scanner"

Muchas gracias
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Notapor explorer » 2007-05-31 17:26 @768

Sí, el ccze lo uso prácticamente a diario cuando quiero ver los logs (un programa Perl, por cierto).

Sólo se me ocurre una forma de sacar la salida por la consola, y es redirigiendo la salida a una de las terminales virtuales. Por ejemplo, una cosa que siempre suelo hacer en todos mis servidores Linux es la editar el fichero de configuración del syslog para agregarle la regla *.* (todos los servicios, todos los niveles de aviso) que lo envía /dev/tty12, con lo que todos los avisos salen por la terminal virtual número 12 y así puedo ver la actividad sin tener ni siquiera que logearme en el sistema. Tu programa debería hacer algo parecido.

Una forma de hacerlo sería que el programa escribiera al demonio syslog, por ejemplo. Para ello, hay unos cuantos módulos que lo pueden hacer.

Otra solución. Yo suelo usar los programas snort y logcheck para estos temas de seguridad. Snort nos filtra a los chicos malos mientras que logcheck nos manda un correo cada hora con las últimas incidencias.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor rklz » 2007-05-31 17:33 @773

Explorer , gracias por el consejo , te cuento el proyecto en su totalidad , para que sepas que quiero hacer jaja .
La idea es tener este demonio-script que este leyendo auth.log en tiempo real y que si reconoce palabras claves como root , invalid y esas repetidamente , lea el ip de la que proviene y agregue una regla al firewall (iptables) y lo banee automaticamente , actualmente en mis servidores tengo un paquete que hace eso "fail2ban" que es muy bueno , pero mi idea es armar uno propio , asi que bue , en la lucha estamos ..
Para iptables encontre el modulo IPTables::IPv4 y para para que corra como daemon lo comente antes , pero no me funciona :(

Saludos y muchas gracias
Avatar de Usuario
rklz
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2007-05-25 13:28 @603
Ubicación: Rosario, Argentina

Notapor explorer » 2007-05-31 18:28 @811

Bueno, siempre puedes abrir un fichero de log propio (con open) y mandar la salida allí con el print. Es lo que suelen hacer los daemon: dejar su registro en un fichero de registro.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados

cron