Sun Java System Web Proxy Server 4.0.8 관리 설명서

액세스 제어란

액세스 제어를 통해 Proxy Server에 액세스할 수 있는 사용자와 이러한 사용자가 액세스할 수 있는 서버의 부분을 결정할 수 있습니다. 전체 서버 또는 서버의 일부분(디렉토리, 파일, 파일 유형 등)에 대한 액세스를 제어할 수 있습니다. 수신 요청을 평가할 때 액세스는 액세스 제어 항목(ACE)이라는 규칙의 계층을 기준으로 결정됩니다. Proxy Server는 액세스를 허용할지 또는 거부할지 결정하기 위해 일치하는 항목을 찾습니다. 각 ACE는 서버가 계층의 다음 항목을 계속할 것인지의 여부를 지정합니다. ACE의 컬렉션은 ACL(Access Control List)이라고 합니다. 요청을 수신하면 obj.conf 파일이 ACL에 대한 참조로 확인된 다음 액세스 여부를 결정하는 데 사용됩니다. 기본으로 서버에는 하나의 ACL 파일이 있으며 여기에는 여러 개의 ACL이 있습니다.

액세스는 다음 항목을 기준으로 허용 또는 거부됩니다.

이 절은 다음 내용으로 구성되어 있습니다.

사용자 그룹용 액세스 제어

서버에 대한 액세스를 특정 사용자 또는 그룹으로 제한할 수 있습니다. 사용자 그룹 액세스 제어를 사용하려면 사용자가 해당 서버에 액세스하기 전에 사용자 이름과 비밀번호를 제공해야 합니다. 서버는 클라이언트 인증서에 있는 정보 또는 클라이언트 인증서 자체를 디렉토리 서버 항목과 비교합니다.

Administration Server는 오직 Basic 인증만 사용합니다. Administration Server에 클라이언트 인증이 필요하도록 하려면 반드시 obj.conf의 ACL 파일을 직접 편집하여 인증 방법을 SSL로 변경해야 합니다.

사용자 그룹 인증은 서버에 구성된 디렉토리 서비스에 의해 수행됩니다. 자세한 내용은 디렉토리 서비스 구성을 참조하십시오.

디렉토리 서비스가 액세스 제어를 구현하는데 사용하는 정보는 다음 중 한 가지 소스에서 구합니다.

서버가 외부 LDAP 기반 디렉토리 서비스를 사용하는 경우 서버 인스턴스용으로 다음 유형의 사용자 그룹 인증 방법을 지원합니다.

서버가 내부 파일 기반 디렉토리 서비스를 사용하는 경우 서버 인스턴스용으로 다음 유형의 사용자 그룹 인증 방법을 지원합니다.

사용자 그룹 인증의 경우 사용자가 액세스 권한을 얻기 전에 자신의 아이디를 증명합니다. 인증 과정에서 사용자는 사용자 이름과 비밀번호를 제공하거나 클라이언트 인증서 또는 Digest 인증 플러그인을 사용하여 자신의 아이디를 증명합니다. 클라이언트 인증서를 사용하려면 암호화가 필요합니다.

Default 인증

Default 인증은 가장 많이 사용되는 방법입니다. Default 설정은 obj.conf 파일에서 기본적인 방법을 사용하거나 obj.conf에 설정이 없는 경우 Basic을 사용합니다. Default가 선택된 경우 ACL 규칙은 ACL 파일에서 방법을 지정하지 않습니다. Default를 선택하면 obj.conf 파일에서 한 줄만 편집하여 모든 ACL에 대한 인증 방법을 쉽게 변경할 수 있습니다.

Basic 인증

Basic 인증의 경우 사용자가 서버에 액세스하기 위해 사용자 이름과 비밀번호를 제공해야 합니다. Basic 인증은 기본 설정입니다. 사용자 및 그룹 목록을 만들어 Sun Java System Directory Server 같은 LDAP 데이터베이스 또는 파일에 저장해야 합니다. Proxy Server와는 다른 서버 루트에 설치된 디렉토리 서버 또는 원격 컴퓨터에 설치된 디렉토리 서버를 사용해야 합니다.

사용자가 사용자 그룹 인증이 있는 자원에 액세스하려는 경우 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다. 서버에서 암호화 기능이 사용되는지의 여부에 따라 이 정보는 암호화 또는 암호화되지 않은 형태로 서버에 입력됩니다(SSL 사용).


