キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
18396
閲覧回数
16
いいね!
1
コメント
Shinpei Kono
Cisco Employee
Cisco Employee

[toc:faq]

1. はじめに

ASA による Active Directory (LDAP) との連携およびトラブルシューティング方法を整理して紹介します。あるユーザを AD のデータを使用して認証して、所属するグループ属性をもとに ASA のグループポリシーにマッピングするというシナリオに沿った設定となります。

本資料作成にあたり ASA 9.8.1、ASDM 7.8.1、および  Windows Server 2012 を使用しています。バージョンにより画面表示や出力が異なる場合があるのでご注意ください。



2. Active Directory のディレクトリ情報

ASA の設定にあたり、連携する Active Directory (LDAP) のディレクトリ構造やユーザの属性を把握しておく必要があります。

まず、認証対象のユーザとして ENGINEERING という Organization Unit (OU)に所属する vpnuser1 を使用します。



vpnuser1 のグループメンバーシップ情報です。同じ OU 配下にある2つのグループに所属しています。



LDP から当該ユーザ、グループの DN を出力させると以下のようになります。


これらを前提に ASA の設定を行っていきます。

3. ASA 設定例

3-1. AAA Server Group の設定

CLI と ASDM のそれぞれから AAAサーバの設定を表示させたものです。

ciscoasa# show running-config aaa-server LDAP
aaa-server LDAP protocol ldap
aaa-server LDAP (dmz) host 192.168.10.50
  ldap-base-dn dc=example,dc=com
  ldap-scope subtree
  ldap-naming-attribute sAMAccountName
  ldap-login-password *****
  ldap-login-dn cn=Administrator,cn=Users,dc=example,dc=com
  server-type microsoft
  ldap-attribute-map CSC


ASDM からは Remote Access VPN > AAA/Local Users > AAA Server Groups から ADD をクリックしてAAAサーバグループを設定します。 


Reactivation Mode や Dead Time、Max Failed Attempts はデフォルトの設定値を使用しているため、CLI の設定には
表示されていません。また ASA 9.8 から Realm-id がサポートされましたが使用しないので空欄にしています。

設定したサーバグループ「LDAP」の Servers in the Selected Group から ADD をクリックして、サーバグループのサーバ毎のパラメータを設定します。


  • Server Type (server-type) は Microsoft を選択します。何も選択せずに自動検出としても、今回の設定例では特に不都合はありません。

  • Base DN (ldap-base-dn) は LDAP を検索する起点を指定します。

  • Scope は BaseDN から LDAP を検索する範囲を指定します。

    "All levels beneath the Base DN (subtree)" は、BaseDN の配下すべてが対象になります。

    "One level beneath the base DN (onelevel)" は BaseDN から1階層下までが対象になります。たとえば vpnuser1 を検索するには BaseDN は "ldap-base-dn ou=ENGINEERING,dc=example,dc=com" のように指定する必要があります。

  • Naming Attribute (ldap-naming-attribute)から LDAP 検索の対象となるユーザオブジェクトを指定します。vpnuser1 で検索するので今回は sAMAccountName を指定しています。

  • Login DN / Login Password (ldap-login-dn / ldap-login-password) から  Binding DN を指定します。便宜上、例では管理者アカウントを使用していますが、管理者権限が必要というわけではありません。

  • LDAP Attribute Map (ldap-attribute-map) は 3-2 で作成する LDAP Attribute MAP の名称をプルダウンから選択します。

  • LDAP Parameters for Group Search (ldap-group-base-dn) では、グループ検索用の BaseDN を個別に設定できます。


SASL (Digest-MD5、Kerberos) は今回の AAAサーバの設定例では使うことが出来ません。

 

3-2. LDAP Attribute Map の設定

CLI と ASDM のそれぞれから見た設定例となります。

ciscoasa# show running-config ldap attribute-map CSC
map-name memberOf Group-Policy
map-value memberOf CN=CSCO_VPN,OU=ENGINEERING,DC=example,DC=com GroupPolicy-CSC


