すべてのプロダクト
Search
ドキュメントセンター

Web Application Firewall:WAFログに基づくアラート設定の例

最終更新日:May 27, 2024

このトピックでは、Web Application Firewall (WAF) のログクエリと分析結果に基づくアラート設定の例を示します。 カスタムダッシュボードにグラフを追加し、このトピックのパラメーターに基づいてアラートを設定できます。

重要

このトピックでは、Log Serviceの元のアラート機能のアラート設定パラメーターについて説明します。 新しいアラート機能を使用する場合は、このトピックで推奨されているクエリステートメントとパラメーター設定、および「Simple Log Serviceでアラートルールを構成する」で提供されている説明に基づいてアラートを構成できます。

4xx ステータスコードの異常率

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: 4xxステータスコードの割合。 ブロックされたリクエストはカウントされません。

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    ではなくreal_client_ip: ブロックされたIPアドレス |
    選択
      user_id,
      ホストAS "ドメイン名" 、
      Rate_2XX AS「2xxステータスコードの割合」、
      Rate_3XX AS「3xxステータスコードの割合」、
      Rate_4XX AS「4xxステータスコードの割合」、
      Rate_5XX AS「5xxステータスコードの割合」、
      countallとして「aveQPS」、
      status_2XX,
      status_3XX,
      status_4XX,
      status_5XX,
      countall
    から (
        SELECT
          user_id,
          ホスト、
          ラウンド (
            ラウンド (status_2XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_2XXとして、
          ラウンド (
            ラウンド (status_3XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_3XXとして、
          ラウンド (
            ラウンド (status_4XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_4XXとして、
          ラウンド (
            ラウンド (status_5XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_5XXとして、
          status_2XX,
          status_3XX,
          status_4XX,
          status_5XX,
          countall
        FROM(
            SELECT
              user_id,
              ホスト、
              count_if (
                status >= 200
                and status < 300
              ) AS status_2XX,
              count_if (
                status >= 300
                and status < 400
              ) AS status_3XX,
              count_if (
                status >= 400
                and status < 500
                およびステータス <> 444
                およびステータス <> 405
              ) AS status_4XX,
              count_if (
                status >= 500
                and status < 600
              ) AS status_5XX,
              カウント (*) AS countall
            ログから
            GROUP BY
              ホスト、
              user_id
          )
      )
    どこ
      countall > 120
    注文によって
      Rate_4XX DESC
    リミット
      5 

    グラフには、aveQPS2xxステータスコードの割合3xxステータスコードの割合4xxステータスコードの割合5xxステータスコードの割合のフィールドが含まれます。 aveQPSは、ドメイン名の1秒あたりのクエリ (QPS) を示します。 外部の理由ではなく、システムワークロードによって引き起こされたステータスコードの変更を表示するために、WAFによってブロックされたHTTPフラッド攻撃またはweb攻撃によってトリガーされた444および405ステータスコードは、ステータスコードの割合にはカウントされません。 これらのフィールドの1つ以上を選択して、アラートを設定できます。 たとえば、aveQPS>10 && Percentage of 2xx status code <60を指定できます。 指定されたドメイン名のQPSが10を超え、指定された期間中にすべてのリクエストのステータスコードが2xxのリクエストの割合が60% 未満の場合、アラートがトリガーされます。

  • 時間範囲: 5分 (相対)

  • 頻度:5 分

  • トリガー条件: $0.countall>3000&& $0. 4xxステータスコード> 80の割合

  • 通知トリガーしきい値: 2

  • 通知間隔:10 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].Domain name}
    -サービス: WAF
    -過去5分間のリクエスト :${ 結果 [0].RawResults[0].countall}
    -2xxステータスコードの割合: ${結果 [0].RawResults[0]. 2xxステータスコードの割合} %
    -3xxステータスコードの割合: ${結果 [0].RawResults[0]. 3xxステータスコードの割合} %
    -4xxステータスコードの割合: ${結果 [0].RawResults[0]. 4xxステータスコードの割合} %
    -5xxステータスコードの割合: ${結果 [0].RawResults[0]. 5xxステータスコードの割合} % 

5xxステータスコードの異常率

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: 5xxステータスコードの割合

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    ではなくreal_client_ip: ブロックされたIPアドレス |
    選択
      user_id,
      ホストAS "ドメイン名" 、
      Rate_2XX AS「2xxステータスコードの割合」、
      Rate_3XX AS「3xxステータスコードの割合」、
      Rate_4XX AS「4xxステータスコードの割合」、
      Rate_5XX AS「5xxステータスコードの割合」、
      countall AS「指定された相対時間範囲内のリクエスト」、
      status_2XX,
      status_3XX,
      status_4XX,
      status_5XX,
      countall
    から (
        SELECT
          user_id,
          ホスト、
          ラウンド (
            ラウンド (status_2XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_2XXとして、
          ラウンド (
            ラウンド (status_3XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_3XXとして、
          ラウンド (
            ラウンド (status_4XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_4XXとして、
          ラウンド (
            ラウンド (status_5XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_5XXとして、
          status_2XX,
          status_3XX,
          status_4XX,
          status_5XX,
          countall
        FROM(
            SELECT
              user_id,
              ホスト、
              count_if (
                status >= 200
                and status < 300
              ) AS status_2XX,
              count_if (
                status >= 300
                and status < 400
              ) AS status_3XX,
              count_if (
                status >= 400
                and status < 500
              ) AS status_4XX,
              count_if (
                status >= 500
                and status < 600
              ) AS status_5XX,
              カウント (*) AS countall
            ログから
            GROUP BY
              ホスト、
              user_id
          )
      )
    どこ
      countall > 120
    注文によって
      Rate_5XX DESC
    リミット
      5 
  • 時間範囲: 5分 (相対)

  • 頻度:5 分

  • トリガー条件: $0.countall>3000&& $0. 5xxステータスコードの割合> 80

  • 通知トリガーしきい値: 2

  • 通知間隔:10 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].Domain name}
    -サービス: WAF
    -過去5分間のリクエスト :${ 結果 [0].RawResults[0].countall}
    -2xxステータスコードの割合: ${結果 [0].RawResults[0]. 2xxステータスコードの割合} %
    -3xxステータスコードの割合: ${結果 [0].RawResults[0]. 3xxステータスコードの割合} %
    -4xxステータスコードの割合: ${結果 [0].RawResults[0]. 4xxステータスコードの割合} %
    -5xxステータスコードの割合: ${結果 [0].RawResults[0]. 5xxステータスコードの割合} % 

異常なQPS

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: QPSが最も高いトップ5ドメイン名

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    ではなくreal_client_ip: ブロックされたIPアドレス |
    選択
      user_id,
      ホスト、
      Rate_2XX、
      Rate_3XX,
      Rate_4XX、
      Rate_5XX、
      countall / 60として "aveQPS" 、
      status_2XX,
      status_3XX,
      status_4XX,
      status_5XX,
      countall
    から (
        SELECT
          user_id,
          ホスト、
          ラウンド (
            ラウンド (status_2XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_2XXとして、
          ラウンド (
            ラウンド (status_3XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_3XXとして、
          ラウンド (
            ラウンド (status_4XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_4XXとして、
          ラウンド (
            ラウンド (status_5XX * 1.0000 / countall, 4) * 100,
            2
          ) Rate_5XXとして、
          status_2XX,
          status_3XX,
          status_4XX,
          status_5XX,
          countall
        FROM(
            SELECT
              user_id,
              ホスト、
              count_if (
                status >= 200
                and status < 300
              ) status_2XXとして、
              count_if (
                status >= 300
                and status < 400
              ) status_3XXとして、
              count_if (
                status >= 400
                and status < 500
                およびステータス <> 444
                およびステータス <> 405
              ) status_4XXとして、
              count_if (
                status >= 500
                and status < 600
              ) status_5XXとして、
              カウント (*) as countall
            ログから
            GROUP BY
              ホスト、
              user_id
          )
      )
    どこ
      countall > 120
    注文によって
      aveQPS DESC
    リミット
      5 
  • 時間範囲: 1分 (相対)

  • 頻度:1 分

  • トリガー条件: $0.aveQPS>=50

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].host}
    -サービス: WAF
    -過去1分間の平均QPS: ${結果 [0].RawResults[0].aveQPS}
    -2xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_2XX}%
    -3xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_3XX}%
    -4xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_4XX}%
    -5xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_5XX}% 

QPSの急激な増加

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: QPSの急激な増加

  • クエリ文:

    user_id: Alibaba CloudアカウントのID |
    選択
      t1.user_id、
      t1.now1mQPS、
      t1.past1mQPS、
      in_ratio,
      t1.host,
      t2.Rate_2XX、
      Rate_3XX,
      Rate_4XX、
      Rate_5XX、
      aveQPS
    から (
        (
          SELECT
            user_id,
            ラウンド (c [1] / 60、0) AS now1mQPS、
            ラウンド (c [2] / 60、0) AS past1mQPS、
            ラウンド (
              ラウンド (c [1] / 60, 0) /ラウンド (c [2] / 60, 0) * 100 -100、
              0
            ) AS in_ratio,
            host
          から (
              SELECT
                cとして (t、60) を比較して下さい、
                ホスト、
                user_id
              から (
                  SELECT
                    カウント (*) AS t、
                    ホスト、
                    user_id
                  ログから
                  によるグループ化
                    ホスト、
                    user_id
                )
              によるグループ化
                ホスト、
                user_id
            )
          WHERE
            c [3] > 1.1
            と (
              c [1] > 180
              またはc [2] > 180
            )
        ) t1
        JOIN (
          SELECT
            user_id,
            ホスト、
            Rate_2XX、
            Rate_3XX,
            Rate_4XX、
            Rate_5XX、
            countall / 60として「aveQPS」、
            status_2XX,
            status_3XX,
            status_4XX,
            status_5XX,
            countall
          から (
              SELECT
                user_id,
                ホスト、
                ラウンド (
                  ラウンド (status_2XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_2XXとして、
                ラウンド (
                  ラウンド (status_3XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_3XXとして、
                ラウンド (
                  ラウンド (status_4XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_4XXとして、
                ラウンド (
                  ラウンド (status_5XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_5XXとして、
                status_2XX,
                status_3XX,
                status_4XX,
                status_5XX,
                countall
              から (
                  SELECT
                    user_id,
                    ホスト、
                    count_if (
                      status >= 200
                      and status < 300
                    ) AS status_2XX,
                    count_if (
                      status >= 300
                      and status < 400
                    ) AS status_3XX,
                    count_if (
                      status >= 400
                      and status < 500
                      およびステータス <> 444
                      およびステータス <> 405
                    ) AS status_4XX,
                    count_if (
                      status >= 500
                      and status < 600
                    ) AS status_5XX,
                    カウント (*) AS countall
                  ログから
                  GROUP BY
                    ホスト、
                    user_id
                )
            )
          WHERE
            countall > 1
        ) t2 on t1.host = t2.host
      )
    注文によって
      in_ratio DESC
    リミット
      5 
  • 時間範囲: 1分 (相対)

  • 頻度:1 分

  • トリガー条件: $0.now1mqps>50&& $0.in_ ratio>300

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].host}
    -サービス: WAF
    -過去1分間の平均QPS: ${結果 [0].RawResults[0].now1mqps}
    -QPSの急激な増加率: ${結果 [0].RawResults[0].in_ratio}%
    -2xxステータスコードの割合: ${結果 [0].RawResults[0].rate_2xx}%
    -3xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_3XX}%
    -4xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_4XX}%
    -5xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_5XX}% 

QPSの急激な減少

  • チャート名: QPSの急激な減少

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    選択
      t1.user_id、
      t1.now1mQPS、
      t1.past1mQPS、
      de_ratio,
      t1.host,
      t2.Rate_2XX、
      Rate_3XX,
      Rate_4XX、
      Rate_5XX、
      aveQPS
    から (
        (
          SELECT
            user_id,
            ラウンド (c [1] / 60、0) AS now1mQPS、
            ラウンド (c [2] / 60、0) AS past1mQPS、
            ラウンド (
              100ラウンド (c [1] / 60, 0) /ラウンド (c [2] / 60, 0) * 100、
              2
            ) AS de_ratio,
            host
          から (
              SELECT
                cとして (t、60) を比較して下さい、
                ホスト、
                user_id
              から (
                  SELECT
                    カウント (*) AS t、
                    ホスト、
                    user_id
                  ログから
                  GROUP BY
                    ホスト、
                    user_id
                )
              GROUP BY
                ホスト、
                user_id
            )
          WHERE
            c [3] < 0.9
            AND (
              c [1] > 180
              またはc [2] > 180
            )
        ) t1
        JOIN (
          SELECT
            user_id,
            ホスト、
            Rate_2XX、
            Rate_3XX,
            Rate_4XX、
            Rate_5XX、
            countall / 60として「aveQPS」、
            status_2XX,
            status_3XX,
            status_4XX,
            status_5XX,
            countall
          から (
              SELECT
                user_id,
                ホスト、
                ラウンド (
                  ラウンド (status_2XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_2XXとして、
                ラウンド (
                  ラウンド (status_3XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_3XXとして、
                ラウンド (
                  ラウンド (status_4XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_4XXとして、
                ラウンド (
                  ラウンド (status_5XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_5XXとして、
                status_2XX,
                status_3XX,
                status_4XX,
                status_5XX,
                countall
              から (
                  SELECT
                    user_id,
                    ホスト、
                    count_if (
                      status >= 200
                      and status < 300
                    ) AS status_2XX,
                    count_if (
                      status >= 300
                      and status < 400
                    ) AS status_3XX,
                    count_if (
                      status >= 400
                      and status < 500
                      およびステータス <> 444
                      およびステータス <> 405
                    ) AS status_4XX,
                    count_if (
                      status >= 500
                      and status < 600
                    ) AS status_5XX,
                    カウント (*) AS countall
                  ログから
                  GROUP BY
                    ホスト、
                    user_id
                )
            )
          WHERE
            countall > 1
        ) t2 on t1.host = t2.host
      )
    注文によって
      de_ratio DESC
    リミット
      5 

    チャートには、now1mqpspast1mqpsde_ratio、およびhostのフィールドが含まれます。 now1mqpsは、現在の分の平均QPSを示す。 past1mqpsは直前の平均QPSを示します。 de_ratioはQPS減少率を示す。 これらのフィールドの1つ以上を選択して、アラートを設定できます。

  • 時間範囲: 1分 (相対)

  • 頻度:1 分

  • トリガー条件: $0.now1mqps>10&& $0.de_ ratio>50

  • 通知トリガーしきい値: 2

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].host}
    -サービス: WAF (インターナショナル)
    -過去1分間の平均QPS: ${結果 [0].RawResults[0].now1mqps}
    -QPSの急激な減少率: ${結果 [0].RawResults[0].de_ratio}%
    -2xxステータスコードの割合: ${結果 [0].RawResults[0].rate_2xx}%
    -3xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_3XX}%
    -4xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_4XX}%
    -5xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_5XX}% 

過去5分間にアクセス制御リスト (ACL) ポリシーによってブロックされたリクエスト

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: ACLポリシーによってブロックされたリクエスト

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    選択
      user_id,
      ホスト、
      count_if (
        final_plugin = 'waf'
        そしてfinal_action = 'block'
      ) 「保護ルールエンジンによってブロックされた要求」として、
      count_if (
        final_plugin = 'cc'
        そしてfinal_action = 'block'
      ) AS「HTTPフラッド保護ポリシーによってブロックされたリクエスト」、
      count_if (
        final_plugin = 'acl'
        そしてfinal_action = 'block'
      ) 「ACLポリシーによってブロックされたリクエスト」として、
      count_if (
        final_plugin = 'antiscan'
        そしてfinal_action = 'block'
      ) 「スキャン保護ポリシーによってブロックされた要求」として、
      count_if (
        (final_plugin = 'waf')
        そしてfinal_action = 'block')
        OR (final_plugin = 'cc')
        そしてfinal_action = 'block')
        OR (final_plugin = 'acl')
        そしてfinal_action = 'block')
        OR (final_plugin = 'antiscan')
        そしてfinal_action = 'block')
      ) totalblockとして
    グループ化
      ホスト、
      user_id
    持っている
      (
        「ACLポリシーによってブロックされたリクエスト」>= 0
        AND「保護ルールエンジンによってブロックされたリクエスト」>= 0
        および「HTTPフラッド保護ポリシーによってブロックされたリクエスト」>= 0
        AND「スキャン保護ポリシーによってブロックされたリクエスト」>= 0
        AND totalblock > 10
      )
    注文によって
      「ACLポリシーによってブロックされたリクエスト」DESC
    リミット
      5 
  • 時間範囲: 5分 (相対)

  • 頻度:5 分

  • トリガー条件: $0.totalblock>=500&&($0. ACLポリシーでブロックされたリクエスト>=500)

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].host}
    -サービス: WAF
    -過去5分間にブロックされたリクエスト: ${結果 [0].RawResults[0].totalblock}
    -ACLポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. ACLポリシーによってブロックされたリクエスト}
    -保護ルールエンジンによってブロックされたリクエスト: ${結果 [0].RawResults[0]. 保護ルールエンジンによってブロックされたリクエスト}
    -HTTPフラッド保護ポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. HTTPフラッド保護ポリシーによってブロックされたリクエスト}
    -スキャン保護ポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. スキャン保護ポリシーによってブロックされたリクエスト} 

保護ルールエンジンによって過去5分間にブロックされたリクエスト

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: 保護ルールエンジンによってブロックされたリクエスト

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    選択
      user_id,
      ホスト、
      count_if (
        final_plugin = 'waf'
        そしてfinal_action = 'block'
      ) 「保護ルールエンジンによってブロックされた要求」として、
      count_if (
        final_plugin = 'cc'
        そしてfinal_action = 'block'
      ) AS「HTTPフラッド保護ポリシーによってブロックされたリクエスト」、
      count_if (
        final_plugin = 'acl'
        そしてfinal_action = 'block'
      ) 「ACLポリシーによってブロックされたリクエスト」として、
      count_if (
        final_plugin = 'antiscan'
        そしてfinal_action = 'block'
      ) 「スキャン保護ポリシーによってブロックされた要求」として、
      count_if (
        (final_plugin = 'waf')
        そしてfinal_action = 'block')
        OR (final_plugin = 'cc')
        そしてfinal_action = 'block')
        OR (final_plugin = 'acl')
        そしてfinal_action = 'block')
        OR (final_plugin = 'antiscan')
        そしてfinal_action = 'block')
      ) totalblockとして
    グループ化
      ホスト、
      user_id
    持っている
      (
        「ACLポリシーによってブロックされたリクエスト」>= 0
        AND「保護ルールエンジンによってブロックされたリクエスト」>= 0
        および「HTTPフラッド保護ポリシーによってブロックされたリクエスト」>= 0
        AND「スキャン保護ポリシーによってブロックされたリクエスト」>= 0
        AND totalblock > 10
      )
    注文によって
      「保護ルールエンジンによってブロックされたリクエスト」DESC
    リミット
      5 
  • 時間範囲: 5分 (相対)

  • 頻度:5 分

  • トリガー条件: $0.totalblock>=500&&(保護ルールエンジンによってブロックされた $0.Requests>=500)

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].host}
    -サービス: WAF
    -過去5分間にブロックされたリクエスト: ${結果 [0].RawResults[0].totalblock}
    -ACLポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. ACLポリシーによってブロックされたリクエスト}
    -保護ルールエンジンによってブロックされたリクエスト: ${結果 [0].RawResults[0]. 保護ルールエンジンによってブロックされたリクエスト}
    -HTTPフラッド保護ポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. HTTPフラッド保護ポリシーによってブロックされたリクエスト}
    -スキャン保護ポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. スキャン保護ポリシーによってブロックされたリクエスト} 

