はじめに
 
  このドキュメントでは、セキュアファイアウォールASAおよびFTDを使用してCisco Secure Clientスクリプトを設定する方法について説明します。
 
  前提条件
 
   
  要件
 
  次の項目に関する知識があることが推奨されます。
 
   
   - Cisco Secure Firewall Management Center(FMC)によって管理されるSecure Firewall ASAおよびSecure Firewall Threat Defenseを介したSSL Cisco Secure Clientの設定
- ASDMアクセス
- FTD SSHアクセス
- OnConnectおよびOnDisconnectスクリプト
使用するコンポーネント
 
   
   - セキュアなファイアウォールASA
- セキュアなファイアウォール脅威防御
- Cisco Secureファイアウォール管理センター
- Cisco Secureクライアント5.0.03072
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
 
  背景説明
 
  ここでは、2つの異なる設定例について説明します。
 
   
   - ASDMで管理されるセキュアファイアウォールASAを使用したセキュアクライアントスクリプティングの設定
- Cisco Secure Firewall Management Centerで管理されるSecure Firewall Threat Defenseを使用したセキュアクライアントスクリプティングの設定。
FMCによって管理されるFTDでは、これはまだFMCによって正式にサポートされていないため、拡張要求Cisco Bug ID  に回避策を実装します。
 に回避策を実装します。
 
   
  設定
 
  コンフィギュレーション
 
  ASDMによって管理されるセキュアファイアウォールASAを使用したセキュアクライアントスクリプティングの設定例:
 
  ステップ 1:セキュアクライアントプロファイルを作成し、環境設定でスクリプトを有効にします(パート2)。
 
   AnyConnect XMLプロファイルエディタ
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スクリプトのみを終了し、子スクリプトは終了しません。
- SBLがVPNセッションを確立する場合、クライアントがOn Connectスクリプト(存在する場合)を起動できるようにするには、Enable Post SBL On Connect Script(デフォルトで有効)にチェックマークを付けます。
AnyConnectプロファイルが適切なグループポリシーに割り当てられていることを確認します。
 
   XMLグループポリシーの割り当て
XMLグループポリシーの割り当て
 
   
  ステップ 2:スクリプトを設定します。 
 
  シスコはサンプルスクリプトまたはお客様が作成したスクリプトをサポートしていないため、お客様のニーズに応じてテストできる例がいくつかあります。
 
  Windowsスクリプト
 
   
    
 
    
    注意: 32ビットのcmd.exeでサポートされているコマンドを使用してください。
 
     
    
  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
 
  接続解除.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. 複数のスクリプトの起動:
 
  スクリプト1.sh
 
  #!/bin/sh
logger "Sample script 1."
 
  スクリプト2.sh
 
  #!/bin/sh
logger "Sample script 2."
 
  スクリプト3.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. 複数のスクリプトの起動
 
  スクリプト1.sh
 
  #!/bin/sh
logger "Sample script 1."
 
  スクリプト2.sh
 
  #!/bin/sh
logger "Sample script 2."
 
  スクリプト3.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スクリプト機能の使用を支援するように設計されています。この例は、単に参考資料として言及していることを前提としています。
 
     
    
  ステップ 3ASDMを使用したスクリプトのインポート
 
   AnyConnectスクリプト設定ASDM
AnyConnectスクリプト設定ASDM
 
   
  FMCによって管理されるFTDを使用したセキュアクライアントスクリプティングの設定
 
  現在、セキュアクライアントスクリプティングの設定はFMCではサポートされていません。これをサポートするための拡張要求Cisco Bug ID CSCvt58044 が あります。それに基づいて、スクリプトの設定と導入を可能にする回避策があります。
あります。それに基づいて、スクリプトの設定と導入を可能にする回避策があります。
 
  ステップ 1:VPNプロファイルエディタを使用して、セキュアクライアントプロファイルを作成し、設定(パート2)でスクリプトを有効にします。
 
   VPNプロファイルエディタアイコン
VPNプロファイルエディタアイコン
 
   
   セキュアクライアント5プロファイルエディタ
セキュアクライアント5プロファイルエディタ
 
  ステップ 2:スクリプトを作成します(上記と同じスクリプト例)。
 
  ステップ 3ファイルのサイズをバイト単位でメモします
 
  スクリプトプロパティを右クリックして開き、[一般]タブで[サイズ]を確認して書き留めます。
 
   スクリプトプロパティ
スクリプトプロパティ
 
   
  ステップ 4スクリプトをインポートします。
 
  オプション1:TFTP/FTP転送:
 
  SSHからFTDアプライアンスに接続し、system support diagnostic-cliを開始します。
 
  TFTP/FTPサーバからflash:
 
  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アプライアンスに接続し、system support 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 > select the Connection Profile and Edit > Advanced > Group Policies > edit the Group Policy> Secure Client> Profile>の順に移動します。すでにFMCにアップロードされている場合はプロファイルを選択し、プラス記号のオプションをクリックしてそこからプロファイルをアップロードできます。
 
   FMCグループポリシーの設定
FMCグループポリシーの設定
 
   
  確認
 
  VPNを介して接続した後、OSに応じて次のパスをチェックすることで、スクリプトが正常に展開されたことを確認できます。
 
   
    
     
     | Microsoft Windows | %ALLUSERSPROFILE%\Cisco\Cisco Secure Client\VPN\スクリプト | 
 
     
     | 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エンドポイントのscriptsディレクトリにOnConnectスクリプトが1つとOnDisconnectスクリプトが1つだけあることを確認します。クライアントがセキュアファイアウォールASAからOnConnectスクリプトをダウンロードし、別のセキュアファイアウォールASA用の異なるファイル名サフィックスを持つ2番目のOnConnectスクリプトをダウンロードした場合、クライアントは実行する予定のスクリプトを実行できません。スクリプトパスに複数のOnConnectまたはOnDisconnectスクリプトが含まれており、スクリプトの展開にセキュアファイアウォールASAを使用している場合は、scriptsディレクトリの内容を削除し、VPNセッションを再確立します。スクリプトパスに複数のOnConnectまたはOnDisconnectスクリプトが含まれ、手動展開方法を使用している場合は、不要なスクリプトを削除して、VPNセッションを再確立します。
 
  4. オペレーティング・システムがLinuxまたはMacOSの場合、スクリプト・ファイルの権限が実行に設定されていることを確認します。権限が実行に設定されていない場合は、次のコマンドを実行して実行可能にできます。
 
  $ cd YourScriptDirectory
 
  $ sudo chmod +755 <スクリプト名>
 
  5. クライアントプロファイルでスクリプトが有効になっていることを確認します。
 
  6. スクリプトの記述方法に応じて、スクリプトの進行状況をログに記録するオプションが必要です。たとえば、.vbsを使用してobjShell.LogEventを使用し、Windowsのイベントビューアに移動して、これが成功したか失敗したかを確認できます。
 
  例として、スクリプト例Script to refresh a windows group policyを使用します。
 
   イベントビューアログ
イベントビューアログ