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

14장 역방향 프록시 사용

이 장에서는 Proxy Server를 역방향 프록시로 사용하는 방법에 대해 설명합니다. 역방향 프록시는 외부 클라이언트에 대해 보안 컨텐트 서버를 가정함으로써 회사 외부에서 회사 서버의 데이터에 모니터링되지 않게 직접 액세스하는 것을 방지하기 위해 방화벽 외부에서 사용할 수 있습니다. 역방향 프록시는 복제에도 사용할 수 있습니다. 즉, 로드 균형 조정을 위해 사용량이 많은 서버 앞에서 여러 개의 프로시를 연결할 수 있습니다. 이 장에서는 Proxy Server를 방화벽 내부 또는 외부에서 번갈아 사용할 수 있는 방법에 대해 설명합니다.

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

역방향 프록싱 작동 방식

역방향 프록싱은 다음과 같은 두 가지 방법으로 사용할 수 있습니다. 한 가지 방법은 Proxy Server의 보안 기능을 사용하여 트랜잭션을 처리하는 것입니다. 다른 방법은 캐시를 사용하여 사용량이 많은 서버에 로드 균형 조정을 제공하는 것입니다. 두 가지 방법 모두 방화벽에서 엄격하게 작동하지 않기 때문에 일반 프록시 사용과는 다릅니다.

서버의 대역 역할을 하는 프록시

신용 카드 번호 데이터베이스와 같이 보안을 유지해야 하는 중요한 정보가 포함된 컨텐트 서버가 있는 경우 컨텐트 서버의 대역 역할을 할 프록시를 방화벽 외부에 설정할 수 있습니다. 컨텐트 서버에 액세스를 시도하는 외부 클라이언트는 프록시 서버로 보내집니다. 컨텐트 서버에 있는 실제 컨텐트는 안전하게 방화벽 내부에 존재합니다. 프록시 서버는 방화벽 외부에 있으며 클라이언트에게는 컨텐트 서버로 보입니다.

클라이언트가 사이트에 요청을 하면 요청은 프록시 서버로 보내집니다. 그러면 프록시 서버는 클라이언트의 요청을 방화벽의 특정한 경로를 통해 컨텐트 서버로 전송합니다. 컨텐트 서버는 방화벽의 특정 경로를 통해 결과를 다시 프록시로 전달합니다. 프록시는 그림 14–1에 나와 있는 대로 프록시가 실제 컨텐트 서버인 것처럼 검색된 정보를 클라이언트에 보냅니다. 컨텐트 서버가 오류 메시지를 반환하면 프록시 서버는 메시지를 가로채고 헤더에 나열된 모든 URL을 변경한 다음 메시지를 클라이언트에 전송할 수 있습니다. 이 작동 방식은 외부 클라이언트가 내부 컨텐트 서버에 대한 리디렉션 URL을 얻지 못하게 합니다.

이런 방법으로 프록시는 보안 데이터베이스와 악의적 공격의 가능성 사이에 추가적인 보호벽을 제공합니다. 가능성은 별로 없지만 공격에 성공하더라도 공격자는 전체 데이터베이스에 대한 액세스 권한을 얻는 것이 아니라 단일 트랜잭션에 관련된 정보로만 제한될 가능성이 많습니다. 방화벽 통로는 프록시 서버에만 액세스를 허용하기 때문에 인증되지 않은 사용자는 실제 컨텐트 서버에 액세스할 수 없습니다.

그림 14–1 역방향 프록시 프로세스

컨텐트 서버처럼 보이는 역방향 프록시를 보여 주는 그림

다른 시스템의 액세스는 허용하지 않고 특정 포트의 특정 서버(이 경우 할당된 포트의 프록시)만 방화벽을 통해 액세스할 수 있도록 방화벽 라우터를 구성할 수 있습니다.

보안 역방향 프록싱

보안 역방향 프록싱은 프록시 서버와 다른 시스템 간의 하나 이상의 연결이 SSL(Secure Sockets Layer) 프로토콜을 사용하여 데이터를 암호화할 때 수행됩니다.

보안 역방향 프록싱은 다음과 같은 여러 가지 용도로 사용됩니다.

보안 역방향 프록싱이 수행되면 데이터 암호화에 따르는 오버헤드 때문에 각 보안 연결의 속도가 느려집니다. 하지만 SSL은 캐시 메커니즘을 제공하기 때문에 연결의 양측 모두 이전에 협상된 보안 매개 변수를 다시 사용할 수 있어 이후 연결에서는 오버헤드게 크게 줄어듭니다.

