简介
本文档介绍适用于Cisco安全防火墙的First Responder计划的使用和实施。
先决条件
要求
本文档没有任何特定的要求。
使用的组件
本文档基于思科安全防火墙产品。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
First Responder计划由TAC创建,用于更轻松、更快速地为未决案例提供诊断数据。该计划由两个主要部分组成:
自动发送电子邮件
此电子邮件在案例开始时发送,说明如何收集和上传诊断数据以进行TAC分析。有多种技术可以利用此系统,并且每封电子邮件都映射到创建案例时选择的技术和子技术。
脚本/命令
First Responder计划的每个实施都有其自己的独特方式来处理数据的收集和交付。安全防火墙实施利用TAC编写的firepower.py Python脚本来完成此任务。自动电邮流程会生成一个单行命令,此特定情况独有,该命令可以复制并粘贴到Secure Firewall设备的CLI中运行。
此电子邮件的原因
已经为第一个响应方程序启用某些技术。这意味着,每次针对这些启用的技术之一提交案例时,系统都会发出第一响应方电子邮件。如果您收到第一响应方电子邮件,并且您认为数据请求不相关,请忽略该通信。
对于安全防火墙使用案例,第一个响应程序仅限于Firepower威胁防御(FTD)软件。如果运行自适应安全设备(ASA)代码库,请忽略此电子邮件。由于这两个产品在同一硬件上运行,我们通常会观察到,ASA案例是在Secure Firewall技术空间中创建的,因此会生成第一个响应方电子邮件。
自动发送电子邮件
下面是作为此程序的一部分发出的自动电子邮件的示例:
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
用于第一响应者程序的自动电子邮件被分为两部分,称为引入块和数据请求块。
简介块
introduction块是包含在每个第一响应者电子邮件中的静态字符串。此导言句仅用于提供数据请求块的上下文。以下是简介块的示例:
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:
数据请求块
数据请求块是第一个响应程序的核心。每个数据块都是为特定技术收集数据的一组预定义步骤。如背景信息部分中所述,每个数据请求块都映射到特定技术。选择此项技术来建立支持案例。 通常,自动电邮包含一个数据请求块。但是,如果所选技术映射了多个数据请求块,则多个数据请求将包括在电子邮件中。以下是包含多个数据请求的数据请求块的格式示例:
*** <REQUEST NAME 1> ***
<REQUEST 1 STEPS>
*** <REQUEST NAME 2> ***
<REQUEST 2 STEPS>
例如,对于Secure Firewall,当请求与Firepower威胁防御(FTD)相关的远程访问VPN (RA-VPN)问题提供帮助时,通常包含多个数据请求块,因为VPN技术还配置有映射数据请求块,用于帮助收集DART捆绑包。
生成的命令
具体来说,对于Secure Firewall使用案例,系统将为每个案例生成唯一的一行命令,作为自动电子邮件的一部分。下面是单行命令结构的明细:
- curl命令用于下载最新版本的firepower.py脚本。
- -k 标志是curl的一个选项,用于在连接期间忽略证书错误。
- -s 标志是在silent模式下运行curl的选项。这用于抑制正常卷曲输出,因为正常卷曲输出有噪声。
- -S 标志是curl的一个选项,用来显示错误。这用于强制curl即使在silent选项启用时仍显示输出错误。
- 托管最新版本firepower.py脚本的URL。此路径指示curl命令提取要运行的脚本的最新正文。
- 这是Linux管道,它将curl命令(python脚本的内容)的输出传递给下一步中的执行语句。
- 在此步骤中,使用额外的-调用设备上的python二进制。这指示python从stdin获取源(因为脚本的内容从curl管道传输)。
- -c 标志是firepower.py脚本的输入参数,指示必须将数据上传到的案例编号。此选项后面的666666666值是示例案例编号。
- -t 标志是firepower.py脚本的一个输入参数,表示为此特定案例生成的唯一令牌(密码)。此选项后面的aBcDeFgHiJkLmNoP值是此情况的示例令牌。
- 添加了-fr标志以指示必须更改文件的名称,然后才可以使用字符串SFFR-作为前缀,以指示文件是由第一个响应方脚本生成的。
- —auto-upload(自动上传)标志是firepower.py脚本的一个特殊参数,用于指示脚本在自动化模式下运行。有关此内容的详细信息,请参阅脚本特定部分。
- & 可指示整个命令在后台运行,允许用户在脚本执行时继续与其外壳交互。
注意:6.4之前的任何FMC版本和6.7之前的任何FTD版本都需要-k标志,因为CXD使用的根证书在FMC版本6.4和FTD版本6.7之前不受Firepower设备信任,这会导致证书验证失败。
Firepower.py脚本
该脚本的主要目标是从安全防火墙设备生成和上传诊断捆绑包,称为故障排除。要生成此故障排除文件,firepower.py脚本只需调用负责生成此捆绑包的内置sf_troubleshoot.pl脚本即可。此脚本与从GUI生成故障排除时调用的脚本相同。除故障排除文件外,该脚本还能够收集故障排除捆绑包中未包括的其他诊断数据。目前,可以收集到的唯一额外数据是Core Files,但以后需要时可以将其展开。脚本可以在自动或交互模式下运行:
自动化
此模式处于启用状态,并在您运行脚本时使用—auto-upload选项。此选项禁用交互式提示,启用核心文件收集,并自动将数据上传到案例。自动电子邮件生成的单行命令包括—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。这会更改作为自动电子邮件的一部分生成的单行命令。这会导致执行失败,因为用于提取脚本的URL已被重写,并且无效。下面是预期的一行命令的示例:
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故障
当设备无法解析URL以下载脚本时,经常出现此curl错误:
curl: (6) Could not resolve host: cxd.cisco.com
解决步骤
要解决此问题,请检查设备上的DNS设置,以确保它能够正确解析URL以继续。
无法打开/创建日志文件
脚本首先尝试做的事情之一是在当前工作目录中创建名为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)身份运行脚本即可。
打开/写入通知文件失败
作为脚本执行的一部分,将在系统上创建名为first_responder_notify的0字节文件。然后,此文件将作为此程序自动化的一部分上载到案例。此文件被写入“/var/common”目录。如果执行脚本的用户没有足够的权限将文件写入此目录,则脚本将显示以下错误:
Failed to create file -> `/var/common/first_responder_notify`. Permission denied. Are you running as root?
解决步骤
要修复此错误,只需以管理用户(例如admin或root)身份运行脚本即可。
注意:如果遇到与权限无关的错误,则会在屏幕上显示全部捕获错误 "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文件失败
为确保每次只运行一个故障排除生成过程,故障排除生成脚本会尝试在继续之前锁定/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.
解决步骤
在大多数情况下,此错误表示单独的故障排除生成任务已在处理中。有时,这是用户意外连续两次执行单行命令的结果。要解决此问题,请等待当前故障排除生成作业完成,稍后重试。
注意:如果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中可以找到完整的异常正文。
上传问题
脚本中有一个公用上传函数,负责在整个脚本执行过程中上传所有文件。此功能只是一个python包装,用于执行curl上传命令,将文件发送到案例。因此,在执行期间遇到的任何错误都会返回为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文档,了解任何未知的退出状态。
相关信息