ASDM からは、AAA/Local Users > AAA Server Group の下段、または AAA/Local Users > LDAP Attribute Map から設定できます。以下は Mapping of Attribute name (map-name) の設定です。


以下は Mapping of Attribute Value (map-value)の設定です。


  • map-name は user-attribute-name (左) と Cisco-attribute-name (右) の組み合わせです。cisco.com で紹介されている user-attribute-name のリストは以下のコンフィギュレーションガイドを参照ください。
    Active Directory/LDAP VPN Remote Access Authorization Examples

  • map-value では map-name で定義したuser-attribute-name と Cisco-attribute-name のマッピング対象となる値を定義します。

Cisco-attribute-name は ASDM のプルダウンや CLI の ? から確認できます。

 

3-3. Connection Profile と Group Policy の設定

ASA で AnyConnect クライアントの認証用の Connection Profile としてTunnelGroup-CSC を作成しています。

ciscoasa# show running-config tunnel-group TunnelGroup-CSC
tunnel-group TunnelGroup-CSC type remote-access
tunnel-group TunnelGroup-CSC general-attributes
authentication-server-group LDAP


クライアントからのアクセスを Connection Profile にマッピングさせる方法はご利用環境に応じて調整してください。
参考 - AnyConnect - Connction Profile (Tunnel Group) の選定方法について


同じく ASA で LDAP アトリビュートマップにより選定されるグループポリシーとして GroupPolicy-CSC を作成しています。

ciscoasa# show running-config group-policy GroupPolicy-CSC
group-policy GroupPolicy-CSC internal
group-policy GroupPolicy-CSC attributes
dns-server value 102.168.10.50
vpn-tunnel-protocol ssl-client
default-domain value example.com
client-bypass-protocol enable
address-pools value VPNPOOL3


4. 動作確認

4-1. test aaa コマンドによる簡易チェック

test aaa-server コマンドで動作確認が実施できます。

ciscoasa# test aaa-server authentication LDAP username vpnuser1 password xxxxxxxx
Server IP Address or name: 192.168.10.50
INFO: Attempting Authentication test to IP address (192.168.10.50) (timeout: 12 seconds)
INFO: Authentication Successful


ASDM からは、AAA Server Group の Servers in the Selected Group から Test ボタンをクリックして実行します。


成功、失敗例の出力例です。

Test aaa-server は個別のサーバに対するテストを実施するのみとなり、AAA サーバグループ内のタイムアウトによるサーバ間の切り替わり、あるいはアトリビュートマップの動作を確認することはできません。

4-2. AnyConnect クライアントからの確認

show vpn-sessiondb anyconnect からアトリビュートマップで指定したグループポリシーが適用されているかを確認します。

ciscoasa# show vpn-sessiondb anyconnect

Session Type: AnyConnect

Username : vpnuser1 Index : 39091
Assigned IP : 172.16.10.10 Public IP : 10.141.57.188
Protocol : AnyConnect-Parent SSL-Tunnel DTLS-Tunnel
License : AnyConnect Premium
Encryption : AnyConnect-Parent: (1)none SSL-Tunnel: (1)AES-GCM-256 DTLS-Tunnel: (1)AES256
Hashing : AnyConnect-Parent: (1)none SSL-Tunnel: (1)SHA384 DTLS-Tunnel: (1)SHA1
Bytes Tx : 14710 Bytes Rx : 9273
Group Policy : GroupPolicy-CSC Tunnel Group : TunnelGroup-CSC
Login Time : 13:25:21 UTC Fri May 26 2017
Duration : 0h:00m:23s
Inactivity : 0h:00m:00s
VLAN Mapping : N/A VLAN : none
Audt Sess ID : 0a0a1001098b300059283ad1
Security Grp : none


