본문 바로가기
IT/Server

[Server] Reverse Proxy / Forward Proxy

by kyu-nahc 2024. 9. 25.
반응형

Proxy

프록시(Proxy)클라이언트와 서버 간의 통신을 중계하는 역할을 하는 서버소프트웨어이다.

클라이언트는 서버에게 직접 요청을 보내지 않고 프록시를 통해 요청을 보낸다.

프록시는 해당 요청을 대신 서버에 전달하여 응답을 받아 클라이언트에게 전송한다.

프록시 서버(Proxy Server)는 프록시의 기능을 수행하기 위해 사용되는 서버이다.

Proxy Server Image

 

즉 프록시(Proxy)는 '대리'라는 의미를 갖고 있으며,

서버와 서버사이의 중계기 역할을 한다고 보면 된다.

프록시를 쓰는 이유는 보안상의 이유로 직접 통신할 수 없는 두 점 사이에서

대리로 통신을 수행하여 보안성, 성능, 안정성을 향상하기 위해서이다.

 

보통 웹은 클라이언트에서 서버로, 서버에서 클라이언트로 통신하며 데이터를 전달한다.
이때 필연적으로 중복되는 데이터를 반복하여 전달하는 상황이 발생하는데,

이렇게 동일한 요청을 매번 처리하는 것은 곧 리소스 낭비와 서버의 부하로 이어지게 된다.

이 때문에 본 서버에 도달하기 전에 새로운 서버(proxy server)를

미리 배치하여 중복 요청에 대해 (연산이 필요없는) 동일한 응답을 할 수 있다면,

클라이언트에겐 빠른 속도의 서비스를, 서버에게는 불필요한 부하를 줄이는 효과를 낼 수 있게 된다.

 

프록시 서버는 네트워크 상 어디에 위치하느냐,

혹은 어느 방향으로 데이터를 제공하느냐에 따라 Forward Proxy Reverse Proxy 나뉘게 된다.

리버스 프록시 서버를 설명하기 전에 포워드 프록시 서버에 대해 먼저 이해하면

리버스 프록시 서버를 이해하는데 도움 된다. 

 

Forward Proxy

일반적으로 프록시라고 하면 포워드 프록시를 뜻한다.

프록시 서버는 아래 그림처럼 클라이언트 바로 뒤에 놓여 있다.

Forward Proxy

 

위의 그림에서 Client N과 Proxy Server는 같은 내부망에 연결되어 있다.

같은 내부망에 존재하는 클라이언트의 요청을 받아

인터넷을 통해 외부 서버에서 데이터를 가져와 클라이언트에게 응답해 준다.​

즉, 인터넷보다 프록시 서버를 먼저 호출하게 되는 것이다.

프록시 서버는 같은 내부망에 존재하는 클라이언트의 요청을

외부 네트워크(인터넷)로 중계하는 역할을 하는 것이다.

즉, 클라이언트가 서버에 접근하고자 할 때, 클라이언트는 타겟 서버의 주소를

포워드 프록시에 전달하여, 포워드 프록시가 인터넷으로 요청된 내용을 가져오는 방식이다.

 

예를 들어 우리가 google.com을 요청하면

포워드 프록시 서버가 google.com 리소스를 대신 받아와 클라이언트에게 내밀어준다.

이는 서버에게 클라이언트가 누군지 감추는 역할을 한다.

서버에서 받는 IP는 클라이언트의 IP가 아니라 프록시 서버의 IP가 된다.

 

Forward Proxy 사용 이유

클라이언트 보안 (Security) / 액세스 제어

보통 정부, 학교, 기업 등과 같은 기관은

해당 기관에 속한 사람들의 제한적인 인터넷 사용을 위해 방화벽을 사용한다.
포워드 프록시 서버는 방화벽과 같은 개념으로 제한을 위해 사용된다고 보면 된다.
즉, 해당 기관에 속한 사람들이 그들이 방문하고자 하는

웹사이트에 직접적으로(directly) 방문하는 것을 방지할 수 있다.

예를 들어, 포워드 프록시 서버에 룰을 추가해서 특정 사이트에 접속하는 것을 막을 수 있다.

또한, 보안과 같은 의미이지만 액세스 제어 정책을 설정하여

특정 사이트나 콘텐츠에 대한 액세스를 제한할 수 있다.

이를 통해 조직이나 기관에서 인터넷 사용을 관리하거나 악성 콘텐츠를 필터링할 수 있다.

 

캐싱 (Caching)

우리가 어떤 웹 페이지에 접근하면 프록시 서버는 해당 페이지 서버의 정보를 캐싱(임시보관)해둔다.
그래서 똑같이 해당 페이지에 접근하거나, 다른 클라이언트가 해당 페이지를 요청할 때,