다음과 같은 세 가지 방법으로 보안 역방향 프록시를 구성할 수 있습니다.

그림 14–2 프록시에 대한 클라이언트 연결 보안

프록시에 대한 클라이언트 연결 보안을 보여 주는 그림

그림 14–3 컨텐트 서버에 대한 프록시 연결 보안

컨텐트 서버에 대한 프록시 연결 보안을 보여 주는 그림

그림 14–4 프록시에 대한 클라이언트 연결 보안 및 컨텐트 서버에 대한 프록시 연결 보안

프록시에 대한 클라이언트 연결 보안 및 컨텐트 서버에 대한 프록시 연결 보안을 보여 주는 그림

각 구성을 설정하는 방법에 대해서는 역방향 프록시 설정을 참조하십시오.

프록시는 SSL 이외에도 클라이언트 인증을 사용할 수 있는데, 이 경우 프록시에 요청을 하는 컴퓨터는 인증서나 다른 식별 형식을 제공하여 자신의 아이디를 확인할 수 있게 해야 합니다.

로드 균형 조정을 위한 프록싱

조직 내에서 프록시 서버를 여러 개 사용하여 웹 서버 간의 네트워크 로드 균형을 조정할 수 있습니다. 이 모델은 프록시 서버의 캐시 기능을 활용하여 로드 균형 조정을 위한 서버 풀을 만듭니다. 이 경우 프록시 서버는 방화벽의 어느 쪽에도 위치할 수 있습니다. 일별로 많은 양의 요청을 수신하는 웹 서버가 있는 경우 프록시 서버를 사용하여 웹 서버의 로드를 줄이고 네트워크 액세스의 효율성을 높일 수 있습니다.

프록시 서버는 클라이언트 요청을 실제 서버로 전달하는 매개자 역할을 합니다. 프록시 서버는 요청된 문서를 캐시합니다. 프록시 서버가 두 개 이상인 경우 DNS는 프록시 서버의 IP 주소를 "라운드 로빈" 방식으로 선택하여 요청을 임의로 라우팅할 수 있습니다. 클라이언트는 매번 같은 URL을 사용하지만 요청은 매번 다른 프록시를 통해 라우팅될 수 있습니다.

프록시 서버를 여러 개 사용하여 사용량이 많은 컨텐트 서버 하나에 대한 요청을 처리하면 프록시 서버를 한 개 사용할 때보다 서버가 로드를 더 많이 처리할 수 있고 효율성도 더 높아집니다. 프록시가 처음으로 컨텐트 서버에서 문서를 검색하는 초기 시작 기간이 지나면 컨텐트 서버에 대한 요청의 수가 크게 줄어들 수 있습니다.

CGI 요청과 일부 새 요청만 항상 컨텐트 서버로 전달되고 나머지는 프록시가 처리할 수 있습니다. 예를 들어 서버에 대한 요청의 90%가 CGI 요청이 아니어서 캐시가 가능하고 컨텐트 서버는 일별로 2백만 히트를 수신한다고 가정합니다. 이 경우 세 개의 역방향 프록시를 연결하고 각각 일별로 2백만 히트를 처리하면 하루에 약 6백만 히트를 처리할 수 있습니다. 컨텐트 서버에 도달하는 요청의 10%는 각 프록시로부터 일일 약 200,000 히트까지 또는 총 600,000 히트만 추가할 수 있으므로 효율성이 훨씬 높아집니다. 히트 수는 약 2백만에서 6백만으로 증가할 수 있으며 컨텐트 서버의 로드는 이에 따라 2백만에서 600,000으로 줄어들 수 있습니다. 실제 결과는 상황에 따라 다를 수 있습니다.

그림 14–5 로드 균형 조정에 사용되는 프록시

모든 요청이 중앙 DNS 서버로 이동하고 여기서 요청이 프록시 서버로 라우팅되는 로드 균형 조정에 사용되는 프록시를 보여 주는 그림

역방향 프록시 설정

역방향 프록시를 설정하려면 정방향 매핑과 역방향 매핑의 두 가지 매핑이 필요합니다.


주의 – 주의 –

프록시가 잘못된 결과를 반환할 수 있으므로 자동 구성 파일을 제공하는 프록시에는 역방향 프록시를 사용하지 마십시오.