アトリビュートマップによりグループポリシー がセットされると %ASA-6-113003 が記録されます。最終的に確立したセッション確立時のグループポリシーは、%ASA-6-113039 を確認します。

May 26 2017 13:25:21: %ASA-6-113004: AAA user authentication Successful : server = 192.168.10.50 : user = vpnuser1
May 26 2017 13:25:21: %ASA-6-113003: AAA group policy for user vpnuser1 is being set to GroupPolicy-CSC
May 26 2017 13:25:21: %ASA-6-113011: AAA retrieved user specific group policy (GroupPolicy-CSC) for user = vpnuser1
May 26 2017 13:25:21: %ASA-6-113009: AAA retrieved default group policy (DfltGrpPolicy) for user = vpnuser1
May 26 2017 13:25:21: %ASA-6-113008: AAA transaction status ACCEPT : user = vpnuser1
May 26 2017 13:25:21: %ASA-6-113039: Group <GroupPolicy-CSC> User <vpnuser1> IP <10.141.57.188> AnyConnect parent session started.


5. Troubleshooting (debug)

LDAP 連携に関する動作を詳細に確認するためにはデバッグ(debug ldap 255)を参照する必要があります。以下では出力例を記載しています。また比較用に失敗時の出力も追記しています。 

[25] Session Start
[25] New request Session, context 0x00007fa1a31328f8, reqType = Authentication
[25] Fiber started
[25] Creating LDAP context with uri=ldap://192.168.10.50:389
[25] Connect to LDAP server: ldap://192.168.10.50:389, status = Successful
[25] supportedLDAPVersion: value = 3
[25] supportedLDAPVersion: value = 2
[25] Binding as Administrator
[25] Performing Simple authentication for Administrator to 192.168.10.50
!--- Administrator による BindRequest

失敗例
[28] Simple authentication for Administrator returned code (49) Invalid credentials
[28] Failed to bind as administrator returned code (-1) Can't contact LDAP server
[28] Fiber exit Tx=213 bytes Rx=628 bytes, status=-2
[28] Session End
!--- Administrator のパスワードが間違ったときの出力


[25] LDAP Search:
Base DN = [dc=example,dc=com]
Filter = [sAMAccountName=vpnuser1]
Scope = [SUBTREE]
[25] User DN = [CN=vpnuser1,OU=ENGINEERING,DC=example,DC=com]
!--- BaseDN を起点に Subtree で CN=vpnuser1 を検索

失敗例
[32] LDAP Search:
Base DN = [dc=example,dc=com]
Filter = [sAMAccountName=vpnuser1]
Scope = [ONE LEVEL]
[32] Search result parsing returned failure status
[32] Talking to Active Directory server 192.168.10.50
[32] Reading password policy for vpnuser1, dn:
[32] Binding as Administrator
[32] Performing Simple authentication for Administrator to 192.168.10.50
[32] Fiber exit Tx=506 bytes Rx=978 bytes, status=-1
[32] Session End
!--- Onelevel のため CN=vpnsuser1 が見つからなかった出力


[25] Talking to Active Directory server 192.168.10.50
[25] Reading password policy for vpnuser1, dn:CN=vpnuser1,OU=ENGINEERING,DC=example,DC=com
[25] Read bad password count 0
[25] Binding as vpnuser1
[25] Performing Simple authentication for vpnuser1 to 192.168.10.50
[25] Processing LDAP response for user vpnuser1
[25] Message (vpnuser1):
[25] Authentication successful for vpnuser1 to 192.168.10.50
!--- CN=vpnuser1 の認証に成功したことを示す出力

失敗例
[31] Talking to Active Directory server 192.168.10.50
[31] Reading password policy for vpnuser1, dn:CN=vpnuser1,OU=ENGINEERING,DC=example,DC=com
[31] Read bad password count 0
[31] Binding as vpnuser1
[31] Performing Simple authentication for vpnuser1 to 192.168.10.50
[31] Simple authentication for vpnuser1 returned code (49) Invalid credentials
[31] Message (vpnuser1): 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
[31] Invalid password for vpnuser1
[31] Fiber exit Tx=548 bytes Rx=2685 bytes, status=-1
[31] Session End
!--- vpnuser1 のパスワードが間違ったときの出力


