Citrix ADC ingress controller

Citrix ingress controller でWebアプリケーションファイアウォールポリシーを構成する

Citrix では、Kubernetes用のWAF CRDと呼ばれるカスタムリソース定義(CRD)を提供しています。WAF CRDを使用して、Citrix ADC VPX、MPX、SDX、およびCPX上のCitrixイングレスコントローラーでWebアプリケーションファイアウォールポリシーを構成できます。WAF CRDにより、Citrix ingress controller とCitrix ADC間の通信が可能になり、Webアプリケーションファイアウォールポリシーを適用できます。

Kubernetes デプロイメントでは、WAF CRD を使用してサーバーを保護するために Web アプリケーションファイアウォールポリシーを適用できます。Web アプリケーションファイアウォールの詳細については、「 Web アプリケーションセキュリティ」を参照してください。

WAF CRD を使用すると、Kubernetes ネイティブアプリケーションに対して次の種類のセキュリティチェックを実施するようにファイアウォールセキュリティポリシーを設定できます。

共通保護

  • バッファオーバーフロー
  • コンテンツタイプ
  • URL を許可
  • URL をブロックする
  • クッキーの整合性
  • クレジットカード

HTML 保護

  • CSRF (クロスサイドリクエストフォージェリ) フォームのタグ付け
  • フィールド形式
  • フォームフィールドの一貫性
  • ファイルアップロードの種類
  • HTML クロスサイトスクリプティング
  • HTML SQL インジェクション

JSON 保護

  • JSON によるサービス拒否
  • SQL インジェクション
  • JSON クロスサイトスクリプティング

XML 保護

  • XML Web サービスの相互運用性
  • XML 添付
  • XML クロスサイトスクリプティング
  • XML サービス拒否
  • XML フォーマット
  • XML メッセージ検証
  • XML SOAP フォールトフィルタリング
  • XML SQL インジェクション

セキュリティー検査のタイプに基づいて、メタデータを指定し、WAF CRD .yaml ファイルの CRD 属性を使用して WAF ポリシーを定義できます。

WAF CRD 定義

WAF CRD は、Citrix ingress controller GitHub リポジトリ( waf-crd.yaml)から入手できます。WAF CRDは、Citrix ADCでWebアプリケーションファイアウォールポリシーを定義するために必要なさまざまなオプションの属性を提供します。

WAF CRD 属性

次の表に、WAF CRD で提供されるさまざまな属性を示します。

CRD 属性 説明
commonchecks コンテンツタイプに関係なく適用される、一般的なセキュリティー検査の一覧を指定します。
block_urls URL を保護します。
buffer_overflow バッファオーバーフローを保護します。
content_type コンテンツタイプを保護します。
htmlchecks HTML コンテンツタイプに適用するセキュリティー検査の一覧を指定します。
cross_site_scripting クロスサイトスクリプティング攻撃を防ぎます。
sql_injection SQL インジェクション攻撃を防ぎます。
form_field_consistency フォームの改ざんを防ぎます。
csrf クロスサイドリクエストフォージェリ (CSRF) 攻撃を防ぎます。
cookie_consistency クッキーの改ざんやセッションテイクオーバーを防止します。
field_format フォームの送信を検証します。
fileupload_type 悪意のあるファイルのアップロードを防ぎます。
jsonchecks JSON コンテンツタイプのセキュリティチェックを指定します。
xmlchecks XML コンテンツタイプのセキュリティチェックを指定します。
wsi Web サービスの相互運用性を保護します。
redirect_url 保護でブロックが有効になっている場合、URL をリダイレクトします。
servicenames WAF ポリシーが適用されるサービスを指定します。
application_type アプリケーションタイプを保護します。
signatures 外部シグニチャファイルの場所を指定します。
html_error_object HTML または一般的な違反が試行されたときに対応する、カスタマイズされたエラーページの場所を指定します。
xml_error_object XML 違反が試行されたときに対応する、カスタマイズされたエラーページの場所を指定します。
json_error_object JSON 違反が試行されたときに対応する、カスタマイズされたエラーページの場所を指定します。
ip_reputation IP レピュテーション機能を有効にします。
target WAF によって検査されるトラフィックを決定します。対象トラフィックを指定しない場合、デフォルトですべてのトラフィックが検査されます。
paths 検査する HTTP URL のリストを指定します。
method 検査する HTTP メソッドのリストを指定します。
header 検査する HTTP ヘッダーのリストを指定します。

