소개
이 문서에서는 보안 방화벽에서 권한 부여를 위해 Duo 및 LDAP 매핑을 사용하는 AnyConnect SSO(Single Sign-On) 구성 예제를 설명합니다.
사전 요구 사항
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- Cisco AnyConnect Secure Mobility Client
- Cisco Secure FTD(Firepower 위협 방어)
- Cisco FMC(Secure Firewall Management Center)
- Duo Security의 기초
- SAML(Security Assertion Markup Language)
- Microsoft Windows Server에서 AD(Active Directory) 서비스 구성
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 버전을 기반으로 합니다.
- Cisco Secure FMC 버전 7.4.0
- Cisco Secure FTD 버전 7.4.0
- Duo 인증 프록시
- Anyconnect Secure Mobility Client 버전 4.10.06079
- AD 서버로 구성된 Windows Server 2016
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
구성
네트워크 다이어그램
DUO SSO 트래픽 흐름
Duo 트래픽 흐름
- AnyConnect 클라이언트는 Cisco Secure FTD에 대한 SSL(Secure Sockets Layer) VPN(Virtual Private Network) 연결을 시작합니다.
- 보안 FTD는 AnyConnect 클라이언트에 포함된 브라우저를 SAML 인증을 위해 Duo SSO로 리디렉션합니다.
- AnyConnect 사용자는 기본 온프레미스 Active Directory 자격 증명으로 로그인합니다.
- Duo SSO는 온프레미스 Duo 인증 프록시를 통해 온프레미스 Active Directory에 대한 기본 인증을 수행합니다.
- 기본 인증이 성공하면 Duo SSO는 2단계 인증(2FA)을 시작합니다.
- AnyConnect 사용자가 Duo 2FA를 완료합니다.
- Duo SSO는 성공을 나타내는 응답 메시지와 함께 사용자를 FTD로 다시 리디렉션합니다.
외부 LDAP를 사용하는 SAML
SAML 사용자의 외부 권한 부여는 IdP에서 반환된 NameID 값에 따라 달라집니다. 보안 방화벽은 NameID 필드를 사용자 이름에 매핑하며, 이 사용자 이름을 사용하여 LDAP를 쿼리할 수 있습니다.
참고: 이 문서에서 사용하는 컨피그레이션은 AD 그룹에 속한 사용자가 RA(원격 액세스) VPN 연결을 설정할 수 있도록 하기 위한 것입니다. 지도에 정의되지 않은 서로 다른 AD 그룹의 사용자는 연결이 금지됩니다.
설정
Duo 관리 포털 컨피그레이션
Duo SSO의 기본 인증 소스로 사용할 수 있는 AD 또는 SAML ID 공급자를 구성합니다.
또한 온프레미스 AD 또는 SAML ID 공급자에 연결할 수 있는 Duo Authentication Proxy(고가용성을 위해 3개의 인증 프록시 서버 권장)가 필요합니다.
자세한 내용은 Duo Single Sign-On을 참조하십시오.
1단계. Duo 관리 포털에서 Cisco Secure FTD를 구성합니다.
- Duo Admin Portal(듀오 관리 포털)에 로그인하고
Applications > Protect an Application
.
- 보호 유형이 다음과 같은 FTD 검색
2FA with SSO hosted by Duo
.
- 클릭
Protect
Cisco FTD VPN을 구성하기 위해 맨 오른쪽에 있습니다.
Duo Protect 애플리케이션
2단계. Duo 관리 포털에서 서비스 공급자 정보를 구성합니다.
다음 특성이 사용됩니다.
- Cisco Firepower 기본 URL:
fj-ftdv.example.com
- 연결 프로파일 이름:
SSO-AD_Split-tunnel
- 메일 특성:
Duo 서비스 공급자
참고: 메일 특성을 다음으로 설정할 수 있습니다.
. 이 경우 ldap-naming-attribute
변경 내용 userPrincipalName
수신 sAMAccountName
Cisco Secure FTD에 대해 살펴보겠습니다
3단계. 다음을 클릭합니다. Save
을 눌러 컨피그레이션을 저장합니다.
4단계. 탐색 Users > Add User
그림과 같이
Duo 사용자 추가
5단계. 새 사용자에게 필요한 모든 정보를 빈칸에 입력합니다.
Duo 사용자 정보
참고: 사용자 이름 데이터 및 이메일 데이터는 Active Directory 서버에서 제공된 정보와 일치해야 합니다.
6단계. 사용자의 전화 번호를 추가하려면 Phone을 추가합니다. 이는 사용자가 Duo Push를 사용하여 2FA를 통해 인증하는 데 필요합니다.
Duo 전화 추가
7단계. 특정 사용자에 대해 Duo Mobile을 활성화합니다.
듀오 휴대폰 활성화
참고: 최종 사용자 장치에 Duo Mobile이 설치되어 있어야 합니다.
8단계. Duo Mobile Activation 코드를 생성합니다.
Duo 활성화 코드
9단계. SMS로 지침을 전송합니다.
듀오 SMS
10단계. SMS를 통해 전송된 링크를 클릭하면 Duo 앱이 Device info(디바이스 정보) 섹션의 사용자 계정에 연결됩니다.
Duo 정보 섹션
11단계. 추가할 모든 사용자에 대해 이 과정을 반복합니다.
12단계. 응용 프로그램 메타데이터 검색:
- 탐색
Applications
1단계에서 생성한 서비스 공급자 애플리케이션을 클릭합니다.
- 복사
Identity Provider Entity ID URL
, SSO URL
및 Logout URL
메타데이터에서 가져옵니다.
Duo IdP 정보
13단계. 다운로드 Identity Provider Certificate
.
Duo IdP 인증서 다운로드
FMC를 통한 FTD 컨피그레이션
1단계. FMC에 IdP(Identity Provider) 인증서를 설치하고 등록합니다.
- 탐색
Devices > Certificates
.
FMC 인증서 1
- 클릭
Add
. 이 인증서에 등록할 FTD를 선택합니다.
- 의
Add Cert Enrollment
섹션에서 임의의 이름을 IdP 인증서의 레이블로 사용합니다.
- 클릭
Manual
.
- 다음을 확인하십시오.
CA only
및 Skip Check for CA flag fields
.
- base64 형식의 IdP CA 인증서를 붙여넣습니다.
- Save(저장)를 클릭한 다음 Add(추가)를 클릭합니다.
FMC 인증서 등록
2단계. SAML 서버 설정을 구성합니다.
- 탐색
Objects > Object Management > AAA Servers > Single Sign-on Server.
- 선택
Add Single Sign-on Server.
FMC SSO
- Duo에서 수집한 메타데이터를 기반으로 새 SSO 서버에서 SAML 값을 구성합니다.
- ID 공급자 엔티티 ID: 듀오 애플리케이션의 entityID
- SSO URL: Duo 애플리케이션의 SSO 서비스
- Logout URL: SingleLogoutService from Duo application(로그아웃 URL: 듀오 애플리케이션의 SingleLogoutService)
- 기본 URL: FTD SSL ID 인증서의 FQDN
- ID 공급자 인증서: IdP 서명 인증서
- 서비스 공급자 인증서: FTD 서명 인증서
FMC SSO 정보
참고: Request Timeout
인증 프로세스 중에 Duo Push가 전송되고 사용자 상호 작용이 필요하므로 300으로 설정됩니다. 수정 Request Timeout
가치를 제공합니다.
3단계. REALM/LDAP 서버 구성을 구성합니다.
- 탐색
Integration > Other Integrations.
FMC 영역
FMC 영역 추가
- Active Directory 서버 및 디렉토리의 세부 정보를 제공합니다. OK(확인)를 클릭합니다.
이 데모의 목적:
- 이름:
ActiveDirectory_SSO
- 유형: AD
- AD 주 도메인:
example.com
- 디렉토리 사용자 이름:
administrator@example.com
- 디렉터리 암호:
- 기본 DN: DC=example, DC=com
- 그룹 DN: DC=example, DC=com
FMC 영역 정보
참고: LDAPS
(LDAP over SSL)을 사용할 수 있습니다. 포트는 389에서 636으로 변경해야 합니다.
참고: AD 서버에는 Duo에 업로드된 사용자 데이터가 있어야 합니다.
4단계. 필요에 따라 그룹 정책을 생성합니다.
- 탐색
Objects > Object Management > VPN > Group Policy.
- 클릭
Add Group Policy
.
- 해당 매개변수를 사용하여 그룹 정책을 생성합니다.
이 데모에서는 세 가지 그룹 정책이 구성되었습니다.
- SSO_LDAP_ADMINS 그룹 정책은
AnyConnect Admins
그룹.
그룹 정책 1
2 . SSO_LDAP_USERS
Group Policy는 AnyConnect Users
그룹.
그룹 정책 2
3. NO_ACCESS
그룹 정책은 이전 그룹 정책에 속하지 않은 사용자를 위한 그룹입니다. 이는 Simultaneous Login Per User
매개 변수는 0으로 설정해야 합니다.
그룹 정책 3
5단계. LDAP 특성 매핑을 구성합니다.
이 데모에서는 LDAP 특성 맵 컨피그레이션을 사용합니다.
- LDAP 특성 이름:
memberOf
- Cisco 특성 이름:
Group-Policy
LDAP 특성 맵
- 제공:
LDAP Attribute Value
및 Cisco Attribute Value
. 클릭 OK
.
이 데모의 목적:
LDAP 특성 값: CN=AnyConnect Admins, CN=Users, DC=example, DC=com
Cisco 특성 값: SSO_LDAP_ADMINS
LDAP 특성 값: CN=AnyConnect Users, CN=Users, DC=example, DC=com
Cisco 특성 값: SSO_LDAP_USERS
LDAP 특성 맵 구성
6단계. 구성 Connection Profile
.
- 탐색
Devices > Remote Access
현재 VPN Remote Access 컨피그레이션을 수정합니다.
- 특성을 사용하여 새 연결 프로파일을 생성합니다. 다음을 선택합니다.
NO_ACCESS
이 연결 프로파일에 대한 그룹 정책으로서 그룹 정책.
FMC 연결 프로파일 1
- 다음을 선택합니다.
AAA
탭을 클릭합니다. 아래 Authentication Method
옵션, 선택 SAML
, 및 Authorization Server
옵션을 사용하여 3단계에서 생성한 AD 서버를 선택합니다.
FMC 연결 프로파일 AAA
- 이 연결 프로파일에 연결을 매핑할 그룹 별칭을 생성합니다. AnyConnect Software 드롭다운 메뉴에서 사용자에게 표시되는 태그입니다.
FMC 그룹 별칭
- OK(확인)를 클릭하고 전체 연결 프로파일 VPN 컨피그레이션을 저장합니다.
7단계. 구성 FlexConfig Policy
LDAP 명명 특성을 수정합니다.
Service Provider Mail(통신 사업자 메일) 특성이 Email Address(이메일 주소)로 설정되면 ldap-naming-attribute
에서 AD 서버를 변경해야 합니다 sAMAccountName
수신 userPrincipalName
.
참고: IdP에서 NameID
값 sAMAccountName
이 단계는 필요하지 않습니다.
- 탐색
Devices > FlexConfig
Firepower Threat Defense에서 FlexConfig Policy
수정할 수 있습니다.
- 클릭
FlexConfig Object
새 객체를 추가합니다.
FMC FlexConfig 개체
- 수정
ldap-naming-attribute
발신 sAMAccountName
수신 userPrincipalname.
FlexConfig 개체 추가
8단계. 탐색 Deploy > Deployment
적절한 FTD를 선택하여 컨피그레이션을 적용합니다.
다음을 확인합니다.
LDAP 디버그 코드 조각에서 debug ldap 255
관리자 사용자에 대한 LDAP 특성 맵에서 일치하는 항목이 있음을 확인할 수 있습니다.
[26] LDAP Search:
Base DN = [DC=example,DC=com]
Filter = [userPrincipalName=admin_user@example.com]
Scope = [SUBTREE]
[20]
memberOf: value = CN=AnyConnect Admins,CN=Users,DC=example,DC=com [20]
mapped to Group-Policy: value = SSO_LDAP_ADMINS
[20]
mapped to LDAP-Class: value = SSO_LDAP_ADMINS
명령 show vpn-sessiondb anyconnect
명령을 사용하여 사용자가 정의된 그룹에 있는지 확인합니다.
firepower# show vpn-sessiondb anyconnect
Session Type: AnyConnect
Username : admin_user@example.com
Index : 6
Public IP : XX.XX.XX.XX
Protocol : AnyConnect-Parent
License : AnyConnect Premium
Encryption : AnyConnect-Parent: (1)none
Hashing : AnyConnect-Parent: (1)none
Bytes Tx : 0 Bytes Rx : 0
Group Policy : SSO_LDAP_ADMINSTunnel Group : SSO_AD_Split-tunnel Login Time : 19:37:28 UTC Thu Jul 20 2023 Duration : 0h:01m:33s Inactivity : 0h:00m:00s VLAN Mapping : N/A VLAN : none Audt Sess ID : 0a1f7c490000600064b98cf8 Security Grp : none Tunnel Zone : 0
.
LDAP 디버그 코드 조각에서 debug ldap 255
테스트 사용자에 대한 LDAP 특성 맵에서 일치하는 항목이 있음을 확인할 수 있습니다.
[29] LDAP Search:
Base DN = [DC=example,DC=com]
Filter = [userPrincipalName=test_user@example.com]
Scope = [SUBTREE]
[29]
memberOf: value = CN=AnyConnect Users,CN=Users,DC=example,DC=com [29]
mapped to Group-Policy: value = SSO_LDAP_USERS [29]
mapped to LDAP-Class: value = SSO_LDAP_USERS
명령 show vpn-sessiondb anyconnect
명령을 사용하여 사용자가 올바른 그룹에 있는지 확인합니다.
firepower# show vpn-sessiondb anyconnect
Session Type: AnyConnect
Username : test_user@example.com
Index : 6
Public IP : XX.XX.XX.XX
Protocol : AnyConnect-Parent
License : AnyConnect Premium
Encryption : AnyConnect-Parent: (1)none
Hashing : AnyConnect-Parent: (1)none
Bytes Tx : 0 Bytes Rx : 0
Group Policy : SSO_LDAP_USERS Tunnel Group : SSO_AD_Split-tunnel
Login Time : 19:37:28 UTC Thu Jul 20 2023
Duration : 0h:08m:07s
Inactivity : 0h:00m:00s
VLAN Mapping : N/A VLAN : none
Audt Sess ID : 0a1f7c490000600064b98cf8
Security Grp : none Tunnel Zone : 0
LDAP 디버그 코드 조각에서 debug ldap 255
에 대한 LDAP 특성 맵에서 일치하는 항목이 없음을 확인할 수 있습니다. NOACCESS
사용자 및 디버그 webvpn
저것 NO_ACCESS
그룹 정책을 선택했으므로 사용자가 인증할 수 없습니다.
[32] LDAP Search:
Base DN = [DC=example,DC=com]
Filter = [userPrincipalName=noaccess_user@example.com]
Scope = [SUBTREE]
User Policy Access-Lists: user_acl[0] = NULL user_acl[1] = NULL tunnel policy attributes: 1 Filter-Id(11) 8 "" 2 Session-Timeout(27) 4 0 3 Idle-Timeout(28) 4 30 4 Simultaneous-Logins(4098) 4 0 5 Primary-DNS(4101) 4 IP: 0.0.0.0 6 Secondary-DNS(4102) 4 IP: 0.0.0.0 7 Primary-WINS(4103) 4 IP: 0.0.0.0 8 Secondary-WINS(4104) 4 IP: 0.0.0.0 9 Tunnelling-Protocol(4107) 4 96 10 Banner(4111) 0 0x000014e304401888 ** Unresolved Attribute ** 11 Group-Policy(4121) 9
"NO_ACCESS"
문제 해결
대부분의 SAML 트러블슈팅에는 SAML 컨피그레이션 또는 디버그를 확인하여 찾을 수 있는 잘못된 컨피그레이션이 포함됩니다.
debug webvpn saml 255
debug webvpn 255
debug webvpn anyconnect 255
debug webvpn session 255
debug webvpn request 255
LDAP 매핑 권한 부여 문제의 경우 유용한 디버깅은 다음과 같습니다.
debug aaa common 255
debug ldap 255
관련 정보