Einleitung
In diesem Dokument wird beschrieben, wie Cisco Secure Client-Scripting mit Secure Firewall ASA und FTD konfiguriert wird.
Voraussetzungen
Anforderungen
Cisco empfiehlt, dass Sie über Kenntnisse in folgenden Bereichen verfügen:
- SSL Cisco Secure Client-Konfiguration über Secure Firewall ASA und Secure Firewall Threat Defense, verwaltet vom Cisco Secure Firewall Management Center (FMC)
- ASDM-Zugang
- FTD SSH-Zugriff
- OnConnect- und OnDisconnect-Skripts
Verwendete Komponenten
- Sichere Firewall ASA
- Sicherer Schutz vor Bedrohungen durch Firewalls
- Cisco Secure Firewall Management Center
- Cisco Secure Client 5.0.03072
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die möglichen Auswirkungen aller Befehle kennen.
Hintergrundinformationen
Es werden zwei verschiedene Konfigurationsbeispiele erläutert:
- Einrichten von Secure Client-Skripts mit Secure Firewall ASA, die von ASDM verwaltet wird
- Einrichtung von Secure Client-Skripten mit Secure Firewall Threat Defense, das vom Cisco Secure Firewall Management Center verwaltet wird
Bei FTD, die von FMC verwaltet wird, wird dies vom FMC immer noch nicht offiziell unterstützt. Daher implementieren wir eine Problemumgehung für die Erweiterungsanfrage mit der Cisco Bug-ID
Konfigurieren
Konfigurationen
Einrichtung von Secure Client-Skripten mit Secure Firewall ASA, verwaltet durch ASDM - Konfigurationsbeispiel:
Schritt 1: Erstellen eines sicheren Clientprofils und Aktivieren von Skripts in den Voreinstellungen (Teil 2).
AnyConnect XML-Profil-Editor
Zusätzliche Optionen aus dem XML-Profil:
- Aktivieren Sie Skript bei nächstem Ereignis beenden, damit der Client einen laufenden Skriptprozess beenden kann, wenn ein Übergang zu einem anderen skriptfähigen Ereignis eintritt. Beispielsweise beendet der Client ein ausgeführtes On Connect-Skript, wenn die VPN-Sitzung endet, und ein ausgeführtes OnDisconnect-Skript, wenn der Cisco Secure Client eine neue VPN-Sitzung startet. Unter Microsoft Windows beendet der Client außerdem alle Skripts, die vom On Connect- oder OnDisconnect-Skript gestartet wurden, sowie alle Skript-abhängigen Elemente. Unter macOS und Linux beendet der Client nur das On Connect- oder OnDisconnect-Skript; er beendet keine untergeordneten Skripts.
- Markieren Sie Post SBL On Connect Script (standardmäßig aktiviert), damit der Client das On Connect Script (falls vorhanden) starten kann, wenn SBL die VPN-Sitzung herstellt.
Weisen Sie das AnyConnect-Profil der richtigen Gruppenrichtlinie zu:
XML-Gruppenrichtlinienzuweisung
Schritt 2: Konfigurieren Sie Ihr Skript.
Da Cisco keine Beispielskripte oder vom Kunden erstellte Skripte unterstützt, gibt es einige Beispiele, die Sie je nach Ihren Anforderungen testen können:
Windows-Skripte
Achtung: Stellen Sie sicher, dass Sie die von cmd.exe unterstützten 32-Bit-Befehle verwenden.
1. Skript zum Zuordnen eines Laufwerks:
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. Skript zum Aktualisieren einer Windows-Gruppenrichtlinie:
OnConnect.vbs oder 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. Starten mehrerer Skripte:
Skript1.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample script 1."
WScript.Quit
Skript2.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample script 2."
WScript.Quit 5
Skript3.vbs
ON ERROR RESUME NEXT
Err.Clear
Set objShell = CreateObject("WScript.Shell")
objShell.LogEvent 0, "Sample script 3."
WScript.Quit
OnConnect.vbs oder 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
Hinweis: Diese Beispiele werden ohne jegliche Gewährleistung oder Unterstützung geliefert. Sie wurde entwickelt, um Ihnen bei der Verwendung der Cisco AnyConnect-Skriptfunktion zu helfen. Es wird davon ausgegangen, dass Sie auf dieses Beispiel nur als Referenz verweisen.
Linux-Skript
1. Starten mehrerer Skripte:
Skript1.sh
#!/bin/sh
logger "Sample script 1."
Skript2.sh
#!/bin/sh
logger "Sample script 2."
Skript3.sh
#!/bin/sh
logger "Sample script 3."
OnConnect.sh oder 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 = $?"
Hinweis: Diese Beispiele werden ohne jegliche Gewährleistung oder Unterstützung geliefert. Sie wurde entwickelt, um Ihnen bei der Verwendung der Cisco AnyConnect-Skriptfunktion zu helfen. Es wird davon ausgegangen, dass Sie auf dieses Beispiel nur als Referenz verweisen.
MacOS-Skripte
1. Starten von AppleScript:
Skript1.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. Starten mehrerer Skripte
Skript1.sh
#!/bin/sh
logger "Sample script 1."
Skript2.sh
#!/bin/sh
logger "Sample script 2."
Skript3.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 = $?"
Hinweis: Diese Beispiele werden ohne jegliche Gewährleistung oder Unterstützung geliefert. Sie wurde entwickelt, um Ihnen bei der Verwendung der Cisco AnyConnect-Skriptfunktion zu helfen. Es wird davon ausgegangen, dass Sie auf dieses Beispiel nur als Referenz verweisen.
Schritt 3: Skript über ASDM importieren
AnyConnect Scripting-Einstellungen ASDM
Einrichten von Secure Client-Skripten mit FTD, das von FMC verwaltet wird
Die aktuelle Einrichtung von Secure Client-Scripting wird vom FMC nicht unterstützt. Es liegt eine Erweiterungsanfrage mit der Cisco Bug-ID CSCvt58044 vor, um diese Einrichtung zu unterstützen. Basierend darauf haben wir einen Workaround, um die Konfiguration und Bereitstellung der Scripts zu ermöglichen.
Schritt 1: Erstellen eines sicheren Clientprofils und Aktivieren von Scripting in den Voreinstellungen (Teil 2) mit dem VPN-Profil-Editor
VPN-Profil-Editor-Symbol
Profil-Editor für Secure Client 5
Schritt 2: Skript erstellen (gleiche Skriptbeispiele von oben)
Schritt 3: Beachten Sie die Größe der Datei in Byte.
Öffnen Sie die Skripteigenschaften, indem Sie mit der rechten Maustaste darauf klicken. Überprüfen Sie auf der Registerkarte Allgemein die Größe, und notieren Sie sie.
Skripteigenschaften
Schritt 4: Skript importieren:
Option 1: TFTP-/FTP-Übertragung:
SSH zur FTD-Appliance und rufen Sie die Diagnose-CLI für den Systemsupport auf.
Kopieren Sie das Skript vom TFTP-/FTP-Server in den Flash-Speicher:
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>
Importieren Sie die WebVPN AnyConnect-Anpassung:
Dem Dateinamen muss das Präfix scripts_OnConnect_ vorangestellt werden
FTD#import webvpn AnyConnect-customization type binary platform win name scripts_OnConnect_login.vbs flash:/scripts_OnConnect_login.vbs
Option 2: Kopieren Sie das Skript direkt in die CLI:
SSH zur FTD-Appliance und rufen Sie die Diagnose-CLI für den Systemsupport auf.
Geben Sie folgenden Befehl ein:
Dem Dateinamen muss das Präfix scripts_OnConnect_ vorangestellt werden
FTD#import webvpn AnyConnect-customization type binary platform win name scripts_OnConnect_login.vbs stdin 943
Hinweise: Die Größe des Skripts aus Schritt 2 entspricht der Größe in Byte.
Nach der Eingabe des Importbefehls müssen Sie das eigentliche Skript in die CLI einfügen. Obwohl die Ausgabe hier nicht angezeigt wird, müssen Sie nur einige Zeit eingeben, bis Sie wieder zur CLI zurückkehren.
Hinweis: Das Einfügen des Skripts in die CLI kann je nach Größe des Skripts eine Weile dauern.
Sie können überprüfen, ob das Skript ordnungsgemäß importiert wurde, indem Sie den folgenden Befehl ausführen:
FTD#export webvpn AnyConnect-customization type binary platform win name <scriptname>.vbs flash:/<scriptname>.vbs
FTD#more flash:/<scriptname>.vbs
Wenn Sie das Skript entfernen müssen, können Sie den folgenden Befehl in der CLI ausführen:
FTD#revert webvpn AnyConnect-customization type binary platform win name <scriptname>
Schritt 5: Laden Sie das Secure Client VPN-Profil in das FMC hoch, und wenden Sie es auf die Gruppenrichtlinie an:
Gehen Sie zu Devices > Remote Access > wählen Sie das Verbindungsprofil aus und klicken Sie auf Edit > Advanced > Group Policies > bearbeiten Sie die Gruppenrichtlinie > Secure Client > Profile > Sie können das Profil auswählen, wenn es bereits in das FMC hochgeladen wurde, oder klicken Sie auf die Plus-Option, und laden Sie das Profil von dort hoch.
Konfiguration der FMC-Gruppenrichtlinie
Überprüfung
Nachdem Sie eine Verbindung über das VPN hergestellt haben, können Sie bestätigen, dass das Skript erfolgreich bereitgestellt wurde. Überprüfen Sie dazu den Pfad je nach Betriebssystem:
Microsoft Windows |
%ALLUSERSPROFILE%\Cisco\Cisco Secure Client\VPN\Script |
Linux (Weisen Sie unter Linux der Datei Ausführungsberechtigungen für Benutzer, Gruppe und Andere zu.) |
/opt/cisco/secureclient/vpn/script |
MacOS |
/opt/cisco/secureclient/vpn/script |
Fehlerbehebung
1. Stellen Sie sicher, dass das Skript einen OnConnect-
oder OnDisconnect-
Präfixnamen hat. Wenn Sie ASDM Version 6.3 oder höher verwenden, fügt die Secure Firewall ASA das Präfix scripts_ und das Präfix OnConnect oder OnDisconnect zu Ihrem Dateinamen hinzu, um die Datei als Skript zu identifizieren. Wenn der Client eine Verbindung herstellt, lädt die Sicherheits-Appliance das Skript in das richtige Zielverzeichnis auf dem Remotecomputer, entfernt das Präfix scripts_ und belässt das OnConnect- oder OnDisconnect-Präfix. Wenn Sie beispielsweise das Skript myscript.bat importieren, wird das Skript auf der Sicherheits-Appliance als scripts_OnConnect_myscript.bat angezeigt. Auf dem Remotecomputer wird das Skript als OnConnect_myscript.bat angezeigt.
2. Versuchen Sie, das Skript über die Befehlszeile auszuführen. Der Client kann das Skript nicht ausführen, wenn er es nicht über die Befehlszeile ausführen kann. Wenn das Skript nicht auf der Befehlszeile ausgeführt werden kann, stellen Sie sicher, dass die Anwendung installiert ist, die das Skript ausführt, und versuchen Sie, das Skript auf diesem Betriebssystem neu zu schreiben.
3. Vergewissern Sie sich, dass im Verzeichnis "scripts" auf dem VPN-Endpunkt nur ein OnConnect-Skript und nur ein OnDisconnect-Skript vorhanden ist. Wenn der Client ein OnConnect-Skript von der sicheren Firewall-ASA herunterlädt und dann ein zweites OnConnect-Skript mit einem anderen Dateinamensuffix für eine andere sichere Firewall-ASA herunterlädt, kann der Client das Skript, das Sie ausführen wollten, nicht ausführen. Wenn der Skriptpfad mehr als ein OnConnect- oder OnDisconnect-Skript enthält und Sie die Secure Firewall ASA zur Bereitstellung von Skripts verwenden, entfernen Sie den Inhalt des Skriptverzeichnisses, und stellen Sie eine VPN-Sitzung wieder her. Wenn der Skriptpfad mehr als ein OnConnect- oder OnDisconnect-Skript enthält und Sie die manuelle Bereitstellungsmethode verwenden, entfernen Sie die unerwünschten Skripts, und stellen Sie eine VPN-Sitzung wieder her.
4. Wenn das Betriebssystem Linux oder MacOS ist, stellen Sie sicher, dass die Skriptdateiberechtigungen auf "Ausführen" gesetzt sind. Wenn die Berechtigung nicht auf "Ausführen" gesetzt ist, können Sie diesen Befehl ausführen, um die Ausführung zu ermöglichen:
$ cd IhrSkriptverzeichnis
$ sudo chmod +755 <Skriptname>
5. Stellen Sie sicher, dass das Skripting im Clientprofil aktiviert ist.
6. Je nachdem, wie Sie Ihr Skript schreiben, benötigen Sie eine Option, um den Fortschritt des Skripts zu protokollieren, zum Beispiel mit der .vbs können Sie objShell.LogEvent verwenden, und dann können Sie in der Ereignisanzeige von Windows überprüfen, ob dies funktioniert hat oder fehlgeschlagen ist:
Verwenden des Skriptbeispiels Skript zum Aktualisieren einer Windows-Gruppenrichtlinie als Beispiel
Ereignisanzeige-Protokolle