過去5分間にHTTPフラッド保護ポリシーによってブロックされたリクエスト

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: HTTPフラッド保護ポリシーによってブロックされたリクエスト

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    選択
      user_id,
      ホスト、
      count_if (
        final_plugin = 'waf'
        そしてfinal_action = 'block'
      ) 「保護ルールエンジンによってブロックされた要求」として、
      count_if (
        final_plugin = 'cc'
        そしてfinal_action = 'block'
      ) AS「HTTPフラッド保護ポリシーによってブロックされたリクエスト」、
      count_if (
        final_plugin = 'acl'
        そしてfinal_action = 'block'
      ) 「ACLポリシーによってブロックされたリクエスト」として、
      count_if (
        final_plugin = 'antiscan'
        そしてfinal_action = 'block'
      ) 「スキャン保護ポリシーによってブロックされた要求」として、
      count_if (
        (final_plugin = 'waf')
        そしてfinal_action = 'block')
        OR (final_plugin = 'cc')
        そしてfinal_action = 'block')
        OR (final_plugin = 'acl')
        そしてfinal_action = 'block')
        OR (final_plugin = 'antiscan')
        そしてfinal_action = 'block')
      ) totalblockとして
    グループ化
      ホスト、
      user_id
    持っている
      (
        「ACLポリシーによってブロックされたリクエスト」>= 0
        AND「保護ルールエンジンによってブロックされたリクエスト」>= 0
        および「HTTPフラッド保護ポリシーによってブロックされたリクエスト」>= 0
        AND「スキャン保護ポリシーによってブロックされたリクエスト」>= 0
        AND totalblock > 10
      )
    注文によって
      「HTTPフラッド保護ポリシーによってブロックされたリクエスト」DESC
    リミット
      5 
  • 時間範囲: 5分 (相対)

  • 頻度:5 分

  • トリガー条件: $0.totalblock>=500&&($0. HTTPフラッド保護ポリシーによってブロックされたリクエスト>=500)

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].host}
    -サービス: WAF
    -過去5分間にブロックされたリクエスト: ${結果 [0].RawResults[0].totalblock}
    -ACLポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. ACLポリシーによってブロックされたリクエスト}
    -保護ルールエンジンによってブロックされたリクエスト: ${結果 [0].RawResults[0]. 保護ルールエンジンによってブロックされたリクエスト}
    -HTTPフラッド保護ポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. HTTPフラッド保護ポリシーによってブロックされたリクエスト}
    -スキャン保護ポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. スキャン保護ポリシーによってブロックされたリクエスト} 

