簡介
本文檔介紹如何使用Secure Firewall ASA和FTD配置Cisco Secure Client指令碼。
必要條件
需求
思科建議您瞭解以下主題:
- SSL Cisco Secure Client配置,透過思科安全防火牆管理中心(FMC)管理的安全防火牆ASA和安全防火牆威脅防禦實現
- ASDM訪問
- FTD SSH存取
- OnConnect和OnDisconnect指令碼
採用元件
- 安全防火牆ASA
- 安全防火牆威脅防禦
- Cisco安全防火牆管理中心
- 思科安全使用者端5.0.03072
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
我們將介紹兩個不同的配置示例:
- 使用ASDM管理的Secure Firewall ASA設定安全客戶端指令碼。
- 使用由Cisco Secure Firewall Management Center管理的安全防火牆威脅防禦設定安全客戶端指令碼。
由於FMC管理FTD,但FMC仍不正式支援此功能,因此我們將實作增強功能要求思科錯誤ID 的暫時替代措施 。
設定
組態
使用ASDM管理的Secure Firewall ASA設定安全客戶端指令碼配置示例:
步驟 1.在「首選項」(Preferences)中建立Secure Client配置檔案並啟用指令碼(第2部分)。
AnyConnect XML配置檔案編輯器
Xml設定檔的其他選項:
- 選中Terminate Script On Next Event,以便在發生到另一個可編寫指令碼事件的轉換時終止正在運行的指令碼進程。例如,如果VPN會話結束,客戶端將終止正在運行的On Connect指令碼;如果Cisco Secure Client啟動新的VPN會話,客戶端將終止正在運行的OnDisconnect指令碼。在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. 啟動多個指令集:
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設定檔編輯器
步驟 2.建立命令檔(上述命令檔範例相同)
步驟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>選擇連線配置檔案並編輯> Advanced> Group Policies>編輯組策略> Secure Client>配置檔案>您可以選擇配置檔案(如果已上傳到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端點上的scripts目錄中是否只有一個OnConnect指令碼和一個OnDisconnect指令碼。如果客戶端從安全防火牆ASA下載OnConnect指令碼,然後為另一個Secure Firewall ASA下載另一個檔名字尾不同的OnConnect指令碼,則客戶端無法運行您想要運行的指令碼。如果指令碼路徑包含多個OnConnect或OnDisconnect指令碼,並且您正在使用Secure Firewall ASA部署指令碼,請刪除scripts目錄的內容並重新建立VPN會話。如果指令碼路徑包含多個OnConnect或OnDisconnect指令碼,並且您正在使用手動部署方法,請刪除不需要的指令碼並重新建立VPN會話。
4. 如果作業系統是Linux或MacOS,請確定指令集檔案許可權已設定為執行,如果許可權未設定為執行,您可以執行此命令,使其可執行:
$ cd YourScriptDirectory
$ sudo chmod +755 <scriptname>
5. 確定使用者端設定檔已啟用指令碼功能。
6. 根據編寫指令碼的方式,您需要一個記錄指令碼進度的選項,例如,使用.vbs時,您可以使用objShell.LogEvent,然後轉到Windows的事件檢視器並檢查此操作是否成功或失敗:
使用指令碼示例指令碼刷新Windows組策略
事件檢視器記錄