WAF CRD のデプロイ

WAF CRD をデプロイするには、次の手順を実行します。

  1. CRD (waf-crd.yaml) をダウンロードします。

  2. 次のコマンドを使用して WAF CRD をデプロイします。

    kubectl create -f waf-crd.yaml  
    

    たとえば、

    root@master:~# kubectl create -f waf-crd.yaml
    customresourcedefinition.apiextensions.k8s.io/wafpolicies.citrix.com created
    <!--NeedCopy-->
    

WAF 設定の書き方

Citrix が提供する WAF CRD を Kubernetes クラスターにデプロイしたら、.yaml ファイルで Web アプリケーションファイアウォールポリシー構成を定義できます。.yaml ファイルで、kind フィールドに waf を使用します。spec セクションで、ポリシー設定の要件に基づいて WAF CRD 属性を追加します。

.yaml ファイルを展開すると、Citrix イングレスコントローラーは Ingress Citrix ADC デバイスに WAF 構成を適用します。

Web アプリケーションファイアウォールポリシーを記述する例をいくつか示します。

クロスサイトスクリプティングや SQL インジェクション攻撃に対する保護を有効にする**

クロスサイトスクリプティング攻撃とSQLインジェクション攻撃に対する保護を有効にするために、Citrix ADCでWebアプリケーションファイアウォールポリシーを定義および指定するシナリオを考えてみましょう。wafhtmlxsssql.yamlという.yamlファイルを作成し、適切な CRD 属性を使用して WAF ポリシーを次のように定義できます。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafhtmlxsssql
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_page_url: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        html:
          cross_site_scripting: "on"
          sql_injection: "on"
<!--NeedCopy-->

ルールを適用して既知のコンテンツタイプのみを許可する

既知のコンテンツタイプのみを許可し、不明なコンテンツタイプをブロックするルールを指定する Web アプリケーションファイアウォールポリシーを定義するシナリオを考えてみましょう。waf-contenttype.yamlという名前の.yamlファイルを作成し、適切な CRD 属性を使用して WAF ポリシーを次のように定義します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafcontenttype
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        common:
          content_type: "on"
    relaxations:
        common:
          content_type:
            types:
                - custom_cnt_type
                - image/crd

<!--NeedCopy-->

既知の攻撃から保護

外部シグニチャを適用するための WAF CRD 設定の例を次に示します。最新の WAF 署名を Signature Location からローカル Web サーバにコピーし、コピーしたファイルの場所を signature_url として指定できます

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafhtmlsigxsssql
spec:
    servicenames:
        - frontend
    application_type: HTML
    signatures: "http://x.x.x.x/crd/sig.xml"
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        html:
          cross_site_scripting: "on"
          sql_injection: "on"

<!--NeedCopy-->

ヘッダーバッファオーバーフロー攻撃から保護し、複数のヘッダーをブロックする

バッファオーバーフローを保護するための WAF CRD 設定の例を次に示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafhdrbufferoverflow
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        common:
          buffer_overflow: "on"
          multiple_headers:
            action: ["block", "log"]
    settings:
        common:
          buffer_overflow:
            max_cookie_len: 409
            max_header_len: 4096
            max_url_len: 1024

<!--NeedCopy-->

Web サイト上のランダムな URL に繰り返しアクセスしようとするのを防ぐ

URL フィルタルールを提供するための WAF CRD 設定の例を次に示します。 allow_url の下に許可する URL を、block_url**の下に拒否する URLを追加できます。URL は正規表現でもかまいません。


apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafurlchecks
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    target:
        path:
            - /
    security_checks:
        common:
          allow_url: "on"
          block_url: "on"
    relaxations:
        common:
          allow_url:
            urls:
                - payment.php
                - cover.php
    enforcements:
        common:
          block_url:
            urls:
                - "^[^?]\*(passwd|passwords?)([.][^/?]\*)?([?].\*)?$"
                - "^[^?]\*(htaccess|access_log)([.][^/?]\*)?([~])?([?].\*)?$"
<!--NeedCopy-->

機密データの漏洩を防止

データ侵害には、クレジットカードや社会保障番号 (SSN) などの機密データの漏洩が伴います。[ 強制セーフオブジェクト ] セクションで、機密データ用のカスタム正規表現を追加できます。

