Citrix ADC

使用案例:使用 IP 黑名单过滤客户端

HTTP 标注可用于阻止来自管理员列入黑名单的客户端的请求。客户端列表可以是公开已知的黑名单、您为组织维护的黑名单或两者的组合。

Citrix ADC 设备将根据预先配置的黑名单检查客户端的 IP 地址,并在 IP 地址已被列入黑名单时阻止事务。如果 IP 地址不在列表中,则设备将处理事务。

要实现此配置,必须执行以下任务:

  1. 在 Citrix ADC 设备上启用响应程序。
  2. 在 Citrix ADC 设备上创建 HTTP 标注,并使用有关外部服务器和其他必需参数的详细信息对其进行配置。
  3. 配置响应程序策略以分析对 HTTP 标注的响应,然后在全局范围内绑定策略。
  4. 在远程服务器上创建 HTTP 标注代理。

启用响应程序

在使用响应程序之前,必须启用响应程序。

使用 GUI 启用响应程序

  1. 确保您已安装响应程序许可证。
  2. 在配置实用程序中,展开 AppExpert,然后右键单击 响应程序,然后单击 启用响应程序 功能。

在 Citrix ADC 设备上创建 HTTP 标注

使用下表所示的参数设置创建 HTTP 标注 HTTP_注解。有关创建 HTTP 标注的更多信息,请参阅 配置 HTTP 标注 pdf。

配置响应程序策略并将其全局绑定

配置 HTTP 标注后,验证标注配置,然后配置响应程序策略以调用标注。虽然您可以在 “策略” 子节点中创建响应程序 策略,然后使用 响应程序策略管理器将其全局绑定,但本演示使用 响应程序策略管理器创建响应程序策略并在全局范围内绑定策略。

创建响应程序策略并通过 usin 将其全局绑定

  1. 导航到 AppExpert > 响应程序
  2. 在详细信息窗格的 策略管理器下,单击 策略管理器
  3. 响应程序策略管理器 对话框中,单击 覆盖全局
  4. 单击 插入策略,然后在 策略名称下,单击 新建策略
  5. 在 “ 创建响应程序策略 ” 对话框中,执行以下操作:

    1. 在名称中,键入 PolicyResponder1
    2. 操作中,选择 重置
    3. 未定义结果操作中,选择 全局未定义结果 操作。
    4. 表达式中,键入以下高级策略表达式:

      "HTTP.REQ.HEADER("Request").EQ("Callout Request").NOT && SYS.HTTP_CALLOUT(HTTP_Callout).CONTAINS("IP Matched")"
      <!--NeedCopy-->
      
    5. 单击 Create(创建),然后单击 Close(关闭)。
  6. 单击 “ 应用更改”,然后单击 “ 关闭”。

在远程服务器上创建 HTTP 标注代理

现在,您必须在远程标注服务器上创建一个 HTTP 标注代理,该代理将接收来自 Citrix ADC 设备的标注请求并做出适当响应。HTTP callout Agent 是每个部署不同的脚本,在编写时必须牢记服务器规范,例如支持的数据库类型和脚本语言。

以下是用于验证给定 IP 地址是否属于 IP 黑名单的一部分的标注代理示例。该代理是用 Perl 脚本语言编写的,并使用 MYSQL 数据库。

以下 CGI 脚本检查标注服务器上的给定 IP 地址。

#!/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;
<!--NeedCopy-->
使用案例:使用 IP 黑名单过滤客户端