简介
本文档介绍如何使用安全防火墙ASA和FTD配置Cisco Secure Client脚本。
先决条件
要求
Cisco 建议您了解以下主题:
- 通过安全防火墙的SSL思科安全客户端配置ASA和由思科安全防火墙管理中心(FMC)管理的安全防火墙威胁防御
- ASDM访问
- FTD SSH访问
- OnConnect和OnDisconnect脚本
使用的组件
- 安全防火墙ASA
- 安全防火墙威胁防御
- 思科安全防火墙管理中心
- 思科安全客户端5.0.03072
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
我们将介绍两个不同的配置示例:
- 使用由ASDM管理的安全防火墙ASA设置安全客户端脚本。
- 设置安全客户端脚本和由思科安全防火墙管理中心管理的安全防火墙威胁防御。
对于FMC管理的FTD,FMC仍不正式支持此功能,因此我们将对增强请求思科漏洞ID 实施解决方法。
配置
配置
通过ASDM管理的安全防火墙ASA设置安全客户端脚本的配置示例:
步骤1:在“首选项”(Preferences)中创建安全客户端配置文件并启用脚本(第2部分)。
AnyConnect XML配置文件编辑器
Xml配置文件中的其他选项:
- 选中Terminate Script On Next Event,使客户端能够在发生到另一个可编写脚本事件的转换时终止正在运行的脚本进程。例如,如果VPN会话结束,客户端终止正在运行的On Connect脚本,如果Cisco安全客户端启动新的VPN会话,则客户端终止正在运行的OnDisconnect脚本。在Microsoft Windows上,客户端还会终止On Connect或OnDisconnect脚本启动的任何脚本及其所有脚本子代。在macOS和Linux上,客户端仅终止On Connect或OnDisconnect脚本;它不会终止子脚本。
- 选中Enable Post SBL On Connect Script(默认情况下启用),以便在SBL建立VPN会话时,客户端启动On Connect脚本(如果存在)。
确保将AnyConnect配置文件分配到正确的组策略:
XML组策略分配
第二步:配置脚本。
由于思科不支持示例脚本或客户编写的脚本,我们提供了一些示例,您可以根据需要进行测试:
Windows脚本
1. 映射驱动器的脚本:
OnConnect.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample AnyConnect OnConnect script."
Dim strDriveLetter, strRemotePath
strDriveLetter = "REPLACE_WITH_DRIVE_LETTER:"
strRemotePath = "\\REPLACE_WITH_SERVER_NAME\REPLACE_WITH_SHARE"
Set objNetwork = CreateObject("WScript.Network")
' remove old mapping (if any)
objNetwork.RemoveNetworkDrive strDriveLetter
' add new mapping
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath
If Err.Number <> 0 Then
objShell.LogEvent 0, "Failed to map network drive." & vbCrLf & Err.Number & ": " & Err.Description
End If
WScript.Quit
OnDisconnect.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample AnyConnect OnDisconnect script."
Dim strDriveLetter
strDriveLetter = "REPLACE_WITH_DRIVE_LETTER:"
Set objNetwork = CreateObject("WScript.Network")
' remove old mapping (if any)
objNetwork.RemoveNetworkDrive strDriveLetter
WScript.Quit
2. 刷新Windows组策略的脚本:
OnConnect.vbs或OnDisconnect.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample AnyConnect OnConnect script."
' refreshes local and Active Directory-based Group Policy settings, including security settings
returnCode = objShell.Run("gpupdate.exe /force", 0, True)
If returnCode <> 0 Then
objShell.LogEvent 0, "Failed to update Group Policy settings." & vbCrLf & Err.Number & ": " & Err.Description
End If
objShell.LogEvent 0, "User's Group Policy settings have been updated."
WScript.Quit
3. 启动多个脚本:
Script1.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample script 1."
WScript.Quit
Script2.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample script 2."
WScript.Quit 5
Script3.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample script 3."
WScript.Quit
OnConnect.vbs或OnDisconnect.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample AnyConnect OnConnect script."
' launch each script after the previous has completed
returnCode = objShell.Run("wscript.exe Script1.vbs", 0, True)
objShell.LogEvent 0, "Script1.vbs returned = " & returnCode
returnCode = objShell.Run("wscript.exe Script2.vbs", 0, True)
objShell.LogEvent 0, "Script2.vbs returned = " & returnCode
returnCode = objShell.Run("wscript.exe Script3.vbs", 0, True)
objShell.LogEvent 0, "Script3.vbs returned = " & returnCode
WScript.Quit
注意:此示例的原样提供无暗示担保或支持。它旨在帮助您使用Cisco AnyConnect脚本功能。假定您仅将此样本作为参考进行引用。
Linux脚本
1. 启动多个脚本:
Script1.sh
#!/bin/sh
logger "Sample script 1."
Script2.sh
#!/bin/sh
logger "Sample script 2."
Script3.sh
#!/bin/sh
logger "Sample script 3."
OnConnect.sh或OnDisconnect.sh
#!/bin/sh
logger "Sample AnyConnect OnConnect script."
# launch each script after the previous has completed
./Script1.sh
logger "Script1.sh returned = $?"
./Script2.sh
logger "Script2.sh returned = $?"
./Script3.sh
logger "Script3.sh returned = $?"
注意:此示例的原样提供无暗示担保或支持。它旨在帮助您使用Cisco AnyConnect脚本功能。假定您仅将此样本作为参考进行引用。
MacOS脚本
1. 启动AppleScript:
Script1.scpt
#!/bin/sh
say "This is a Sample AppleScript"
OnConnect.sh
#!/bin/sh
logger "Sample AnyConnect OnConnect script."
# launch the AppleScript script
/usr/bin/osascript Script1.scpt
2. 启动多个脚本
Script1.sh
#!/bin/sh
logger "Sample script 1."
Script2.sh
#!/bin/sh
logger "Sample script 2."
Script3.sh
#!/bin/sh
logger "Sample script 3."
OnConnect.sh
#!/bin/sh
logger "Sample AnyConnect OnConnect script."
# launch each script after the previous has completed
./Script1.sh
logger "Script1.sh returned = $?"
./Script2.sh
logger "Script2.sh returned = $?"
./Script3.sh
logger "Script3.sh returned = $?"
注意:此示例的原样提供无暗示担保或支持。它旨在帮助您使用Cisco AnyConnect脚本功能。假定您仅将此样本作为参考进行引用。
第3步:通过ASDM导入脚本
AnyConnect脚本设置ASDM
使用FMC管理的FTD设置安全客户端脚本
目前,FMC不支持设置安全客户端脚本,但有增强请求Cisco Bug ID CSCvt58044提供支持。在此基础上,我们有允许配置和部署脚本的解决方法。
步骤1:使用VPN配置文件编辑器创建安全客户端配置文件并在首选项(第2部分)中启用脚本。
VPN配置文件编辑器图标
安全客户端5配置文件编辑器
第二步:创建脚本(以上脚本示例相同)
第3步:注意文件的大小(以字节为单位)
右键单击脚本属性,在“常规”选项卡中选中“大小”,然后将其写下来。
脚本属性
第4步:导入脚本:
选项1。TFTP/FTP传输:
通过SSH连接到FTD设备并进入系统支持diagnostic-cli
将脚本从TFTP/FTP服务器复制到闪存:
TFTP:
>system support diagnostic-cli
FTD#copy tftp:/<serverip>/<filename> flash:/<filename>
FTP:
>system support diagnostic-cli
FTD#copy ftp:<username>:<password>@<serverip>/<filename> flash:/<filename>
导入webvpn AnyConnect-customization:
文件名必须以scripts_OnConnect_为前缀
FTD#import webvpn AnyConnect-customization type binary platform win name scripts_OnConnect_login.vbs flash:/scripts_OnConnect_login.vbs
选项2.直接在CLI中复制脚本:
通过SSH连接到FTD设备并进入系统支持diagnostic-cli
输入此命令:
文件名必须以scripts_OnConnect_为前缀
FTD#import webvpn AnyConnect-customization type binary platform win name scripts_OnConnect_login.vbs stdin 943
注意:stdin是步骤2中脚本的大小(以字节为单位)。
输入import命令后,您需要将实际脚本粘贴到CLI上,即使不会显示输出,您只需输入几次,直到返回CLI。
注意:在CLI中粘贴脚本可能需要一些时间,具体取决于脚本的大小。
您可以通过运行以下命令验证脚本是否正确导入:
FTD#export webvpn AnyConnect-customization type binary platform win name <scriptname>.vbs flash:/<scriptname>.vbs
FTD#more flash:/<scriptname>.vbs
如果需要删除脚本,可以从CLI运行以下命令:
FTD#revert webvpn AnyConnect-customization type binary platform win name <scriptname>
第5步:将安全客户端VPN配置文件上传到FMC并将其应用到组策略:
转至Devices > Remote Access >选择Connection Profile并编辑> Advanced> Group Policies> edit the Group Policy> Secure Client> Profile>您可以选择配置文件(如果已经上传到FMC),也可以点击加号选项从此处上传配置文件。
FMC组策略配置
验证
通过VPN连接后,您可以根据操作系统检查以下路径,确认已成功部署脚本:
Microsoft Windows |
%ALLUSERSPROFILE%\Cisco\Cisco Secure Client\VPN\Script |
Linux (在Linux上,为“用户”、“组”和“其他”文件分配执行权限。) |
/opt/cisco/secureclient/vpn/script |
macOS |
/opt/cisco/secureclient/vpn/script |
故障排除
1.确保脚本具有OnConnect
或OnDisconnect
前缀名称。如果使用ASDM版本6.3或更高版本,安全防火墙ASA会将前缀scripts_和前缀OnConnect或OnDisconnect添加到文件名中以将文件标识为脚本。当客户端连接时,安全设备会将脚本下载到远程计算机上的正确目标目录,删除scripts_前缀并保留OnConnect或OnDisconnect前缀。例如,如果导入脚本myscript.bat,该脚本将在安全设备上显示为scripts_OnConnect_myscript.bat。在远程计算机上,脚本显示为OnConnect_myscript.bat。
2. 请尝试从命令行运行脚本。如果无法从命令行运行脚本,则客户端无法运行该脚本。如果脚本无法在命令行上运行,请确保已安装运行该脚本的应用,然后尝试在该操作系统上重写该脚本。
3. 验证VPN终端上的脚本目录中仅有一个OnConnect脚本和一个OnDisconnect脚本。如果客户端从安全防火墙ASA下载OnConnect脚本,然后为另一安全防火墙ASA下载另一个文件名后缀不同的OnConnect脚本,则客户端无法运行要运行的脚本。如果脚本路径包含多个OnConnect或OnDisconnect脚本,并且您正在使用安全防火墙ASA部署脚本,则删除脚本目录的内容并重新建立VPN会话。如果脚本路径包含多个OnConnect或OnDisconnect脚本,并且您正在使用手动部署方法,则删除不需要的脚本并重新建立VPN会话。
4. 如果操作系统是Linux或MacOS,请确保脚本文件权限已设置为执行,如果权限未设置为执行,则可以运行此命令使其可执行:
$ cd YourScript目录
$ sudo chmod +755 <scriptname>
5. 确保客户端配置文件已启用脚本。
6. 根据脚本的编写方式,您需要有一个记录脚本进度的选项,例如使用.vbs时,您可以使用objShell.LogEvent,然后转到Windows的事件查看器并检查此操作是否成功或失败:
使用脚本示例脚本刷新Windows组策略
事件查看器日志