機密データの漏洩を防ぐための WAF CRD 設定の例を次に示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafdataleak
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        common:
          credit_card: "on"
    settings:
        common:
          credit_card:
            card_type: ["visa","amex"]
            max_allowed: 1
            card_xout: "on"
            secure_logging: "on"
    enforcements:
        common:
          safe_object:
            - rule:
                name: aadhar
                expression: "[1-9]{4,4}\s[1-9]{4,4}\s[1-9]{4,4}"
                max_match_len: 19
                action: ["log","block"]
<!--NeedCopy-->

HTML フォームを CSRF 攻撃やフォーム攻撃から保護する

CSRF およびフォーム攻撃から HTML フォームを保護するための WAF CRD 設定の例を次に示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafforms
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        html:
          cross_site_scripting: "on"
          sql_injection: "on"
          form_field_consistency:
            action: ["log","block"]
          csrf: "on"

<!--NeedCopy-->

フォームとヘッダーを保護する

フォームとヘッダーの両方を保護するための WAF CRD 設定の例を次に示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafhdrforms
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_page_url: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        common:
          buffer_overflow: "on"
          multiple_headers:
            action: ["block", "log"]
        html:
          cross_site_scripting: "on"
          sql_injection: "on"
          form_field_consistency:
            action: ["log","block"]
          csrf: "on"
    settings:
        common:
          buffer_overflow:
            max_cookie_len: 409
            max_header_len: 4096
            max_url_len: 1024
    ip_reputation: on


<!--NeedCopy-->

基本的な WAF セキュリティーチェックを有効にする

基本的なセキュリティー検査は、パフォーマンスへの影響を最小限に抑えてアプリケーションを保護するために必要です。セッション化は不要です。基本的な WAF セキュリティーチェックを有効にするための WAF CRD 設定の例を次に示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafbasic
spec:
    servicenames:
        - frontend
    security_checks:
        common:
          allow_url: "on"
          block_url: "on
          buffer_overflow: "on"
          multiple_headers:
            action: ["block", "log"]
        html:
          cross_site_scripting: "on"
          field_format: "on"
          sql_injection: "on"
          fileupload_type: "on"
        json:
          dos: "on"
          sql_injection: "on"
          cross_site_scripting: "on"
        xml:
          dos: "on"
          wsi: "on"
          attachment: "on"
          format: "on"
    relaxations:
        common:
          allow_url:
            urls:
                - "^[^?]+[.](html?|shtml|js|gif|jpg|jpeg|png|swf|pif|pdf|css|csv)$"
                - "^[^?]+[.](cgi|aspx?|jsp|php|pl)([?].*)?$"

<!--NeedCopy-->

高度な WAF セキュリティーチェックを有効にする

Cookie の一貫性、URL クロージャの許可、フィールドの一貫性、CSRF などの高度なセキュリティチェックは、WAF セッション化を必要とするため、リソースを大量に消費します(CPU とメモリ)。たとえば、WAF によってフォームが保護されている場合、レスポンスのフォームフィールド情報はシステムメモリに保持されます。クライアントが次のリクエストでフォームを送信すると、情報が Web サーバーに送信される前に不整合がないかどうかがチェックされます。このプロセスをセッション化といいます。WAF の高度なセキュリティー検査を有効にするための WAF CRD 設定の例を次に示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafadvanced
spec:
    servicenames:
        - frontend
    security_checks:
        common:
          allow_url: "on"
          block_url: "on"
          buffer_overflow: "on"
          content_type: "on"
          cookie_consistency: "on"
          multiple_headers:
            action: ["log"]
        html:
          cross_site_scripting: "on"
          field_format: "on"
          sql_injection: "on"
          form_field_consistency: "on"
          csrf: "on"
          fileupload_type: "on"
        json:
          dos: "on"
          sql_injection: "on"
          cross_site_scripting: "on"
        xml:
          dos: "on"
          wsi: "on"
          validation: "on"
          attachment: "on"
          format: "on"
    settings:
        common:
          allow_url:
            closure: "on"
<!--NeedCopy-->

IP レピュテーションを有効にする

次に、IP レピュテーションを有効にして、レピュテーションの悪い IP アドレスからの要求を拒否する WAF CRD の設定例を示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafiprep
spec:
    application_type: html
    servicenames:
        - frontend
    ip_reputation: "on"

<!--NeedCopy-->

IP レピュテーションを有効にして特定のカテゴリのリクエストを拒否する