주 –

SSL 암호화가 없는 Basic 인증을 사용하는 경우 사용자 이름과 비밀번호가 암호화되지 않은 텍스트로 네트워크에 전송됩니다. 이 네트워크 패킷은 포착될 수 있으며 사용자 이름과 비밀번호가 도용될 수 있습니다. Basic 인증은 SSL 암호화나 호스트-IP 인증 또는 이 두 가지를 함께 사용할 때 가장 효과적입니다. Digest 인증을 사용하면 이 문제를 피할 수 있습니다.


인증에 성공하면 사용자에게 요청된 자원이 표시됩니다. 사용자 이름 또는 비밀번호가 잘못된 경우 액세스를 거부하는 메시지가 표시됩니다.

권한 없는 사용자에 의해 수신된 메시지를 사용자 정의할 수 있습니다. 자세한 내용은 액세스가 거부된 경우의 응답을 참조하십시오.

SSL 인증

서버가 보안 인증서가 있는 사용자의 아이디를 확인하는 방법은 두 가지입니다.

클라이언트 인증을 위해 인증서 정보를 사용하도록 서버를 구성한 경우 서버는 다음 작업을 수행합니다.

특정 자원에 대한 액세스를 제어하기 위해 클라이언트 인증을 요구하는 경우는 서버에 대한 모든 연결에 대해 클라이언트 인증을 요구하는 경우와 다릅니다. 모든 연결에 대해 서버가 클라이언트 인증을 요구하도록 구성된 경우 클라이언트는 신뢰할 수 있는 인증 기관에서 발행한 유효한 인증서만 제시하면 됩니다. 서버가 SSL 방법을 사용하여 사용자 및 그룹을 인증하도록 구성된 경우 다음 작업을 수행해야 합니다.

액세스 제어와 함께 클라이언트 인증이 필요한 경우 Proxy Server용 SSL 암호를 사용하도록 설정해야 합니다. SSL 사용에 대한 자세한 내용은 5 장인증서 및 키 사용을 참조하십시오.

SSL 인증이 요구되는 자원에 성공적으로 액세스하려면 Proxy Server가 신뢰할 수 있는 인증 기관으로부터 클라이언트 인증서가 발급되어야 합니다. Proxy Server의 certmap.conf 파일이 브라우저에 있는 클라이언트 인증서를 디렉토리 서버에 있는 클라이언트 인증서와 비교하도록 구성된 경우에는 클라이언트 인증서가 디렉토리 서버 내에 게시되어야 합니다. 그러나 certmap.conf 파일은 인증서의 선택된 정보만 디렉토리 서버 항목과 비교되도록 구성할 수 있습니다. 예를 들어 브라우저 인증서에 있는 사용자 아이디와 전자 메일 주소만 디렉토리 서버 항목과 비교하도록 certmap.conf 파일을 구성할 수 있습니다. certmap.conf 및 인증서 매핑에 대한 자세한 내용은 5 장인증서 및 키 사용을 참조하십시오. 또한 Sun Java System Web Proxy Server 4.0.8 Configuration File Reference를 참조하십시오.

Digest 인증

Proxy Server가 LDAP 기반 또는 파일 기반 디렉토리 서비스를 사용하여 Digest 인증을 수행하도록 구성할 수 있습니다.

Digest 인증을 통해 사용자는 사용자 이름과 비밀번호를 일반 텍스트로 보내지 않고 사용자 이름과 비밀번호를 기반으로 인증할 수 있습니다. 브라우저는 MD5 알고리즘을 사용하여 Proxy Server가 제공하는 사용자 비밀번호와 일부 정보를 사용하는 다이제스트 값을 만듭니다.

서버가 LDAP 기반 디렉토리 서비스를 사용하여 Digest 인증을 수행하는 경우 이 다이제스트 값은 또한 Digest 인증 플러그인을 사용하는 서버 측에서 컴퓨팅되며 클라이언트가 제공하는 다이제스트 값과 비교됩니다. 다이제스트 값이 일치하면 사용자가 인증됩니다. 이렇게 하려면 디렉토리 서버가 일반 텍스트의 사용자 비밀번호에 액세스해야 합니다. Sun Java System Directory Server에는 역변환 가능한 비밀번호 플러그인이 있으며, 이는 데이터를 암호화된 형태로 저장하여 나중에 원래의 형태로 해독할 수 있는 대칭 암호화 알고리즘을 사용합니다. 오직 Directory Server만이 데이터의 키를 보유합니다.

