简介
本文档介绍如何使用安全防火墙ASA和FTD配置Cisco安全客户端脚本。
先决条件
要求
Cisco 建议您了解以下主题:
- 通过安全防火墙ASA和由思科安全防火墙管理中心(FMC)管理的安全防火墙威胁防御进行SSL思科安全客户端配置
- ASDM访问
- FTD SSH访问
- OnConnect和OnDisconnect脚本
使用的组件
- 安全防火墙ASA
- 安全防火墙威胁防御
- 思科安全防火墙管理中心
- 思科安全客户端5.0.03072
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
我们介绍两个不同的配置示例:
- 使用ASDM管理的安全防火墙ASA设置安全客户端脚本。
- 使用思科安全防火墙管理中心管理的安全防火墙威胁防御设置安全客户端脚本。
在FMC管理FTD的情况下,FMC仍不正式支持此功能,因此我们将实施增强请求Cisco Bug ID的解决方法
配置
配置
使用ASDM管理的安全防火墙ASA设置安全客户端脚本配置示例:
步骤1:在“首选项”(Preferences)中创建安全客户端配置文件并启用脚本(第2部分)。
AnyConnect XML配置文件编辑器
Xml配置文件中的其他选项:
- 检查 在下一个事件时终止脚本 使客户端能够在发生向另一个可编写脚本事件的转换时终止正在运行的脚本进程。例如,如果VPN会话结束,则客户端终止正在运行的On Connect脚本;如果出现以下情况,则客户端终止正在运行的OnDisconnect脚本 思科安全客户端 启动新的VPN会话。在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.启动多个脚本:
脚本1.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
脚本3.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步:导入脚本:
通过SSH连接到FTD设备并进入系统支持diagnostic-cli
输入此命令:
文件名必须以scripts_OnConnect_作为前缀
import webvpn anyConnect-customization type binary platform win name scripts_OnConnect_login.vbs stdin 943
注:stdin是步骤2中脚本的大小(以字节为单位)。
输入import命令后,您需要将实际脚本粘贴到CLI上,即使这不会显示输出,您只需输入一段时间,直到返回CLI。
可以通过运行以下命令验证脚本已正确导入:
more <scriptname>.vbs
第5步:将安全客户端VPN配置文件上传到FMC并将其应用于组策略:
转至Devices>远程访问>选择连接配置文件并编辑>高级>组策略>编辑组策略>安全客户端>配置文件>如果配置文件已上传到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会将前缀脚本_和前缀OnConnect或OnDisconnect添加到文件名中,以将文件标识为脚本。客户端连接时,安全设备会将脚本下载到远程计算机上的正确目标目录,删除scripts_前缀并保留OnConnect或OnDisconnect前缀。例如,如果导入脚本myscript.bat,则脚本在安全设备上显示为scripts_OnConnect_myscript.bat。在远程计算机上,脚本显示为OnConnect_myscript.bat。
2.尝试从命令行运行脚本。如果客户端无法从命令行运行脚本,则无法运行该脚本。如果脚本无法在命令行上运行,请确保已安装运行脚本的应用程序,然后尝试在该操作系统上重写脚本。
3.验证VPN终端上的scripts目录中只有一个OnConnect脚本和一个OnDisconnect脚本。如果客户端从安全防火墙ASA下载OnConnect脚本,然后为另一个安全防火墙ASA下载另一个具有不同文件名后缀的OnConnect脚本,则客户端无法运行要运行的脚本。如果脚本路径包含多个OnConnect或OnDisconnect脚本,并且您使用安全防火墙ASA部署脚本,则删除脚本目录的内容并重新建立VPN会话。如果脚本路径包含多个OnConnect或OnDisconnect脚本,并且您使用的是手动部署方法,则删除不需要的脚本并重新建立VPN会话。
4.如果操作系统是Linux或MacOS,请确保脚本文件权限已设置为执行,如果权限未设置为执行,您可以运行此命令使其可执行:
$ cd YourScriptDirectory
$ sudo chmod +755 <scriptname>
5.确保客户端配置文件已启用脚本。
6.根据编写脚本的方式,您需要有一个用于记录脚本进度的选项,例如使用.vbs时,您可以使用objShell.LogEvent,然后可以转到Windows的事件查看器并检查此操作是否成功或失败:
使用脚本示例Script to refresh a windows group policy作为示例
事件查看器日志