http://http.site.com/이라는 웹 서버가 있고 이 서버에 대해 역방향 프록시 서버를 설정하려는 경우를 가정합니다. 역방향 프록시를 http://proxy.site.com/이라고 할 수 있습니다.

Procedure정방향 또는 역방향 매핑을 만드는 방법

  1. Server Manager에 액세스하고 URL 탭을 누릅니다.

  2. Create Mapping 링크를 누릅니다.

    Create Mapping 페이지가 표시됩니다.

  3. 페이지가 나타나면 정방향 매핑에 대한 소스 접두어 및 대상을 입력합니다.

    예:

    소스 접두어: http://proxy.site.com

    소스 대상: http://http.site.com/

  4. OK를 누릅니다.

    페이지로 돌아가서 역방향 매핑을 만듭니다. 예를 들면 다음과 같습니다.

    역방향 매핑:

    소스 접두어: http://http.site.com/

    소스 대상: http://proxy.site.com/

  5. 변경 내용을 적용하려면 OK를 누릅니다.

    OK 버튼을 누르면 프록시 서버가 하나 이상의 다른 매핑을 추가합니다. 매핑을 보려면 lView/Edit Mappings 링크를 누릅니다. 추가 매핑의 형식은 다음과 같습니다.

    from: /

    to: http://http.site.com/

    이러한 추가 자동 매핑은 일반 서버로 역방향 프록시에 연결하는 사용자용입니다. 첫 번째 매핑은 정방향 프록시로 역방향 프록시에 연결하는 사용자를 확인하기 위한 것입니다. “/” 매핑은 Administration GUI에서 자동으로 제공하는 Map Source Prefix 입력란의 내용을 사용자가 변경하지 않은 경우에만 추가됩니다. 일반적으로 두 번째 매핑이 유일한 필수 매핑이지만 설정에 따라서는 추가 매핑을 하더라도 프록시에 문제가 발생하지 않습니다.


    주 –

    웹 서버에 DNS 별칭이 여러 개 있는 경우 각 별칭에는 해당 정방향 매핑이 있어야 합니다. 웹 서버가 여러 개의 DNS 별칭을 사용하여 자신에 대한 리디렉션을 생성하는 경우 각 별칭에는 해당 역방향 매핑이 있어야 합니다.


    CGI 응용 프로그램은 여전히 원래 서버에서 실행됩니다. 프록시 서버 자체에서는 CGI 응용 프로그램이 실행되지 않습니다. 하지만 CGI 스크립트에서 마지막으로 수정된 또는 Expires 헤더를 발급하여 0이 아닌 TTL(Timt-to-live)을 의미함으로써 결과가 캐시될 수 있음을 나타내는 경우, 프록시가 결과를 캐시합니다.

    웹 서버를 위한 컨텐트를 제작할 때는 컨텐트가 역방향 프록시에 의해서도 서비스된다는 점을 고려하여 웹 서버의 파일에 대한 모든 링크에 상대 링크를 사용해야 합니다. HTML 파일에서 호스트 이름을 참조하지 마십시오. 모든 링크는 페이지로만 구성되어야 합니다.

    /abc/def

    다음과 같은 정규화된 호스트 이름은 사용하지 않아야 합니다.

    http://http.site.com/abc/def


    주 –

    역방향 프록시 모드에서 발생하는 오류에 대해 사용자 정의 오류 페이지를 제공할 수 있습니다. 이러한 오류 페이지는 프록시에 의해 생성된 오류를 대체합니다. 이를 통해 클라이언트는 프록시 서버가 구성되어 있다는 것을 알 수 없게 됩니다.


보안 역방향 프록시 설정

보안 역방향 프록싱을 설정하기 전에 디지털 인증서, 인증 기관 및 인증에 대해 충분히 이해해야 합니다.

보안 역방향 프록시를 설정하는 방법은 비보안 역방향 프록시를 설정하는 것과 거의 동일합니다. 유일한 차이는 암호화될 파일에 대해 HTTPS를 프로토콜로 지정해야 한다는 점입니다.

클라이언트-프록시 보안

이 절차에서는 선택한 구성 시나리오에 따라 보안 역방향 프록시를 설정하는 방법을 설명합니다. 매핑을 설정하는 방법을 보여 주기 위해 http.site.com이라는 웹 서버가 있고 proxy.site.com이라는 보안 역방향 프록시 서버를 설정한다고 가정합니다. 단계를 수행할 때 실제 웹 서버와 프록시 이름을 예에서 사용된 이름으로 바꾸십시오.

