목차/11. Reverse Proxy

11Reverse ProxyReverse Proxy

대부분의 Mobile Access 접근은 포털을 거치지만, 포털 없이 곧장 내부 웹 서버를 외부에 노출 하고 싶을 때가 있습니다. 이때 Mobile Access Security Gateway를 Reverse Proxy 로 동작시킵니다. 이 장은 Reverse Proxy가 무엇을 하는지, ReverseProxyCLI 로 어떻게 구성하는지, 로그와 디버그로 어떻게 문제를 해결하는지, 그리고 어떤 한계가 있는지 까지 빠짐없이 정리합니다.

Reverse Proxy가 하는 일

Mobile Access Security Gateway는 서버 위의 Web Application을 위한 reverse proxy 로 구성할 수 있습니다. Reverse Proxy 사용자는 Security Gateway IP 주소로 풀리는 URL 로 접속하고, 그러면 Security Gateway가 Reverse Proxy 규칙에 따라 그 요청을 내부 서버로 전달 합니다. 덕분에 외부 클라이언트가 내부 서버의 자원에 닿으면서도, 서버의 실제 내부 주소는 감춰 집니다.

Reverse Proxy는 다음을 하는 규칙(rule)으로 구성합니다.

  • 내부 서버의 외부 주소를 실제 네트워크 주소로 매핑(map) 합니다.
  • 외부 클라이언트가 서버의 지정된 자원에 접근하도록 권한 을 줍니다.
  • 사용자와 자원 사이의 연결을 HTTP 로 할지 HTTPS 로 할지 를 정합니다.

기본적으로 Reverse Proxy는 비활성(disabled) 입니다. CLI에서 켜고 구성합니다.

CLI로 구성하기

CLI에서는 다음을 할 수 있습니다.

  • Reverse proxy를 켜거나(enable) 끕니다(disable).
  • Reverse proxy 규칙과 애플리케이션을 봅니다(show).
  • 새 규칙이나 애플리케이션을 추가합니다(add).
  • 기존 규칙을 수정합니다(edit).
  • 규칙을 삭제합니다(delete).
  • Reverse proxy 규칙 구성 변경을 적용합니다(apply).

구문 (Syntax)

ReverseProxyCLI {on | off | show {rules | applications} | add
{rule <rule_name> | application <app_name> {capsule_docs |
outlook_anywhere} <ext_hostname> <int_hostname>} | edit rule
<rule_name> | remove rule <rule_name> | apply config}

파라미터 (Parameters)

파라미터설명
onReverse proxy를 켭니다.
offReverse proxy를 끕니다.
`show {rules \applications}`Reverse proxy 규칙과 애플리케이션을 보여 줍니다.
`add {rule <rule_name> \application {capsule_docs \lync \outlook_anywhere} <ext_hostname> <int_hostname>}`Reverse proxy 규칙이나 애플리케이션을 추가합니다. add rule 명령은 대화형(interactive) 모드 로 실행되어, 프롬프트에 따라 동작을 선택합니다. 외부 호스트명·내부 호스트명의 URL을 입력할 때 프로토콜(http 또는 https)과 내부 포트 를 지정할 수 있습니다. add application 명령은 지원되는 내부 응용에 대한 규칙 한 개 이상의 묶음 을 더해 줍니다 — 지원 응용은 Outlook AnywhereCapsule Docs 입니다.
edit rule <rule_name>Reverse proxy 규칙을 수정합니다. 대화형 모드로 실행됩니다.
remove rule <rule_name>Reverse proxy 규칙을 삭제합니다.
apply configReverse proxy 구성 변경을 적용합니다.

중요한 주의점

  • Reverse proxy로 허용되는 외부 포트는 80443 입니다. 내부 포트는 모두 허용됩니다.
  • Mobile Access Security Gateway의 Gaia Portal이 https://<Security Gateway IP 주소>/ 처럼 끝에 / 만 있는 URL 이면, 반드시 URL이나 포트를 바꿔야 합니다. 예를 들어 URL을 다음 중 하나로 바꿉니다.
    • https://<Security Gateway IP 주소>/gaia
    • https://<Security Gateway IP 주소>:4434

Gaia Portal URL을 바꾸는 방법은 다음과 같습니다.

  1. Security Gateway 객체에서 Platform Portal 을 클릭합니다.
  2. Main URL 을 바꿉니다.
  3. OK 를 클릭합니다.
  4. 정책을 설치합니다(Install Policy).

완전한 예시와 고급 CLI·XML 구성은 sk110348 을 참고하세요.

문제 해결 (Troubleshooting)

Reverse proxy는 SmartLog 같은 표준 Check Point 모니터링 도구로 진단할 수 있습니다.

트래픽 로그 켜기

Reverse proxy가 트래픽 로그를 보내도록 구성하려면 다음을 합니다.

  1. SmartDashboard > Mobile Access 탭에서 Additional Settings > Logging 으로 갑니다.
  2. Tracking 영역에서 Log Access for Web Applications 를 선택하고, 기록할 이벤트 중 하나를 고릅니다.
    • Unsuccessful access events — Denied·Failed 로그
    • All access events — Allowed·Denied·Failed 로그
  3. 정책을 설치합니다(Install Policy).

로그는 SmartLog > Mobile Access logs 에서 볼 수 있습니다. Reverse Proxy 로그는 다음 기준으로 식별합니다.

  • Category — Mobile Access
  • Application — Reverse Proxy