IP レピュテーションを有効にして特定の脅威カテゴリからの要求を拒否するための WAF CRD 設定の例を次に示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafiprepcategory
spec:
    application_type: html
    servicenames:
        - frontend
    ip_reputation:
        action: block
        threat-categories:
            - SPAM_SOURCES
            - WINDOWS_EXPLOITS
            - WEB_ATTACKS
            - BOTNETS
            - SCANNERS
            - DOS
            - REPUTATION
            - PHISHING
            - PROXY
            - NETWORK
            - CLOUD_PROVIDERS
            - MOBILE_THREATS

<!--NeedCopy-->

JSON アプリケーションをサービス拒否攻撃から保護する

以下は、JSON アプリケーションをサービス拒否攻撃から保護するための WAF CRD 設定の例です。

metadata:
    name: wafjsondos
spec:
    servicenames:
        - frontend
    application_type: JSON
    json_error_object: "http://x.x.x.x/crd/error_page.json"
    security_checks:
        json:
          dos: "on"
    settings:
        json:
          dos:
            container:
              max_depth: 2
            document:
              max_len: 20000000
            array:
              max_len: 5
            key:
              max_count: 10000
              max_len: 12
            string:
              max_len: 1000000


<!--NeedCopy-->

RESTful API を保護する

SQL インジェクション、クロスサイトスクリプティング、サービス拒否攻撃から RESTful API を保護するための WAF CRD 設定の例を次に示します。 ここでは、バックエンドのアプリケーションまたはサービスは純粋に RESTful API をベースにしています。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafjson
spec:
    servicenames:
        - frontend
    application_type: JSON
    json_error_object: "http://x.x.x.x/crd/error_page.json"
    security_checks:
        json:
          dos: "on"
          sql_injection:
            action: ["block"]
          cross_site_scripting: "on"
    settings:
        json:
          dos:
            container:
              max_depth: 5
            document:
              max_len: 20000000
            array:
              max_len: 10000
            key:
              max_count: 10000
              max_len: 128
            string:
              max_len: 1000000

<!--NeedCopy-->

XML アプリケーションをサービス拒否攻撃から保護する

XML アプリケーションをサービス拒否攻撃から保護するための WAF CRD 設定の例を次に示します。

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafxmldos
spec:
    servicenames:
        - frontend
    application_type: XML
    xml_error_object: "http://x.x.x.x/crd/error_page.xml"
    security_checks:
        xml:
          dos: "on"
    settings:
        xml:
          dos:
            attribute:
                max_attributes: 1024
                max_name_len: 128
                max_value_len: 128
            element:
                max_elements: 1024
                max_children: 128
                max_depth: 128
            file:
                max_size: 2123
                min_size: 9
            entity:
                max_expansions: 512
                max_expansions_depth: 9
            namespace:
                max_namespaces: 16
                max_uri_len: 256
            soaparray:
                max_size: 1111
            cdata:
                max_size: 65

<!--NeedCopy-->

XML アプリケーションをセキュリティ攻撃から保護する

この例では、XML アプリケーションを次のセキュリティ攻撃から保護するための WAF CRD 設定を示します。

  • SQLインジェクション
  • クロスサイトスクリプティング
  • 検証 (スキーマまたはメッセージ)
  • 形式
  • サービス拒否
  • Web サービス相互運用性 (WSI)
apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafxml
spec:
    servicenames:
        - frontend
    application_type: XML
    xml_error_object: "http://x.x.x.x/crd/error_page.json"
    security_checks:
        xml:
          dos: "on"
          sql_injection: "on"
          cross_site_scripting: "off"
          wsi:
            action: ["block"]
          validation: "on"
          attachment: "on"
          format:
            action: ["block"]
    settings:
        xml:
          dos:
            attribute:
                max_attributes: 1024
                max_name_len: 128
                max_value_len: 128
            element:
                max_elements: 1024
                max_children: 128
                max_depth: 128
            file:
                max_size: 2123
                min_size: 9
            entity:
                max_expansions: 512
                max_expansions_depth: 9
            namespace:
                max_namespaces: 16
                max_uri_len: 256
            soaparray:
                max_size: 1111
            cdata:
                max_size: 65
          wsi:
            checks: ["R1000","R1003"]
          validation:
            soap_envelope: "on"
            validate_response: "on"
          attachment:
            url:
                max_size: 1111
            content_type:
                value: "crd_test"

<!--NeedCopy-->
Citrix ingress controller でWebアプリケーションファイアウォールポリシーを構成する