Procedure보안 클라이언트-프록시 매핑을 설정하는 방법

  1. Server Manager에 액세스하고 URL 탭을 누릅니다.

  2. Create Mapping 링크를 누릅니다.

    Create Mapping 페이지가 표시됩니다.

  3. 페이지가 나타나면 다음 방법으로 정방향 및 역방향 매핑을 설정합니다.

    정방향 매핑:

    소스 접두어: https://proxy.mysite.com

    소스 대상: http://http.mysite.com/

    역방향 매핑:

    소스 접두어: http://http.mysite.com/

    소스 대상: https://proxy.mysite.com/

  4. 변경 내용을 저장하고 적용합니다.

    이렇게 만든 매핑을 보려면 View/Edit Mappings 링크를 누릅니다.


    주 –

    이 구성은 프록시 서버가 보안 모드에서 실행될 경우에만 작동합니다. 즉, 암호화가 활성화되어 있어야 하며 명령줄에서 프록시를 다시 시작해야 합니다. 명령줄에서 프록시를 다시 시작하려면 프록시 디렉토리로 이동하여 ./start를 입력합니다.


Procedure보안 프록시-컨텐트 서버 매핑을 설정하는 방법

  1. Server Manager에 액세스하고 URL 탭을 누릅니다.

  2. Create Mapping 링크를 누릅니다.

    Create Mapping 페이지가 표시됩니다.

  3. 페이지가 나타나면 다음 방법으로 정방향 및 역방향 매핑을 설정합니다.

    정방향 매핑:

    소스 접두어: http://proxy.mysite.com

    소스 대상: https://http.mysite.com/

    역방향 매핑:

    소스 접두어: https://http.mysite.com/

    소스 대상: http://proxy.mysite.com/

  4. 변경 내용을 저장하고 적용합니다.

    이렇게 만든 매핑을 보려면 View/Edit Mappings라는 링크를 누릅니다.


    주 –

    이 구성은 컨텐트 서버가 보안 모드에서 실행 중인 경우에만 작동합니다.


Procedure보안 클라이언트-프록시 및 보안 프록시-컨텐트 서버를 설정하는 방법

  1. Server Manager에 액세스하고 URL 탭을 누릅니다.

  2. Create Mapping 링크를 누릅니다.

    Create Mapping 페이지가 표시됩니다.

  3. 페이지가 나타나면 다음 방법으로 정방향 및 역방향 매핑을 설정합니다.

    정방향 매핑:

    소스 접두어: https://proxy.mysite.com

    소스 대상: https://http.mysite.com/

    역방향 매핑:

    소스 접두어: https://http.mysite.com/

    소스 대상: https://proxy.mysite.com/

  4. 변경 내용을 저장하고 적용합니다.

    이렇게 만든 매핑을 보려면 View/Edit Mappings라는 링크를 누릅니다.


    주 –

    이 구성은 프록시 서버와 컨텐트 서버가 보안 모드에서 실행 중인 경우에만 작동합니다. 즉, 프록시에 대해 암호화가 활성화되어 있어야 하며 명령줄에서 프록시를 다시 시작해야 합니다. 명령줄에서 프록시를 다시 시작하려면 프록시 디렉토리로 이동하여 ./restart를 입력합니다.


역방향 프록시 설정 시 정방향 프록시 기능 사용 안 함

프록시 서버가 역방향 프록시 서버로 구성된 경우 기본적으로 해당 프록시 서버 인스턴스는 정방향 프록시 서버로도 계속 작동됩니다. 이러한 서버 인스턴스는 역방향 프록시 요청을 수락하여 서비스를 제공할 뿐만 아니라 정방향 프록시 요청에 대해서도 서비스를 제공합니다. 따라서 정방향 프록시 기능을 사용하지 않으려면 추가적인 구성이 필요합니다. URI가 정방향 프록시 형식과 일치하는 요청을 거부하는 ACL 구성을 설정할 수 있으며,이를 위해 다음과 같은 Client 지시문을 사용할 수 있습니다.

<Client uri="http://.*">
PathCheck fn="check-acl" acl="http://.*"
<Client>
.
.
.
The "http://.*" ACL can be a deny all ACL as follows:
.
.
acl "http://.*";
deny (all) user="anyone";

역방향 프록시의 가상 멀티호스팅