過去5分間にスキャン保護ポリシーによってブロックされたリクエスト

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: スキャン保護ポリシーによってブロックされたリクエスト

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    選択
      user_id,
      ホスト、
      count_if (
        final_plugin = 'waf'
        そしてfinal_action = 'block'
      ) 「保護ルールエンジンによってブロックされた要求」として、
      count_if (
        final_plugin = 'cc'
        そしてfinal_action = 'block'
      ) AS「HTTPフラッド保護ポリシーによってブロックされたリクエスト」、
      count_if (
        final_plugin = 'acl'
        そしてfinal_action = 'block'
      ) 「ACLポリシーによってブロックされたリクエスト」として、
      count_if (
        final_plugin = 'antiscan'
        そしてfinal_action = 'block'
      ) 「スキャン保護ポリシーによってブロックされた要求」として、
      count_if (
        (final_plugin = 'waf')
        そしてfinal_action = 'block')
        OR (final_plugin = 'cc')
        そしてfinal_action = 'block')
        OR (final_plugin = 'acl')
        そしてfinal_action = 'block')
        OR (final_plugin = 'antiscan')
        そしてfinal_action = 'block')
      ) totalblockとして
    グループ化
      ホスト、
      user_id
    持っている
      (
        「ACLポリシーによってブロックされたリクエスト」>= 0
        AND「保護ルールエンジンによってブロックされたリクエスト」>= 0
        および「HTTPフラッド保護ポリシーによってブロックされたリクエスト」>= 0
        AND「スキャン保護ポリシーによってブロックされたリクエスト」>= 0
        AND totalblock > 10
      )
    注文によって
      「スキャン保護ポリシーによってブロックされたリクエスト」DESC
    リミット
      5 
  • 時間範囲: 5分 (相対)

  • 頻度:5 分

  • トリガー条件: $0.totalblock>=500&&($0.Requests blocked by scan protection policies>=500)

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].host}
    -サービス: WAF (インターナショナル)
    -過去5分間にブロックされたリクエスト: ${結果 [0].RawResults[0].totalblock}
    -ACLポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. ACLポリシーによってブロックされたリクエスト}
    -保護ルールエンジンによってブロックされたリクエスト: ${結果 [0].RawResults[0]. 保護ルールエンジンによってブロックされたリクエスト}
    -HTTPフラッド保護ポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. HTTPフラッド保護ポリシーによってブロックされたリクエスト}
    -スキャン保護ポリシーによってブロックされたリクエスト: ${結果 [0].RawResults[0]. スキャン保護ポリシーによってブロックされたリクエスト} 