캐시 된 정보(페이지)를 그대로 반환할 수 있고, 이는 서버의 부하를 줄이는 효과도 낼 수 있다.

예를 들어 만일 10만 명의 클라이언트가 google.com에 접근할 때

본래는 각각 따로 인터넷을 경유해서 해당 구글 페이지를 받겠지만,

정적 데이터 같은 경우엔 사용자 별로 응답이 달라지지 않기 때문에,

포워드 프록시를 활용해 프록시 내 캐싱된 페이지를 불러온다.

이를 통해 클라이언트의 입장에서는 빠르게 컨텐츠를 응답받을 수 있고,

서버의 입장에서는 불필요한 로드를 감소해 부하를 완화할 수 있다.

 

암호화 (Encryption) / 클라이언트의 익명성 유지

클라이언트의 요청포워드 프록시 서버를 통과할 때 암호화된다.
암호화된 요청은 다른 서버를 통과할 때 필요한 최소한의 정보만 갖게 되는데,

이는 클라이언트의 ip를 (보안을 위해) 감춰주는 보안 효과를 내준다.
따라서 본 서버에서 IP 주소를 역추적해도 포워드 프록시 서버를 사용하면 
IP 추적을 진행 시 포워드 프록시 서버 IP만 보이기 때문이다.

 

 

Reverse Proxy

리버스 프록시는 아래 그림처럼 웹 서버 / WAS 앞에 놓여 있는 것을 말한다.

클라이언트는 웹서비스에 접근할 때 웹 서버에 요청하는 것이 아닌,

프록시로 요청하게 되고, 프록시가 배후(reverse)의 서버로부터 데이터를 가져오는 방식이다.

클라이언트 쪽으로 데이터(response)를 밀어주는 게 포워드라면,

그 반대편인 서버 쪽으로 데이터(request)를 밀어주는 것이 리버스 프록시이다.

 

Reverse Proxy Image

 

해당 Server N은 같은 내부방으로 묶여있고, Proxy Server는 내부망 밖에 존재하는 형태이다.

인터넷망에 있는 클라이언트가 프록시 서버를 호출하여

내부망에 있는 서버를 호출하면 리버스 프록시이다.

즉, 리버스 프록시는 서버의 앞단에 위치하여 클라이언트 요청을

여러 대상 서버로 분산하여 전달하는 역할을 한다.

 

내부 서버가 직접 서비스를 제공해도 되지만 이렇게 구성하는 이유는 보안 때문이다.
보통 기업의 네트워크 환경에서는 DMZ라고 부르는

내부 네트워크 / 외부 네트워크 사이에 위치하는 구간이 존재한다.

(내부 네트워크 / 외부 네트워크에 둘 다 접근할 수 있는 공간)
이 구간에는 보통 메일 서버, 웹 서버, FTP 서버 등 외부 서비스를 제공하는 서버가 위치하게 된다.


WAS를 DMZ에 놓고 서비스해도 되지만 보안상 문제가 생길 수 있다.

WAS는 DB서버와 연결되어 있으므로,

WAS가 해킹당할 경우 DB서버까지 해킹당할 수 있는 문제가 발생할 수 있기 때문이다.
따라서 리버스 프록시 서버를 DMZ에 두고

실제 서비스 서버는 내부망에 위치시킨 후 서비스 하는 것이 일반적이다.

 

 

Reverse Proxy 사용 이유

로드 밸런싱 (Load Balancing)

방문자 수가 많은 웹에서는 대량의 트래픽을 하나의 싱글 서버로 감당해 내기란 어렵다.
하지만 리버스 프록시 서버를 여러 개의 본 서버들 앞에 두면

특정 서버가 과부하되지 않게 로드밸런싱이 가능하다.

서버 보안 (Security)

리버스 프록시를 사용하면 서버 측 보안에 좋다.
리버스 프록시를 사용하면 본래 서버의 IP 주소를 노출시키지 않을 수 있다.

따라서 해커들의 DDoS 공격과 같은 공격을 막는데 유용하다.

또한 클라이언트가 직접적으로 웹 서버의 IP를 알 수 없으므로,

보안이 다소 취약한 HTTP 프레임워크를 숨겨 이를 보호할 수 있다.
위의 그림에서 보면, 클라이언트는 인터넷을 통해 리버스 프록시 서버 url에게 요청을 한다.

그리고 리버스 프록시는 본 서버에게 요청을 경유해서 보내게 된다.
이렇게 되면 클라이언트는 본 서버의 url을 모른 채 리버스 프록시 url을 통해

서비스를 이용하게 되고, 이는 즉 본서버의 정보를 숨기는 효과가 된다.

캐싱 (Caching)

만약 어떤 한국에 있는 유저가 미국에 웹 서버를 두고 있는 사이트에 접속할 때,

리버스 프록시 서버가 한국에 있다고 해보자.
그러면 한국에 있는 유저는 한국에 있는 리버스 프록시 서버와 통신해서

리버스 프록시 서버에 캐싱되어 있는 데이터를 사용할 경우에는 더 빠른 성능을 보여줄 수 있다.
포워드 프록시의 캐싱과 비슷한 기능을 한다고 보면 된다.

암호화 (Encryption)  / 애플리케이션 관리

마지막으로 SSL 암호화에도 좋다.
본래 서버가 클라이언트들과 통신을 할 때 SSL(or TSL)로

암호화, 복호화를 할 경우 비용이 많이 들게 된다. 그러나 리버스 프록시를 사용하면

들어오는 요청을 모두 복호화하고 나가는 응답을 암호화해 주므로

클라이언트와 안전한 통신을 할 수 있으며 본래 서버의 부담을 줄여줄 수 있다.

 

또한 여러 개의 서버나 애플리케이션을 하나의 도메인 아래에 통합할 수 있다.

즉, 다양한 애플리케이션을 단일 진입점에서 관리할 수 있으며,

URL 라우팅, 위에서 설명한 SSL 인증서 관리 등을 수행할 수 있다.

또한, 하나의 IP로 다수의 웹 서버를 동작시킬 수 있으므로

IPv4의 한정된 수량 및 가격적인 측면에서 이점이 있다.

 

하지만 위까지의 설명을 보면

역 방향의 차이점이 존재하지만 결국 

클라이언트 → 프록시서버 → 본 서버로 가는 것은 동일해 보인다.

따라서 2개의 관점 차이를 이해해야 한다.

먼저 하나의 Proxy 서버는 Reverse와 Forward를 모두 수행 가능하다.

다만 하나로 모든 것을 처리하기 힘들 때 이를 둘로 나누는 것이다.

이에 대한 구분은 어디로 데이터를 밀어내냐에 따라 달라지는 것이다.

프록시 서버의 주된 역할은 웹 서버의 로드 감소이다.

 

포워드 프록시는 Client 방향으로 데이터를 밀어내는 역할을 수행한다.

기존 서버 앞단에 위치해, 정적 데이터를 캐싱해

웹 서버 대신 제공하는 것이 포워드 프록시의 주요 역할이다.

 

리버스 프록시는 Server 방향으로 요청을 밀어내는 역할을 수행한다.

서버 쪽에 다수의 웹 서버 또는 WAS 서버를 두고,

요청이 들어오면 리버스 프록시는 웹 또는 WAS 서버에게 해당 요청을 밀어낸다.

이러한 관점의 차이뿐만 아니라 실질적인 차이점도 존재한다.

 

프록시 서버 위치

  • Forward Proxy 서버는 클라이언트 앞에 존재한다.
  • Reverse Proxy 서버는 웹서버 / WAS 앞에 존재한다.

프록시 서버 통신 대상

  • Forward Proxy는 내부망에서 클라이언트와 Proxy 서버가 통신하여
    인터넷을 통해 외부에서 데이터를 가져온다.
  • Reverse Proxy는 내부망에서 Proxy 서버와 내부망 웹 서버가 통신하여
    인터넷을 통해 요청이 들어오면 Proxy 서버가 받아 응답해 준다.

 감춰지는 대상

  • Forward Proxy는 직접 서버 url로 요청을 보내지만,
    Reverse Proxy는 프록시 서버 url로만 접근이 가능하다.
    따라서 Reverse Proxy는 본서버의 IP 정보를 숨길 수 있는 효과를 얻게 된다.
  • Forward Proxy는 내부망에서 인터넷상에 있는 서버에 요청할 때
    먼저 포워드 프록시 서버를 호출하고 프록시가 서버에게 요청을 보내게 되는데,
    이로서 서버에게 클라이언트가 누구인지 감출 수 있다
    즉, 서버 입장에서 응답받은 IP는 포워드 Forward Proxy의 IP이기 때문에
    클라이언트가 누군지 알 수 없다.

 

 

참고자료

https://inpa.tistory.com/entry/NETWORK-%F0%9F%93%A1-Reverse-Proxy-Forward-Proxy-%EC%A0%95%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%A0%95%EB%A6%AC

https://xxeol.tistory.com/29#%ED%94%84%EB%A1%9D%EC%8B%9C(Proxy)%EB%9E%80%3F-1

https://jcdgods.tistory.com/322

 

반응형

loading