가상 멀티호스팅은 역방향 프록시 서버 등의 원래 서버가 각 주소에 서로 다른 서버가 설치된 것처럼 여러 DNS 별칭에 응답할 수 있도록 하는 기능입니다. 예를 들어 다음과 같은 이름의 DNS 호스트가 있다고 가정합니다.

이 호스트 이름을 각각 같은 IP 주소, 즉 역방향 프록시의 IP 주소에 매핑할 수 있습니다. 그러면 역방향 프록시는 해당 프록시에 액세스하는 데 사용된 DNS 이름에 따라 서로 다르게 작동할 수 있습니다.

가상 멀티호스팅을 사용하면 단일 역방향 프록시 서버에 여러 개의 서로 다른 *도메인*을 호스팅할 수도 있습니다. 예:

여러 로컬 호스트 이름과 여러 도메인의 조합을 모두 하나의 프록시 서버에서 사용할 수 있습니다.

가상 멀티호스팅의 기능 세부 사항

DNS 호스트 이름과 도메인의 이름 또는 별칭을 지정하고 해당 호스트 이름으로 전송된 요청이 전달되어야 하는 대상 URL 접두어를 지정하면 가상 멀티호스팅 기능이 작동합니다. 예를 들어 다음 두 가지 매핑이 있다고 가정합니다.

매핑이 루트 간 매핑일 필요는 없습니다. 대상 URL에 추가 URL 경로 접두어를 지정할 수 있습니다.

가상 도메인 매핑에도 같은 기법이 적용됩니다. 예를 들어 다음을 사용할 수 있습니다.

그러면 시스템은 HTTP “Host:” 헤더를 찾습니다. 시스템은 이 헤더를 기준으로 일치하는 가상 멀티호스팅 매핑을 선택합니다. 일치하는 멀티호스팅 매핑이 없으면 서버는 구성 파일에 나타나는 순서대로 다른 매핑을 찾거나, 찾지 못하는 경우 매핑을 수행하지 않습니다. 일치하는 매핑을 찾지 못한 경우 일반적으로 프록시는 “프록시가 요청 수행 거부” 응답을 발급합니다.

Procedure가상 멀티호스팅을 구성하는 방법

  1. Server Manager에 액세스하고 URL 탭을 누릅니다.

  2. Configure Virtual Multihosting 링크를 누릅니다.

    Configure Virtual Multihosting 페이지가 표시됩니다.

  3. Source Hostname (alias) 필드에서 이 매핑이 적용될 로컬 호스트 이름(또는 DNS 별칭)을 지정합니다.

  4. Source Domain Name 필드에서 이 매핑이 적용될 로컬 도메인 이름을 입력합니다.

    여러 개의 서로 다른 DNS 도메인을 멀티호스팅하려는 경우 이외에는 일반적으로 이 이름은 자체 네트워크의 도메인 이름입니다.

  5. 호스트와 도메인 이름이 위에서 지정한 내용과 일치하는 경우 요청이 전달될 대상 URL 접두어를 Destination URL Prefix 필드에 입력합니다.

  6. 템플리트를 사용하는 경우에는 Use This Template 드롭다운 목록에서 템플리트 이름을 선택하고, 템플리트를 적용하지 않으려면 NONE의 값을 유지합니다.

  7. OK를 누릅니다.

  8. Restart Required를 누릅니다.

    Apply Changes 페이지가 표시됩니다.

  9. Restart Proxy Server 버튼을 눌러 변경 사항을 적용합니다.

    원하는 모든 가상 멀티호스팅 매핑에 대해 위의 단계를 반복합니다.

    Configure Virtual Multihosting 페이지 아래쪽에 모든 가상 멀티호스팅 매핑이 나타납니다. Source Hostname (alias) 및 Source Domain Name 필드가 프록시의 포트 번호와 함께 “Host:” 헤더를 찾습니다.

    예를 들어 호스트 이름이 www이고 도메인이 example.com이며 포트 번호가 8080이면 다음과 같은 정규 표현식이 나타납니다.

    www(|.example.com)(|:8080)

    이 정규 표현식은 사용자가 입력했거나 클라이언트가 보냈을 수 있는 다음과 같은 모든 가능한 조합과 일치합니다. 일부 클라이언트 소프트웨어에서는 포트 번호가 80이 아닌 경우에도 서버가 해당 포트에서 수신했기 때문에 포트 번호가 생략될 수 있습니다.

    • www

    • www:8080

    • www.example.com

    • www.example.com:8080

가상 멀티호스팅에 대한 참고 사항