フィルトレーションモード¶
フィルトレーションモードは、受信リクエストを処理する際のフィルタリングノードの動作を定義します。本ドキュメントでは、利用可能なフィルトレーションモードおよびその設定方法について説明します。
利用可能なフィルトレーションモード¶
Wallarmフィルタリングノードは、受信リクエストを以下のモード(穏やかなものから厳格なものへ順に)で処理できます:
-
無効 (
off
) -
モニタリング (
monitoring
) -
セーフブロッキング (
safe_blocking
) -
ブロッキング (
block
)
Wallarm node behavior | off | monitoring | safe_blocking | block |
---|---|---|---|---|
Analyzes incoming requests for input validation, virtual patch, and regex-based malicious payloads | - | + | + | + |
Uploads malicious requests to the Wallarm Cloud so that they are displayed in the event list | - | + | + | + |
Blocks malicious requests | - | - | Only those originated from graylisted IPs | + |
Blocks requests originated from denylisted IPssee exception (IPs added manually and automatically by multi-attack protection and behavioral protection: API abuse prevention, manual BOLA, brute force and forced browsing) | - | + | + | + |
Blocks requests originated from graylisted IPs (IPs added manually and automatically by the same protection measures as for denylist) | - | - | Only those containing malicious payloads | - |
Allows requests originated from allowlisted IPs | - | + | + | + |
Exception for denylist
If wallarm_acl_access_phase off
, the Wallarm node does not block requests from denylisted IPs in the monitoring
mode.
設定方法¶
フィルトレーションモードは、以下の方法で設定できます。
フィルトレーションモード設定方法の優先順位は、wallarm_mode_allow_override
ディレクティブによって決定されます。デフォルトでは、Wallarm Consoleで指定された設定は、その値の厳格度に関係なく、wallarm_mode
ディレクティブによる設定よりも優先されます。
wallarm_mode
ディレクティブの設定¶
ノード側でwallarm_mode
ディレクティブを使用してフィルトレーションモードを設定できます。異なるデプロイメントにおけるwallarm_mode
ディレクティブの設定上の特徴を以下に説明します。
なお、本設定はin-lineデプロイメントにのみ適用されます。out-of-band (OOB)ソリューションではmonitoring
モードのみが有効です。
Linux上にall-in-one installerを使用してインストールされたNGINXベースのノードでは、フィルタリングノードの設定ファイルにwallarm_mode
ディレクティブを設定できます。異なるコンテキストに対してフィルトレーションモードを定義できます。これらのコンテキストは、以下のリストのように、最もグローバルなものから最もローカルなものへと順に並びます:
http
: HTTPサーバーに送信されるリクエストにディレクティブが適用されます。server
: 仮想サーバーに送信されるリクエストにディレクティブが適用されます。location
: 該当のパスを含むリクエストにのみディレクティブが適用されます。
もしhttp
、server
、location
ブロックで異なるwallarm_mode
ディレクティブの値が定義されている場合、最もローカルな設定が最も高い優先順位を持ちます。
以下の設定例を参照してください。
Dockerコンテナを使用してNGINXベースのWallarmノードをデプロイする場合、WALLARM_MODE
環境変数を渡してください:
Dockerコンテナを使用してEnvoyベースのWallarmノードをデプロイする場合、WALLARM_MODE
環境変数を渡してください:
docker run -d -e WALLARM_API_TOKEN='XXXXXXX' -e WALLARM_LABELS='group=<GROUP>' -e ENVOY_BACKEND='example.com' -e WALLARM_API_HOST='us1.api.wallarm.com' -e WALLARM_MODE='monitoring' -p 80:80 wallarm/envoy:4.8.0-1
または、設定ファイルに対応するパラメータを含めて、当該ファイルをマウントしてコンテナを実行してください。
NGINX Ingressコントローラーの場合、wallarm-mode
アノテーションを使用してください:
kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-mode=monitoring
フィルトレーションモードをmonitoring
に設定して、NGINXベースのIngressコントローラーでのトラフィック分析がどのように有効になるかの例を参照してください。
Wallarm Sidecarソリューションの場合、デフォルトのvalues.yaml
のWallarm固有部分でmode
パラメータを設定してください:
サイドカー用のフィルトレーションモードの指定方法については、こちらを参照してください。
Security Edge connectorsの場合、コネクターのデプロイ時にFiltration modeセレクターでwallarm_mode
の値を指定してください。
- Native Node all-in-one installerおよびDockerイメージの場合、
route_config.wallarm_mode
パラメータを使用してください。 - Native Node Helmチャートの場合、
config.connector.mode
パラメータを使用してください。
Wallarm Consoleにおける一般的なフィルトレーションルール¶
USまたはEU CloudのSettings→Generalで、すべての受信リクエストに対する一般的なフィルトレーションモードを定義できます。
一般的なフィルトレーションモードの設定は、RulesセクションにおけるSet filtration modedefaultルールとして表されます。なお、このセクションのエンドポイント対象のフィルトレーションルールは、より高い優先順位を持ちます。
Wallarm Consoleにおけるエンドポイント対象のフィルトレーションルール¶
特定のブランチ、エンドポイント、およびその他の条件に基づいてフィルトレーションモードを設定できます。Wallarmはこの目的のためにSet filtration modeルールを提供しています。これらのルールは、Wallarm Consoleで設定された一般的なフィルトレーションルールよりも高い優先順位を持ちます。
新たなフィルトレーションモードルールを作成するには:
-
Proceed to Wallarm Console:
- Rules → Add rule or your branch → Add rule.
- Attacks / Incidents → attack/incident → hit → Rule.
- API Discovery (if enabled) → your endpoint → Create rule.
-
Fine-tuning attack detection→Override filtration modeを選択します。
-
If request isにおいて、ルールを適用する対象範囲を記述します。特定のブランチ、ヒット、エンドポイントに対してルールを作成した場合、それらが対象範囲を定義します。必要に応じて、条件を追加できます。
-
目的のモードを選択します。
-
変更を保存し、ルールのコンパイル完了を待ちます。
フィルトレーションモードルールを作成するには、Wallarm APIを直接呼び出すこともできますのでご注意ください。
設定方法の優先順位¶
Edgeノードにおけるwallarm_mode_allow_override
ディレクティブのサポート
Wallarm Edgeのinlineおよびconnectorノードでは、wallarm_mode_allow_override
ディレクティブをカスタマイズできない点にご留意ください。
wallarm_mode_allow_override
ディレクティブは、フィルタリングノードの設定ファイルに記載されたwallarm_mode
ディレクティブの値ではなく、Wallarm Consoleで定義されたルールを適用する機能を管理します。
wallarm_mode_allow_override
ディレクティブには、以下の値が有効です:
-
off
: Wallarm Consoleで指定されたルールは無視され、設定ファイルに記載されたwallarm_mode
ディレクティブによるルールが適用されます。 -
strict
: 設定ファイルに記載されたwallarm_mode
ディレクティブの値よりも厳しいフィルトレーションモードを定義するWallarm Cloudで指定されたルールのみが適用されます。利用可能なフィルトレーションモードは、最も穏やかなものから最も厳格なものまで、上記に記載されています。
-
on
(デフォルト): Wallarm Consoleで指定されたルールが適用され、設定ファイルに記載されたwallarm_mode
ディレクティブの値は無視されます。
wallarm_mode_allow_override
ディレクティブの値を定義できるコンテキストは、最もグローバルなものから最もローカルなものまで、以下のリストに示されています:
-
http
:http
ブロック内のディレクティブは、HTTPサーバーに送信されるリクエストに適用されます。 -
server
:server
ブロック内のディレクティブは、仮想サーバーに送信されるリクエストに適用されます。 -
location
:location
ブロック内のディレクティブは、該当のパスを含むリクエストにのみ適用されます。
もしhttp
、server
、location
ブロックで異なるwallarm_mode_allow_override
ディレクティブの値が定義されている場合、最もローカルな設定が最も高い優先順位を持ちます。
wallarm_mode_allow_override
ディレクティブの使用例:
http {
wallarm_mode monitoring;
server {
server_name SERVER_A;
wallarm_mode_allow_override off;
}
server {
server_name SERVER_B;
wallarm_mode_allow_override on;
location /main/login {
wallarm_mode_allow_override strict;
}
}
}
この設定例では、Wallarm Consoleからのフィルトレーションモードルールの適用が以下のようになります:
-
仮想サーバー
SERVER_A
に送信されるリクエストについては、Wallarm Consoleで定義されたフィルトレーションモードルールは無視されます。SERVER_A
に対応するserver
ブロックにwallarm_mode
ディレクティブが指定されていないため、http
ブロックで指定されたmonitoring
フィルトレーションモードが適用されます。 -
仮想サーバー
SERVER_B
に送信されるリクエストについては、/main/login
パスを含むリクエストを除き、Wallarm Consoleで定義されたフィルトレーションモードルールが適用されます。 -
仮想サーバー
SERVER_B
に送信され、/main/login
パスを含むリクエストについては、設定ファイルで指定されたmonitoring
モードよりも厳しいフィルトレーションモードを定義する場合に限り、Wallarm Consoleで定義されたフィルトレーションモードルールが適用されます。
設定例¶
ここでは、これまでに述べたすべての方法を使用したフィルトレーションモード設定の例を考えます。
ノード設定ファイル¶
http {
wallarm_mode block;
server {
server_name SERVER_A;
wallarm_mode monitoring;
wallarm_mode_allow_override off;
location /main/login {
wallarm_mode block;
wallarm_mode_allow_override strict;
}
location /main/signup {
wallarm_mode_allow_override strict;
}
location /main/apply {
wallarm_mode block;
wallarm_mode_allow_override on;
}
location /main/feedback {
wallarm_mode safe_blocking;
wallarm_mode_allow_override off;
}
}
}
Wallarm Consoleのルール¶
-
-
リクエストが以下の条件を満たす場合:
- メソッド:
POST
- パスの第1部分:
main
- パスの第2部分:
apply
、
その場合、Defaultフィルトレーションモードを適用します。
- メソッド:
-
リクエストが以下の条件を満たす場合:
- パスの第1部分:
main
、
その場合、Blockingフィルトレーションモードを適用します。
- パスの第1部分:
-
リクエストが以下の条件を満たす場合:
- パスの第1部分:
main
- パスの第2部分:
login
、
その場合、Monitoringフィルトレーションモードを適用します。
- パスの第1部分:
-
リクエスト例¶
設定されたサーバーSERVER_A
に送信されたリクエストと、それに対してWallarmフィルタリングノードが適用する動作の例は以下の通りです:
-
SERVER_A
サーバーに対するwallarm_mode monitoring;
設定により、/news
パスの悪意のあるリクエストは処理されますがブロックされません。 -
SERVER_A
サーバーに対するwallarm_mode monitoring;
設定により、/main
パスの悪意のあるリクエストは処理されますがブロックされません。サーバーSERVER_A
のwallarm_mode_allow_override off;
設定のため、Wallarm Consoleで定義されたBlockingルールは適用されません。 -
/main/login
パスのリクエストに対するwallarm_mode block;
設定により、/main/login
パスの悪意のあるリクエストはブロックされます。フィルタリングノード設定ファイルのwallarm_mode_allow_override strict;
設定により、Wallarm Consoleで定義されたMonitoringルールは適用されません。 -
/main/signup
パスのリクエストは、wallarm_mode_allow_override strict;
設定および/main
パスに対してWallarm Consoleで定義されたBlockingルールによりブロックされます。 -
/main/apply
パスかつGET
メソッドの悪意のあるリクエストは、/main/apply
パスのリクエストに対するwallarm_mode_allow_override on;
設定および/main
パスに対してWallarm Consoleで定義されたBlockingルールによりブロックされます。 -
/main/apply
パスかつPOST
メソッドの悪意のあるリクエストは、/main/apply
パスのリクエストに対するwallarm_mode_allow_override on;
設定、Wallarm Consoleで定義されたDefaultルール、およびフィルタリングノード設定ファイル内の/main/apply
パスに対するwallarm_mode block;
設定によりブロックされます。 -
/main/feedback
パスの悪意のあるリクエストは、フィルタリングノード設定ファイルにおけるwallarm_mode safe_blocking;
設定により、graylisted IPからのものである場合にのみブロックされます。フィルタリングノード設定ファイルのwallarm_mode_allow_override off;
設定により、Wallarm Consoleで定義されたMonitoringルールは適用されません。
フィルトレーションモードの段階的適用に関するベストプラクティス¶
新規Wallarmノードの導入を成功させるため、フィルトレーションモードを切り替える以下のステップバイステップの推奨事項に従ってください:
-
ノンプロダクション環境にWallarmフィルタリングノードを
monitoring
オペレーションモードでデプロイします。 -
プロダクション環境にWallarmフィルタリングノードを
monitoring
オペレーションモードでデプロイします。 -
テスト環境やプロダクション環境を含めた全ての環境で、7~14日間フィルタリングノード経由のトラフィックを継続させ、Wallarm Cloudベースのバックエンドがアプリケーションを学習するための時間を確保します。
-
ノンプロダクション環境ですべて、Wallarmの
block
モードを有効にし、自動もしくは手動のテストを用いて保護対象アプリケーションが期待通りに動作していることを確認します。 -
プロダクション環境でもWallarmの
block
モードを有効にし、利用可能な方法を用いてアプリケーションが期待通りに動作していることを確認します。