[25] Retrieved User Attributes:
[25] objectClass: value = top
[25] objectClass: value = person
[25] objectClass: value = organizationalPerson
[25] objectClass: value = user
[25] cn: value = vpnuser1
[25] givenName: value = vpnuser1
[25] distinguishedName: value = CN=vpnuser1,OU=ENGINEERING,DC=example,DC=com
[25] instanceType: value = 4
[25] whenCreated: value = 20170526115701.0Z
[25] whenChanged: value = 20170526115744.0Z
[25] displayName: value = vpnuser1
[25] uSNCreated: value = 88422
[25] memberOf: value = CN=CSCO2_VPN,OU=ENGINEERING,DC=example,DC=com
[25] mapped to Group-Policy: value = CN=CSCO2_VPN,OU=ENGINEERING,DC=example,DC=com
[25] mapped to LDAP-Class: value = CN=CSCO2_VPN,OU=ENGINEERING,DC=example,DC=com
[25] memberOf: value = CN=CSCO_VPN,OU=ENGINEERING,DC=example,DC=com
[25] mapped to Group-Policy: value = GroupPolicy-CSC
[25] mapped to LDAP-Class: value = GroupPolicy-CSC
!---  vpnuser1 の memberOf とマッピング結果

失敗例
[44] memberOf: value = CN=CSCO2_VPN,OU=ENGINEERING,DC=example,DC=com
[44] mapped to Group-Policy: value = CN=CSCO2_VPN,OU=ENGINEERING,DC=example,DC=com
[44] mapped to LDAP-Class: value = CN=CSCO2_VPN,OU=ENGINEERING,DC=example,DC=com
!--- CSCO_VPN に所属していないため Group-Policy とマッピングできていない 


[25] uSNChanged: value = 88428
[25] name: value = vpnuser1
[25] objectGUID: value = ".%..+.L.s.. i..
[25] userAccountControl: value = 512
[25] badPwdCount: value = 0
[25] codePage: value = 0
[25] countryCode: value = 0
[25] badPasswordTime: value = 0
[25] lastLogoff: value = 0
[25] lastLogon: value = 0
[25] pwdLastSet: value = 131402734218204122
[25] primaryGroupID: value = 513
[25] objectSid: value = .............ai.....r...~...
[25] accountExpires: value = 9223372036854775807
[25] logonCount: value = 0
[25] sAMAccountName: value = vpnuser1
[25] sAMAccountType: value = 805306368
[25] userPrincipalName: value = vpnuser1@example.com
[25] objectCategory: value = CN=Person,CN=Schema,CN=Configuration,DC=example,DC=com
[25] dSCorePropagationData: value = 20170526125550.0Z
[25] dSCorePropagationData: value = 20170526125237.0Z
[25] dSCorePropagationData: value = 16010101000416.0Z
[25] lastLogonTimestamp: value = 131402734643152526
[25] Fiber exit Tx=553 bytes Rx=2597 bytes, status=1
[25] Session End


6. LDAPS (LDAP Over SSL)

LDAP over SSL を有効にするには、ASDM から Enable LDAP over SSL にチェックを入れます。CLI の running-configuration では ldap-over-ssl enable が追加され、ポート番号が636 に変更されます。

ciscoasa# show running-config aaa-server LDAP
aaa-server LDAP protocol ldap
aaa-server LDAP (dmz) host 192.168.10.50
server-port 636
ldap-base-dn dc=example,dc=com
ldap-scope subtree
ldap-naming-attribute sAMAccountName
ldap-login-password *****
ldap-login-dn cn=Administrator,cn=Users,dc=example,dc=com
ldap-over-ssl enable
server-type microsoft
ldap-attribute-map CSC


 ASA で SSL の
