프록시(Proxy)와 프록시 종류(Forward Proxy, Reverse Proxy)

 

 

01. 프록시(Proxy)와 주요 역할

프록시 서버는 클라이언트와 서버 사이에서 중개 역할을 하며, 서버의 부하를 줄이고 보안을 강화하는데 중요한 역할을 한다. 이외에도 프록시의 역할은 아래와 같다.

 

◼︎ 보안

- IP 숨기기 : 프록시 서버를 통해 클라이언트의 IP 주소를 숨길 수 있다. 

- 프록시 방화벽 : 프록시 서버를 방화벽으로 활용해 외부의 공격이나 유해한 트래픽을 차단할 수 있다.

 

◼︎ 속도(캐시)

프록시 서버는 이전에 요청된 데이터를 캐시에 저장해, 동일한 요청이 있을 때 서버에 재접속하지 않고 캐시된 데이터를 반환한다.

이는 전송 시간을 절약하고 외부 트래픽을 줄여 네트워크 병목 현상을 방지한다.

 

◼︎ ACL(Access Control List)

프록시 서버에 접속할 수 있는 범위를 설정해 특정 사용자나 장치만 프록시 서버를 사용할 수 있게 제한할 수 있다.

 

◼︎ Log / Audit

- 리포트와 모니터링 : 클라이언트의 인터넷 사용을 모니터링하고 기록한다.

 

◼︎ 지역 네트워크 제한 우회

특정 국가에서 접속이 제한된 사이트에 접근해야 할 때, 프록시 서버를 이용해 다른 국가의 IP로 우회 접근 가능하다.

 

 

 

 

02. Forward Proxy

Forward Proxy는 클라이언트의 요청을 대신 서버에 보내고, 서버의 응답을 클라이언트로 전달하는 중계자 역할을 수행한다.

 

<주요기능>

- 클라이언트 은닉 : 클라이언트의 실제 IP 주소를 숨기고, 프록시 서버의 IP로 요청을 보내 클라이언트의 신원을 은닉한다.

                        +) 우회 : 특정 IP가 차단된 경우, 프록시 서버 통해 차단을 피하고 우회 접속 가능하다.

 

- 클라이언트 접근 제어 : 특정 IP 주소나 웹사이트에 대한 접근을 제한한다.

- 캐싱 : 클라이언트가 요청한 콘텐츠를 캐시에 저장하여 동일한 콘텐츠에 대한 요청이 있을 때 서버에 다시 접속하지 않고 캐시된 데이터를 제공하여 응답 속도를 높이고 네트워크 자원을 절약할 수 있다.

 

Residential Proxy : 일반 가정에서 사용하는 인터넷 서비스 공급자(ISP)를 통해 연결된 프록시 서버. 실제 가정의 IP 주소를 사용하여 클라이언트의 요청을 대신 처리.
Datacenter Proxy : 데이터 센터에 위치한 프록시 서버. 대략의 요청을 처리하거나 특정 서비스에 대한 대규모 접근을 위해 사용.

 

 

 

 

03. Reverse Proxy

 

#1. L2 Reverse Proxy : Load Balancer

Reverse Proxy는 클라이언트의 요청 받아 웹서버에 전달하고, 서버의 응답을 클라이언트로 반환하는 역할을 수행한다. 로드밸랜서는 이 과정에서 서버 부하를 분산하고, 보안을 강화하며 고가용성을 제공하는 역할을 한다.

 

기본적으로 단 한개의 웹서버를 통해 웹어플리케이션 서비스를 제공하는 경우 아래와 같은 문제가 발생한다.

  • 대량의 트래픽 : 단일 서버에 많은 트래픽이 집중되면, 서버 과부화가 되어 서비스 중단 위험이 존재한다.
  • 새 버전 배포시 : 새로운 웹어플리케이션 버전을 배포할 때 서버 IP가 변경되거나, 배포 중 서비스 중단이 발생할 수 있다.

로드밸런서는 대량의 트래픽을 처리하고, 서버 부하를 분산하는 역할을 수행하여 위의 문제점을 해결할 수 있다. 로드 밸런서 사용하면 클라이언트는 로드밸런서의 IP만 호출해, 로드 밸런서는 트래픽을 여러 서버에 분산한다. 고정된 IP를 가진 로드밸런서가 요청을 받아 여러 서버로 분해하므로, 서비스 중단 없이 안정적으로 운영 가능하다. 트래픽이 급증할 경우, 로드밸런서 뒷단의 서버 수를 늘려 수평적 확장 가능해 고가용성을 제공한다.

 

 

<Reverse Proxy 서버가 웹서버로 요청 전달할 때 수행하는 작업>