単一のIPアドレスからの攻撃

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: 単一のIPアドレスからの攻撃

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    選択
      user_id,
      real_client_ip、
      concat (
        'ACLポリシーによってブロックされたリクエスト:' 、
        キャスト (aclblock AS varchar(10)) 、
        ' ',
        「保護ルールエンジンによってブロックされたリクエスト: 」、
        キャスト (wafblock AS varchar(10)) 、
        '
    ',
        'HTTPフラッド保護ポリシーによってブロックされたリクエスト:' 、
        キャスト (aclblock AS varchar (10))
      ) blockNumとして、
      totalblock、
      allRequest
    から (
        SELECT
          user_id,
          real_client_ip、
          count_if (
            final_plugin = 'acl'
            そしてfinal_action = 'block'
          ) aclblockとして、
          count_if (
            final_plugin = 'waf'
            そしてfinal_action = 'block'
          ) wafblockとして、
          count_if (
            final_plugin = 'cc'
            そしてfinal_action = 'block'
          ) ccblockとして、
          count_if (
            (
              final_plugin = 'acl'
              そしてfinal_action = 'block'
            )
            または (
              final_plugin = 'waf'
              そしてfinal_action = 'block'
            )
            または (
              final_plugin = 'cc'
              そしてfinal_action = 'block'
            )
          ) totalblockとして、
          allRequestとしてカウント (*)
        ログから
        GROUP BY
          user_id,
          real_client_ip
        持っている
          totalblock > 1
        ORDER BY
          totalblock DESC
        リミット
          5
      )

    グラフには、real_client_ipblockNumtotalblockallRequestのフィールドが含まれています。 blockNumには、ACLポリシーでブロックされたリクエスト保護ルールエンジンでブロックされたリクエストHTTPフラッド保護ポリシーでブロックされたリクエストが含まれます。 real_client_ipは、攻撃が開始されるIPアドレスを示します。 totalblockは、ブロックされたリクエストの総数を示します。 allRequestはリクエストの総数を示します。 これらのフィールドの1つ以上を選択して、アラートを設定できます。

  • 時間範囲: 5分 (相対)

  • 頻度:5 分

  • トリガー条件: $0.totalblock >=500

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -サービス: WAF
    -過去5分間に攻撃が頻繁に開始されるトップ3のIPアドレス:
    - ${結果 [0].RawResults[0].real_client_ip} (${結果 [0].RawResults[0].blockNum})
    - ${結果 [0].RawResults[1].real_client_ip} (${結果 [0].RawResults[1].blockNum})
    - ${結果 [0].RawResults[2].real_client_ip} (${結果 [0].RawResults[2].blockNum}) 