ロギングを有効にして test aaa を実行すると、LDAP の処理の開始とともにSSLセッションが開始されていることが分かります。LDAPS が正常動作しないときに最初に確認するポイントもここになります。

ciscoasa# test aaa-server authentication LDAP username vpnuser1 password xxxxxxxx
Server IP Address or name: 192.168.10.50
INFO: Attempting Authentication test to IP address (192.168.10.50) (timeout: 12 seconds)

May 26 2017 13:56:44: %ASA-6-302013: Built outbound TCP connection 1286 for dmz:192.168.10.50/636 (192.168.10.50/636) to identity:192.168.10.34/26199 (192.168.10.34/26199)
[-2147483626] Session Start
[-2147483626] New request Session, context 0x00007fa1a31328f8, reqType = Authentication
[-2147483626] Fiber started
[-2147483626] Creating LDAP context with uri=ldaps://192.168.10.50:636
May 26 2017 13:56:44: %ASA-6-725001: Starting SSL handshake with server dmz:192.168.10.34/26199 to 192.168.10.50/636 for TLS session
May 26 2017 13:56:44: %ASA-7-725009: Device proposes the following 20 cipher(s) to server dmz:192.168.10.34/26199 to 192.168.10.50/636
May 26 2017 13:56:44: %ASA-7-725011: Cipher[1] : ECDHE-ECDSA-AES256-GCM-SHA384
May 26 2017 13:56:44: %ASA-7-725011: Cipher[2] : ECDHE-RSA-AES256-GCM-SHA384
---中略---
May 26 2017 13:56:44: %ASA-7-725011: Cipher[19] : DHE-RSA-AES128-SHA
May 26 2017 13:56:44: %ASA-7-725011: Cipher[20] : AES128-SHA
May 26 2017 13:56:44: %ASA-7-725013: SSL server dmz:192.168.10.34/26199 to 192.168.10.50/636 chooses cipher AES128-SHA256
May 26 2017 13:56:44: %ASA-6-725005: SSL server dmz:192.168.10.34/26199 to 192.168.10.50/636 requesting our device certificate for authentication
[-2147483626] Connect to LDAP server: ldaps://192.168.10.50:636, status = Successful
!--- 以下省略


 LDAPS は Password-management フィーチャを利用する場合は必須となります。ただし、フィーチャ自体が将来なくなる予定なので注意ください。password-management コマンドはすでにタブ補完で出てこなくなっているほか、ASDM でも有効化しようとすると警告がでるようになっています。


7. 参考資料

Cisco ASA Series VPN CLI Configuration Guide, 9.8
- Configure LDAP Authorization for VPN

Cisco Configuration Examples and TechNotes
ASA Use of LDAP Attribute Maps Configuration Example

コメント
GonDad04010
Level 1
Level 1

@Shinpei Kono 様
わかりやすい解説ありがとうございます!

バージョン 9.13 のリリースノートを確認すると、LDAPSの仕様に証明書が必須になっているようです。

https://www.cisco.com/c/en/us/td/docs/security/asa/asa913/release/notes/asarn913.html

  • Beginning with 9.13(1), the ASA establishes an LDAP/SSL connection only if one of the following certification criteria is satisfied:

    • The LDAP server certificate is trusted (exists in a trustpoint or the ASA trustpool) and is valid.

    • A CA certificate from servers issuing chain is trusted (exists in a trustpoint or the ASA trustpool) and all subordinate CA certificates in the chain are complete and valid.

9.13 以降は証明書をインストールさえしておけばいいのでしょうか。
それとも ssl trust-point <トラストポイント名> <インターフェース名>   のコマンドでインターフェースへの
紐づけまで実施する必要がありますでしょうか。

別のトラストポイントをインターフェースに紐づけている関係で、
LDAPS用の証明書をインターフェースに紐づけできない可能性がある環境のため質問させていただきました。

Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします