08. 통합점: 게이트웨이, 터널, 릴레이

개요

  • HTTP 는 웹에 있는 모든 리소스에 대한 프로토콜로써 사용된다

  • 여러 종류의 리소스에 접근하는데 HTTP 가 어떻게 사용되는지, 다른 프로토콜이나 어플리케이션 간 통신에 HTTP 가 어떻게 쓰이는지 알아보자

    • 게이트웨이

      • 서로 다른 프로토콜과 어플리케이션 간의 HTTP 인터페이스

    • 어플리케이션 인터페이스

      • 서로 다른 형식의 웹 어플리케이션이 통신하는데 사용

    • 터널

      • HTTP 커넥션을 사용해 HTTP 가 아닌 트래픽을 전송하는 데 사용한다

    • 릴레이

      • HTTP 프락시로, 한 번에 한 개의 홉에 데이터를 전달하는데 사용한다

게이트웨이

  • 게이트웨이는 한 개의 어플리케이션만으로 모든 리소스를 처리하기 힘들어지면서, 리소스를 받기 위한 경로를 안내하기 위한 목적으로 고안됨

  • 리소스와 어플리케이션을 연결하는 역할

    • HTTP 요청을 다른 프로토콜로 변환

    • HTTPS 요청을 HTTP 요청으로 변환

    • HTTP 클라이언트와 서버 어플리케이션 연결

클라이언트 측 게이트웨이와 서버 측 게이트웨이

  • 웹 게이트웨이는 클라이언트 측 프로토콜과 서버 측 프로토콜을 (/) 으로 구별하여 기술

    • <클라이언트 프로토콜>/<서버 프로토콜> 게이트웨이

프로토콜 게이트웨이

  • 클라이언트는 명시적으로 게이트웨이를 통해 HTTP 트래픽을 보낼 수 있음

    Example

  • 브라우저를 사용해 서버 측 FTP 게이트웨이를 사용하도록 설정

    • 브라우저는 게이트웨이로 HTTP 요청을 보내고, 게이트웨이가 이를 FTP 로 변환해 FTP 서버로 요청을 보낸다

HTTP/*: 서버 측 웹 게이트웨이

  • 클라이언트로부터 받은 HTTP 요청을 다른 프로토콜로 전환

    Example

  • 게이트웨이가 클라이언트의 HTTP 요청을 FTP 로 변환하여 처리하는 과정 1. 클라이언트로부터 HTTP 요청을 받음 2. USER 와 PASS 명령을 보내 서버에 로그인 3. 서버에서 적절한 디렉터리로 변경하기 위해 CWD 명령을 내림 4. 다운로드 형식을 ASCII 로 설정 5. MDTM 으로 문서의 최근 수정 시간을 가져옴 6. PASV 로 서버에게 수동형 데이터 검색을 하겠다고 말함 7. RETR 로 객체 검색 8. FTP 서버에 데이터 커넥션을 맺고 객체가 게이트웨이로 전송됨 9. 전송된 객체를 HTTP 응답에 실어 클라이언트로 전송

HTTP/HTTPS: 서버 측 보안 게이트웨이

  • 클라이언트의 HTTP 요청을 HTTPS 로 암호화

  • 클라이언트는 HTTP 로 통신하지만 게이트웨이가 자동으로 모든 세션을 암호화

HTTPS/HTTP: 클라이언트 측 보안 가속 게이트웨이

  • 클라이언트의 HTTPS 요청을 받아 복호화하여 서버로 HTTP 요청을 전달

  • 보안 트래픽 복호화에 최적화된 하드웨어를 사용하여 효율적으로 사용 가능

  • 게이트웨이와 원 서버 사이 트래픽은 암호화되지 않기 때문에 주의 필요

리소스 게이트웨이

  • 게이트웨이의 가장 일반적인 형태는 어플리케이션 서버이다

    • 목적지 서버와 게이트웨이를 한 개의 서버로 결합

  • 클라이언트는 어플리케이션 서버와 통신하고, 어플리케이션 서버는 게이트웨이를 통해 어플리케이션 프로그램과 통신한다

    Example

  • 클라이언트는 HTTP 를 사용해 어플리케이션 서버로 요청을 하고, 어플리케이션 서버는 게이트웨이를 사용해 요청의 최종 목적지인 어플리케이션과 통신하여 응답을 클라이언트로 반환

  • 클라이언트 <-> 어플리케이션 서버 <-> 어플리케이션 프로그램

  • 어플리케이션 서버 <-> 게이트웨이 <-> 어플리케이션 프로그램

공용 게이트웨이 인터페이스

  • 최초의 서버 확장

    • 동적인 HTML, 데이터베이스 질의와 같은 기능들을 제공

  • CGI 내부 동작을 사용자로부터 숨김

    • 다양한 확장으로부터 서버를 보호

  • 요청 당 프로세스 생성에 대한 부하로 성능 저하

    • 데몬 프로세스로 동작하는 Fast CGI 등장

서버 확장 API

  • 서버의 컴포넌트를 웹 개발자의 코드로 교체하거나 연결할 수 있게 해주는 API

    • 서버 자체의 동작을 바꾸거나 서버의 처리능력을 최대한 활용하기 위해

    • 서버 어플리케이션과 함께 메모리에 로드되어 있어 CGI 보다 유리

어플리케이션 인터페이스와 웹 서비스

  • HTTP 는 어플리케이션들을 연결하는 도구로 사용될 수 있음

    • 상호 간 프로토콜 인터페이스를 맞추는 것이 필요

      • RPC 메서드와 관련 변수들을 HTTP POST 요청을 사용해 교환

      • HTTP 헤더에 XML 추가 (SOAP)

      • ...

터널

  • HTTP 를 지원하ㅇ 않는 어플리케이션에 HTTP 어플리케이션을 사용해 접근하는 방법을 제공

    • HTTP 커넥션을 사용해 HTTP 가 아닌 트래픽을 전송 가능

    • 다른 프로토콜 트래픽을 HTTP 를 사용해 통신 가능

CONNECT 로 HTTP 터널 커넥션 맺기

  • 웹 터널은 CONNECT 메서드를 사용해 커넥션을 맺을 수 있음

    • 터널 게이트웨이가 목적 서버와 TCP 커넥션을 맺고, 클라이언트와 서버 간 오가는 데이터를 무조건 전달하기를 요청

      Example

  1. CONNECT 요청을 보내 게이트웨이에 터널 연결 요청

  2. TCP 커넥션 생성 후 클라이언트로 200 응답 반환

  3. 클라이언트가 HTTP 요청을 보내면 터널을 통해 TCP 커넥션으로 서버에 전달

  4. 서버가 TCP 커넥션을 통해 데이터를 보내면 터널을 통해 HTTP 로 클라이언트에 전달

  5. CONNECT 요청 CONNECT 요청 메세지의 URI 는 호스트명과 포트를 기술한다

    CONNECT home.netscape.com:443 HTTP/1.0

User-agent: Mozilla/4.0

  • CONNECT 응답

    CONNECT 응답 메세지는 커넥션이 메세지 대신 바이트를 그대로 전달하기 때문에 Content-Type 헤더가 필요 없다

    HTTP/1.0 Connection Established

Proxy-agent: Netscape-Proxy/1.1

데이터 터널링, 시간, 커넥션 관리

  • 게이트웨이는 터널을 통해 전달되는 데이터를 볼 수 없다

  • 게이트웨이는 커넥션이 맺어지는 대로 헤더를 포함해 읽어들이는 모든 데이터를 서버에 전송해야 함

    • 프로토콜이 데이터 의존성을 포함할 수 있기 때문에 한 쪽에서 데이터를 소비하지 않으면 반대쪽 생산자가 행에 걸리고 교착상태가 발생할 수 있다

  • 터널링을 사용하다 커넥션이 끊어지는 경우 한 쪽의 전송하지 않은 데이터는 버려진다

  • 요청 데이터 크기를 주의하며 파이프라인 통신을 해야 한다

    • TCP 리셋으로 인해 클라이언트가 응답을 확인할 수 없어 통신 실패의 원인을 알 수 없게 만들 수 있다

SSL 터널링

  • SSL 트래픽이 HTTP 만을 허용하는 방화벽을 통과하기 위한 방법

    • 중간에 SSL 을 지원하지 않는 프록시가 포함되어 있는 등의 이유로 SSL 통신이 불가능 할 때

    • SSL 트래픽을 HTTP 커넥션으로 전송하여 방화벽을 통과

      Example

  • SSL 트래픽은 처음에 HTTP 를 통해 전송되고 이후 SSL 커넥션에 의해 전송된다

SSL 터널링 vs HTTP/HTTPS 게이트웨이

  • HTTP/HTTPS 게이트웨이

    • 클라이언트 - 게이트웨이 사이는 HTTP 로 통신하여 보안에 취약

    • 클라이언트는 원격 서버에 SSL 클라이언트 인증이 불가

    • 게이트웨이가 SSL 을 지원해야 함

  • SSL 터널링

    • 게이트웨이는 SSL 을 구현할 필요가 없음

    • SSL 세션은 클랑이언트와 목적지 웹 서버간에 생성

터널 인증

  • 게이트웨이는 인증을 통과한 클라이언트에게만 터널링을 제공할 수 있음

터널 보안에 대한 고려사항들

  • 터널 게이트웨이는 데이터를 확인할 수 없기 때문에 특정 포트만을 터널링 할 수 있게 하는 등의 정책과 함께 사용하는 것을 권장

릴레이

  • HTTP 명세를 준수하지 않는 프록시

    • HTTP 통신을 하지만 단순히 데이터 전달만을 고려한 프록시

    • 간단하게 구현이 가능

    • 단순한 데이터 필터링이나 콘텐츠 변환에 사용되기도 함

  • 멍청한 프록시 문제와 같은 HTTP 명세를 준수하지 않아 발생할 수 있는 문제점들을 내포하고 있음

Last updated