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)
| 파라미터 | 설명 | |||
|---|---|---|---|---|
on | Reverse proxy를 켭니다. | |||
off | Reverse 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 Anywhere 와 Capsule Docs 입니다. |
edit rule <rule_name> | Reverse proxy 규칙을 수정합니다. 대화형 모드로 실행됩니다. | |||
remove rule <rule_name> | Reverse proxy 규칙을 삭제합니다. | |||
apply config | Reverse proxy 구성 변경을 적용합니다. |
중요한 주의점
- Reverse proxy로 허용되는 외부 포트는 80 과 443 뿐 입니다. 내부 포트는 모두 허용됩니다.
- Mobile Access Security Gateway의 Gaia Portal이
https://<Security Gateway IP 주소>/처럼 끝에/만 있는 URL 이면, 반드시 URL이나 포트를 바꿔야 합니다. 예를 들어 URL을 다음 중 하나로 바꿉니다.https://<Security Gateway IP 주소>/gaiahttps://<Security Gateway IP 주소>:4434
Gaia Portal URL을 바꾸는 방법은 다음과 같습니다.
- Security Gateway 객체에서 Platform Portal 을 클릭합니다.
- Main URL 을 바꿉니다.
- OK 를 클릭합니다.
- 정책을 설치합니다(Install Policy).
완전한 예시와 고급 CLI·XML 구성은 sk110348 을 참고하세요.
문제 해결 (Troubleshooting)
Reverse proxy는 SmartLog 같은 표준 Check Point 모니터링 도구로 진단할 수 있습니다.
트래픽 로그 켜기
Reverse proxy가 트래픽 로그를 보내도록 구성하려면 다음을 합니다.
- SmartDashboard > Mobile Access 탭에서 Additional Settings > Logging 으로 갑니다.
- Tracking 영역에서 Log Access for Web Applications 를 선택하고, 기록할 이벤트 중 하나를 고릅니다.
- Unsuccessful access events — Denied·Failed 로그
- All access events — Allowed·Denied·Failed 로그
- 정책을 설치합니다(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 rules 의 Internal Server 열에서 확인할 수 있습니다. 이 호스트명이 Security Gateway에서 풀리는지 확인 하려면 그 호스트에 nslookup 을 실행해 보세요. |
| Internal host connection failed | 내부 서버에 연결하지 못했습니다. 서버가 켜져 동작 중인지 확인하세요. |
| Invalid URL | Security Gateway에서 내부 서버로 가는 URL의 형식이 올바르지 않았습니다. |
| SSL handshake failed | Security Gateway와 내부 서버 사이의 SSL/TLS 핸드셰이크 중 문제가 발생했습니다. |
| Server response was too slow | 동작 시간 초과(operation timeout). |
| Page not found | 페이지를 찾을 수 없습니다. |
디버깅 켜기
Reverse proxy의 디버깅을 켜려면 다음을 합니다.
/opt/CPcvpn-R82/conf/ReverseProxy_conf/httpd_common.conf파일에서ReverseProxyHandlerTraceLog파라미터를 찾아, 값을 Off 에서 On 으로 바꿉니다. trace 로그는 다음에서 봅니다.
- HTTPS 의 경우 —
/opt/CPcvpn-R82/conf/ReverseProxy_conf/httpd_ssl.conf파일에서LogLevel파라미터를 찾아, 값을 emerg 에서 debug 로 바꿉니다. HTTPS 로그 파일은 다음에서 봅니다.
- 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 offReverse 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 규칙을 동기화하려면 다음을 합니다.
$CVPNDIR/conf/ReverseProxy_conf/디렉터리에서, 구성된 Cluster Member의 다음 파일을 다른 Cluster Member로 복사합니다.
- 각 멤버에서 구성을 적용합니다.
ReverseProxyCLI apply config