Caso de uso: Filtrar clientes mediante una lista negra de IP

Las llamadas HTTP se pueden utilizar para bloquear solicitudes de clientes que están en la lista negra por el administrador. La lista de clientes puede ser una lista negra públicamente conocida, una lista negra que mantenga para su organización o una combinación de ambas.

El dispositivo Citrix ADC comprueba la dirección IP del cliente con la lista negra preconfigurada y bloquea la transacción si la dirección IP se ha incluido en la lista negra. Si la dirección IP no está en la lista, el dispositivo procesa la transacción.

Para implementar esta configuración, debe realizar las siguientes tareas:

  1. Habilite Responder en el dispositivo Citrix ADC.
  2. Cree una llamada HTTP en el dispositivo Citrix ADC y configúrela con detalles sobre el servidor externo y otros parámetros necesarios.
  3. Configure una directiva de respuesta para analizar la respuesta a la llamada HTTP y, a continuación, enlazar la directiva globalmente.
  4. Cree un agente de llamada HTTP en el servidor remoto.

Habilitar Responder

Debe habilitar Responder antes de poder usarlo.

Para habilitar Responder mediante la interfaz gráfica de usuario

  1. Asegúrese de haber instalado la licencia dResponder.
  2. En la utilidad de configuración, expanda AppExpert, haga clic con el botón secundario del mouse en Responder y, a continuación, haga clic en Habilitar la función Responder.

Creación de una llamada HTTP en el dispositivo Citrix ADC

Cree una llamada HTTP, Http_callout, con la configuración de parámetros que se muestra en la tabla siguiente. Para obtener más información sobre cómo crear una llamada HTTP, consulte Configuración de una llamada HTTPpdf.

Configurar una directiva de respuesta y vincularla globalmente

Después de configurar la llamada HTTP, compruebe la configuración de la llamada y, a continuación, configure una directiva de respuesta para invocar la llamada. Aunque puede crear una directiva de Responder en el subnodo Directivas y, a continuación, vincularla globalmente mediante el Administrador de directivas de Responder, esta demostración utiliza el Administrador de directivas de Responder para crear la directiva de Responder y enlazar la directiva globalmente.

Para crear una directiva de respuesta y vincularla globalmente por usin

  1. Vaya a AppExpert > Responder.
  2. En el panel de detalles, en Administrador de directivas, haga clic en Administrador de directivas.
  3. En el cuadro de diálogo Administrador de directivas de Responder, haga clic en Sustituir global.
  4. Haga clic en Insertar directiva y, a continuación, en Nombre de directiva, haga clic en **Nueva directiva.
  5. En el cuadro de diálogo Crear directiva de Responder, haga lo siguiente:

    1. En Nombre, escriba PolicyResponder1.
    2. En Acción, seleccione RESTABLECER.
    3. En Acción Undefined-Result, seleccione la acción Global undefined-result.
    4. En Expresión, escriba la siguiente expresión de sintaxis predeterminada:

      "HTTP.REQ.HEADER("Request").EQ("Callout Request").NOT && SYS.HTTP_CALLOUT(HTTP_Callout).CONTAINS("IP Matched")"
      
    5. Haga clic en Crear y, a continuación, haga clic en Cerrar.
  6. Haga clic en Aplicar cambios y, a continuación, haga clic en Cerrar.

Crear un agente de llamada HTTP en el servidor remoto

Ahora debe crear un agente de llamada HTTP en el servidor de llamadas remoto que reciba solicitudes de llamada del dispositivo Citrix ADC y responda adecuadamente. El agente de llamada HTTP es un script diferente para cada implementación y debe escribirse teniendo en cuenta las especificaciones del servidor, como el tipo de base de datos y el lenguaje de scripting admitido.

A continuación se muestra un agente de llamada de ejemplo que verifica si la dirección IP dada es parte de una lista negra IP. El agente ha sido escrito en el lenguaje de scripting Perl y utiliza una base de datos MYSQL.

El siguiente script CGI comprueba si hay una dirección IP determinada en el servidor de llamadas.

#!/usr/bin/perl -w
print "Content-type: text/html\n\n";
        use DBI();
        use CGI qw(:standard);
#Take the Client IP address from the request query
        my $ip_to_check = param('cip');
# Where a MYSQL database is running
        my $dsn = 'DBI:mysql:BAD_CLIENT:localhost';
# Database username to connect with
        my $db_user_name = dbuser;
# Database password to connect with
        my $db_password = 'dbpassword';
        my ($id, $password);
# Connecting to the database
        my $dbh = DBI->connect($dsn, $db_user_name, $db_password);
        my $sth = $dbh->prepare(qq{ select * from bad_clnt });
        $sth->execute();
        while (my ($ip_in_database) = $sth->fetchrow_array()) {
        chomp($ip_in_database);
# Check for IP match
        if ($ip_in_database eq $ip_to_check) {
              print "\n IP Matched\n";
                                                     $sth->finish();
                                               exit;
                }
       }
       print "\n IP Failed\n";
       $sth->finish();
       exit;