LDAP 기반 인증의 경우 Proxy Server에 포함된 역변환 가능한 비밀번호 플러그인과 Digest 인증 관련 플러그인을 사용하도록 설정해야 합니다. Digest 인증을 처리하도록 Proxy Server를 구성하려면 server-root/userdb/에 있는 dbswitch.conf 파일에서 데이터베이스 정의의 digestauth 등록 정보를 설정합니다.

여기서는 샘플 dbswitch.conf 파일입니다.


directory default ldap://<host_name>:<port>
default:binddn cn=Directory Manager
default:encoded bindpw ***********
default:digestauth on

또는


directory default ldap://<host_name>:<port>/
default:binddn cn=Directory Manager
default:encoded bindpw ***********
default:digestauthstate on

서버는 Digest 인증에 보이는 것과 같이 지정된 ACL 방법에 기반하여 LDAP 데이터베이스에 대한 인증을 시도합니다. ACL 방법을 지정하지 않으면, 서버는 인증이 요구되는 경우 Digest 또는 Basic을 사용하며 인증이 요구되지 않는 경우 Basic을 사용합니다.

다음 표에서는 인증 데이터베이스에서 지원하거나 지원하지 않는 Digest 인증에 대해 나열합니다.

표 8–1 Digest 인증 질문 생성

ACL 방법 

인증 데이터베이스에서 지원 

인증 데이터베이스에서 지원하지 않음 

Default 

지정된 사항 없음 

Digest 및 Basic 

Basic 

Basic 

Basic 

Basic 

Digest 

Digest 

ERROR 

method=digest로 설정된 ACL을 처리하는 경우 서버는 다음 작업을 수행하여 인증을 시도합니다.

Digest 인증 플러그인 설치

LDAP 기반 디렉토리 서비스를 사용하는 Digest 인증의 경우 Digest 인증 플러그인을 설치해야 합니다. 이 플러그인은 서버 측에서 다이제스트 값을 계산하고 이 값을 클라이언트에서 제공하는 다이제스트 값과 비교합니다. 다이제스트 값이 일치하면 사용자가 인증됩니다.

파일 기반 인증 데이터베이스를 사용하는 경우 Digest 인증 플러그인을 설치할 필요는 없습니다.

UNIX에 Digest 인증 플러그인 설치

Digest 인증 플러그인은 다음 공유 라이브러리와 ldif 파일로 구성됩니다.

ProcedureUNIX에 Digest 인증 플러그인을 설치하는 방법

시작하기 전에
  1. 플러그인을 설치하려면 다음 명령을 입력합니다.

    % ldapmodify -D "cn=Directory Manager" -w password -a < libdigest-plugin.ldif

Windows에 Digest 인증 플러그인 설치

Directory Server가 다이제스트 플러그인과 함께 제대로 시작되려면 여러 개의 .dll 파일을 프로시 서버 설치 위치에서 Directory Server용 Sun Java System Directory Server 서버 컴퓨터로 복사해야 합니다.

ProcedureWindows에 Digest 인증 플러그인을 설치하는 방법

  1. server-root \bin\proxy\bin에 있는 Proxy Server의 공유 라이브러리에 액세스합니다.

  2. nsldap32v50.dll, libspnr4.dlllibplds4.dll 파일을 해당 디렉토리에 복사합니다.

  3. 복사한 파일을 다음 중 한 곳에 붙여넣습니다.

    • \Winnt\system32

      • Sun Java System Directory Server 설치 디렉토리: server-root\bin\sldap\server

DES 알고리즘 사용을 위한 Sun Java System Directory Server 설정

DES 알고리즘을 위해 다이제스트 비밀번호가 저장된 속성을 암호화해야 합니다.

