Edge SWG(旧 ProxySG) 7.x での Policyを使用したデバッグ情報の収集
search cancel

Edge SWG(旧 ProxySG) 7.x での Policyを使用したデバッグ情報の収集

book

Article ID: 271681

calendar_today

Updated On:

Products

ISG Proxy ProxySG Software - SGOS

Issue/Introduction

Edge SWG(旧 ProxySG)では高度なトラブルシューティング用のログに以下の3つがあります。

  • PCAP
  • Policy Trace
  • HTTP/debug

Policy TraceはPolicyにより取得が可能です。しかし PCAPや HTTP/debugは手動で開始、停止をする必要がありタイミング問題、あるいはログ容量の問題でお客様によっては取得のハードルが高くなっていました。
7.2 以上から、これらはある程度自動化され、ストレスなく取得が可能となりました。

Environment

SGOS7.2以上

Resolution

手順概要:

  • CPLを使い 取得するログの詳細を定義する
  • 上記定義が動作する条件を作る
  • 必要に応じて PCAP 停止のPolicyを加える
  1. CPLを使い 取得するログの詳細を定義する
    この定義が 7.2から追加された部分となります
    https://techdocs.broadcom.com/us/en/symantec-security-software/web-and-network-security/edge-swg/7-3/overview4/_definitions/define-probe.html
    どのトランザクションをどのようにログに残すか を定義します
    define probe case_label
    define probeは複数作成できるため一意の名前を付けます
      condition=condition_label
      Policyで作成した condition にマッチした場合ここに飛ぶラベルとなります
      target=system_log:log_level[,system_log:log_level]
      HTTP Debugログの サブシステム範囲, およびログレベル 
      subシステムごとに ログレベルを決めます
      transaction_type= proxy|admin|health-check|all
      7.3.15.1から実装 一般的には proxy でよいが Health Checkなどだけが必要な場合 指定できる
      policy_trace={yes|no}
      Policy_traceを取るかどうか
      limit=transaction_limit
      (Option) 最大 transaction数、デフォルト30, max 50
      limit.reset=number_of_seconds
      limitに到達した後 この秒数でRESETされ また 現在limit0からカウントされる
      limit.session=session_limit
      (Option) 1session中の最大Transaction数 First INでカウントされる デフォルト10, max = limitと同じ
      alert=alert_channel:{first|last|both}
      (Option)ログが出来上がったとき、あるいは limitに達した時にどこに知らせるか
      alert_channel は  syslog が指定できる event-log は現在指定できません
      始まるに知らせるか、終わったら知らせるか、両方が指定できる
      delivery={hold|syslog}
      (Option) どこにログを送るか。 デフォルトでは -hold
      https://IP_address:port/Diagnostics/Traces/list-all or https://IP_address:port/Diagnostics/Traces. をユーザが参照する
      -syslog syslogに送る
      scope={session|transaction}
      (Option) デフォルト -transaction,  probeを呼び出す conditionにMATCHしたtransactionしかログを取らない
      -session probeを呼び出す conditionにMATCHしたtransactionを含むSession丸ごと記録する session_limitの制限を受ける
      expiry[.utc]=expiry_time
      いつまでこのProbe 設定が有効か


  2. 上記定義が動作する条件を作る
    この問題が始まるきっかけ(条件)を定義します。例えばクライアントIP, 対象 URLなど Request時に使われるものを使用します。
    また response.code = 503を条件とすることもできます。

  3. 必要に応じて PCAP 停止の設定を加える
    PCAPの停止は define probeとは別動作になります。別 CPLレイヤーを作成し2の条件 にmatchしたら STOPするルールを作成します。

設定例: いくつかのサイトで度々503が返る。すべてのクライアントから発生。
この例では対象 URLのリストを作りその中の1つに合致し、かつ 503が返された場合ログを残します。
合致するすべてのTransactionが対象です
Policy Trace, PCAPも合わせてとります

最大 50 トランザクションを取得し一度停止しますが1秒後にまた始めます
20230830:2350(UTC)まで取り続けます

(CPL Layerを追加し書き込みます)

define condition my_traffic
  condition=suspiciousURL http.response.code=503 
end   

define condition suspiciousURL
  url.domain=brdcm.com
  url.domain=aaaaa.com
  url.domain=bbbbb.com
end

define probe TestCase
  condition=my_traffic
  scope=transaction
  target=http:all,ssl:all
  policy_trace=yes
  limit=50
  limit.session=50
  limit.reset=1
  ;alert=syslog:both 
  delivery=hold
  expiry=20230830:2350
end

もう1つ CPL Layerを作ります
<diagnostic>
condition=my_traffic diagnostic.stop(pcap)

my_trafficに合致したら PCAPをStopします。

このエラー(事象)がでる前に PCAPの STARTをしておく必要があります。
PCAPは最大で止まってしまわないように 循環を指定します。
How to get a circular packet capture (pcap) on a ProxySG?

 https://IP_address:port/Diagnostics/Traces をタイプすると 生成されたログが見えます

また PCAPの statisticsである  Show statisticsをみると Current state: Stopped になっていることがわかります。

設定例2 クライアントへエラーが返るが Webサーバから返しているのか、SGが返しているのかわからない。特定のクライアントで発生する。

この例では対象クライアントIPを絞り、かつ SGがExceptionをクライアントへ返した場合ログを残します。
合致するすべてのTransactionが対象です
Policy Trace, PCAPも合わせてとります
define probe の内容は変更しません。

define condition mainCond
client.address=x.x.x.x condition=error50x
end

define condition error50x    ; SGから返されるエラーは exceptionとして定義されているため それを利用 以下のどれかに matchした場合 conditionが tureとなる
  exception.id=tcp_error 
  exception.id=ssl_failed
  exception.id=ssl_client_cert_expired
  exception.id=ssl_client_cert_ocsp_check_failed
  exception.id=ssl_client_cert_ocsp_status_unknown
  exception.id=ssl_client_cert_untrusted_issuer
  exception.id=ssl_client_cert_revoked
  exception.id=configuration_error
  exception.id=internal_error
  exception.id=authentication_failed
  exception.id=content_filter_denied
  exception.id=gateway_error
  exception.id=invalid_request
  exception.id=invalid_response
  exception.id=dns_unresolved_hostname
  http.response.code=503     ; これは Webサーバから返されるレスポンスコード 値のために入れています
end  


define probe TestCase
  condition=mainCond
  scope=session
  target=http:all,ssl:all
  policy_trace=yes
  limit=50
  limit.session=50
  limit.reset=1
  delivery=hold
  expiry=20230830:2350
end

もう1つ CPL Layerを作ります
<diagnostic>
  condition=mainCond diagnostic.stop(pcap)

mainCondに合致したら PCAPをStopします。

 https://IP_address:port/Diagnostics/Traces をタイプすると 生成されたログの一覧が見えます