본문 바로가기
ASAC

[ASAC 06] 프록시 사용 목적, 기능과 예시

by suhsein 2024. 9. 1.
728x90
이 글은 ASAC 06기를 수강하며 강의 자료 참고 및 추가 자료 수집을 통해 작성된 글입니다.


웹 브라우저 성능 개선 및 웹 서버 부하 완화를 위하여 캐시 프록시를 사용할 수 있다.

이번 글에서는 프록시에 대해서 알아보겠다.

Proxy

프록시는 대리자를 의미하며 서버 부하 완화 및 보안을 위해 존재한다.

클라이언트(브라우저) 혹은 서버의 대리자로 다양한 기능들을 앞서서 처리한다. 

 

Proxy 기능

  • 보안 : IP 은닉. 프록시 서버를 방화벽으로 사용
  • 속도 (캐시) : 동일 요청에 대한 캐시 자원 반환. 전송 시간 절약, 네트워크 병목 현상 방지.
  • ACL : 우회와 블록을 위한 사이트 접근 범위 정책 정의 (서브넷 단위의 방화벽)
  • Log / Audit : 리포트, 모니터링. 회사 내 직원의 인터넷 / 인트라넷 사용을 레포팅
  • 지역 네트워크 제한 우회 : 프록시 서버를 사용하여 다른 나라 네트워크로 우회.

Forward & Reverse Proxy

Forward & Reverse Proxy

Forward Proxy는 웹 클라이언트의 대리자로, Reverse Proxy는 웹 서버의 대리자로 기능한다.

 

Forward Proxy : 웹 클라이언트 보안 및 접근 제어 

Forward Proxy는 요청을 보내는 측, 즉 클라이언트들을 위한 보안 및 접근 제어를 한다. 

  1. 클라이언트 은닉 : IP 변환을 통해 원 요청자를 은닉 
    • 우회(ByPass) : Browsing Restriction 우회 가능 
  2. 접근 제어 : 특정 IP 혹은 웹 페이지(컨텐츠)로의 접근을 막는다. 프록시가 방화벽 역할을 하게 됨.
  3. 캐싱 : 클라이언트가 받을 응답을 중간에 임시 저장 

Forward Proxy의 대표적인 예시는 ISP이다. 

Reverse Proxy : 웹 서버 부하 완화 및 보안 

  1. 서버 은닉 (서버로 DDos 공격 막음)
    • 대량의 트래픽이 하나의 서버로 집중되는 것을 막는다. 
    • 웹 서버들은 리버스 프록시 뒤에 숨어있다. 
  2. 로드 밸런싱
    • 트래픽에 따라서 서버 수를 동적 제어. 고가용성 제공
  3. 캐싱
  4. TLS(SSL) 암복호화.

OSI 7 Layer

OSI 7계층의 각 계층마다 리버스 프록시가 존재할 수 있다.

대표적인 리버스 프록시로는 CDN과 로드 밸런서가 있다. CDN은 7계층에서 동작하며, 로드 밸런서는 4계층에서 동작한다. 

 

CDN

Layer 7의 리버스 프록시

 

Layer 7에서 동작하는 이유

Layer 7은 응용 계층으로, HTTP, SSH, STMP와 같은 프로토콜을 사용하여 네트워크 서비스에 접근한다. Layer 7에서는 HTTP 헤더 정보를 기반으로 패킷을 필터링한다. 웹 페이지, MIME 컨텐츠(이미지, 비디오, JS, CSS 등)는 HTTP를 기반으로 7계층에서 캐싱되기 때문에, CDN은 7계층에서 동작한다.

 

CDN의 역할

CDN(Content Delivery Network)은 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크이다. CDN의 주 목적은 대기 시간을 줄이거나 네트워크 설계로 인해 발생하는 통신 지연을 줄이는 것이다.

캐싱을 통해서 고가용성을 보장하는 버퍼 역할을 하게 된다. 

 

실제 웹 서버와 클라이언트 사이의 Reverse Proxy로 존재하여 물리적 거리로 인해 발생하는 통신 지연을 줄일 수 있다. 클라이언트는 물리적으로 가까이 있는 CDN으로 요청을 보내게 되어 RTT(Round Trip Time)를 감소시킬 수 있다.

 

CDN은 전 세계에 여러 개가 존재하며, CDN 하나가 이용이 불용상태가 되더라도 다른 CDN에 부하를 전가할 수 있다.

 

CDN의 비실시간성

CDN 사용 시 비실간성을 주의해야 한다. 리액트를 배포할 때 웹 서버(혹은 S3와 같은 스토리지)를 사용해 배포한 후, 빠른 UI를 위해 CDN를 많이 사용하게 된다.

 

하지만 웹 서버(혹은 스토리지)에 새로운 버전을 배포하게 되는 경우, CDN에 바로 반영되지 않기 때문에 버전 차이가 발생할 수 있다. 

 

일반적으로 리액트 배포에서 CDN을 사용할 때 max-age=0으로, s-maxage=1년 단위로 사용하게 된다.

이러한 설정에서 클라이언트는 브라우저 캐시의 최신화를 위해 항상 CDN 캐시에 컨텐츠를 요청하지만, CDN은 1년 단위로 웹 서버(혹은 스토리지)에 컨텐츠를 요청하게 된다. 

 