ProcedureDES 알고리즘을 사용하도록 Directory Server를 설정하는 방법

  1. Sun Java System Directory Server 콘솔을 시작합니다.

  2. Sun ONE Directory Server 5.1 SP1 이상 버전의 인스턴스를 엽니다.

  3. Configuration 탭을 선택합니다.

  4. 플러그인 옆의 + 기호를 누릅니다.

  5. DES 플러그인을 선택합니다.

  6. Add를 선택하여 새 속성을 추가합니다.

  7. iplanetReversiblePassword를 입력합니다.

  8. Save를 누릅니다.

  9. Digest 인증 비밀번호를 설정합니다.


    주 –

    서버는 객체 클래스 iplanetReversiblePassword에 있는 iplanetReversiblePassword 속성을 사용합니다. 사용자의 iplanetReversiblePassword 속성에서 Digest 인증 비밀번호를 사용하려면 항목에 iplanetReversiblePasswordobject 객체가 포함되어야 합니다.

    ldapmodify를 사용하거나 Directory Server 관리 인터페이스를 사용하여 이를 수행할 수 있습니다.


    ldapmodify 사용—

    digest.ldif 파일을 만들어 LDAP 명령을 저장합니다. 비밀번호 추가 프로세스는 2단계로 구성되어 있습니다.

    1. 객체 클래스를 digest.ldif에 추가합니다.

      파일이 다음과 유사하게 표시됩니다(Directory Server 사용자 및 ACL을 기준으로 추가 ldif 파일을 가질 수 있음).


      dn:uid=user1,dc=india,dc=sun,dc=com
      changetype:modify
      add:objectclass
      objectclass:iplanetReversiblePasswordobject
      
      dn:uid=user1,dc=india,dc=india,dc=sun,dc=com
      changetype:modify
      add:iplanetReversiblePassword
      iplanetReversiblePassword:user1
    2. # ldapmodify -D “cn={CN_Value}” -w <password> -a <ldif_file_name>

  10. Sun Java System Directory Server 인스턴스를 다시 시작하고 사용자 속성이 Directory Server 데이터베이스에 추가되었는지 확인합니다.

기타 인증

액세스 제어 API를 사용하여 사용자 정의 인증 방법을 만들 수 있습니다.

호스트-IP용 액세스 제어

Administration Server와 해당 파일 및 디렉토리를 특정 컴퓨터를 이용하는 클라이언트만 사용할 수 있도록 설정하여 이에 대한 액세스를 제한할 수 있습니다. 허용 또는 거부하려는 컴퓨터의 호스트 이름 또는 IP 주소를 지정합니다. 호스트-IP 인증을 사용하는 파일 또는 디렉토리 액세스는 사용자가 알 수 없게 진행됩니다. 사용자는 사용자 이름 또는 비밀번호를 입력하지 않고 즉시 파일과 디렉토리에 액세스할 수 있습니다.

여러 사람이 특정 컴퓨터를 사용할 수 있으므로 호스트-IP 인증은 사용자 그룹 인증과 함께 사용할 때 더 효과적입니다. 두 가지 인증 방법이 모두 사용되는 경우 액세스할 때 사용자 이름과 비밀번호가 필요합니다.

호스트-IP 인증의 경우 서버에서 DNS(Domain Name Service)를 구성할 필요가 없습니다. 호스트-IP 인증을 선택한 경우 반드시 DNS가 네트워크에서 실행되어야 하며 서버가 이를 사용하도록 구성되어야 합니다. DNS를 사용하도록 설정하려면 서버의 Server Manager에 액세스하고 Preferences 탭을 누른 다음 Configure System Preferences를 누릅니다. DNS 설정을 확인합니다.

DNS를 사용하도록 설정하면 서버가 DNS 조회를 수행해야 하므로 Proxy Server의 성능이 저하됩니다. DNS 조회가 서버 성능에 미치는 영향을 줄이려면 모든 요청에 대해 IP 주소를 확인하는 대신 액세스 제어 및 CGI의 IP 주소만 확인합니다. 이러한 제한을 설정하려면 obj.conf에서 다음을 지정합니다.

AddLog fn="flex-log" name="access" iponly=1

액세스 제어 파일 사용

Administration Server 또는 서버의 파일이나 디렉토리에서 액세스 제어를 사용하는 경우 해당 설정은 확장자가 .acl인 파일에 저장됩니다. 액세스 제어 파일이 디렉토리 server-root/httpacl에 저장되며 여기서 server-root는 서버가 설치된 위치입니다. 예를 들어 서버를 /usr/Sun/Servers에 설치한 경우 Administration Server와 서버에 구성된 각 서버 인스턴스용 ACL 파일의 위치는 /usr/Sun/Servers/httpacl/입니다.

