NetScaler Ingress Controller を使用してボット管理ポリシーを構成する
ボットは、手動タスクを自動化するソフトウェアアプリケーションです。ボット管理ポリシーを使用すると、有用なボットがクラウドネイティブ環境にアクセスすることを許可し、悪意のあるボットをブロックできます。
カスタムリソース定義 (CRD) は、クラウドネイティブデプロイメントでポリシーを構成する主要な方法です。NetScaler が提供するボット CRD を使用すると、NetScaler VPX 上の NetScaler Ingress Controller でボット管理ポリシーを構成できます。ボット CRD は、ボット管理ポリシーを適用するために NetScaler Ingress Controller と NetScaler 間の通信を可能にします。
Kubernetes デプロイメントでは、ボット CRD を使用して、サーバーとの間のリクエストおよびレスポンスにボット管理ポリシーを適用できます。セキュリティの脆弱性の詳細については、ボット検出 を参照してください。
ボット CRD を使用すると、Kubernetes ネイティブアプリケーションの以下の種類のセキュリティ脆弱性に対して、ボット管理セキュリティポリシーを構成できます。
-
許可リスト
-
ブロックリスト
-
デバイスフィンガープリント (DFP)
-
ボット TPS
-
トラップ挿入
-
IP レピュテーション
-
レート制限
必要な保護の種類に基づいて、メタデータを指定し、ボット CRD
.yaml ファイル内の CRD 属性を使用してボットポリシーを定義できます。
ボット CRD の定義
ボット CRD は、NetScaler Ingress Controller の GitHub リポジトリの bot-crd.yaml で入手できます。ボット CRD は、NetScaler 上でボット管理ポリシーを定義するために必要なさまざまなオプションの属性を提供します。
Bot CRDの属性
以下の表に、Bot CRDで提供されるさまざまな属性を示します。
| CRD属性 | 説明 |
|---|---|
security_checks |
受信トラフィックに適用されるセキュリティチェックのリスト。 |
allow_list |
許可されたIP、サブネット、およびポリシー式のリスト。 |
block_list |
許可されていないIP、サブネット、およびポリシー式のリスト。 |
device_fingerprint |
JavaScriptを挿入し、クライアントのブラウザとデバイスのパラメータを収集します。 |
trap |
応答に隠しURLを挿入します。 |
tps |
設定されたトランザクションのパーセンテージ変更に基づいて、リクエストの異常な急増を引き起こすボットを防止します。 |
reputation |
設定されたレピュテーションカテゴリに基づいて、不正なIPへのアクセスを防止します。 |
ratelimit |
レート制限に基づいてボットを防止します。 |
redirect_url |
保護でブロックが有効になっている場合のURLをリダイレクトします。 |
ingressclass |
指定されたイングレスクラスに関連付けられたイングレスコントローラーのみがリソースを処理するように、イングレスクラスを指定します。そうでない場合、クラスター内のすべてのコントローラーがこのリソースを処理します。 |
servicenames |
ボットポリシーが適用されるサービスの名前。 |
signatures |
外部ボットシグネチャファイルの場所。 |
target |
ボットによって検査されるトラフィックを決定します。対象となるトラフィックを指定しない場合、すべてのトラフィックがデフォルトで検査されます。 |
paths |
検査対象のHTTP URLのリスト。 |
method |
検査対象のHTTPメソッドのリスト。 |
header |
検査対象のHTTPヘッダーのリスト。 |
Bot CRDを展開する
Bot CRDを展開するには、次の手順を実行します。
-
bot-crd.yamlをダウンロードします。
-
次のコマンドを使用してBot CRDを展開します。
kubectl create -f bot-crd.yaml
例:
root@master:~# kubectl create -f bot-crd.yaml
customresourcedefinition.apiextensions.k8s.io/bots.citrix.com created
Bot構成の記述方法
KubernetesクラスターにNetScaler®が提供するBot CRDを展開した後、YAMLファイルでボット管理ポリシー構成を定義できます。YAMLファイルでは、kindフィールドにbotを指定します。specセクションには、ポリシー構成の要件に基づいてBot CRD属性を追加します。
YAMLファイルを展開すると、NetScaler Ingress ControllerはIngress NetScalerデバイスにボット構成を適用します。
ボットポリシー設定の例を次に示します。
既知のIP、サブネット、またはADCポリシー式を使用して悪意のあるトラフィックをブロックする
NetScalerでWebボット管理ポリシーを定義および適用して、悪意のあるトラフィックをブロックするためにボットを有効にする場合は、
botblocklist.yamlというYAMLファイルを作成し、適切なCRD属性を使用してボットポリシーを次のように定義できます。
apiVersion: citrix.com/v1
kind: bot
metadata:
name: botblocklist
spec:
servicenames:
- frontend
security_checks:
block_list: "ON"
bindings:
block_list:
- subnet:
value:
- 172.16.1.0/12
- 172.16.2.0/12
- 172.16.3.0/12
- 172.16.4.0/12
action:
- "drop"
- ip:
value: 10.102.30.40
- expression:
value: http.req.url.contains("/robots.txt")
action:
- "reset"
- "log"
ボットセキュリティチェックなしで既知のトラフィックを許可する**
ステージングトラフィックや信頼できるトラフィックなど、特定のトラフィックのセキュリティチェックを回避したい場合は、そのようなトラフィックをセキュリティチェックから除外できます。
botallowlist.yamlというYAMLファイルを作成し、適切なCRD属性を使用してボットポリシーを次のように定義できます。
apiVersion: citrix.com/v1
kind: bot
metadata:
name: botallowlist
spec:
servicenames:
- frontend
security_checks:
allow_list: "ON"
bindings:
allow_list:
- subnet:
value:
- 172.16.1.0/12
- 172.16.2.0/12
- 172.16.3.0/12
- 172.16.4.0/12
action:
- "log"
- ip:
value: 10.102.30.40
- expression:
value: http.req.url.contains("index.html")
action:
- "log"
ボットシグネチャを有効にしてボットを検出する
NetScalerは、ユーザーエージェントに基づいてボットを検出するための何千もの組み込みシグネチャを提供します。Citrix脅威インテリジェンスチームは、2週間ごとに新しいボットシグネチャを更新およびリリースしています。最新のボットシグネチャファイルは、ボットシグネチャで入手できます。
botsignatures.yamlというYAMLファイルを作成し、適切なCRD属性を使用してボットポリシーを次のように定義できます。
apiVersion: citrix.com/v1
kind: bot
metadata:
name: botsignatures
spec:
servicenames:
- frontend
redirect_url: "/error_page.html"
signatures: "http://10.106.102.242/ganeshka/bot_sig.json"
ボットデバイスフィンガープリントを有効にしてアクションをカスタマイズする
デバイスフィンガープリントは、クライアントへのHTML応答にJavaScriptスニペットを挿入することを含みます。このJavaScriptスニペットは、クライアント上のブラウザによって呼び出されると、ブラウザとクライアントの属性を収集します。そして、その情報とともにNetScalerにPOSTリクエストを送信します。これらの属性は、接続がボットから要求されたものか、人間から要求されたものかを判断するために検査されます。
botdfp.yamlというYAMLファイルを作成し、適切なCRD属性を使用してボットポリシーを次のように定義できます。
apiVersion: citrix.com/v1
kind: bot
metadata:
name: botdfp
spec:
servicenames:
- frontend
redirect_url: "/error_page.html"
security_checks:
device_fingerprint:
action:
- "log"
- "drop"
ボットTPSを有効にしてアクションをカスタマイズする
ボットTPSが設定されている場合、設定された時間間隔で最大リクエスト数またはリクエストの増加が超過すると、受信トラフィックをボットとして検出します。bindingsセクションで、地理位置情報、ホスト、送信元IP、およびURLに従ってTPS制限を設定できます。
bottps.yamlというYAMLファイルを作成し、適切なCRD属性を使用してボットポリシーを次のように定義できます。
apiVersion: citrix.com/v1
kind: bot
metadata:
name: bottps
spec:
servicenames:
- frontend
redirect_url: "/error_page.html"
security_checks:
tps: "ON"
bindings:
tps:
geolocation:
threshold: 101
percentage: 100
host:
threshold: 10
percentage: 100
action:
- "log"
- "mitigation"
トラップ挿入保護を有効にしてアクションをカスタマイズする
クライアント応答にトラップURLをアドバタイズすることで、自動ボットを検出してブロックします。このURLは、人間であればクライアントには見えず、アクセスできません。この検出方法は、自動ボットからの攻撃をブロックするのに効果的です。URL応答へのトラップURLの挿入はランダムです。トラップバインディングを設定することで、特定のURL応答へのトラップURLの挿入を強制できます。
trapinsertion.yamlというYAMLファイルを作成し、適切なCRD属性を使用してボットポリシーを次のように定義できます。
apiVersion: citrix.com/v1
kind: bot
metadata:
name: trapinsertion
spec:
servicenames:
- frontend
redirect_url: "/error_page.html"
security_checks:
trap:
action:
- "log"
- "drop"
bindings:
trapinsertion:
urls:
- "/index.html"
- "/submit.php"
- "/login.html"
IPレピュテーションを有効にして特定のカテゴリのリクエストを拒否する
以下は、ユーザー環境に適したIPレピュテーションの特定の脅威カテゴリのみを有効にするBot CRD設定の例です。
botiprepcategory.yamlというYAMLファイルを作成し、適切なCRD属性を使用してボットポリシーを次のように定義できます。
apiVersion: citrix.com/v1
kind: bot
metadata:
name: botiprepcategory
spec:
servicenames:
- frontend
redirect_url: "/error_page.html"
security_checks:
reputation: "ON"
bindings:
reputation:
categories:
- SPAM_SOURCES:
action:
- "log"
- "redirect"
- MOBILE_THREATS
- SPAM_SOURCES
リクエストレートを制御するためにレート制限を有効にする
以下は、URL、Cookie、IP のパラメータを使用してリクエストレート制限を適用するための Bot CRD 設定の例です。
botratelimit.yaml という YAML ファイルを作成し、適切な CRD 属性を使用してボットポリシーを次のように定義できます。
apiVersion: citrix.com/v1
kind: bot
metadata:
name: botratelimit
spec:
servicenames:
- frontend
redirect_url: "/error_page.html"
security_checks:
ratelimit: "ON"
bindings:
ratelimit:
- url:
value: index.html
rate: 2000
timeslice: 1000
- cookie:
value: citrix_bot_id
rate: 2000
timeslice: 1000
- ip:
rate: 2000
timeslice: 1000
action:
- "log"
- "reset"