| |
| Sun Java System Web Proxy Server 4 .0.1 관리 설명서 | |
14 장
역방향 프록시 사용이 장에서는 Proxy Server를 역방향 프록시로 사용하는 방법에 대해 설명합니다. 역방향 프록시는 프록시 서버의 특정한 대체 사용 이름입니다. 방화벽 외부에서 외부 클라이언트에게 보안 컨텐트 서버를 표시하는 데 사용할 수 있습니다. 이를 통해 기업 외부로부터 서버의 데이터에 대한 직접적이고 모니터되지 않는 액세스를 방지합니다. 또한 복제용으로 사용할 수도 있습니다. 즉 로드 밸런싱을 위해 사용량이 많은 서버의 전면에 여러 프록시를 연결할 수 있습니다. 이 장에서는 Proxy Server를 방화벽 내부 또는 외부에서 대체 사용하는 방법에 대해 설명합니다.
이 장은 다음 내용으로 구성되어 있습니다.
역방향 프록시 작동 원리역방향 프록시에는 두 가지 모델이 있습니다. 한 가지 모델은 Proxy Server의 보안 기능을 활용하여 트랜잭션을 처리하고, 다른 하나는 캐싱 기능을 사용하여 사용량이 많은 서버에서 로드 밸런싱을 수행합니다. 두 모델은 모두 엄격히 방화벽에서 작동하지 않는다는 점에서 기존 프록시 사용과는 다릅니다.
서버 대용로서의 프록시
신용 카드 번호 데이터베이스와 같이 보안을 유지해야 하는 중요 정보가 들어 있는 컨텐트 서버가 있을 경우 방화벽 외부에 프록시를 컨텐트 서버의 대용으로 설정할 수 있습니다. 외부 클라이언트가 컨텐트 서버에 액세스를 시도하면 컨텐트 서버가 아닌 프록시 서버로 전달됩니다. 컨텐트 서버의 실제 컨텐츠는 방화벽 내에서 안전하게 유지됩니다. 프록시 서버는 방화벽 외부에 상주하므로 클라이언트에게는 컨텐트 서버처럼 보입니다.
클라이언트가 해당 사이트에 전달한 요청은 프록시 서버로 갑니다. 그러면 프록시 서버는 방화벽의 특정 통로를 통해 클라이언트의 요청을 컨텐트 서버로 전달합니다. 컨텐트 서버는 다시 이 통로를 통해 프록시로 결과를 전달합니다. 프록시는 마치 실제 컨텐트 서버인 것처럼 검색된 정보를 클라이언트에 전달합니다(그림 14-1 참조). 컨텐트 서버가 오류 메시지를 반환하면 프록시 서버는 메시지를 클라이언트에 전송하기 전에 메시지를 가로채 헤더에 열거된 URL을 변경합니다. 이를 통해 외부 클라이언트가 내부 컨텐트 서버로의 재지정 URL을 알지 못하도록 합니다.
프록시는 이런 방식으로 보안 데이터베이스와 악성 공격 가능성 간을 차단하는 장벽 역할을 수행합니다. 공격 성공 가능성이 희박한 상황에서, 공격자는 전체 데이터베이스에 대한 액세스를 수행하는 것이 아니라 단일 트랜잭션과 관련이 있는 정보에만 제한적으로 액세스하게 될 가능성이 높습니다. 방화벽 통로에는 프록시 서버만 액세스할 수 있으므로 권한 없는 사용자는 실제 컨텐트 서버에 가까이 갈 수 없습니다.
그림 14-1
역방향 프록시가 실제 컨텐트 서버처럼 보임
다른 시스템이 들어오거나 나가는 것을 허용하지 않으면서 특정 포트의 특정 서버(이 경우 할당된 포트의 프록시)가 방화벽을 통해 액세스하는 것을 허용하도록 방화벽 라우터를 구성할 수 있습니다.
보안 역방향 프록시
보안 역방향 프록시는 프록시 서버와 다른 시스템 간의 하나 이상의 연결이 SSL(Secure Sockets Layer) 프로토콜을 사용하여 데이터를 암호화할 때 발생합니다.
보안 역방향 프록시는 여러 용도로 사용할 수 있습니다.
보안 역방향 프록시를 사용하면 데이터 암호화와 관련한 오버헤드가 있으므로 각 보안 연결이 더 느려집니다. 그러나 SSL이 캐시 메커니즘을 제공하므로 두 연결 당사자는 이후 연결에서 이전에 협상한 보안 매개 변수를 재활용하여 오버헤드를 상당히 줄일 수 있습니다.
세 가지 방법으로 보안 역방향 프록시를 구성할 수 있습니다.
보안 클라이언트에서 프록시. 이 시나리오는 프록시와 컨텐트 서버 간에 교환하는 정보를 권한 없는 사용자가 액세스할 수 있는 가능성이 거의 없는 경우에 효과적입니다(그림 14-2 참조).
그림 14-2
보안 클라이언트에서 프록시 연결
보안 프록시에서 컨텐트 서버. 이 시나리오는 방화벽 내부에 클라이언트가 있고 방화벽 외부에 컨텐트 서버가 있을 때 효과적입니다. 이 시나리오에서는 프록시 서버가 사이트 간의 보안 채널 역할을 수행합니다(그림 14-3 참조).
그림 14-3
보안 프록시에서 컨텐트 서버 연결
- 보안 클라이언트에서 프록시, 보안 프록시에서 컨텐트 서버. 이 시나리오는 서버 간에 교환하는 정보, 프록시 및 클라이언트에 보안이 필요한 경우에 효과적입니다. 이 시나리오에서는 프록시 서버가 클라이언트 인증의 추가 보안이 있는 사이트 간의 보안 채널 역할을 수행합니다(그림 14-4 참조).
그림 14-4
보안 클라이언트에서 프록시 연결 및 보안 프록시에서 컨텐트 서버 연결
각각의 구성을 설정하는 방법에 대한 자세한 내용은 역방향 프록시 설정을 참조하십시오.
SSL처럼 프록시도 클라이언트 인증을 사용할 수 있습니다. 이를 위해 프록시에 대한 요청을 수행하는 컴퓨터가 신분 확인을 위한 인증서(인증 양식)를 제공해야 합니다.
로드 밸런싱용 프록시
한 조직 내에서 여러 프록시 서버를 사용하여 웹 서버 간의 네트워크 로드를 밸런싱할 수 있습니다. 이 모델을 사용하면 프록시 서버의 캐시 키능을 활용하여 로드 밸런싱용 서버 풀을 만들 수 있습니다. 이 경우 프록시 서버는 방화벽의 어느 쪽에나 위치할 수 있습니다. 날마다 많은 요청을 받는 웹 서버가 있는 경우 프록시 서버를 활용하여 웹 서버의 로드를 줄이고 보다 효율적인 네트워크 액세스가 가능합니다.
프록시 서버는 클라이언트 요청과 실제 서버 간의 중개인 역할을 수행합니다. 프록시 서버는 요청된 문서를 캐시합니다. 프록시 서버가 여럿인 경우 DNS는 IP 주소를 "라운드 로빈" 방식으로 임의 선택하여 요청을 라우팅할 수 있습니다. 클라이언트는 매번 같은 URL을 사용하지만 요청 라우팅은 매번 다른 프록시를 통해 수행됩니다.
사용량이 많은 컨텐트 서버로의 요청을 여러 프록시를 사용하여 처리하면 서버가 더 높은 부하를 처리하고 단독 처리 시보다 더 효율적이라는 장점이 있습니다. 프록시가 최초로 컨텐트 서버에서 문서를 검색하는 초기 시작 후 컨텐트 서버 요청 수는 급격히 줄어듭니다.
CGI 요청과 비정기적인 새 요청만 컨텐트 서버로 계속 들어갑니다. 나머지는 프록시에서 처리합니다. 다음을 예로 들 수 있습니다. 서버에 대한 요청 중 90%가 CGI 요청이 아니며(즉, 캐시될 수 있으며) 컨텐트 서버가 매일 2백만 건의 요청을 받는다고 가정합니다. 이 상황에서 3대의 역방향 프록시를 연결하고 각 프록시가 매일 2백만 건의 요청을 처리하도록 하면 매일 6백만 건의 요청을 처리할 수 있게 됩니다. 컨텐트 서버에 도착하는 10%의 요청을 합하면 매일 각 프록시에서 200,000건, 전체 합해서 600,000건을 처리하게 되며 전에 비해 상당히 효율적입니다. 요청 수는 2백만에서 6백만까지 증가할 수 있고 , 이에 따라 컨텐트 서버의 로드는 2백만에서 600,000만으로 격감할 수 있습니다. 실제 결과는 상황에 따라 달라질 수 있습니다.
그림 14-5
로드 밸런싱에 사용되는 프록시
역방향 프록시 설정역방향 프록시를 설정하려면 정상 매핑과 역방향 매핑 등, 두 가지 매핑이 필요합니다.
- 정상 매핑은 요청을 컨텐트 서버로 재지정합니다. 클라이언트가 프록시 서버에서 문서를 요청하면 프록시 서버는 정상 매핑을 사용하여 실제 문서 위치를 알립니다.
- 역방향 매핑은 컨텐트 서버로부터의 재지정을 위한 프록시 서버 트랩을 만듭니다. 프록시는 재지정을 가로챈 후 재지정된 URL을 변경하여 프록시 서버에 매핑합니다. 예를 들어 클라이언트가 옮겨졌거나 찾을 수 없는 문서를 요청한 경우 컨텐트 서버는 요청한 URL에서 문서를 찾을 수 없음을 설명하는 메시지를 클라이언트에게 반환합니다. 컨텐트 서버는 옮겨진 파일을 찾을 수 있는 URL을 나열하는 HTTP 헤더를 반환된 메시지에 추가합니다. 내부 컨텐트 서버의 비밀을 보장하기 위해 프록시는 역방향 매핑을 사용하여 URL을 재지정할 수 있습니다.
웹 서버 http://http.site.com/이 있고 이에 대한 역방향 프록시를 설정한다고 가정합니다. 역방향 프록시를 http://proxy.site.com/이라고 합니다.
정상 매핑과 역방향 매핑을 다음과 같이 만듭니다.
- Server Manager에 액세스하고 URLs 탭을 누릅니다.
- Create Mapping 링크를 누릅니다. Create Mapping 페이지가 나타납니다.
- 나타난 페이지에서 한 매핑에 대한 정보를 입력합니다. 예:
Regular mapping:
Source prefix: http://proxy.site.com
Source destination: http://http.site.com/
- OK를 누릅니다. 페이지로 돌아가서 두 번째 매핑을 만듭니다.
Reverse mapping:
Source prefix: http://http.site.com/
Source destination: http://proxy.site.com/
- 변경 후 OK를 누릅니다.
OK 버튼을 누르면 프록시 서버가 하나 이상의 추가 매핑을 추가합니다. 매핑을 보려면 View/Edit Mappings 링크를 누릅니다. 추가 매핑의 형식은 다음과 같습니다.
from: /
to: http://http.site.com/
이러한 추가 자동 매핑은 보통 서버로 역방향 프록시에 연결하는 사용자에 대한 것입니다. 첫 번째 매핑은 정상 프록시로 역방향 프록시에 연결하는 사용자에 대한 것입니다. 설치에 따라 보통 두 번째 매핑만 필요하지만 둘 다 있다고 해서 프록시에서 문제가 발생하지는 않습니다.
프록시 서버는 자체에서 CGI 응용 프로그램을 실행하지 않으므로 CGI 응용 프로그램은 계속 원본 서버에서 실행됩니다. 그러나 CGI 스크립트에서 결과값이 캐시될 수 있음을 나타낼 경우(Last-modified나 Expires 헤더를 발행하여 0이 아닌 TTL(Time-to-live) 포함), 프록시가 결과를 캐시합니다.
보안 역방향 프록시 설정
보안 역방향 프록시를 설정하기 전에 디지털 인증서, 인증 기관(CA) 및 인증에 대해 이해해야 합니다.
보안 역방향 프록시 설정은 비보안 역방향 프록시 설정과 거의 유사합니다. 유일한 차이점은 암호화할 파일에 대한 프로토콜로 HTTPS를 지정해야 한다는 점입니다.
다음 지침은 선택한 구성 시나리오에 따라 보안 역방향 프록시를 설정하는 방법을 설명합니다. 이 지침에서는 매핑 설정 방법을 설명하기 위해 http.site.com이라는 웹 서버가 있으며 proxy.site.com이라는 보안 역방향 프록시 서버를 설정한다고 가정합니다. 다음 단계를 수행할 때는 지침에서 사용하는 예제 이름을 실제 웹 서버와 프록시 서버의 이름으로 변경하십시오.
보안 클라이언트에서 프록시
- Server Manager에 액세스하고 URLs 탭을 누릅니다.
- Create Mapping 링크를 누릅니다. Create Mapping 페이지가 나타납니다.
- 나타나는 페이지에서 다음과 같은 방법으로 정상 및 역방향 매핑을 설정합니다.
정상 매핑:
Source prefix: https://proxy.mysite.com
Source destination: http://http.mysite.com/
역방향 매핑:
Source prefix: http://http.mysite.com/
Source destination: https://proxy.mysite.com/
- 변경 사항을 저장 및 적용합니다.
만든 매핑을 보려면 View/Edit Mappings 링크를 누릅니다.
보안 프록시에서 컨텐트 서버
- Server Manager에 액세스하고 URLs 탭을 누릅니다.
- Create Mapping 링크를 누릅니다. Create Mapping 페이지가 나타납니다.
- 나타나는 페이지에서 다음과 같은 방법으로 정상 및 역방향 매핑을 설정합니다.
정상 매핑:
Source prefix: http://proxy.mysite.com
Source destination: https://http.mysite.com/
역방향 매핑:
Source prefix: https://http.mysite.com/
Source destination: http://proxy.mysite.com/
- 변경 사항을 저장 및 적용합니다. 만든 매핑을 보려면 View/Edit Mappings 링크를 누릅니다.
보안 클라이언트에서 프록시, 보안 프록시에서 컨텐트 서버
- Server Manager에 액세스하고 URLs 탭을 누릅니다.
- Create Mapping 링크를 누릅니다. Create Mapping 페이지가 나타납니다.
- 나타나는 페이지에서 다음과 같은 방법으로 정상 및 역방향 매핑을 설정합니다.
정상 매핑:
Source prefix: https://proxy.mysite.com
Source destination: https://http.mysite.com/
역방향 매핑:
Source prefix: https://http.mysite.com/
Source destination: https://proxy.mysite.com/
역방향 프록시에서의 가상 멀티호스팅
가상 멀티호스팅은 원본 서버(또는 이 예제에서는 역방향 프록시)가 각각의 해당 주소에 각기 다른 서버가 설치된 것처럼 여러 DNS 별칭에 응답하도록 하는 기능입니다. 예를 들어 다음과 같은 DNS 호스트 이름이 있을 수 있습니다.
이 호스트 이름들을 같은 IP 주소(역방향 프록시의 IP 주소)에 매핑할 수 있습니다. 그런 다음 어느 DNS가 액세스에 사용되었는가에 따라 역방향 프록시의 동작을 다르게 할 수 있습니다.
또한 가상 멀티호스팅을 사용하면 하나의 역방향 프록시에서 여러 개의 도메인을 호스팅할 수 있습니다. 예:
하나의 프록시 서버에서 모두 여러 도메인 및 여러 로컬 호스트 이름의 조합을 사용할 수 있습니다.
이 절에서는 다음 항목에 대해 설명합니다.
가상 멀티호스팅의 기능적 세부 사항
가상 멀티호스팅 기능은 DNS 호스트와 DNS 이름(또는 별칭)을 지정한 다음 해당 호스트 이름으로 전송된 요청을 보내야 하는 대상 URL 접두사를 제공하여 작동합니다. 예를 들어 두 가지 매핑이 있습니다.
매핑은 루트 대 루트일 필요는 없으며 대상 URL의 추가 URL 접두사를 지정할 수 있습니다.
가상 도메인 매핑에서도 마찬가지입니다. 예를 들어 다음을 사용할 수 있습니다.
시스템은 HTTP "Host:" 헤더를 찾고, 헤더에 따라 일치하는 가상 멀티호스팅 매핑을 선택합니다. 일치하는 멀티호스팅 매핑이 없으면 서버는 구성 파일의 순서에 따라 계속 다른 매핑을 찾거나, 일치하는 매핑이 없으면 매핑을 수행하지 않습니다. 일치가 없으면 프록시는 보통 "Proxy denies fulfilling the request(프록시가 요청 수행 거부)"라는 응답을 반환합니다.
가상 멀티호스팅을 구성하려면 다음과 같이 합니다.
- Server Manager에 액세스하고 URLs 탭을 누릅니다.
- Configure Virtual Multihosting 링크를 누릅니다. Configure Virtual Multihosting 페이지가 나타납니다.
- Source Hostname (alias) 필드에 이 매핑을 적용할 로컬 호스트 이름 또는 DNS 별칭을 지정합니다.
- Source Domain Name 필드에 이 매핑을 적용할 로컬 도메인 이름을 입력합니다. 여러 DNS 도메인을 멀티호스팅하는 경우를 제외하면 보통 네트워크의 도메인 이름을 사용합니다.
- Destination URL Prefix 필드에 호스트 및 도메인 이름이 위에 지정한 것과 일치하는 경우에 요청을 보낼 대상 URL 접두사를 입력합니다.
- 템플릿을 사용할 경우 Use This Template 드롭다운 목록에서 템플릿 이름을 선택하거나, 템플릿을 적용하지 않으려면 "NONE" 값을 그대로 둡니다.
- OK를 누릅니다.
- Restart Required를 누릅니다. Apply Changes 페이지가 표시됩니다.
- Restart Proxy Server 버튼을 눌러 변경 사항을 적용합니다.
만들 가상 멀티호스팅 매핑 각각에 대해 위의 절차를 반복합니다.
모든 가상 멀티호스팅 매핑은 Configure Virtual Multihosting 페이지의 하단에 표시됩니다. 참고로 Source Hostname (alias) 및 Source Domain Name 필드는 프록시 포트 번호와 함께 하나의 정규식으로 병합됩니다. 병합된 정규식은 Host 헤더와 비교하는 데 사용됩니다.
예를 들어 호스트가 "www", 도메인이 "example.com", 포트 번호가 "8080"이면 다음과 같은 정규식으로 표시됩니다.
www(|.example.com)(|:8080)
이렇게 하면 사용자가 입력하거나 클라이언트가 전송할 수 있는 아래의 모든 조합과 일치를 보장할 수 있습니다. 단, 포트 번호가 80이 아닌 경우에도 서버의 청취 포트가 명확하다면 일부 클라이언트 소프트웨어는 포트 번호를 전송하지 않을 수도 있습니다.
가상 멀티호스팅에 대한 중요 참고 정보
역방향 프록시 매핑을 구성하기 전에 Client autoconfiguration 기능을 사용하지 않도록 설정해야 합니다. 클라이언트 자동 구성 기능은 역방향이 아닌 전방향 프록시 작업을 위한 것이므로 이를 사용하지 않아야 문제를 예방할 수 있습니다.
Virtual Multihosting 기능은 자동 역방향 매핑을 만듭니다. 즉 Virtual Multihosting 페이지에서 입력한 매핑에 대해 역방향 매핑을 만들지 마십시오.
가상 매핑은 obj.conf에서 virt-map 함수로 지정됩니다.
가상 매핑은 obj.conf 구성 파일에서 지정한 순서로 비교됩니다. 가상 매핑에 앞서 정상, 역방향, 정규식 또는 클라이언트 자동 구성 매핑이 있으면 해당 매핑이 우선 적용됩니다. 마찬가지로 가상 매핑에서 일치하는 내용이 없으면 obj.conf에서 가상 매핑 부분 이후의 다음 매핑에 대한 변환을 계속합니다.
프록시 서버의 포트 번호가 변경되면 Virtual Multihosting 매핑의 포트 번호가 틀리게 되므로 Virtual Multihosting을 다시 만들어야 합니다.