기본 ACL 파일은 generated-proxy-serverid .acl입니다. 임시 작업 파일은 genwork-proxy-serverid .acl입니다. Administration Server를 사용하여 액세스를 구성하는 경우 이 두 파일이 만들어집니다. 그러나 제한을 더욱 복잡하게 하려면 여러 개의 파일을 만들고 server.xml 파일에서 이러한 파일을 참조할 수 있습니다. 또한 하루 중 시간 또는 요일을 기준으로 서버에 대한 액세스를 제한하는 등, 파일을 편집할 때에만 사용할 수 있는 몇 가지 기능이 있습니다.

액세스 제어 파일 및 구문에 대한 자세한 내용은 18 장ACL 파일 구문을 참조하십시오. server.xml에 대한 자세한 내용은 Sun Java System Web Proxy Server 4.0.8 Configuration File Reference를 참조하십시오.

ACL 사용자 캐시 구성

기본적으로 Proxy Server는 ACL 사용자 캐시에서 사용자 및 그룹 인증 결과를 캐시합니다. magnus.conf 파일에서 ACLCacheLifetime 지시문을 사용하여 ACL 사용자 캐시의 유효 시간을 제어할 수 있습니다. 캐시에 있는 항목이 참조될 때마다 시간이 계산되고 ACLCacheLifetime과 비교됩니다. 항목의 시간이 ACLCacheLifetime과 같거나 크면 해당 항목은 사용되지 않습니다. 기본값은 120초입니다. 값을 0으로 설정하면 캐시가 Off로 설정됩니다. 이 값에 큰 값을 사용하면 LDAP 항목을 변경할 때마다 Proxy Server를 다시 시작해야 합니다. 예를 들어 이 값을 120초로 설정하는 경우 최대 2분까지 Proxy Server가 LDAP 디렉토리와 동기화되지 않을 수 있습니다. LDAP 디렉토리가 자주 변경되지 않는 경우에만 큰 값을 사용하십시오.

ACLUserCacheSizemagnus.conf 매개 변수를 사용하여 캐시에 유지할 항목의 최대 수를 구성할 수 있습니다. 이 매개 변수의 기본값은 200입니다. 새 항목은 목록의 앞에 추가되며 목록의 끝에 있는 항목은 캐시가 최대 크기에 도달하면 재활용되어 새로운 항목이 됩니다.

또한 magnus.conf 매개 변수 ACLGroupCacheSize를 사용하여 사용자 항목당 캐시할 수 있는 최대 그룹 구성원 수를 설정할 수 있습니다.. 이 매개 변수의 기본값은 4입니다. 그룹에 있는 사용자가 구성원이 아닌 경우 캐시되지 않으며, 요청마다 여러 LDAP 디렉토리 액세스가 발생하게 됩니다.

클라이언트 인증서로 액세스 제어

서버에서 SSL을 사용하도록 설정하면 액세스 제어와 함께 클라이언트 인증서를 사용할 수 있습니다. 특정 자원에 액세스하려면 클라이언트 인증서가 필요하도록 지정해야 합니다. 이 기능을 서버에서 사용하도록 설정하면 인증서가 있는 사용자는 처음으로 제한된 자원에 액세스하는 경우에만 사용자 이름과 비밀번호를 입력합니다. 아이디가 설정되면 서버는 사용자의 로그인 이름과 비밀번호를 관련 인증서에 매핑합니다. 이 때부터 사용자는 클라이언트 인증이 필요한 자원에 액세스할 때 더 이상 로그인 이름 또는 비밀번호를 입력할 필요가 없습니다.

사용자가 제한된 자원에 액세스하려는 경우 클라이언트는 서버에 클라이언트 인증서를 보내고 서버는 이를 매핑 목록과 비교하여 확인합니다. 인증서가 액세스 권한이 부여된 사용자에 속한 경우 자원이 제공됩니다.

특정 자원에 대한 액세스를 제어하는 용도로 필요한 클라이언트 인증은 서버에 대한 모든 연결에 대해 클라이언트 인증을 요구하는 것과는 다릅니다. 또한 모든 SSL 연결에 대해 클라이언트 인증서를 요구하는 경우 자동으로 인증서가 데이터베이스의 사용자에게 매핑되지 않습니다. 이 매핑을 설정하려면 특정 자원에 액세스하기 위해 클라이언트 인증서가 필요하도록 지정해야 합니다.