XC Rate Limit
※本資料の画面表示や名称は資料作成時点の画面表示を利用しております。アップデート等より表示が若干異なる場合がございます。
RateLimit を利用するための各種設定について紹介します
マニュアルは以下のページを参照してください
1. Rate Limit について
RateLimit 対策機能により以下の操作をすることが可能です
あるユーザに対し一定の期間に指定したリクエスト数を超える通信をブロックします
ログイン、サインアップ画面などの重要なフローを保護し
XC WAAPはこれらの高度なセキュリティをアプリケーションの迅速な展開に合わせて自由にご利用いただける環境を実現します
2. RateLimit の設定
1. RateLimit の設定
作成済みのHTTP Load Balancerに RateLimit を設定します。 HTTP Load Balancer の設定手順は こちら を参照ください
画面左側 Manage欄の Load Balancers 、 HTTP Load Balancers を開き、対象のLoad Balancerを表示し画面右側に遷移します。
すでに作成済みのオブジェクトを変更する場合、対象のオブジェクト一番右側 ‥ から、 Manage Configuration をクリックします
設定の結果が一覧で表示されます。画面右上 Edit Configuration から設定の変更します。
Security Configuration 欄 右上の Show Advanced Fields をクリックします。
まず、 User Identifier が Rate Limiting Parameters となっていることを確認してください。
次に、 Rate Limiting で Rate limiting Parameters を選択し、 Configure をクリックしてください。
Rate Limit Configuration が表示されますので、画面の内容が正しいことを確認し Apply をクリックしてください。
正しく設定されたことを確認し、画面最下部の Apply をクリックしてください。
3. 動作確認
1. CurlコマンドによるRate Limitの確認
以下Curlコマンドを実行します。連続して2回のリクエストを送付するコマンドです
1$ curl -vks https://echoapp.f5demo.net ; curl -vks https://echoapp.f5demo.net ;
2
3# 1回目のアクセスは正常に接続した結果が表示されます
4
5** 省略 **
6
7> GET / HTTP/2
8> Host: echoapp.f5demo.net
9> User-Agent: curl/7.58.0
10
11** 省略 **
12
13< HTTP/2 200
14< content-type: application/json
15
16** 省略 **
17
18{"request":{"headers":[["host","app1.test10demo.xyz"],["user-agent","curl/7.58.0"],["accept","*/*"],["x-forwarded-for","18.178.83.1"],["x-forwarded-proto","https"],["x-envoy-external-address","18.178.83.1"],["x-request-id","c470fbb8-d762-496d-b8e1-a209a6410824"],["content-length","0"]],"status":0,"httpversion":"1.1","method":"GET","scheme":"http","uri":"/","requestText":"","fullPath":"/"},"network":{"clientPort":"57697","clientAddress":"103.135.56.116","serverAddress":"192.168.16.2","serverPort":"80"},"ssl":{"isHttps":false},"session":{"requestId":"0938eca4764809603c95fe4984c6fc4e","connection":"1445","connectionNumber":"1"},"environment":{"hostname":"echoapp"}}* Rebuilt URL to: https://echoapp.f5demo.net/
19
20# 2回目のアクセスは正常に接続した結果が表示されます
21
22** 省略 **
23
24> GET / HTTP/2
25> Host: echoapp.f5demo.net
26> User-Agent: curl/7.58.0
27
28** 省略 **
29
30< HTTP/2 429
31< content-type: text/html; charset=UTF-8
32
33** 省略 **
34
35<!-- Body -->
36<div class="error-body">
37 <h1>
38 Error 429 - Too Many Requests
39 </h1>
40
41** 省略 **
2. ブラウザによるRate Limitの確認
あるクライアントから短い時間で複数のアクセスがあった場合ブロックされることが確認できました。
ブラウザで https://echoapp.f5demo.net にアクセスし、ページを閲覧してください。
ページを複数回更新することで通信がブロックされることが確認できます。
エラーページが画面に表示されます。 またブラウザの開発者ツールを開き、リクエストの詳細を確認すると、Curlコマンドと同様に Status Code 429が応答されていることが確認できます
4. RateLimit の解除
その他の機能を確認するため設定を解除する手順です。
こちら の手順を参考に、HTTP Load Balancerに割り当てたRate Limitの設定を解除してください
5. Terraform を用いた HTTP Load Balancer + RateLimit の作成
ここで紹介したHTTP load Balancer + RateLimit を Terraform を使ってデプロイすることが可能です。
Terraform の利用で必要となる事前作業については こちら の手順を参考してください
パラメータの指定
実行に必要なファイル、また実行環境に合わせたパラメータを指定してください
1$ git clone https://github.com/BeF5/f5j-dc-waap-automation
2$ cd f5j-dc-waap-automation/terraform/rate-limit
3
4$ vi terraform.tfvars
5# ** 環境に合わせて適切な内容に変更してください **
6api_p12_file = "**/path/to/p12file**" // Path for p12 file downloaded from VoltConsole
7api_url = "https://**api url**" // API URL for your tenant
8
9# 本手順のサンプルで表示したパラメータの場合、以下のようになります
10myns = "**your namespace**" // Name of your namespace
11op_name = "demo-origin-pool" // Name of Origin Pool
12pool_port = "80" // Port Number
13server_name1 = "**your target fqdn1**" // Target Server FQDN1
14server_name2 = "**your target fqdn1**" // Target Server FQDN2
15httplb_name = "demo-echo-lb" // Name of HTTP LoadBalancer
16mydomain = ["echoapp.f5demo.net"] // Domain name to be exposed
17
18cert = "string///**base 64 encode SSL Certificate**" // SSL Certificate for HTTPS access
19private_key = "string///**base 64 encode SSL Private Key**" // SSL Private Key for HTTPS access
Terraform の利用
以下コマンドを参考に実行および削除をしてください。
1# 実行前事前作業
2$ terraform init
3$ terraform plan
4
5# 設定のデプロイ
6$ terraform apply
7
8# 設定の削除
9$ terraform destroy
6. API を用いた HTTP Load Balancer + RateLimit の作成
ここで紹介したHTTP load Balancer + RateLimit を API を使ってデプロイすることが可能です。
API の利用で必要となる事前作業については こちら の手順を参考してください
以下マニュアルを参考に、パラメータを指定して実行してください。
HTTP Load Balancer
Example of creating http_loadbalancer
ページ中段
Request using curlをご覧ください
送付するJSON データの書式は実際に作成したコンフィグのJSONデータからも確認をいただけます。合わせてご確認ください
パラメータの指定
GitHubよりファイルを取得します。 rate-limit-httplb.json をAPIの値として指定します。
**<変数名>** が環境に合わせて変更するパラメータとなります。適切な内容に変更してください。
Originl Pool Object は HTTP Load Balancer の Originl Pool 作成手順に従って作成ください
APIの利用
以下のサンプルを参考にAPIを実行してください。 証明書のファイル名、パスワード情報は適切な内容を指定してください。
ファイル取得
1$ git clone https://github.com/BeF5/f5j-dc-waap-automation
2$ cd f5j-dc-waap-automation/api/rate-limit
オブジェクトの作成
1# Originl Pool の作成 (HTTP LoadBalancer のパラメータを指定)
2$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools \
3 --cert **/path/to/api_credential.p12-file**:**password** \
4 --cert-type P12 \
5 -X POST \
6 -d @../http-load-balancer/base-origin-pool.json
7
8# HTTP LB の作成
9$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers \
10 --cert **/path/to/api_credential.p12-file**:**password** \
11 --cert-type P12 \
12 -X POST \
13 -d @rate-limit-httplb.json
オブジェクトの削除
1# HTTP LB の削除
2$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers/**httplb_name** \
3 --cert **/path/to/api_credential.p12-file**:**password** \
4 --cert-type P12 \
5 -X DELETE
6
7# Origin Pool の削除
8$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools/**op_name** \
9 --cert **/path/to/api_credential.p12-file**:**password** \
10 --cert-type P12 \
11 -X DELETE





