Siguiente: p_remoto
Subir: Control de acceso
Anterior: Conexión
  Índice General
Salida
El proceso de salida es muy similar al de entrada en la red:
#!/usr/bin/perl -w
#-----------------------------------------------------------------------
# Script: salida
# Version: 1.0
# Argumentos: login
# Descripcion: Llama a la funcion salida del modulo ControlNocat con
# el login para registrar la salida de la red en la tabla
# conexiones y en el historico.
#-----------------------------------------------------------------------
use lib '/usr/local/nocat/lib/';
use ControlNocat;
use strict;
open (STDERR,">/dev/null");
my $login=$ARGV[0];
&salida($login);
close(STDERR);
Al igual que en el caso de conexión, este script es invocado desde la pasarela
usando el proceso p_remoto. El momento de invocar
la salida es en el método deny de la clase gateway, justo después de cambiar
las reglas del cortafuegos para que el usuario no pueda seguir navegando.
Vamos a ver las líneas introducidas en este método:
sub deny {
my ( $self, $peer ) = @_;
my $mac = $peer->mac;
# if we don't know the peer's MAC address, it must have been
# an incidental connection (e.g. notification) that can be ignored.
return unless $mac or $self->{IgnoreMAC};
$peer = $self->remove_peer( $peer )
or return $self->log( 4, "Denying unknown MAC address $mac?" );
my $class = $peer->status;
# Liberamos el identificador de cola
#
if (not $class or $class eq DENY)
{
my $id=$peer->id_cola;
if ( $id and $id ne "")
{
my $servidor=$self->{AuthServiceAddr};
open (FIFO,">/home/nocat/param_fifo");
print FIFO "$servidor libera_id $id";
close FIFO;
$self->log(5,"Liberamos el identificador de cola $id");
}
return $self->log( 7, "Denying peer $mac without prior permit." );
}
$self->log( 5, "User ", ( $peer->user || $peer->ip ),
" denied service. Connected since " ,
scalar localtime $peer->connect_time, "." );
my $fw = $self->firewall( GatewayAddr => $peer->gateway_ip );
$fw->deny( $class, $mac, $peer->ip );
# Eliminamos la clase del QoS que corresponde a ese usuario
#
$fw->del_qos( $peer->ip, $peer->id_cola );
# Codigo insertado para pasar a p_remoto una peticion que ejecute el
# script salida en el servidor y registre la salida en la tabla conexiones
#
my $servidor=$self->{AuthServiceAddr};
my $login=$peer->user;
my $id=$peer->id_cola;
open (FIFO,">/home/nocat/param_fifo");
print FIFO "$servidor salida $login";
close FIFO;
$peer->status( DENY );
# Tell the parent process about it.
$self->notify_parent( DENY, $peer );
}
Siguiente: p_remoto
Subir: Control de acceso
Anterior: Conexión
  Índice General
Jesús Martín
2003-09-16