本產品的文件集力求使用無偏見用語。針對本文件集的目的,無偏見係定義為未根據年齡、身心障礙、性別、種族身分、民族身分、性別傾向、社會經濟地位及交織性表示歧視的用語。由於本產品軟體使用者介面中硬式編碼的語言、根據 RFP 文件使用的語言,或引用第三方產品的語言,因此本文件中可能會出現例外狀況。深入瞭解思科如何使用包容性用語。
思科已使用電腦和人工技術翻譯本文件,讓全世界的使用者能夠以自己的語言理解支援內容。請注意,即使是最佳機器翻譯,也不如專業譯者翻譯的內容準確。Cisco Systems, Inc. 對這些翻譯的準確度概不負責,並建議一律查看原始英文文件(提供連結)。
本文檔介紹使用輕量級目錄訪問協定(LDAP)伺服器對遠端訪問VPN(RA VPN)使用者進行身份驗證和授權,並根據使用者在LDAP伺服器上的組成員資格授予他們不同的網路訪問許可權的過程。
使用了下列應用程式/裝置的硬體和軟體版本:
注意:思科不提供對Microsoft AD Server和Postmal工具的配置支援。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
在本文檔中,使用memberOf LDAP屬性對AnyConnect使用者進行授權。
FDM管理的FTD的LDAP屬性對映配置了REST API。
步驟 1.驗證裝置是否已註冊到智慧許可。
步驟 2.驗證FDM上是否已啟用AnyConnect許可證。
步驟 3.驗證權杖中是否啟用匯出控制功能Enabled。
注意:本文檔假設RA VPN已配置。有關如何在FDM管理的FTD上配置RAVPN的詳細資訊,請參閱以下文檔。
步驟 4.導航到Remote Access VPN > Group Policies。
步驟 5.導航到組策略。按一下「+」為每個AD組配置不同的組策略。在本示例中,將組策略Finance-Group-Policy、HR-Group-Policy和IT-Group-Policy配置為可以訪問不同的子網。
Finance-Group-Policy具有以下設定:
firepower# show run group-policy Finance-Group-Policy group-policy Finance-Group-Policy internal group-policy Finance-Group-Policy attributes banner value You can access Finance resource dhcp-network-scope none vpn-simultaneous-logins 3 vpn-idle-timeout 30 vpn-idle-timeout alert-interval 1 vpn-session-timeout none vpn-session-timeout alert-interval 1 vpn-filter none vpn-tunnel-protocol ssl-client split-tunnel-policy tunnelspecified ipv6-split-tunnel-policy tunnelall split-tunnel-network-list value Finance-Group-Policy|splitAcl split-dns none split-tunnel-all-dns disable client-bypass-protocol disable msie-proxy method no-modify vlan none address-pools none ipv6-address-pools none webvpn <output omitted>
同樣,HR-Group-Policy具有以下設定:
firepower# show run group-policy HR-Group-Policy group-policy HR-Group-Policy internal group-policy HR-Group-Policy attributes banner value You can access Finance resource dhcp-network-scope none vpn-simultaneous-logins 3 vpn-idle-timeout 30 vpn-idle-timeout alert-interval 1 vpn-session-timeout none vpn-session-timeout alert-interval 1 vpn-filter none vpn-tunnel-protocol ssl-client split-tunnel-policy tunnelspecified ipv6-split-tunnel-policy tunnelall split-tunnel-network-list value HR-Group-Policy|splitAcl split-dns none split-tunnel-all-dns disable client-bypass-protocol disable msie-proxy method no-modify vlan none address-pools none ipv6-address-pools none webvpn <output omitted>
最後,IT-Group-Policy具有下一個設定:
firepower# show run group-policy IT-Group-Policy group-policy IT-Group-Policy internal group-policy IT-Group-Policy attributes banner value You can access Finance resource dhcp-network-scope none vpn-simultaneous-logins 3 vpn-idle-timeout 30 vpn-idle-timeout alert-interval 1 vpn-session-timeout none vpn-session-timeout alert-interval 1 vpn-filter none vpn-tunnel-protocol ssl-client split-tunnel-policy tunnelspecified ipv6-split-tunnel-policy tunnelall split-tunnel-network-list value IT-Group-Policy|splitAcl split-dns none split-tunnel-all-dns disable client-bypass-protocol disable msie-proxy method no-modify vlan none address-pools none ipv6-address-pools none webvpn <output omitted>
步驟 6.建立組策略NOACCESS並導航到Session Settings,然後取消選中Simultaneous Login per User選項。這會將vpn-simultaneous-logins值設定為0。
設定為0時,Group-Policy中的vpn-simultaneous-logins值將立即終止使用者的VPN連線。 此機制用於防止屬於任何AD使用者組(已配置使用者組除外)(在本例中為Finance、HR或IT)的使用者建立到FTD的成功連線,並訪問僅可用於允許的使用者組帳戶的安全資源。
屬於正確AD使用者組的使用者匹配FTD上的LDAP屬性對映並繼承對映的組策略,而不屬於任何允許組的使用者則繼承連線配置檔案的預設組策略,在本例中為NOACCESS。
NOACCESS Group-Policy具有以下設定:
firepower# show run group-policy NOACCESS group-policy NOACCESS internal group-policy NOACCESS attributes dhcp-network-scope none vpn-simultaneous-logins 0 vpn-idle-timeout 30 vpn-idle-timeout alert-interval 1 vpn-session-timeout none vpn-session-timeout alert-interval 1 vpn-filter none vpn-tunnel-protocol ssl-client split-tunnel-policy tunnelall ipv6-split-tunnel-policy tunnelall split-dns none split-tunnel-all-dns disable client-bypass-protocol disable msie-proxy method no-modify vlan none address-pools none ipv6-address-pools none webvpn anyconnect ssl dtls none anyconnect mtu 1406 anyconnect ssl keepalive 20 anyconnect ssl rekey time 4 anyconnect ssl rekey method new-tunnel anyconnect dpd-interval client 30 anyconnect dpd-interval gateway 30 anyconnect ssl compression none anyconnect dtls compression none anyconnect profiles none anyconnect ssl df-bit-ignore disable always-on-vpn profile-setting
步驟 7.導航到Connection Profiles並建立Connection-Profile。在此示例中,配置檔名稱為Remote-Access-LDAP。選擇Primary Identity Source AAA Only,然後建立新的身份驗證伺服器類型AD。
輸入AD伺服器的資訊:
按一下Next,然後選擇NOACCESS作為此連線配置檔案的預設組策略。
儲存所有更改。連線配置檔案Remote-Access-LDAP現在在RA VPN配置下可見。
步驟 1.啟動FTD的API Explorer。
API Explorer包含FTD上可用的API的完整清單。導覽至https://<FTD Management IP>/api-explorer
向下滾動到LdapAttributeMap部分,然後按一下它以檢視所有支援的選項。
注意:在本示例中,我們使用Postman作為API工具來配置LDAP屬性對映。
步驟 2.為LDAP授權新增Postman集合。
輸入此集合的名稱。
編輯 Authorization 頁籤並選擇 OAuth 2.0型別
步驟3. 導覽至File > Settings,關閉SSL憑證驗證,以避免在向FTD傳送API要求時發生SSL交握失敗。如果FTD使用自簽名的憑證,則會完成此操作。
或者,FTD使用的憑證可以作為CA憑證新增到設定的「憑證」一節中。
步驟 4. 新增一個POST要求Auth,以建立到FTD的登入POST要求,從而取得權杖來授權任何POST/GET要求。
此集合的所有Postman請求必須包含下一個:
BaseURL:https://<FTD Management IP>/api/fdm/latest/
在請求URL中,將基本URL附加到需要新增或修改的各個對象。
這裡會建立權杖的驗證要求,請參閱https://<FTD Management IP>/api-explorer。需要對其他對象進行檢查,並且需要對它們進行必要的更改。
導覽至Headers,然後按一下Manage Presets。
建立新的預設報頭LDAP,並新增以下鍵值對:
Content-Type | application/json |
接受 | application/json |
對於所有其他請求,請導航到相應的報頭頁籤,然後選擇此「預設報頭」值:Header-LDAP,使REST API請求使用json作為主要資料型別。
要獲取令牌的POST請求正文必須包含下一個:
類型 | raw - JSON(application/json) |
grant_type | 密碼 |
使用者名稱 | 用於登入FTD的管理員使用者名稱 |
密碼 | 與管理員使用者帳戶關聯的密碼 |
{ "grant_type": "password", "username": "admin", "password": "<enter the password>" }
按一下send後,回應的主體就會包含存取權杖,用於向FTD傳送任何PUT/GET/POST請求。
{ "access_token": "eyJhbGciOiJIUzI1[...output omitted...]dkrJakCXvP4Lyzdr-xap0", "expires_in": 1800, "token_type": "Bearer", "refresh_token":"eyJhbGciOiJIUzI1[...output omitted...]dkrJakCXvP4Lyzdr-xap0", "refresh_expires_in": 2400 }
然後,此令牌用於授權所有後續請求。
導航到每個新請求的Authorization頁籤,然後選擇下一個請求:
類型 | OAuth 2.0 |
權杖 | 通過運行登入POST請求接收的訪問令牌 |
步驟 5.新增新的GET請求Get Group-Policies以獲取Group-Policy狀態和設定。收集每個已配置的組策略的名稱和ID(在本例中為: Finance-Group-Policy、HR-Group-Policy和IT-Group-Policy),以便在下一步中使用。
獲取已配置的組策略的URL為:https://<FTD Management IP>/api/fdm/latest/object/ravpngrouppolicies
在下一個示例中,將突出顯示Group-Policy Finance-Group-Policy。
步驟 6.新增新的POST請求建立LDAP屬性對映以建立LDAP屬性對映。在本文檔中,使用模型LdapAttributeMapping。其他模型也有類似的操作和方法,用於建立屬性對映。這些型號的示例可以在本文檔前面提到的api-explorer中找到。
LDAP屬性對映的URL為:https://<FTD Management IP>/api/fdm/latest/object/ldapattributempps
POST請求正文必須包含以下內容:
名稱 | LDAP屬性對映的名稱 |
類型 | ldapattributeapping |
ldap名稱 | memberOf |
ciscoName | GROUP_POLICY |
ldap值 | 來自AD的使用者的memberOf值 |
ciscoValue | FDM中每個使用者組的組策略名稱 |
POST請求的主體包含根據memberOf值將特定組策略對映到AD組的LDAP屬性映射信息:
{ "name": "Attribute-Map", "ldapAttributeMaps": [ { "ldapName": "memberOf", "ciscoName": "GROUP_POLICY", "valueMappings": [ { "ldapValue": "CN=Finance-Group,CN=Users,DC=cisco,DC=com", "ciscoValue": "Finance-Group-Policy", "type": "ldaptociscovaluemapping" }, { "ldapValue": "CN=HR-Group,CN=Users,DC=cisco,DC=com", "ciscoValue": "HR-Group-Policy", "type": "ldaptociscovaluemapping" }, { "ldapValue": "CN=IT-Group,CN=Users,DC=cisco,DC=com", "ciscoValue": "IT-Group-Policy", "type": "ldaptociscovaluemapping" } ], "type": "ldapattributemapping" } ], "type": "ldapattributemap" }
注意:可以使用dsquery命令從AD伺服器檢索memberOf欄位,或從FTD上的LDAP調試中讀取該欄位。在調試日誌中,查詢memberOf value:字段。
此POST請求的響應看起來與下一個輸出類似:
步驟 7.新增新的GET請求以獲取FDM上的當前AD領域配置。
獲取當前AD領域配置的URL為:https://<FTD Management IP>/api/fdm/latest/object/realms
請注意,關鍵字ldapAttributeMap的值為null。
步驟 8.建立新的PUT請求以編輯AD領域。 複製上一步的GET響應輸出,並將其新增到此新PUT請求的正文中。此步驟可用於對當前AD領域設定進行任何修改,例如:更改密碼、IP地址或新增任何鍵(如ldapAttributeMap)的新值。
注意:複製專案清單的內容,而不是複製整個GET響應輸出非常重要。PUT請求的「請求URL」必須附加有對其進行了更改的對象的專案ID。在本例中,值為:bf50a8ab-9819-11ea-ba77-d32ecc224295
用於編輯當前AD領域配置的URL為:https://<FTD Management IP>/api/fdm/latest/object/realms/<realm ID>
PUT請求的主體必須包含以下內容:
版本 | 從之前的GET請求的響應獲取的版本 |
id | 從之前的GET請求的響應獲取的ID |
ldap屬性對映 | 來自建立LDAP屬性對映請求的響應的ldap-id |
此範例中的組態主體為:
{ "version": "ks3p4he5ixiyy", "name": "LDAP-AD", "directoryConfigurations": [ { "hostname": "<IP Address>", "port": 389, "encryptionProtocol": "NONE", "encryptionCert": null, "type": "directoryconfiguration" } ], "enabled": true, "systemDefined": false, "realmId": 3, "dirUsername": "administrator@example.com", "dirPassword": "*********", "baseDN": "dc=example, dc=com", "ldapAttributeMap" : { "id": "b2147c0e-984a-11ea-ba77-5b2ed5c4ab8c", "type": "ldapattributemap" }, "adPrimaryDomain": "example.com", "id": "bf50a8ab-9819-11ea-ba77-d32ecc224295", "type": "activedirectoryrealm", "links": { "self": "https:///api/fdm/latest/object/realms/bf50a8ab-9819-11ea-ba77-d32ecc224295" } }
驗證ldapAttributeMap id是否與此請求的響應正文中匹配。
(可選)。可以使用PUT請求修改LDAP屬性對映。建立新的PUT請求Edit Attribute-Map,並進行任何更改,如Attribute-Map或memberOf值的名稱。T
在下一個示例中,所有三個組的ldapvalue的值都已從CN=Users更改為CN=UserGroup。
(可選)。要刪除現有LDAP屬性對映,請建立DELETE請求刪除屬性對映。包括來自上一個HTTP響應的map-id,並將其與刪除請求的基本URL附加。
註:如果memberOf屬性包含空格,則必須對屬性進行URL編碼,以便Web伺服器對其進行分析。否則會收到400錯誤要求HTTP回應。 對於包含空格字元的字串,「%20」或「+」可用於避免此錯誤。
步驟 9.導航回到FDM,選擇「部署」圖示,然後按一下「立即部署」。
可以在FDM的部署歷史記錄部分驗證部署更改。
為了測試此配置,請在使用者名稱和密碼欄位中提供AD憑據。
當屬於AD組Finance-Group的使用者嘗試登入時,該嘗試按預期成功。
當屬於AD中Management-Group的使用者嘗試連線到Connection-Profile Remote-Access-LDAP時,由於沒有LDAP屬性對映返回匹配項,因此此使用者在FTD上繼承的組策略是NOACCESS,其vpn-simultaneous-logins設定為0。因此,此使用者的登入嘗試失敗。
可從FTD CLI使用下一個show命令驗證設定:
firepower# show vpn-sessiondb anyconnect Session Type: AnyConnect Username : Finance-User Index : 26 Assigned IP : 192.168.10.1 Public IP : 10.1.1.1 Protocol : AnyConnect-Parent SSL-Tunnel License : AnyConnect Premium Encryption : AnyConnect-Parent: (1)none SSL-Tunnel: (1)AES-GCM-256 Hashing : AnyConnect-Parent: (1)none SSL-Tunnel: (1)SHA384 Bytes Tx : 22491197 Bytes Rx : 14392 Group Policy : Finance-Group-Policy Tunnel Group : Remote-Access-LDAP Login Time : 11:14:43 UTC Sat Oct 12 2019 Duration : 0h:02m:09s Inactivity : 0h:00m:00s VLAN Mapping : N/A VLAN : none Audt Sess ID : 000000000001a0005da1b5a3 Security Grp : none Tunnel Zone : 0
firepower# show run aaa-server LDAP-AD aaa-server LDAP-AD protocol ldap realm-id 3 aaa-server AD1 host 192.168.1.1 server-port 389 ldap-base-dn dc=example, dc=com ldap-scope subtree ldap-login-password ***** ldap-login-dn Administrator@example.com server-type auto-detect ldap-attribute-map Attribute-Map
firepower# show run ldap attribute-map ldap attribute-map Attribute-Map map-name memberOf Group-Policy map-value memberOf CN=Finance-Group,CN=Users,DC=cisco,DC=com Finance-Group-Policy map-value memberOf CN=HR-Group,CN=Users,DC=cisco,DC=com HR-Group-Policy map-value memberOf CN=IT-Group,CN=Users,DC=cisco,DC=com IT-Group-Policy
配置REST API的最常見問題之一就是不時更新持有者令牌。令牌到期時間在身份驗證請求的響應中給出。如果此時間過期,則可以使用額外的刷新令牌更長時間。刷新令牌也到期後,必須傳送新的身份驗證請求,以檢索新的訪問令牌。
附註:使用 debug 指令之前,請先參閱有關 Debug 指令的重要資訊。
您可以設定各種偵錯層級。預設情況下,使用級別1。如果更改調試級別,調試的詳細程度可能會增加。請謹慎執行此操作,尤其是在生產環境中。
FTD CLI上的以下調試有助於解決與LDAP屬性對映相關的問題
debug ldap 255
debug webvpn condition user <username> debug webvpn anyconnect 255
debug aaa common 127
在此示例中,收集了下一個調試,以演示連線前提及測試使用者時從AD伺服器接收的資訊。
Finance-User的LDAP調試:
[48] Session Start [48] New request Session, context 0x00002b0482c2d8e0, reqType = Authentication [48] Fiber started [48] Creating LDAP context with uri=ldap://192.168.1.1:389 [48] Connect to LDAP server: ldap://192.168.1.1:389, status = Successful [48] supportedLDAPVersion: value = 3 [48] supportedLDAPVersion: value = 2 [48] LDAP server192.168.1.1 is Active directory [48] Binding as Administrator@cisco.com [48] Performing Simple authentication for Administrator@example.com to192.168.1.1 [48] LDAP Search: Base DN = [dc=cisco, dc=com] Filter = [sAMAccountName=Finance-User] Scope = [SUBTREE] [48] User DN = [CN=Finance-User,OU=Finance,OU=VPN,DC=cisco,DC=com] [48] Talking to Active Directory server 192.168.1.1 [48] Reading password policy for Finance-User, dn:CN=Finance-User,OU=Finance,OU=VPN,DC=cisco,DC=com [48] Read bad password count 0 [48] Binding as Finance-User [48] Performing Simple authentication for Finance-User to 192.168.1.1 [48] Processing LDAP response for user Finance-User [48] Message (Finance-User): [48] Authentication successful for Finance-User to 192.168.1.1 [48] Retrieved User Attributes: [48] objectClass: value = top [48] objectClass: value = person [48] objectClass: value = organizationalPerson [48] objectClass: value = user [48] cn: value = Finance-User [48] givenName: value = Finance-User [48] distinguishedName: value = CN=Finance-User,OU=Finance,OU=VPN,DC=cisco,DC=com [48] instanceType: value = 4 [48] whenCreated: value = 20191011094454.0Z [48] whenChanged: value = 20191012080802.0Z [48] displayName: value = Finance-User [48] uSNCreated: value = 16036 [48] memberOf: value = CN=Finance-Group,CN=Users,DC=cisco,DC=com [48] mapped to Group-Policy: value = Finance-Group-Policy [48] mapped to LDAP-Class: value = Finance-Group-Policy [48] memberOf: value = CN=Users,CN=Builtin,DC=cisco,DC=com [48] mapped to Group-Policy: value = CN=Users,CN=Builtin,DC=cisco,DC=com [48] mapped to LDAP-Class: value = CN=Users,CN=Builtin,DC=cisco,DC=com [48] uSNChanged: value = 16178 [48] name: value = Finance-User [48] objectGUID: value = .J.2...N....X.OQ [48] userAccountControl: value = 512 [48] badPwdCount: value = 0 [48] codePage: value = 0 [48] countryCode: value = 0 [48] badPasswordTime: value = 0 [48] lastLogoff: value = 0 [48] lastLogon: value = 0 [48] pwdLastSet: value = 132152606948243269 [48] primaryGroupID: value = 513 [48] objectSid: value = .............B...a5/ID.dT... [48] accountExpires: value = 9223372036854775807 [48] logonCount: value = 0 [48] sAMAccountName: value = Finance-User [48] sAMAccountType: value = 805306368 [48] userPrincipalName: value = Finance-User@cisco.com [48] objectCategory: value = CN=Person,CN=Schema,CN=Configuration,DC=cisco,DC=com [48] dSCorePropagationData: value = 20191011094757.0Z [48] dSCorePropagationData: value = 20191011094614.0Z [48] dSCorePropagationData: value = 16010101000000.0Z [48] lastLogonTimestamp: value = 132153412825919405 [48] Fiber exit Tx=538 bytes Rx=2720 bytes, status=1 [48] Session End
Management-User的LDAP調試:
[51] Session Start [51] New request Session, context 0x00002b0482c2d8e0, reqType = Authentication [51] Fiber started [51] Creating LDAP context with uri=ldap://192.168.1.1:389 [51] Connect to LDAP server: ldap://192.168.1.1:389, status = Successful [51] supportedLDAPVersion: value = 3 [51] supportedLDAPVersion: value = 2 [51] LDAP server 192.168.1.1 is Active directory [51] Binding as Administrator@cisco.com [51] Performing Simple authentication for Administrator@example.com to 192.168.1.1 [51] LDAP Search: Base DN = [dc=cisco, dc=com] Filter = [sAMAccountName=Management-User] Scope = [SUBTREE] [51] User DN = [CN=Management-User,OU=Management,OU=VPN,DC=cisco,DC=com] [51] Talking to Active Directory server 192.168.1.1 [51] Reading password policy for Management-User, dn:CN=Management-User,OU=Management,OU=VPN,DC=cisco,DC=com [51] Read bad password count 0 [51] Binding as Management-User [51] Performing Simple authentication for Management-User to 192.168.1.1 [51] Processing LDAP response for user Management-User [51] Message (Management-User): [51] Authentication successful for Management-User to 192.168.1.1 [51] Retrieved User Attributes: [51] objectClass: value = top [51] objectClass: value = person [51] objectClass: value = organizationalPerson [51] objectClass: value = user [51] cn: value = Management-User [51] givenName: value = Management-User [51] distinguishedName: value = CN=Management-User,OU=Management,OU=VPN,DC=cisco,DC=com [51] instanceType: value = 4 [51] whenCreated: value = 20191011095036.0Z [51] whenChanged: value = 20191011095056.0Z [51] displayName: value = Management-User [51] uSNCreated: value = 16068 [51] memberOf: value = CN=Management-Group,CN=Users,DC=cisco,DC=com [51] mapped to Group-Policy: value = CN=Management-Group,CN=Users,DC=cisco,DC=com [51] mapped to LDAP-Class: value = CN=Management-Group,CN=Users,DC=cisco,DC=com [51] memberOf: value = CN=Users,CN=Builtin,DC=cisco,DC=com [51] mapped to Group-Policy: value = CN=Users,CN=Builtin,DC=cisco,DC=com [51] mapped to LDAP-Class: value = CN=Users,CN=Builtin,DC=cisco,DC=com [51] uSNChanged: value = 16076 [51] name: value = Management-User [51] objectGUID: value = i._(.E.O.....Gig [51] userAccountControl: value = 512 [51] badPwdCount: value = 0 [51] codePage: value = 0 [51] countryCode: value = 0 [51] badPasswordTime: value = 0 [51] lastLogoff: value = 0 [51] lastLogon: value = 0 [51] pwdLastSet: value = 132152610365026101 [51] primaryGroupID: value = 513 [51] objectSid: value = .............B...a5/ID.dW... [51] accountExpires: value = 9223372036854775807 [51] logonCount: value = 0 [51] sAMAccountName: value = Management-User [51] sAMAccountType: value = 805306368 [51] userPrincipalName: value = Management-User@cisco.com [51] objectCategory: value = CN=Person,CN=Schema,CN=Configuration,DC=cisco,DC=com [51] dSCorePropagationData: value = 20191011095056.0Z [51] dSCorePropagationData: value = 16010101000000.0Z [51] Fiber exit Tx=553 bytes Rx=2688 bytes, status=1 [51] Session End
如需其他協助,請聯絡思科技術協助中心(TAC)。需要有效的支援合約: 思科全球支援聯絡人.
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
07-Jul-2023 |
初始版本 |