簡介
本文檔介紹如何使用安全防火牆ASA和FTD配置思科安全客戶端指令碼。
必要條件
需求
思科建議您瞭解以下主題:
- 通過思科安全防火牆管理中心(FMC)管理的安全防火牆ASA和安全防火牆威脅防禦實現的SSL思科安全客戶端配置
- ASDM訪問
- FTD SSH存取
- OnConnect和OnDisconnect指令碼
採用元件
- 安全防火牆ASA
- 安全防火牆威脅防禦
- 思科安全防火牆管理中心
- 思科安全使用者端5.0.03072
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
我們將介紹兩個不同的配置示例:
- 使用由ASDM管理的Secure Firewall ASA設定安全客戶端指令碼。
- 使用思科安全防火牆管理中心管理的安全防火牆威脅防禦設定安全客戶端指令碼。
在FMC管理FTD的情況下,FMC仍不正式支援此功能,因此我們將實作增強功能要求Cisco錯誤ID的解決方法
設定
組態
使用由ASDM管理的Secure Firewall ASA設定安全客戶端指令碼配置示例:
步驟1.建立安全客戶端配置檔案並在首選項(第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組策略分配
步驟2.配置指令碼。
由於思科不支援示例指令碼或客戶編寫的腳本,我們可以提供一些示例,您可以根據您的需要進行測試:
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
指令碼2.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:
指令碼1.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錯誤ID CSCvt58044 支援它。基於此,我們擁有允許配置和部署指令碼的解決方法。
步驟1.使用VPN配置檔案編輯器建立安全客戶端配置檔案並在首選項(第2部分)中啟用指令碼。
VPN配置檔案編輯器圖示
安全使用者端5設定檔編輯器
步驟2.建立指令碼(上面的指令碼示例)
步驟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安全客戶端\VPN\指令碼 |
Linux (在Linux上,為「使用者」、「組」和「其他」分配對檔案的執行許可權。) |
/opt/cisco/secureclient/vpn/script |
macOS |
/opt/cisco/secureclient/vpn/script |
疑難排解
1. 確保指令碼具有OnConnect
或OnDisconnect
字首名稱。如果使用ASDM 6.3版或更高版本,Secure Firewall ASA會向檔名中新增字首scripts_和字首OnConnect或OnDisconnect,以將檔案標識為指令碼。客戶端連線時,安全裝置會將指令碼下載到遠端電腦上的正確目標目錄,刪除scripts_字首並保留OnConnect或OnDisconnect字首。例如,如果匯入指令碼myscript.bat,則指令碼在安全裝置上顯示為scripts_OnConnect_myscript.bat。在遠端電腦上,指令碼顯示為OnConnect_myscript.bat。
2.嘗試從命令列運行指令碼。如果指令碼無法從命令列運行,則客戶端無法運行該指令碼。如果指令碼無法在命令列上運行,請確保已安裝運行該指令碼的應用程式,然後嘗試在該作業系統上重寫該指令碼。
3.驗證VPN端點上的指令碼目錄中只有一個OnConnect指令碼和一個OnDisconnect指令碼。如果客戶端從Secure Firewall ASA下載OnConnect指令碼,然後為另一個Secure Firewall ASA下載另一個具有不同檔名字尾的OnConnect指令碼,則客戶端無法運行要運行的指令碼。如果指令碼路徑包含多個OnConnect或OnDisconnect指令碼,並且您正在使用Secure Firewall ASA部署指令碼,則刪除指令碼目錄的內容並重新建立VPN會話。如果指令碼路徑包含多個OnConnect或OnDisconnect指令碼,並且您正在使用手動部署方法,則刪除不需要的指令碼並重新建立VPN會話。
4.如果作業系統是Linux或MacOS,請確保將指令碼檔案許可權設定為執行,如果未將許可權設定為執行,則可以運行此命令以使其可執行:
$ cd YourScriptDirectory
$ sudo chmod +755 <scriptname>
5.確保啟用客戶端配置檔案指令碼。
6.根據編寫指令碼的方式,您需要有一個記錄指令碼進度的選項,例如使用.vbs時,您可以使用objShell.LogEvent,然後可以轉至Windows的事件檢視器並檢查此操作是否成功或失敗:
使用指令碼示例指令碼作為示例刷新Windows組策略
事件檢視器日誌