ユースケース:IP ブラックリストを使用したクライアントのフィルタリング
HTTP コールアウトは、管理者によってブラックリストに登録されているクライアントからの要求をブロックするために使用できます。クライアントのリストには、一般に知られているブラックリスト、組織で管理しているブラックリスト、またはその両方の組み合わせを使用できます。
Citrix ADCアプライアンスは、クライアントのIPアドレスを事前構成されたブラックリストと照合し、IPアドレスがブラックリストに登録されている場合はトランザクションをブロックします。IP アドレスがリストにない場合、アプライアンスはトランザクションを処理します。
この設定を実装するには、次のタスクを実行する必要があります。
- Citrix ADCアプライアンスでレスポンダーを有効にします。
- Citrix ADCアプライアンスでHTTPコールアウトを作成し、外部サーバーの詳細およびその他の必須パラメータで構成します。
- HTTP コールアウトへの応答を分析するようにレスポンダーポリシーを設定し、ポリシーをグローバルにバインドします。
- リモートサーバに HTTP コールアウトエージェントを作成します。
レスポンダーの有効化
Responder を使用する前に Responder を有効にする必要があります。
GUI を使用してレスポンダーを有効にするには
- レスポンダーライセンスがインストールされていることを確認します。
- 構成ユーティリティで、[AppExpert] を展開し、[レスポンダー] を右クリックし、[レスポンダー機能の有効化] をクリックします。
Citrix ADCアプライアンスでのHTTPコールアウトの作成
次の表に示すパラメータ設定を使用して、HTTP コールアウト HTTP_Callout を作成します。HTTP コールアウトの作成の詳細については、「HTTP コールアウト PDF の設定」を参照してください。
レスポンダーポリシーを構成し、グローバルにバインドする
HTTP コールアウトを設定したら、コールアウトの設定を確認し、コールアウトを呼び出すレスポンダポリシーを設定します。 [ポリシー] サブノードでレスポンダーポリシーを作成し、 レスポンダーポリシーマネージャーを使用してグローバルにバインドできますが、このデモでは、 レスポンダーポリシーマネージャーを使用してレスポンダーポリシーを作成し、ポリシーをグローバルにバインドします。
レスポンダーポリシーを作成し、を使用してグローバルにバインドするには
- [AppExpert] > [レスポンダー] に移動します。
- 詳細ペインの [ポリシーマネージャ] で、[**ポリシーマネージャ**] をクリックします。
- [レスポンダーポリシーマネージャー] ダイアログボックスで、[グローバルを上書き] をクリックします。
- [ポリシーの挿入] をクリックし、[ポリシー名] の [新しいポリシー] をクリックします。
[レスポンダーポリシーの作成] ダイアログボックスで、次の操作を行います。
- [名前] に「PolicyResponder1」と入力します。
- [アクション] で [リセット] を選択します。
- 「未定義の結果アクション」で、「グローバル未定義の結果アクション」を選択します。
[式] に、次の高度なポリシー式を入力します。
"HTTP.REQ.HEADER("Request").EQ("Callout Request").NOT && SYS.HTTP_CALLOUT(HTTP_Callout).CONTAINS("IP Matched")"
- [Create]をクリックしてから、[Close]をクリックします。
- [変更を適用] をクリックし、[閉じる] をクリックします。
リモートサーバーでの HTTP コールアウトエージェントの作成
これで、Citrix ADCアプライアンスからのコールアウト要求を受信して適切に応答するHTTPコールアウトエージェントをリモートコールアウトサーバー上に作成する必要があります。HTTP コールアウトエージェントは、デプロイメントごとに異なるスクリプトであり、サポートされるデータベースのタイプやスクリプト言語など、サーバーの仕様を念頭に置いて記述する必要があります。
次に、指定された 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;