◼︎ 요청 전달

- URL/URI Mapping : 클라이언트가 요청한 URL/URI에 따라 적절한 웹 서버로 요청을 라우팅한다. 이를 통해 특정 URL 패턴에 따라 요청을 특정 서버나 서버 그룹으로 전달할 수 있다.

- 로드 밸런싱 : 여러 웹서버에 트래픽을 균등하게 분산시켜 서버 부하를 완화한다. 

- 웹서버 수 동적 확장 : 트래픽 증가하면 SRE는 로드 밸런서 뒷단의 웹서버 수를 동적으로 늘려 서버 부하를 분산시키고 고가용성을 유지한다.

 

 

◼︎ 요청 변환

- Header 세팅 : Reverse Proxy는 요청의 헤더 정보를 수정하거나 추가 가능하다. X-FORWARDED-BY헤더를 설정해 실제 클라이언트의 IP 주소를 웹서버에 전달한다. 이는 서버가 요청의 원래 출처를 파악할 수 있도록 한다. 

 

 

◼︎ 서버 은닉

Reverse Proxy는 서버의 실제 IP주소를 숨기고, 클라이언트가 직접 서버에 접근하지 못하도록 한다. 이로 인해 서버의 보안 강화 및 서버가 외부 공격에 노출되는 위험이 줄어든다.

 

 

◼︎ 서버 접근 제어(요청 필터)

- DDOS 방지 : Reverse Proxy는 대규모 분산 서비스 거부 공격(DDOS)을 방지하기 위해 트래픽을 제어한다.

  • Rate Limiting : 일정 시간 내에 너무 많은 요청이 들어오는 것을 막는 정책
  • WAF(Web Application Firewall) : 웹 어플리케이션 방화벽으로, 악성 트래픽을 필터링하고 차단. 보안 위협을 방어하기 위해 Honeypot에 저장된 악성 IP 리스트를 활용하거나, 사용자가 지정한 커스텀 IP 리스트를 기반으로 차단 정책 설정 가능\

- Response Max Size 설정 : Nginx 등의 Reverse Proxy 서버에서 너무 큰 파일을 반환하는 요청을 차단하도록 설정할 수 있다. 대용량 데이터 전송으로 인해 서버 자원이 낭비되는 것을 방지한다.

 

- Timeout 설정 : 일정 시간 내에 응답을 받지 못할 경우 연결을 종료하는 타입아웃을 설정할 수 있다. 

 

 

◼︎ 보안

- HTTPS : Reverse Proxy는 클라이언트와 서버 간의 통신을 HTTPS로 암호화하여 보안을 강화한다. 모든 서버가 Private Key를 보유해야 하는 단점이 있지만, 데이터 전송 중 해킹, 도청 등을 방지할 수 있다.

 

 

 

 

#2. L1 Reverse Proxy : CDN (Contents Delivery Network)

Proxy는 캐싱과 요청에 대한 세부적 추가 작업을 수행하기 위해 사용된다.

  • 캐싱 : 클라이언트의 요청에 대한 응답을 임시로 저장하여 동일한 요청이 들어올 때 원 서버에 다시 요청하지 않고 저장된 데이터를 반환함으로써 서버의 부하를 줄인다.
  • 요청에 대한 세부적 추가 작업 : 요청 변환, 필터링 등의 추가 작업을 수행하여 요청을 처리한다.

 

CDN은 캐싱과 지역성 해결을 통해 콘텐츠를 효율적으로 전달하는 역할을 한다.

 

< CDN의 주요 기능 >

◼︎ 캐싱

CDN은 요청에 따른 응답을 중간 저장하여 동일한 요청이 들어올 때 저장된 데이터를 반환한다. 이를 통해 웹 서버의 부하를 줄이고 응답 시간을 단축시킨다.

 

만약 원본 데이터를 가진 웹서버에 문제가 발생한 경우, CDN이 대신 응답을 반환하여 서비스의 가용성을 유지한다. 즉, CDN이 고가용성을 보장하는 버퍼 역할을 수행한다.

 

CDN은 원본 서버 대신 DDOS 공격을 방어하여 서버의 안정성을 높인다.

 

 

◼︎ 지역성 해결

클리아언트가 웹서버와 물리적으로 멀리 떨어져 있을 경우, 응답 시간이 길어질 수 있어 CDN은 전세계에 분산된 캐시 서버를 통해 클라이언트에 가까운 위치에서 응답을 제공해 응답 시간 단축 및 속도를 개선시킨다.

 

원 서버에 장애가 발생해도, CDN이 캐시된 데이터를 사용해 서비스를 지속할 수 있도록 한다.

 

 

 

반응형