Access 항목 읽기

로그의 Access 항목은 다음을 보여 줄 수 있습니다.

  • Allowed — 허가된(authorized) URL. Reverse Proxy가 URL 요청을 허용한 경우입니다(All access events 로깅 옵션이 구성된 경우에만 표시됨).
  • Denied — 허가되지 않은(unauthorized) URL. Reverse Proxy가 URL 요청을 차단한 경우입니다. 이것이 실수라면 해당 URL을 허용할 수 있습니다. 차단된 URL을 허용하려면:
    • 명령줄에서 ReverseProxyCLI show rules 를 실행합니다.
    • 관련 규칙의 Paths 열을 보고, 로그에서 허가되지 않은 경로를 찾아, 차단된 경로를 규칙에 추가 합니다.
  • Failed — Reverse Proxy가 요청 전달에 실패한 경우로, 다음 메시지 중 하나와 함께 나옵니다.
메시지의미 / 조치
Internal Server Error내부 서버가 Security Gateway와의 연결을 중단했습니다. 서버가 켜져 동작 중인지 확인하세요.
Proxy not found지정된 프록시 호스트를 풀 수 없습니다(resolve 실패).
Can't resolve host name응용·규칙에 구성된 <internal_host> 를 풀 수 없습니다. ReverseProxyCLI show applications 또는 ReverseProxyCLI show rulesInternal Server 열에서 확인할 수 있습니다. 이 호스트명이 Security Gateway에서 풀리는지 확인 하려면 그 호스트에 nslookup 을 실행해 보세요.
Internal host connection failed내부 서버에 연결하지 못했습니다. 서버가 켜져 동작 중인지 확인하세요.
Invalid URLSecurity Gateway에서 내부 서버로 가는 URL의 형식이 올바르지 않았습니다.
SSL handshake failedSecurity Gateway와 내부 서버 사이의 SSL/TLS 핸드셰이크 중 문제가 발생했습니다.
Server response was too slow동작 시간 초과(operation timeout).
Page not found페이지를 찾을 수 없습니다.

디버깅 켜기

Reverse proxy의 디버깅을 켜려면 다음을 합니다.

  1. /opt/CPcvpn-R82/conf/ReverseProxy_conf/httpd_common.conf 파일에서 ReverseProxyHandlerTraceLog 파라미터를 찾아, 값을 Off 에서 On 으로 바꿉니다. trace 로그는 다음에서 봅니다.
   
  1. HTTPS 의 경우 — /opt/CPcvpn-R82/conf/ReverseProxy_conf/httpd_ssl.conf 파일에서 LogLevel 파라미터를 찾아, 값을 emerg 에서 debug 로 바꿉니다. HTTPS 로그 파일은 다음에서 봅니다.
   
  1. HTTP 의 경우 — /opt/CPcvpn-R82/conf/ReverseProxy_conf/httpd_clear.conf 파일에서 LogLevel 파라미터를 찾아, 값을 emerg 에서 debug 로 바꿉니다. HTTP 로그 파일은 다음에서 봅니다.
   

cvpnd 로그 켜기

cvpnd 로그를 켜려면 다음을 실행합니다.

cvpnd_admin debug set TDERROR_ALL_ALL=5

로그는 다음에서 봅니다.

$CVPNDIR/log/cvpnd.elg

끄려면 다음을 실행합니다.

cvpnd_admin debug off

Reverse proxy 프로세스가 동작 중인지 확인

다음을 실행합니다.

ps -ef | grep httpd

출력에서 다음을 찾습니다.

  • HTTPS 의 경우 — ReverseProxySSL/httpd.conf
  • HTTP 의 경우 — ReverseProxyClear/httpd.conf

Reverse Proxy 알려진 한계

Reverse Proxy에는 분명한 제약이 있습니다.

  • 현재 지원되지 않는 것:
    • GUI(SmartDashboard)가 없 습니다.
    • 사용자 단위(user level) 접근 제어가 없 습니다.
    • 네트워크·인터페이스 단위의 세분화(granularity)가 없 습니다.
    • Reverse Proxy로 반환되는 사이트에 대한 링크 번역(link translation)이 없 습니다.
  • Mobile Access 정책에 Host Translation 링크 번역 방식으로 구성된 응용이 있다면, 그 응용들의 호스트명은 Reverse Proxy를 통한 통신의 호스트명과 달라야 합니다.
  • Reverse proxy는 SSL 종료(SSL termination)에 인증서를 하나만 씁니다. 여러 웹 서버를 HTTPS로 받으려면 와일드카드(wild card) 인증서이거나 Subject Alternate Names(SAN)를 쓰는 인증서 여야 합니다.
  • Lync (Skype for Business) 는 지원되지 않습니다.
  • 클러스터에 reverse proxy를 구성하면, 규칙이 멤버 간에 자동으로 동기화되지 않 습니다.

Cluster Member 간에 reverse proxy 규칙을 동기화하려면 다음을 합니다.

  1. $CVPNDIR/conf/ReverseProxy_conf/ 디렉터리에서, 구성된 Cluster Member의 다음 파일을 다른 Cluster Member로 복사합니다.
   
  1. 각 멤버에서 구성을 적용합니다.
   ReverseProxyCLI apply config