next up previous contents
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 );
}


next up previous contents
Siguiente: p_remoto Subir: Control de acceso Anterior: Conexión   Índice General
Jesús Martín 2003-09-16
e-REdING. Biblioteca de la Escuela Superior de Ingenieros de Sevilla.


SISTEMA DE CONTROL, TARIFICACIÓN Y ADMINISTRACIÓN DEL ACCESO A INTERNET DESDE REDES HETEROGÉNEAS

: Martín Ruiz, Jesús
: Ingeniería Telecomunicación
Contenido del proyecto: