소개
이 문서에서는 로그인 시 그룹 정책을 할당하기 위해 LDAP(Lightweight Directory Access Protocol) 인증을 사용하는 방법에 대해 설명합니다. 관리자는 VPN 사용자에게 다양한 액세스 권한 또는 WebVPN 콘텐츠를 제공하기를 원하는 경우가 많습니다. ASA(Adaptive Security Appliance)에서 이 작업은 여러 사용자에게 여러 그룹 정책을 할당하여 정기적으로 수행됩니다. LDAP 인증이 사용 중인 경우 LDAP 특성 맵을 사용하여 자동으로 이를 수행할 수 있습니다.
LDAP를 사용하여 그룹 정책을 사용자에게 할당하려면 AD(Active Directory) 특성 memberOf와 같은 LDAP 특성을 ASA에서 이해하는 IETF-Radius-Class 특성에 매핑하는 맵을 구성해야 합니다. 특성 매핑이 설정되면 LDAP 서버에 구성된 특성 값을 ASA의 그룹 정책 이름에 매핑해야 합니다.
참고: memberOf 특성은 사용자가 Active Directory에서 속해 있는 그룹에 해당합니다. 사용자가 Active Directory에서 둘 이상의 그룹에 속할 수 있습니다. 이렇게 하면 여러 memberOf 특성이 서버에서 전송되지만 ASA는 하나의 특성을 하나의 그룹 정책에 일치시킬 수 있습니다.
사전 요구 사항
요구 사항
이 문서에서는 ASA에 작동 중인 LDAP 인증 설정이 이미 구성되어 있어야 합니다. ASA에서 기본 LDAP 인증 컨피그레이션을 설정하는 방법을 알아보려면 WebVPN 사용자를 위한 LDAP 인증 구성을 참조하십시오.
사용되는 구성 요소
이 문서의 정보는 PIX/ASA 8.0을 기반으로 합니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우, 모든 명령어의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
이 예에서는 AD/LDAP 특성 memberOf가 ASA 특성 CVPN3000-Radius-IETF-Class에 매핑됩니다. 클래스 특성은 ASA에 그룹 정책을 할당하는 데 사용됩니다. ASA에서 LDAP로 사용자를 인증할 때 완료하는 일반 프로세스입니다.
-
사용자가 ASA에 대한 연결을 시작합니다.
-
ASA는 Microsoft AD/LDAP 서버로 해당 사용자를 인증하도록 구성됩니다.
-
ASA는 ASA에 구성된 자격 증명(이 경우 admin)을 사용하여 LDAP 서버에 바인딩하고 제공된 사용자 이름을 조회합니다.
-
사용자 이름이 발견되면 ASA는 사용자가 로그인 시 제공한 자격 증명을 사용하여 LDAP 서버에 바인딩을 시도합니다.
-
두 번째 바인딩이 성공하면 ASA는 memberOf를 포함하는 사용자 특성을 처리합니다.
-
memberOf 특성은 구성된 LDAP 특성 맵에 의해 CVPN3000-Radius-IETF-Class에 매핑됩니다.
-
새로 할당된 CVPN3000-Radius-IETF-Class 특성을 검사하고 그룹 정책을 결정합니다.
구성
ASA 구성
이 섹션에서는 LDAP 특성을 기반으로 사용자에게 그룹 정책을 할당하도록 ASA를 구성하는 정보를 제공합니다.
ASDM
ASA에서 LDAP 맵을 구성하려면 ASDM(Adaptive Security Device Manager)에서 다음 단계를 완료합니다.
-
Configuration(구성) > Remote Access VPN(원격 액세스 VPN) > AAA Setup(AAA 설정) > LDAP Attribute Map(LDAP 특성 맵)으로 이동합니다.
-
Add(추가)를 클릭합니다.
-
지도의 이름을 지정합니다.
-
ASA에서 LDAP 특성과 IETF-Radius-Class 특성 간의 매핑을 생성합니다. 이 예에서 고객 이름은 Active Directory의 memberOf 특성입니다. IETF-Radius-Class의 Cisco Name에 매핑됩니다. Add(추가)를 클릭합니다.
참고: 속성 이름과 값은 대/소문자를 구분합니다.
참고: LDAP 서버에서 제공하는 정확한 특성 이름 또는 맞춤법을 모르는 경우 맵을 만들기 전에 디버그를 검토하는 것이 좋습니다. 디버그로 LDAP 특성을 식별하는 방법에 대한 자세한 내용은 Verify 섹션을 참조하십시오.
-
특성 매핑을 추가한 후 Map Value(맵 값) 탭을 클릭하고 Add(추가)를 클릭하여 값 매핑을 생성합니다. 필요한 만큼 값 매핑을 추가하고 완료되면 OK를 클릭합니다.
이 예에서 CN=Employees,CN=Users,DC=ftwsecurity,DC=cisco,DC=com memberOf 값은 ExamplePolicy1에 매핑되고 CN=Contractors,CN=Users,DC=ftwsecurity,DC=cisco,DC=com memberOf 값은 ExamplePolicy2에 매핑됩니다.
LDAP 특성 맵 완료
-
맵을 만든 후에는 LDAP 인증에 대해 구성된 AAA(Authentication, Authorization, and Accounting) 서버에 할당해야 합니다. 왼쪽 창에서 AAA Server Groups(AAA 서버 그룹)를 선택합니다.
-
LDAP에 대해 구성된 AAA 서버를 선택하고 Edit를 클릭합니다.
-
나타나는 창의 아래쪽에서 LDAP Attribute Map 드롭다운 목록을 찾습니다. 방금 생성한 목록을 선택합니다. 완료되면 OK(확인)를 클릭합니다.
CLI
ASA에서 LDAP 맵을 구성하려면 CLI에서 다음 단계를 완료합니다.
ciscoasa#configure terminal
!--- Create the LDAP Attribute Map.
ciscoasa(config)#ldap attribute-map CISCOMAP
ciscoasa(config-ldap-attribute-map)#map-name memberOf IETF-Radius-Class
ciscoasa(config-ldap-attribute-map)#map-value memberOf CN=Employees,CN=Users,
DC=ftwsecurity,DC=cisco,DC=com ExamplePolicy1
ciscoasa(config-ldap-attribute-map)#map-value memberOf CN=Contractors,CN=Users,
DC=ftwsecurity,DC=cisco,DC=com ExamplePolicy2
ciscoasa(config-ldap-attribute-map)#exit
!--- Assign the map to the LDAP AAA server.
ciscoasa(config)#aaa-server LDAP_SRV_GRP (inside) host 192.168.1.2
ciscoasa(config-aaa-server-host)#ldap-attribute-map CISCOMAP
NOACCESS 그룹 정책 구성
사용자가 LDAP 그룹의 일부가 아닐 때 VPN 연결을 거부하기 위해 NOACCESS 그룹 정책을 생성할 수 있습니다. 이 구성 코드 조각은 참조용으로 표시됩니다.
group-policy NOACCESS internal
group-policy NOACCESS attributes
vpn-simultaneous-logins 0
vpn-tunnel-protocol IPSec webvpn
터널 그룹에 기본 그룹 정책으로 이 그룹 정책을 적용해야 합니다. LDAP 특성 맵에서 매핑을 가져오는 사용자(예: 원하는 LDAP 그룹에 속한 사용자)는 원하는 그룹 정책을 가져오고, 매핑을 가져오지 않는 사용자(예: 원하는 LDAP 그룹에 속하지 않은 사용자)는 터널 그룹에서 NOACCESS 그룹 정책을 가져와서 액세스를 차단할 수 있습니다.
참고: 일부 사용자에 대한 액세스를 거부하는 다른 LDAP 특성 매핑을 만드는 방법에 대한 자세한 내용은 ASA/PIX: LDAP 컨피그레이션 예를 통해 VPN 클라이언트를 VPN 그룹 정책에 매핑 을 참조하십시오.
Active Directory 또는 기타 LDAP 서버 구성
Active Directory 또는 기타 LDAP 서버에 필요한 유일한 컨피그레이션은 사용자의 특성과 관련이 있습니다. 이 예에서 사용자 Kate Austen은 AD의 Employees 그룹 멤버입니다.
Ben Linus는 Contractors 그룹의 멤버입니다.
다음을 확인합니다.
컨피그레이션을 확인하려면 이 섹션을 사용합니다.
로그인
컨피그레이션의 성공을 확인하려면 LDAP 특성 맵과 함께 그룹 정책이 지정되어야 하는 사용자로 로그인합니다. 이 예에서는 각 그룹 정책에 대해 배너가 구성됩니다. 스크린샷은 kate 사용자가 성공적으로 로그인했으며 Employees 그룹의 구성원이므로 ExamplePolicy1이 적용되었음을 보여줍니다.
LDAP 트랜잭션 디버그
LDAP 매핑이 발생하는지 확인하거나 LDAP 서버가 전송하는 특성에 대한 자세한 정보를 보려면 ASA 명령줄에서 debug ldap 255 명령을 실행한 다음 인증을 시도합니다.
이 디버그에서 사용자 kate는 Employees 그룹 구성원이므로 그룹 정책인 ExamplePolicy1이 할당됩니다. 또한 이 디버그는 kate가 Castaways 그룹의 멤버이지만 이 특성이 매핑되지 않았으므로 무시됨을 보여줍니다.
ciscoasa#debug ldap 255
debug ldap enabled at level 255
ciscoasa#
[105] Session Start
[105] New request Session, context 0xd5481808, reqType = 1
[105] Fiber started
[105] Creating LDAP context with uri=ldap://192.168.1.2:389
[105] Connect to LDAP server: ldap://192.168.1.2:389, status = Successful
[105] defaultNamingContext: value = DC=ftwsecurity,DC=cisco,DC=com
[105] supportedLDAPVersion: value = 3
[105] supportedLDAPVersion: value = 2
[105] supportedSASLMechanisms: value = GSSAPI
[105] supportedSASLMechanisms: value = GSS-SPNEGO
[105] supportedSASLMechanisms: value = EXTERNAL
[105] supportedSASLMechanisms: value = DIGEST-MD5
[105] Binding as administrator
[105] Performing Simple authentication for admin to 192.168.1.2
[105] LDAP Search:
Base DN = [dc=ftwsecurity, dc=cisco, dc=com]
Filter = [sAMAccountName=kate]
Scope = [SUBTREE]
[105] User DN = [CN=Kate Austen,CN=Users,DC=ftwsecurity,DC=cisco,DC=com]
[105] Talking to Active Directory server 192.168.1.2
[105] Reading password policy for kate, dn:CN=Kate Austen,CN=Users,
DC=ftwsecurity,DC=cisco,DC=com
[105] Read bad password count 0
[105] Binding as user
[105] Performing Simple authentication for kate to 192.168.1.2
[105] Checking password policy for user kate
[105] Binding as administrator
[105] Performing Simple authentication for admin to 192.168.1.2
[105] Authentication successful for kate to 192.168.1.2
[105] Retrieving user attributes from server 192.168.1.2
[105] Retrieved Attributes:
[105] objectClass: value = top
[105] objectClass: value = person
[105] objectClass: value = organizationalPerson
[105] objectClass: value = user
[105] cn: value = Kate Austen
[105] sn: value = Austen
[105] givenName: value = Kate
[105] distinguishedName: value = CN=Kate Austen,CN=Users,DC=ftwsecurity,
DC=cisco,DC=com
[105] instanceType: value = 4
[105] whenCreated: value = 20070815155224.0Z
[105] whenChanged: value = 20070815195813.0Z
[105] displayName: value = Kate Austen
[105] uSNCreated: value = 16430
[105] memberOf: value = CN=Castaways,CN=Users,DC=ftwsecurity,DC=cisco,DC=com
[105] mapped to IETF-Radius-Class: value = CN=Castaways,CN=Users,
DC=ftwsecurity,DC=cisco,DC=com
[105] memberOf: value = CN=Employees,CN=Users,DC=ftwsecurity,DC=cisco,DC=com
[105] mapped to IETF-Radius-Class: value = ExamplePolicy1
[105] uSNChanged: value = 20500
[105] name: value = Kate Austen
[105] objectGUID: value = ..z...yC.q0.....
[105] userAccountControl: value = 66048
[105] badPwdCount: value = 0
[105] codePage: value = 0
[105] countryCode: value = 0
[105] badPasswordTime: value = 128316837694687500
[105] lastLogoff: value = 0
[105] lastLogon: value = 128316837785000000
[105] pwdLastSet: value = 128316667442656250
[105] primaryGroupID: value = 513
[105] objectSid: value = ............Q..p..*.p?E.Z...
[105] accountExpires: value = 9223372036854775807
[105] logonCount: value = 0
[105] sAMAccountName: value = kate
[105] sAMAccountType: value = 805306368
[105] userPrincipalName: value = kate@ftwsecurity.cisco.com
[105] objectCategory: value = CN=Person,CN=Schema,CN=Configuration,
DC=ftwsecurity,DC=cisco,DC=com
[105] dSCorePropagationData: value = 20070815195237.0Z
[105] dSCorePropagationData: value = 20070815195237.0Z
[105] dSCorePropagationData: value = 20070815195237.0Z
[105] dSCorePropagationData: value = 16010108151056.0Z
[105] Fiber exit Tx=685 bytes Rx=2690 bytes, status=1
[105] Session End
이 디버그에서 사용자 ben은 Contractors 그룹의 구성원이므로 ExamplePolicy2 그룹 정책이 할당됩니다. 또한 이 디버그는 ben이 TheOthers 그룹의 멤버이지만 해당 특성이 매핑되지 않았으므로 무시됩니다.
ciscoasa#debug ldap 255
debug ldap enabled at level 255
ciscoasa#
[106] Session Start
[106] New request Session, context 0xd5481808, reqType = 1
[106] Fiber started
[106] Creating LDAP context with uri=ldap://192.168.1.2:389
[106] Connect to LDAP server: ldap://192.168.1.2:389, status = Successful
[106] defaultNamingContext: value = DC=ftwsecurity,DC=cisco,DC=com
[106] supportedLDAPVersion: value = 3
[106] supportedLDAPVersion: value = 2
[106] supportedSASLMechanisms: value = GSSAPI
[106] supportedSASLMechanisms: value = GSS-SPNEGO
[106] supportedSASLMechanisms: value = EXTERNAL
[106] supportedSASLMechanisms: value = DIGEST-MD5
[106] Binding as administrator
[106] Performing Simple authentication for admin to 192.168.1.2
[106] LDAP Search:
Base DN = [dc=ftwsecurity, dc=cisco, dc=com]
Filter = [sAMAccountName=ben]
Scope = [SUBTREE]
[106] User DN = [CN=Ben Linus,CN=Users,DC=ftwsecurity,DC=cisco,DC=com]
[106] Talking to Active Directory server 192.168.1.2
[106] Reading password policy for ben, dn:CN=Ben Linus,CN=Users,DC=ftwsecurity,
DC=cisco,DC=com
[106] Read bad password count 0
[106] Binding as user
[106] Performing Simple authentication for ben to 192.168.1.2
[106] Checking password policy for user ben
[106] Binding as administrator
[106] Performing Simple authentication for admin to 192.168.1.2
[106] Authentication successful for ben to 192.168.1.2
[106] Retrieving user attributes from server 192.168.1.2
[106] Retrieved Attributes:
[106] objectClass: value = top
[106] objectClass: value = person
[106] objectClass: value = organizationalPerson
[106] objectClass: value = user
[106] cn: value = Ben Linus
[106] sn: value = Linus
[106] givenName: value = Ben
[106] distinguishedName: value = CN=Ben Linus,CN=Users,DC=ftwsecurity,
DC=cisco,DC=com
[106] instanceType: value = 4
[106] whenCreated: value = 20070815160840.0Z
[106] whenChanged: value = 20070815195243.0Z
[106] displayName: value = Ben Linus
[106] uSNCreated: value = 16463
[106] memberOf: value = CN=TheOthers,CN=Users,DC=ftwsecurity,DC=cisco,DC=com
[106] mapped to IETF-Radius-Class: value = CN=TheOthers,CN=Users,
DC=ftwsecurity,DC=cisco,DC=com
[106] memberOf: value = CN=Contractors,CN=Users,DC=ftwsecurity,DC=cisco,DC=com
[106] mapped to IETF-Radius-Class: value = ExamplePolicy2
[106] uSNChanged: value = 20499
[106] name: value = Ben Linus
[106] objectGUID: value = ..j...5@.z.|...n
[106] userAccountControl: value = 66048
[106] badPwdCount: value = 0
[106] codePage: value = 0
[106] countryCode: value = 0
[106] badPasswordTime: value = 0
[106] lastLogoff: value = 0
[106] lastLogon: value = 0
[106] pwdLastSet: value = 128316677201718750
[106] primaryGroupID: value = 513
[106] objectSid: value = ............Q..p..*.p?E.^...
[106] accountExpires: value = 9223372036854775807
[106] logonCount: value = 0
[106] sAMAccountName: value = ben
[106] sAMAccountType: value = 805306368
[106] userPrincipalName: value = ben@ftwsecurity.cisco.com
[106] objectCategory: value = CN=Person,CN=Schema,CN=Configuration,
DC=ftwsecurity,DC=cisco,DC=com
[106] dSCorePropagationData: value = 20070815195243.0Z
[106] dSCorePropagationData: value = 20070815195243.0Z
[106] dSCorePropagationData: value = 20070815195243.0Z
[106] dSCorePropagationData: value = 16010108151056.0Z
[106] Fiber exit Tx=680 bytes Rx=2642 bytes, status=1
[106] Session End
문제 해결
컨피그레이션 문제를 해결하려면 이 섹션을 사용합니다.
특성 이름 및 값은 대/소문자를 구분합니다.
특성 이름 및 값은 대/소문자를 구분합니다. 매핑이 제대로 수행되지 않을 경우 Cisco 및 LDAP 특성 이름과 값 모두에 대해 LDAP 특성 맵에서 올바른 맞춤법 및 대문자를 사용하는지 확인해야 합니다.
ASA가 LDAP 서버에서 사용자를 인증할 수 없음
ASA는 LDAP 서버에서 사용자를 인증할 수 없습니다. 디버그는 다음과 같습니다.
ldap 255 출력:[1555805] 세션 시작[1555805] 새 요청 세션, 컨텍스트 0xcd66c028, reqType = 1[1555805] 파이버 시작[1555805] uri=ldaps://172.30.74.70:636[1555805]를 사용하여 LDAP 컨텍스트 만들기 LDAP 서버에 연결: ldaps://172.30.74.70:636, 상태 = 성공[1555805] 지원LDAPVersion: 값 = 3[1555805] 지원LDAPVersion: 값 = 2[1555805] 관리자로 바인딩[1555805] 172.30.74.70[1555805] sysservices에 대한 단순 인증 반환 코드(49) 잘못된 자격 증명[1555805] 반환된 코드(-1)로 바인딩하지 못했습니다. LDAP 서버[1555805]에 연결할 수 없습니다. Tx=222바이트 Rx=605바이트, 상태=-2[1555805] 세션 끝
디버깅의 경우 LDAP 로그인 DN 형식이 잘못되었거나 비밀번호가 잘못되었으므로 문제를 해결하기 위해 두 가지를 모두 확인하십시오.