単一のIPアドレスから攻撃を受けている多数のドメイン名

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: 単一のIPアドレスによって攻撃された多数のドメイン名

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    upstream_statusではない: 504
    upstream_addrではない: '-'
    とrequest_time_msec < 5000
    およびupstream_status :200
    ua_browserではなく: bot |
    選択
      user_id,
      ホスト、
      upstream_time,
      request_time,
      requestnum
    から (
        SELECT
          user_id,
          ホスト、
          ラウンド (avg(upstream_response_time) 、2) * 1000 AS upstream_time、
          ラウンド (avg(request_time_msec), 2) AS request_time,
          requestnumとしてカウント (*)
        ログから
        GROUP BY
          ホスト、
          user_id
      )
    どこ
      requestnum > 30
    注文によって
      request_time DESC
    リミット
      5 

    グラフには、real_client_iptotalblock、およびdomainnumのフィールドが含まれています。 real_client_ipは攻撃IPアドレスを示します。 totalblockは、ブロックされたリクエストの総数を示します。 domainnumは、このIPアドレスによって攻撃されたドメイン名の数を示します。 これらのフィールドの1つ以上を選択して、アラートを設定できます。 たとえば、totalblock>500&& domainnum>5を指定できます。 IPアドレスから開始された攻撃の総数が500に達し、指定された時間範囲内に攻撃を受けているドメイン名の数が5を超えると、アラートがトリガーされます。

  • 時間範囲: 5分 (相対)

  • 頻度:1 分

  • トリガー条件: $0.domainnum>=10

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -サービス: WAF
    -攻撃IPアドレス: ${結果 [0].RawResults[0].real_client_ip}
    -攻撃されたドメイン名: ${結果 [0].RawResults[0].domainnum}
    -過去5分間の攻撃リクエスト: ${結果 [0].RawResults[0].totalblock}
    -できるだけ早い機会にアラートを処理します。

