はじめに
このドキュメントでは、Cisco Secure FirewallのFirst Responder Program(FPM)の使用と実装について説明します。
前提条件
要件
このドキュメントに関する固有の要件はありません。
使用するコンポーネント
このドキュメントは、Cisco Secure Firewall製品に基づいています。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
背景説明
First Responderプログラムは、オープンなケースの診断データをより簡単かつ迅速に提供できるように、TACによって作成されました。プログラムを構成する2つの主要なコンポーネントがあります。
自動化されたメール
この電子メールは、TAC分析のために診断データを収集してアップロードする方法の指示とともに、ケースの開始時に送信されます。このシステムを利用するテクノロジーは複数あり、それぞれのメールは、ケースの作成時に選択されたテクノロジーとサブテクノロジーにマッピングされます。
スクリプト/コマンド
First Responderプログラムの各実装には、データの収集と配信を処理するための独自の方法があります。セキュアファイアウォールの実装では、TACが作成したfirepower.py Pythonスクリプトを使用してこれを実現します。自動電子メールプロセスでは、この特定のケースに固有の1行のコマンドが生成されます。このコマンドは、Secure FirewallデバイスのCLIにコピーアンドペーストして実行できます。
この電子メールの理由
最初のレスポンダプログラムに対して有効な特定のテクノロジーがあります。つまり、これらの有効なテクノロジーのいずれかに対してケースがオープンされるたびに、最初の応答者の電子メールが送信されます。最初の応答者の電子メールを受信し、データ要求が関連していると思わない場合は、通信を無視してください。
セキュアファイアウォールの使用例では、最初のレスポンダプログラムはFirepower Threat Defense(FTD)ソフトウェアに制限されます。適応型セキュリティアプライアンス(ASA)のコードベースを実行している場合は、この電子メールを無視してください。これら2つの製品は同じハードウェアで動作するため、一般的に、最初の応答側電子メールを生成するセキュアファイアウォールテクノロジーの分野でASAケースが作成されることが観察されます。
自動化されたメール
このプログラムの一部として送信される自動電子メールの例を次に示します。
From: first-responder@cisco.com <first-responder@cisco.com>
Sent: Thursday, September 1, 2022 12:11 PM
To: John Doe <john.doe@cisco.com>
Cc: attach@cisco.com
Subject: SR 666666666 - First Responder Automated E-mail
Dear John,
In an effort to resolve your case faster it may be necessary to collect some diagnostic data from your environment.
Based on the problem statement you provided, below are a few pieces of data that would help speed the resolution and the steps to collect them:
*** Troubleshoot File ***
* Connect to the device using SSH
* Issue the command expert, skip this step for FMC version 6.4.x and earlier
* Issue the command sudo su
* When prompted for the password, enter your password.
* For FMC 6.4 or FTD 6.7 and later issue the command
curl -s -S https://cxd.cisco.com/public/ctfr/firepower.py | python - -c 666666666 -t aBcDeFgHiJkLmNoP -fr --auto-upload &
* For FMC 6.3 or FTD 6.6 and earlier issue the command
curl -k -s -S https://cxd.cisco.com/public/ctfr/firepower.py | python - -c 666666666 -t aBcDeFgHiJkLmNoP -fr --auto-upload &
For more information on what this command does, or to understand why you are receiving this e-mail - please refer to
<LINK_TO_THIS_ARTICLE>
For 6.3 and earlier versions we recommend confirming cxd.cisco.com resolves to <CURRENT_CXD_IP1> or
<CURRENT_CXD_IP2>. Furthermore, we recommend validating the SHA checksum of the file by running
url -s -k https://cxd.cisco.com/public/ctfr/firepower.py | shasum which should output <CURRENT_SHA>.
If you are unable to upload troubleshooting files (or would prefer not to), please let us know what
hardware and software version ou are running if you have not already.
Sincerely, First Responder Team
最初の応答側プログラムの自動化された電子メールは、紹介ブロックとデータ要求ブロックという2つの部分に分割されます。
概要ブロック
紹介ブロックは、すべての最初の応答側電子メールに含まれる静的文字列です。この導入文は、データ要求ブロックにコンテキストを提供するだけです。次に紹介ブロックの例を示します。
Dear <NAME>,
In an effort to resolve your case faster it may be necessary to collect some diagnostic data from your environment.
Based on the problem statement you provided, below are a few pieces of data that would help speed the resolution
and the steps to collect them:
データ要求ブロック
データ要求ブロックは、最初のレスポンダプログラムの中心です。各ブロックは、特定のテクノロジーのデータを収集するための定義済みの一連の手順です。「背景説明」セクションで説明したように、各データ要求ブロックは特定のテクノロジーにマッピングされます。これは、サポートケースを開くために選択されたテクノロジーと同じです。 通常、自動電子メールには1つのデータ要求ブロックが含まれます。ただし、選択したテクノロジーに複数のデータ要求ブロックがマップされている場合は、複数のデータ要求が電子メールに含まれます。複数のデータ要求を含むデータ要求ブロックの形式の例を次に示します。
*** <REQUEST NAME 1> ***
<REQUEST 1 STEPS>
*** <REQUEST NAME 2> ***
<REQUEST 2 STEPS>
たとえば、セキュアファイアウォールの場合、Firepower Threat Defense(FTD)を使用したリモートアクセスVPN(RA-VPN)の問題に関する支援要求が発行されると、複数のデータ要求ブロックが含まれることがよくあります。これは、VPNテクノロジーがDARTバンドルを収集するための支援用に設定されたマッピングされたデータ要求ブロックを持っているためです。
生成されたコマンド
特にセキュアファイアウォールの使用例では、自動化された電子メールの一部として、ケースごとに一意の1行のコマンドが生成されます。次に、1行のコマンドの構造を説明します。
- curlコマンドは、firepower.pyスクリプトの最新バージョンをダウンロードするために使用されます。
- -k(隠し)フラグは、接続時に証明書エラーを無視するcurlのオプションです。
- -s フラグは、curlをサイレントモードで実行するためのオプションです。ノイズが多いため、通常のcurl出力を抑制するために使用します。
- -S(小文字)フラグは、curlのオプションで、エラーを表示します。これは、silentオプションを有効にしても、出力エラーを表示するようにcurlを強制するために使用されます。
- firepower.pyスクリプトの最新バージョンがホストされているURL。このパスは、curlコマンドに対して、実行するスクリプトの最新の本文を取得するように指示します。
- これはLinuxパイプで、curlコマンド(Pythonスクリプトの内容)の出力を次のステップの実行ステートメントに渡します。
- このステップでは、デバイス上のPythonバイナリが追加の – とともに呼び出されます。これは、ソースがstdinから取得されることをPythonに指示します(スクリプトの内容はcurlからパイプ処理されるため)。
- -c フラグは、firepower.pyスクリプトの入力引数で、データのアップロード先のケース番号を示します。このオプションの後の666666666値は、ケース番号の例です。
- -t(小文字)フラグはfirepower.pyスクリプトの入力引数で、この特定のケース用に生成された一意のトークン(パスワード)を示します。このオプションの後のaBcDeFgHiJkLmNoP値は、この場合のトークンの例です。
- -frフラグが追加されたことにより、ファイル名の先頭に文字列SFFRを付加する必要があることを示します。これは、ファイルが最初のレスポンダスクリプトによって生成されたことを示します。
- —auto-upload フラグは、firepower.pyスクリプトの特別な引数であり、スクリプトをオートメーションモードで実行することを示します。詳細については、スクリプト固有のセクションを参照してください。
- &(ハイフン)を使用すると、このコマンド全体をバックグラウンドで実行するように指示されます。これにより、ユーザはスクリプトの実行中もシェルとの対話を続行できます。
注:6.4より前のFMCバージョンと6.7より前のFTDバージョンでは、FMCバージョン6.4およびFTDバージョン6.7までCXDによって使用されるルート証明書はFirepowerデバイスによって信頼されていないため、-kフラグが必要です。この場合、証明書の検証に失敗します。
Firepower.pyスクリプト
このスクリプトの主な目的は、トラブルシューティングと呼ばれるセキュアファイアウォールデバイスから診断バンドルを生成してアップロードすることです。このトラブルシューティングファイルを生成するために、firepower.pyスクリプトは、このバンドルの構築を担当する組み込みsf_troubleshoot.plスクリプトを呼び出します。これは、GUIからトラブルシューティングを生成するときに呼び出されるスクリプトと同じです。トラブルシューティングファイルに加えて、このスクリプトでは、トラブルシューティングバンドルの一部に含まれていない他の診断データを収集することもできます。現在、収集できる追加データはコアファイルだけですが、必要に応じて将来的に拡張できます。スクリプトは、オートメーションモードまたはインタラクティブモードで実行できます。
自動化
このモードは有効で、スクリプトを実行するときに—auto-uploadオプションを使用します。このオプションを選択すると、インタラクティブなプロンプトが無効になり、コアファイルの収集が有効になり、ケースにデータが自動的にアップロードされます。自動化された電子メールによって生成される1行のコマンドには、—auto-uploadオプションが含まれます。
対話型
これは、スクリプトのデフォルトの実行モードです。このモードでは、コアファイルなどの追加の診断データを収集するかどうかを確認するプロンプトがユーザに表示されます。実行モードに関係なく、意味のある出力が画面に出力され、スクリプト実行の進行状況を示すログファイルに記録されます。スクリプト自体は、インラインコードコメントによって詳細に文書化されており、https://cxd.cisco.com/public/ctfr/firepower.pyでダウンロードして確認できます。
スクリプトの予想される出力
スクリプトが正常に実行された例を次に示します。
root@ftd:/home/admin# curl -k -s -S https://cxd.cisco.com/public/ctfr/firepower.py | python - -c 666666666 -t aBcDeFgHiJkLmNoP -fr --auto-upload &
[1] 26422
root@ftd:/home/admin#
`/var/common/first_responder_notify` successfully uploaded to 666666666
Running sf_troubleshoot.pl command to create a troubleshoot file...
Troubleshoot file successfully generated at /ngfw/var/common/results-08-30-2022--135014.tar.gz
Attempting to upload troubleshoot to case...
############################################################################################################################ 100.0%
`/ngfw/var/common/results-08-30-2022--135014.tar.gz` successfully uploaded to 666666666
Found the following core files:
(0 B) - /ngfw/var/common/core_FAKE1.gz
(0 B) - /ngfw/var/common/core_FAKE2.gz
(0 B) - /ngfw/var/common/core_FAKE3.gz
Successfully created /ngfw/var/common/cores_666666666-1661867858.tar.gz
Attempting core file upload...
############################################################################################################################# 100.0%
`/ngfw/var/common/cores_6666666660-1661867858.tar.gz` successfully uploaded to 666666666
FINISHED!
この出力例には、コアファイルのアップロードが含まれることに注意してください。デバイスにコアファイルがない場合は、代わりにメッセージ "No core files found. Skipping core file processing" が表示されます。
一般的な問題
次に、発生する可能性のあるいくつかの一般的な問題を(プロセス/実行順に)示します。
電子メールセキュリティ/URLの書き換え
多くの場合、エンドユーザがURLを書き換えるEメールセキュリティをある程度備えていることが確認されます。これにより、自動電子メールの一部として生成される1行のコマンドが変更されます。スクリプトをプルするURLが書き換えられ、無効なため、実行エラーが発生します。予想される1行のコマンドの例を次に示します。
curl -s -S https://cxd.cisco.com/public/ctfr/firepower.py | python - -c 666666666 -t aBcDeFgHiJkLmNoP -fr --auto-upload &
問題解決の手順
電子メールからのコマンドに含まれるURLがhttps://cxd.cisco.com/public/ctfr/firepower.py以外の場合、URLは送信中に書き換えられた可能性があります。この問題を解決するには、コマンドを実行する前にURLを置き換えます。
DNS障害
このcurlエラーは、スクリプトをダウンロードするためのURLをデバイスが解決できない場合によく発生します。
curl: (6) Could not resolve host: cxd.cisco.com
問題解決の手順
この問題を解決するには、デバイスのDNS設定をチェックし、URLを正しく解決して続行できることを確認してください。
ログファイルを開く/作成できない
スクリプトが最初に実行しようとする処理の1つは、現在の作業ディレクトリにfirst-responder.logという名前のログファイルを作成する(または、ログファイルがすでに存在する場合は開く)ことです。この操作が失敗すると、単純な権限の問題を示すエラーが表示されます。
Permission denied while trying to create log file. Are you running this as root?
この操作の一環として、他のすべてのエラーが特定され、次の形式で画面に出力されます。
Something unexpected happened while trying to create the log file. Here is the error:
----------
<EXCEPTION BODY>
----------
問題解決の手順
このエラーを修正するには、adminやrootなどの管理ユーザとしてスクリプトを実行します。
Notifyファイルを開く/書き込むことができない
スクリプト実行の一部として、first_responder_notifyという0バイトのファイルがシステム上に作成されます。このファイルは、このプログラムの自動化の一環としてケースにアップロードされます。このファイルは「/var/common」ディレクトリに書き込まれます。スクリプトを実行するユーザに、このディレクトリにファイルを書き込むための十分な権限がない場合、スクリプトは次のエラーを表示します。
Failed to create file -> `/var/common/first_responder_notify`. Permission denied. Are you running as root?
問題解決の手順
このエラーを修正するには、adminやrootなどの管理ユーザとしてスクリプトを実行します。
注:権限に関連しないエラーが発生した場合、画面にcatch-allエラーが表示されます "Unexpected error while trying to open file -> `/var/common/first_responder_notify`. Please check first-responder.log file for full error"。例外の本文全体は、first-responder.log に記録されています。
sf_troubleshoot.pidファイルをロックできない
トラブルシューティング生成プロセスが一度に1つだけ実行されるように、トラブルシューティング生成スクリプトは処理を続行する前に/var/sf/run/sf_troubleshoot.pidファイルをロックしようとします。スクリプトがファイルのロックに失敗すると、エラーが表示されます。
Failed to run the `sf_troubleshoot.pl` command - existing sf_troubleshoot process detected. Please wait for existing process to complete.
問題解決の手順
ほとんどの場合、このエラーは、別のトラブルシューティング生成タスクがすでに処理中であることを意味します。これは、誤って1行のコマンドを2回続けて実行した結果である場合があります。この問題を解決するには、現在のトラブルシューティング生成ジョブが完了するのを待ってから、後でもう一度やり直してください。
注: sf_troubleshoot.plスクリプト自体にエラーが発生した場合、このエラーが画面「Unexpected PROCESS error while trying to run `sf_troubleshoot.pl` command. Please check first-responder.log file for full error".例外の本文全体は、first-responder.log に記録されています。
アップロードの問題
スクリプトには、スクリプトの実行全体にわたるすべてのファイルのアップロードを担当する共通のアップロード機能があります。この関数は、curl uploadコマンドを実行してファイルをケースに送信するためのpythonラッパーです。このため、実行中に発生したエラーはcurlエラーコードとして返されます。アップロードに失敗すると、次のエラーが画面に表示されます。
[FAILURE] Failed to upload `/var/common/first_responder_notify` to 666666666. Please check the first-responder.log file for the full error
first-responder.log ファイルをチェックして、完全なエラーを確認します。通常、first-responder.logファイルは次のようになります。
08/29/2022 06:51:57 PM - WARNING - Upload Failed with the following error:
----------
Command '['curl', '-k', '--progress-bar', 'https://666666666:aBcDeFgHiJkLmNoP@cxd.cisco.com/home/',
'--upload-file', '/var/common/first_responder_notify']' returned non-zero exit status 6
----------
問題解決の手順
この場合、curlは終了ステータス6(Could not resolve host)を返しました。これは、ホスト名 cxd.cisco.com を解決しようとする際の単純なDNS障害です。不明な終了ステータスをデコードするには、curlのドキュメントを参照してください。
関連情報