WAF、ボット、および高度な認証ポリシーによるゲートウェイ仮想サーバの保護
概要
多くのVPNおよびCitrix Gateway展開は、他のWebアプリケーションにセキュリティ保護を提供するCitrix ADCアプライアンスによってホストされます。このPoCガイドは、Citrix ADCアプライアンスですでに利用可能なツールを使用して、VPNおよびGateway仮想サーバーを保護するために設計されています。このガイドでは、ボットセキュリティによるポータルのログインページの保護と WAF 機能による認証情報フォームの送信の保護について説明します。さらに、高度な認証ポリシーを使用して、ユーザーログオンにコンテキストを追加し、多要素認証を追加します。
この設定の流れは、次のように図化されています。
設定オプション
このガイドでは、保護の排他的なリストは提供されていません。また、保護を設定する唯一の方法でもありません。たとえば、ゲートウェイ仮想サーバーのレスポンダーポリシーを使用して、IP レピュテーションとレート制限の両方を展開できます。この設定はサポートされているデプロイ方法ですが、ゲートウェイログインページがレンダリングされる前に接続をドロップまたはリセットする結果は異なります。
また、WAF プロファイルでは、すべての保護が有効になっているわけではありません。これは、複雑な構成、カスタムチューニング、および潜在的な問題を防ぐために行われます。WAF プロファイルへのさらなる設定が可能です。ガイダンスについては、「リファレンス」セクションのリンクを参照してください。
認証に関しては、CAPTCHAは余分な要素のための最も安全なオプションではなく、説明を簡単にするためにのみ使用されました。TOTP や PUSH などの他の MFA オプションを推奨します。これらのオプションの展開に役立つリンクについては、「リファレンス」セクションを参照してください。
前提条件
このガイドでは、Citrix WAF の展開、ボットセキュリティの展開、および高度な認証ポリシー (nFactor) に関する実用的な知識を前提としています。ゲートウェイまたは認証仮想サーバーが既にインストールされ、構成されていることが前提となります。構成に必要な要件を次に示します。
- 高度な認証ポリシーには、リリース 12.1 ビルド 57.18 以降が必要です
- Web Application Firewallの保護には、リリース 12.1 ビルド 57.18 以降が必要です
- ボットのセキュリティ保護には、リリース 13.0 ビルド 71.40 以降が必要です
- このガイドの機能の大半には、プレミアムライセンスが必要です。
- ポート 80 でリッスンしている既存のサーバーまたはサービス
- 既存の高度な認証構成(高度な認証または nFactor フロー)を持つ、既存のゲートウェイまたは認証仮想サーバー
- Citrix Web App Firewall、Citrixボット管理、レピュテーションの各機能を有効にする必要があります。
ボット保護
ボットの署名
[セキュリティ]>[Citrixボット管理]>[署名]から、[デフォルトのボット署名]を選択し、[複製]ボタンをクリックします。わかりやすい名前を適用し、[作成] をクリックします。
ボット管理プロファイルとポリシーの作成
[セキュリティ] > [Citrix ボット管理] > [プロファイル] で、[追加] を選択して新しいボット管理プロファイルを作成します。プロファイルにわかりやすい名前を付けて、以前に作成した署名セットを選択します。
プロファイルを作成したら、そのプロファイルを選択して詳細プロファイル設定を編集します。
右側の列からIP レピュテーションを追加し、チェックボックスをオンにして有効にします。
次に、カテゴリの下の [追加] を選択し、[タイプ] で [IP] を選択し、[有効] のチェックボックスをオンにして、アクションを [ドロップ] に設定します。最後に、「ログ」のチェックボックスをオンにし、ログメッセージを説明的なものに設定します。
右側の列から [ **デバイスフィンガープリント] を選択し、[有効] チェックボックスがオフになっていることを確認し、[更新] をクリックします。**
ボットプロファイルの最後の設定は、レート制限を有効にし、右側の列から [Rate Limit] を選択し、[有効] のチェックボックスをオンにします。[リソースの構成] の下の [追加] をクリックし、次の URL の URL タイプレート制限バインディングを 3 つ追加します。
- /logon/LogonPoint/index.html
- /logon/LogonPoint/tmindex.html
- /vpn/index.html
これらのレート制限は、レートが 5、期間 1000、ドロップ、ログの有効化、および説明的なメッセージタイトル付きのログメッセージで有効にされます。
これで、ボットプロファイルは次のように設定されました。
「セキュリティ」>「Citrixボット管理」>「ボットポリシー」の順に選択し、「追加」を選択して、ボット管理ポリシーを作成します** 。以前に作成したボットプロファイルを、次のようにエクスプレッションで選択します。
HTTP.REQ.URL.CONTAINS("/vpn")||HTTP.REQ.URL.CONTAINS("/logon")<!--NeedCopy-->
最後に、[ポリシーマネージャ] を選択することでボットポリシーがバインドされます。[デフォルトグローバル] のバインドポイントを選択し、[クリックして選択] を選択してポリシーを選択します。以前に作成したポリシーを強調表示し、[選択] を選択します。[バインド] を選択し、[Done] を選択します。
WAF 保護
WAF ポリシーを Gateway または認証仮想サーバに直接バインドすることはできません。さらに、ゲートウェイまたは認証仮想サーバーを対象とする式を使用して WAF ポリシーをグローバルにバインドすると、期待どおりに機能しない可能性があります。これは、ポリシーが処理される順序によるもので、ゲートウェイポリシーと認証ポリシーの後に WAF ポリシーが処理されます。
WAF 保護ポリシーは、HTTP コールアウトを使用してログオンページを保護し、WAF 例外がキャッチされた場合に認証フローを無効にします。この設定には、ログイン URL、ダミーサービスと負荷分散仮想サーバ、HTTP コールアウト、および WAFポリシーおよび設定を含むパターンセット(Patset)が必要です。
パターンセット
AppExpert > パターンセットに移動し、「追加」を選択します。新しいパターンセットに名前を付けて、「挿入」を選択し、次のパターンを追加します。
- /cgi/login (index 1)
- /nf/auth/doAuthentication.do (index 2)
または、CLI からパターンセットを作成することもできます。
add policy patset GW_VPN_Patsetbindpolicy patset GW_VPN_Patset"/cgi/login"-index1bindpolicy patset GW_VPN_Patset"/nf/auth/doAuthentication.do"-index2 <!--NeedCopy-->
ダミー仮想サーバーとサービス
HTTPコールアウトにはダミー仮想サーバーが使用されます。この仮想サーバーはパブリックに利用可能である必要がないため、アドレス指定できない場合があります。仮想サーバは稼働している必要があるため、バックエンドサーバはアップ状態であり、ポート 80 で応答する必要があります。このガイドでは、新しいサービスと仮想サーバーを作成しますが、既存の仮想サーバーを使用できます。
[トラフィック管理] > [負荷分散] > [サービス] に移動し、[追加] を選択します。サービスにわかりやすい名前を付けて、プロトコルを HTTP、ポートを 80 に設定します。サーバのIPアドレスを入力し、[OK]を選択します。または、既存のサーバを使用してサービスを作成することもできます。サービスにバインドされているモニターを含め、すべての既定の設定を使用できます。
次に、[トラフィック管理] > [負荷分散] > [仮想サーバー] の順に選択して、負荷分散仮想サーバーを作成し、[追加] を選択します。サーバにわかりやすい名前を付けて、プロトコルを HTTP に設定し、IP アドレスの種類を [アドレス不可能] に設定します。[負荷分散仮想サーバーサービスのバインドなし] を選択し、[クリックして選択] を選択し、サービスを選択して、以前に作成したサービスをこの仮想サーバーにバインドします。仮想サーバにバインドされたサービスが 1 つあり、状態は「Up」になります。
HTTP コールアウト
AppExpert > HTTP コールアウトに移動し、[追加] を選択します。HTTP コールアウトにわかりやすい名前を付けて、[仮想サーバー] を選択してコールアウト要求を受信し、ダミー仮想サーバーを選択します。[サーバーに送信する要求] で、[式ベース] としてタイプを選択し、スキームを ‘HTTP’ に設定し、[完全な式] を次のように設定します。
HTTP.REQ.FULL_HEADER.BEFORE_STR("\r\n\r\n")+"\r\nGW_VPN-WAF_Callout:abc\r\n\r\n"+HTTP.REQ.BODY(2048)<!--NeedCopy-->
注:
ここでのヘッダーの名前は ‘GW_VPN-WAF_Callout’ です。これは、後でアプリケーションファイアウォールフィルタリング式で使用されます。変更する場合は、WAF ヘッダー式でも変更する必要があります。
[サーバー応答] セクションで、戻り値の型をBOOLに設定し、式を「真」に設定します。
または、HTTP コールアウトを CLI から作成することもできます。
add policy httpCallout GW_VPN_WAF_Callout-vServerdummy-vserver-here-returnTypeBOOL-fullReqExprHTTP.REQ.FULL_HEADER.BEFORE_STR("\r\n\r\n")+"\r\nGW_VPN-WAF_Callout:abc\r\n\r\n"+HTTP.REQ.BODY(2048)-schemehttp-resultExprtrue<!--NeedCopy-->
認証ポリシー
既存の LDAP 認証ポリシーは、HTTP コールアウトを使用するように変更されます。[ セキュリティ] > [AAA アプリケーショントラフィック] > [ポリシー] > [認証] > [詳細ポリシー] > [ポリシー] の順に選択して、既存の認証ポリシーを開き、[編集] を選択します。既存の式を次のように変更します。
HTTP.REQ.URL.CONTAINS_ANY("GW_VPN_Patset")&&SYS.HTTP_CALLOUT(GW_VPN_WAF_Callout)<!--NeedCopy-->
注:
この式は、ログオンページのフォームフィールドを保護する任意の認証ポリシーで使用できます。
WAF プロファイルとポリシー
WAFプロファイルを構築するには、[セキュリティ]>[Citrix Web Application Firewall]>[プロファイル]の順に選択し、[追加]を選択します。プロファイルにわかりやすい名前を付けて、[Web アプリケーション (HTML)] と [基本デフォルト] を選択します。[編集] を選択して新しく作成したプロフィールを開き、右側の列から [セキュリティチェック] を選択します。
次のセキュリティチェックのみが有効になっていることを確認します(他のすべてのセキュリティチェックはチェックされません)。
- バッファオーバーフロー-ログ、統計
- 投稿本文制限-ブロック、ログ、統計
- HTML クロスサイトスクリプティング-ブロック、ログ、統計
- HTML SQLインジェクション-ブロック、ログ、統計
次に、右側の列から「プロファイル設定」を選択し、デフォルトの応答が次のように設定されていることを確認してください。
application/octet-stream <!--NeedCopy-->
次に、[すべてのポリシーヒットを記録] のチェックボックスをオンにします。
次に、[セキュリティ]>[Citrix Web Application Firewall]>[ポリシー]>[ファイアウォール]の順に選択し、[追加]を選択してWAFポリシーを構成します。ポリシーにわかりやすい名前を付けて、前の手順で作成したプロファイルを選択します。式には、次のように入力します。
HTTP.REQ.HEADER("GW_VPN-WAF_Callout").EXISTS <!--NeedCopy-->
注:
ここでヘッダーの名前は、以前に作成された HTTP コールアウトのヘッダーと一致する必要があります。
最後に、[トラフィック管理] > [負荷分散] > [仮想サーバー] の順に選択し、仮想サーバーを選択して [編集] を選択して、以前に作成したダミー負荷分散仮想サーバーに WAF ポリシーをバインドします。
右側の列で [Policies] を選択し、[+] プラスをクリックしてポリシーを追加します。ポリシーアプリファイアウォールを選択し、「要求」と入力します。以前に作成したポリシーを選択し、[バインド] と [Done] を選択します。
または、CLI を使用して WAF 設定を次のように作成できます。
add appfw profile demo_appfw_profile-startURLActionnone-denyURLActionnone-fieldFormatActionnone-bufferOverflowActionlog stats-responseContentType"application/octet-stream"-logEveryPolicyHitON-fileUploadTypesActionnone add appfw policy demo_appfw_policy"HTTP.REQ.HEADER("GW_VPN-WAF_Callout").EXISTS"demo_appfw_profilebindlb vserver dummy-vserver-here-policyNamegw_appfw_policy-priority100-gotoPriorityExpressionEND-typeREQUEST <!--NeedCopy-->
認証の詳細設定
認証に関連する2つの構成があります。nFactor内のクライアントからADCへのユーザー資格情報の暗号化と、IPレピュテーションベースの MFA です。
ユーザー資格情報の暗号化
次の設定では、ユーザーが ECDHE アルゴリズムを使用してフォームデータを送信するときに、ADC が資格情報セットを暗号化できるようにします。この設定を有効にするには、[Citrix Gateway]>[グローバル設定]>[認証設定]>[認証AAA]の設定を変更し、[ログイン暗号化]を[有効]に設定します。
または、これは CLI から次のように実行できます。
setaaa parameter-loginEncryptionENABLED <!--NeedCopy-->
IP レピュテーションベースの MFA
IP レピュテーションを高度な認証フローに組み込んで、送信元アドレスが IP レピュテーションデータベースでフラグ付けされた場合に、ユーザーに追加の要素を要求できます。手動で管理された住所のデータセットも作成されます。
重要:
次の設定例では、認証の別の要素を提供する手段として CAPTCHA を使用していますが、他の MFA ツールを使用できます。すべての nFactor 設定と同様に、ここに示すポリシー、スキーマ、およびポリシーラベルは簡単な例です。特定のログインユースケースに合わせて、追加の構成を追加できます。
TOTP PUSH をファクタとして設定し、追加の CAPTCHA 設定の詳細については、「リファレンス」セクションを参照してください。
データセットは、AppExpert > データセットに移動し、「追加」を選択することによって作成する必要があります。説明的な名前、「ipv4」のタイプでデータセットを作成し、「作成」をクリックします。
次に、[セキュリティ] > [AAA-アプリケーショントラフィック] > [ポリシー] > [認証] > [詳細ポリシー] > [ポリシー] の順に選択し、[追加] を選択して 2 つの高度な認証ポリシーを作成する必要があります。
説明的な名前、NO_AUTHNのアクションタイプ、式を「true」に設定して、最初のポリシーを作成します。
次のように、わかりやすい名前、アクションタイプNO_AUTHN、および式を使用して、2 番目のポリシーを作成します。
CLIENT.IP.SRC.IPREP_IS_MALICIOUS||CLIENT.IP.SRC.TYPECAST_TEXT_T.CONTAINS_ANY("suspicious_ips")<!--NeedCopy-->
注:
ここでは、以前に作成されたデータセットの名前が使用されます。
次に、[セキュリティ] > [AAA-アプリケーショントラフィック] > [ログインスキーマ] > [プロファイル] タブに移動して [追加] を選択すると、CAPTCHA ログインスキーマプロファイルが作成されます。プロファイルにわかりやすい名前を付けて、「鉛筆」編集アイコンを選択して認証スキーマを編集します。LoginSchema ディレクトリを参照し、SingleAuthCaptcha.xmlをハイライト表示し、[選択] を選択します。
次に、[セキュリティ] > [AAA-アプリケーショントラフィック] > [ポリシー] > [認証] > [高度なポリシー] > [ポリシーラベル] の順に選択し、[追加] を選択して Captcha スキーマの認証ポリシーラベルを作成します。PL にわかりやすい名前を付けて、以前に作成した captcha ログインスキーマを選択します。必要な LDAP アクションポリシーをバインドします。
注:
この例では、以前に作成された LDAP 認証アクションを再利用しています。
[Add] を選択して、別のポリシーラベルを作成します。この PL にわかりやすい名前を付けて、ログインスキーマを LSCHEMA_INT に設定します。次に、以前に作成した 2 つの NO_AUTHN 認証ポリシーをバインドします。
最後に,このIPレピュテーションチェックポリシーラベルは,すでに認証または网关仮想サーバーにバインドされている以前に作成した認証ポリシーの次の要素として設定する必要があります。認証ポリシーを強調表示し、[バインドの編集] を選択し、[次の要素を選択] フィールドとして新しいポリシーラベルを設定します。
結果
Citrix ADCには、同じアプライアンスで実行されているゲートウェイ仮想サーバーまたは認証仮想サーバーを保護するために適用できる多くのセキュリティ保護機能が組み込まれています。これらの保護は、一般的なユーザーがCitrix Gatewayにログインしようとするときに影響を与えません。
参照ドキュメント
追加情報と構成オプションについては、次の記事を参照してください。
CTX216091-nFactorで再キャプチャをサポートする
Citrix Web Application FirewallPOCガイド— Citrix Web Application Firewallの概念実証展開ガイド
プッシュトークンを使用したCitrix GatewayのnFactor-Citrix Gateway用のTOTPプッシュトークンの概念実証展開ガイド