過去5分間の異常な平均レイテンシ

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: 異常な平均レイテンシ

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    upstream_statusではない: 504
    upstream_addrではない: '-'
    とrequest_time_msec < 5000
    およびupstream_status :200
    ua_browserではなく: bot |
    選択
      user_id,
      ホスト、
      upstream_time,
      request_time,
      requestnum
    から (
        SELECT
          user_id,
          ホスト、
          ラウンド (avg(upstream_response_time) 、2) * 1000 AS upstream_time、
          ラウンド (avg(request_time_msec), 2) AS request_time,
          requestnumとしてカウント (*)
        ログから
        GROUP BY
          ホスト、
          user_id
      )
    どこ
      requestnum > 30
    注文によって
      request_time DESC
    リミット
      5 
  • 時間範囲: 5分 (相対)

  • 頻度:5 分

  • トリガー条件: $0.request_time>1000&& $0.requestnum>30

  • 通知トリガーしきい値: 2

  • 通知間隔:10 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [Uid]:${ 結果 [0].RawResults[0].user_id}
    -ドメイン名: ${結果 [0].RawResults[0].host}
    -サービス: WAF (インターナショナル)
    -[トリガー条件]: ${Condition}
    -過去5分間で最も長いレイテンシを持つトップ3のドメイン名。 レイテンシの単位: ミリ秒。
    -Host1 :${ 結果 [0].RawResults[0].host} Delay_time :${ 結果 [0].RawResults[0].upstream_time}
    -Host2 :${ 結果 [0].RawResults[1].host} Delay_time :${ 結果 [0].RawResults[1].upstream_time}
    -Host3 :${ 結果 [0].RawResults[2].host} Delay_time :${ 結果 [0].RawResults[2].upstream_time} 