해결 방법은 CDN 캐시의 Invalidate(컨텐츠 무효화. 현재 캐시를 삭제) 를 강제하는 것이다. 캐시가 비워짐에 따라서 CDN은 웹 서버로 컨텐츠를 재요청하고, CDN 캐시의 컨텐츠를 최신화할 수 있다.

 

ex) AWS CloudFront (AWS에서 제공하는 CDN. 무효화 비용에 주의하자.)

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html 
 

파일을 무효화하여 콘텐츠 제거 - Amazon CloudFront

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

Load Balancer

Layer 4의 리버스 프록시

 

Layer 4에서 동작하는 이유

Layer 4는 전송 계층으로, TCP, UDP와 같은 전송 프로토콜을 사용하여 데이터를 전송한다. Layer 4에서는 IP 주소를 기반으로 패킷을 필터링한다. 그렇기 때문에 4계층에서 IP 주소와 TCP/UDP 포트 번호를 기반으로 패킷을 분석하고 서버를 결정하게 된다.(트래픽 분산) 로드 밸런서가 이를 담당하는 역할을 하게 된다.

 

Load Balancer의 역할

https://suhsein.tistory.com/38#toc5

 

[ASAC 06] 서버 구축 방식, Serverless, Load Balancer

이 글은 ASAC 06기를 수강하며 강의 자료 참고 및 추가 자료 수집을 통해 작성된 글입니다.서버 구축 방식서버 구축 방식에는 2가지가 있다.On-PremisesCloud1. 온프레미스 (물리)데이터 센터 구축에 따

suhsein.tistory.com

 

 

로드 밸런서는 요청에 대한 세부적 추가 작업을 하게 된다.  

  1. 요청 전달
    • 먼저 요청 전달을 위하여 URL/I Mapping (URI 기반 Routing)을 하고, 로드 밸런싱을 한다. (요청 분산) 로드 밸런싱을 통해서 웹 서버의 부하를 완화시킬 수 있다. 웹 서버 수를 동적으로 늘리기 위하여 AWS와 같은 클라우드 서비스를 사용하거나, SRE(Service Reliability Engineer) 팀이 그 역할을 담당하기도 한다. 
  2. 요청 변환
    • X-FORWARDED-FOR Header 세팅
    • 프록시에 현재 서버와 요청자를 붙인다. 서버에 직접 연결된 것은 리버스 프록시 뿐이므로, 요청자(웹브라우저)를 찾을 수 없다.
      • 거쳐온 곳의 IP를 누적시켜 헤더에 담는다.
            ex) 123, 456, 789 => 123이 최초 호출자.
  3. 서버 은닉과 접근 제어
    • Forward Proxy가 브라우저를 은닉하였듯이, 서버를 은닉하고 서버로의 접근 제어를 한다. (요청 필터)
    • DDoS 방지. 트래픽 제어
      • Rate Limiting : 지정된 기간 내에 수행할 수 있는 요청 수에 대한 제한이다. WS나 WAS 같은 원 서버에서도 적용 가능 하지만 가능한 프록시에 하는 게 좋다.
      • WAF(Web Application Firewall) : Honeypot 에 저장된 악성 IP 리스트를 활용한 블락. Custom IP 추가 가능.
    • Response Max Size 세팅 : 너무 큰 파일을 반환하는 경우 block
    • Timeout 세팅   
  4. TLS(SSL) 암복호화
    • 앞서 설명했던 TLS(SSL) Termination  혹은 TLS(SSL) Offloading으로 서버 부담을 줄임
    • https://suhsein.tistory.com/55#toc8
    • ex) Reverse Proxy 역할을 하는 Nginx나, ELB에 https 설정
  5. 캐싱
    • 클라이언트가 자주 하는 요청에 대한 응답을 중간에 임시 저장
X-Forwarded-For : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For
 

X-Forwarded-For - HTTP | MDN

The X-Forwarded-For (XFF) request header is a de-facto standard header for identifying the originating IP address of a client connecting to a web server through a proxy server.

developer.mozilla.org

 

Client IP 구하기 : https://umbum.dev/1221/
 

Client IP 구하기 - X-Forwarded-For와 X-Real-IP

Proxy / VPN

umbum.dev

 

Honey pot Malicious IPs : https://www.projecthoneypot.org/list_of_ips.php?by=1
 

Malicious IPs | By Last Bad Event | Project Honey Pot

Directory of Malicious IPs The list below is comprised of Malicious IPs (limited to the top 25 — login to see more) that are: Arranged by their Last Bad Event Click any IP address for more details  |  Last updated: August 31 2024 10:59:58 AM  Inform

www.projecthoneypot.org

 

CDN vs Load Balancer : https://www.alibabacloud.com/tech-news/a/load_balancer/gu0idw25t9-cdn-vs-load-balancer-clarifying-the-confusion
 

CDN vs. Load Balancer: Clarifying the Confusion - Alibaba Cloud

Understanding Content Delivery Network (CDN) A Content Delivery Network or CDN is a geographically distributed network of proxy servers and their data centers. The goal is to provide high availability and performance by distributing the service spatially r

www.alibabacloud.com

 

728x90