フィルタリングノードのログの操作¶
本記事では、Wallarmフィルタリングノードのログファイルの場所を確認する方法を説明します。
ログファイルは/opt/wallarm/var/log/wallarm
ディレクトリにあります。以下に、存在するログファイルと各ファイルに含まれる情報の概要を示します。
-
api-firewall-out.log
: API specification enforcementのログです。 -
appstructure-out.log
(Dockerコンテナでのみ): API Discoveryモジュールの動作ログです。 -
wstore-out.log
(NGINX Node 5.x and earlierではtarantool-out.log
): postanalyticsモジュールの動作ログです。 -
wcli-out.log
: ブルートフォース検知、Cloudへの攻撃エクスポート、Cloudとのノード同期状況など、大半のWallarmサービスのログです。 -
supervisord-out.log
: サービスの起動、ステータス変更、警告など、Supervisorのプロセス管理に関するログです。 -
go-node.log
: Native Nodeのログです。
NGINX‑ベースのフィルタノードの拡張ロギングの設定¶
NGINXは処理済みリクエスト(アクセスログ)のログを、既定のcombined
ロギングフォーマットを使用して別のログファイルに書き込みます。
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $request_id $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" ';
必要に応じて他のNGINX変数と同様に、1つ以上のフィルタノード変数を含めたカスタムのロギングフォーマットを定義して使用できます。NGINXのログファイルからフィルタノードの診断をより迅速に実施できるようになります。
フィルタノード変数¶
NGINXのロギングフォーマットを定義する際に、以下のフィルタノード変数を使用できます。
名前 | 型 | 値 |
---|---|---|
request_id | String | リクエスト識別子 値の形式は次のとおりです: a79199bcea606040cc79f913325401fb |
wallarm_request_cpu_time | Float | フィルタリングノードが動作するマシンのCPUがリクエスト処理に費やした時間(秒)。 |
wallarm_request_mono_time | Float | CPUがリクエスト処理に費やした時間+キュー内での待機時間(秒)。例えば、リクエストがキューで3秒待機し、CPUで1秒処理された場合は、次のとおりです:
|
wallarm_serialized_size | Integer | シリアライズされたリクエストのサイズ(バイト)。 |
wallarm_is_input_valid | Integer | リクエストの正当性0 - リクエストは有効です。リクエストはフィルタノードで検査され、LOMルールに一致しています。1 - リクエストは無効です。リクエストはフィルタノードで検査され、LOMルールに一致していません。 |
wallarm_attack_type_list | String | リクエストで検出された攻撃タイプ。タイプはテキスト形式で示されます:
| で連結されます。例えばXSSとSQLiが検出された場合、変数の値はxss|sqli です。 |
wallarm_attack_type | Integer | リクエストで検出された攻撃タイプ。タイプはビット列形式で示されます:
6 です。 |
wallarm_attack_point_list (NGINXノード5.2.1以降) | String | 悪意のあるペイロードを含むリクエストのポイントを列挙します。1つのポイントが複数のパーサーで順次処理される場合、それらすべてが値に含まれます。複数のポイントに悪意のあるペイロードが含まれる場合は、| で連結されます。例: [post][json][json_obj, 'data'][base64] は、JSONのdata ボディパラメータに含まれるbase64エンコードされた悪意のあるペイロードを示します。このログデータは、Wallarm Console UIに表示される簡略化されたユーザーフレンドリーな表示と異なる場合があります。 |
wallarm_attack_stamp_list (NGINXノード5.2.1以降) | String | リクエストで検出された各攻撃シグンの内部Wallarm IDを列挙します。複数のシグンIDは| で連結されます。同一の攻撃シグンが複数の解析段階で検出された場合、IDが重複することがあります。例えば、union+select+1 のようなSQLi攻撃では、複数回の検出を示す7|7 が返ることがあります。このログデータは、Wallarm Console UIに表示される簡略化されたユーザーフレンドリーな表示と異なる場合があります。 |
wallarm_block_reason (NGINXノード6.4.0以降) | String | ブロック理由(該当する場合)。理由はテキスト形式で示されます:
|
設定例¶
wallarm_combined
という名前の拡張ロギングフォーマットを定義し、次の変数を含めるとします。
-
combined
フォーマットで使用されているすべての変数 -
すべてのフィルタノード変数
この場合、次の手順を実行します。
-
以下の行は目的のロギングフォーマットを示します。NGINX構成ファイルの
http
ブロックに追加します。log_format wallarm_combined '$remote_addr - $remote_user [$time_local] ' '"$request" $request_id $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '$wallarm_request_cpu_time $wallarm_request_mono_time $wallarm_serialized_size $wallarm_is_input_valid $wallarm_attack_type $wallarm_attack_type_list $wallarm_attack_point_list $wallarm_attack_stamp_list';
-
同じブロックに次のディレクティブを追加して、拡張ロギングフォーマットを有効にします。
access_log /var/log/nginx/access.log wallarm_combined;
処理済みリクエストのログは、
/var/log/nginx/access.log
ファイルにwallarm_combined
フォーマットで書き込まれます。条件付きロギング
上記のディレクティブでは、攻撃に関連しないものを含め、すべての処理済みリクエストがログファイルに記録されます。
条件付きロギングを設定して、攻撃の一部であるリクエスト(これらのリクエストでは
wallarm_attack_type
変数の値がゼロではありません)のみを記録することもできます。その場合は、前述のディレクティブに条件を追加します:access_log /var/log/nginx/access.log wallarm_combined if=$wallarm_attack_type;
ログファイルのサイズを抑えたい場合や、フィルタノードをSIEMソリューションのいずれかと連携する場合に役立ちます。
-
使用しているOSに応じて、次のいずれかのコマンドを実行してNGINXを再起動します。
詳細情報
NGINXでのロギング設定の詳細は、このリンクをご覧ください。