トラフィックの急激な減少

このタイプのアラートには、次のパラメーター設定を推奨します。

  • チャート名: トラフィックの急激な減少

  • クエリ文:

    user_id: Alibaba CloudアカウントのID
    選択
      t1.user_id、
      t1.now1mQPS、
      t1.past1mQPS、
      de_ratio,
      t2.Rate_2XX、
      Rate_3XX,
      Rate_4XX、
      Rate_5XX、
      aveQPS
    から (
        (
          SELECT
            user_id,
            ラウンド (c [1] / 60、0) AS now1mQPS、
            ラウンド (c [2] / 60、0) AS past1mQPS、
            ラウンド (
              100ラウンド (c [1] / 60, 0) /ラウンド (c [2] / 60, 0) * 100、
              2
            ) AS de_ratio
          から (
              SELECT
                cとして (t、60) を比較して下さい、
                user_id
              から (
                  SELECT
                    カウント (*) AS t、
                    user_id
                  ログから
                  GROUP BY
                    user_id
                )
              GROUP BY
                user_id
            )
          WHERE
            c [3] < 0.9
            AND (
              c [1] > 180
              またはc [2] > 180
            )
        ) t1
        JOIN (
          SELECT
            user_id,
            Rate_2XX、
            Rate_3XX,
            Rate_4XX、
            Rate_5XX、
            countall / 60として「aveQPS」、
            status_2XX,
            status_3XX,
            status_4XX,
            status_5XX,
            countall
          から (
              SELECT
                user_id,
                ラウンド (
                  ラウンド (status_2XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_2XXとして、
                ラウンド (
                  ラウンド (status_3XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_3XXとして、
                ラウンド (
                  ラウンド (status_4XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_4XXとして、
                ラウンド (
                  ラウンド (status_5XX * 1.0000 / countall, 4) * 100,
                  2
                ) Rate_5XXとして、
                status_2XX,
                status_3XX,
                status_4XX,
                status_5XX,
                countall
              から (
                  SELECT
                    user_id,
                    count_if (
                      status >= 200
                      ANDステータス <300
                    ) AS status_2XX,
                    count_if (
                      status >= 300
                      ANDステータス <400
                    ) AS status_3XX,
                    count_if (
                      status >= 400
                      ANDステータス <500
                      ANDステータス <> 444
                      ANDステータス <> 405
                    ) AS status_4XX,
                    count_if (
                      status >= 500
                      ANDステータス <600
                    ) AS status_5XX,
                    カウント (*) AS countall
                  ログから
                  GROUP BY
                    user_id
                )
            )
          WHERE
            countall > 0
        ) t2 N t1.us er_id = t2.user_id
      )
    注文によって
      de_ratio DESC
    リミット
      5 
  • 時間範囲: 1分 (相対)

  • 頻度:1 分

  • トリガー条件: $0.de_ ratio>50&& $0.now1mqps>20

  • 通知トリガーしきい値: 1

  • 通知間隔:5 分

  • コンテンツ:

    - [時間]: ${FireTime}
    - [UID]:${ 結果 [0].RawResults[0].user_id}
    -サービス: WAF
    -過去1分間の平均QPS: ${結果 [0].RawResults[0].now1mqps}
    -[トリガー条件 (トラフィックとQPSの急激な減少率)]:${ condition}
    -QPSの急激な減少率: ${結果 [0].RawResults[0].de_ratio}%
    -2xxステータスコードの割合: ${結果 [0].RawResults[0].rate_2xx}%
    -3xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_3XX}%
    -4xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_4XX}%
    -5xxステータスコードの割合: ${結果 [0].RawResults[0].Rate_5XX}%