네트워크

13. 프록시 서버

ggomjiu 2025. 2. 28. 17:21

프록시 서버(Proxy Server)

: 클라이언트에서 서버로 접속 시 직접적으로 접속하지 않고 중간에 대신 전달해주는 서버

1. 동작원리

1) 요청

- 사용자가 웹 브라우저에서 도메인을 입력

 

2) 전달

- 요청에 대하여 캐시 역할을 하는 프로시 서버로 전달

 

3) 확인

- 프록시 서버 내에 도메인 홈페이지이 페이지를 가지고 있는지 체크

 

4) 가지고 있는 경우

- 홈페이지가 있는 서버에 자신이 가진 페이지가 최신 버전인지 체크

- 필요한 경우 갱신할 부분만 가져옴

 

5) 가지고 있지 않을 경우

- 홈페이지가 있는 서버와 연결하여 페이지를 가져옴

 

2. Proxy Server는 왜 필요할까 ?

1) 보안 : 요청과 응답의 필터링

  • 프록시 서버를 이용하지 않으면 서버의 주소가 쉽게 노출되고 다른 익명의 사용자가 서버로 접근하기 쉬워짐
  • 프록시 서버가 중간에 경유하게 되면 서버의 IP를 숨기는 것이 가능해짐
  • 프록시 서버를 방화벽으로 사용하기도 함 -> 프록시 방화벽

cf) 방화벽(Firewall)

: 보안 규칙에 기반한, 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템

- 신뢰할 수 있는 내부 네트워크, 신뢰할 수 없는 외부 네트워크 간의 장벽을 구성

 

- 프록시 방화벽)

  • 세션에 포함되어 있는 정보의 유해성을 검사하기 위함
  • 방화벽에서 세션을 종료하고 새로운 세션을 형성하는 방식
  • 출발지에서 목적지로 가는 세션을 가로채어서 출발지에서 방화벽까지의 세션과 방화벽에서 목적지까지 두 세션으로 만든 다음 하나의 세션에서 다른 세션으로 정보를 넘겨주기 전 검사를 수행하는 형태
  • 패킷 필터에 비해 많은 부하를 주어서 속도는 느리지만 더 많은 검사 가능
  • 프로토콜 변경 등 추가적인 기능 수행 가능

2) 분산 처리 : 캐시 사용 로드 밸런싱

  • 프록시 서버 중 일부는 프록시 서버에 요청된 내용을 캐시를 사용해 저장해둠
  • 캐시에 저장된 내용에 대한 재요청은 서버에 따로 접속할 필요가 없음 -> 전송 시간 절약, 외부 트래픽 줄임으로써 병목현상 방지

3) 우회

  • 클라이언트 1, 2, 3이 인터넷과 직접적으로 통신하게 되면 IP가 직접적으로 인터넷에 드러나게 됨 -> 조안적으로 취약
  • 중간에 프록시 서버를 둔다면 인터넷 서버는 프록시 서버와 통신하기 때문에 클라이언트들의 IP를 알 수 없게 됨
  • 이는 보안적인 취약점을 커버할 수 있게 됨
  • 특정 서버를 우회하여 들어갈 수 있도록 허용해 주는 역할도 함

4) ACL : 사이트 접근 정책

cf) ACL : Proxy Server에 접속할 수 있는 범위를 설정하는 옵션

  • 사이트 접근에 대한 접근 정책을 정의할 수 있음

cf) 접근 제어 목록(Access Control List, ACL), 또는 액세스 제어 목록

: 개체나 개체 속성에 적용되어 있는 허가 목록

- 이 목록은 누가 또는 무엇기 객체 접근 허가를 받는지, 어떠한 작업이 객체에 수행되도록 허가를 받을지를 지정

 

3. 종류

1) Forward 프록시

  • 포워딩 프록시(Forwarding Proxy)를 통상적으로 프록시라고 부름
  • 클라이언트가 인터넷에 직접 접근하는 게 아니라 Forward Proxy Server가 요청을 받고 인터넷에 연결하여 결과를 ㅡ라이언트에 전달
  • 로컬 디스크에 데이터 저장
  • 클라이언트 호스트들은 사용 중인 웹 브라우저를 이용하여 프록시 서버 사용 설정을 해야 함 -> 사용 인식 가능
  • 대역폭 사용 감소
  • 접근 정책 수현에 있어 다루기 쉽고 비용이 저렴
  • 정해진 사이트만 연결할 수 있어 웹 사용 환경 제한 가능 -> 기업 환경에서 많이 이용

2) Reverse 프록시

  • 포워딩 프록시가 서버 쪽에도 존재한다고 생각하면 됨
  • 클라이언트가 인터넷에 데이터를 요청하면 리버스 프록시가 이 요청을 받아 내부 서버에서 데이터를 받은 후 클라이언트에 전달
  • 클라이언트들의 프록시 서버에 연결되어 있다고 인식하면 안됨 -> 최종 사용자가 요청 리소스에 직접 접근하는 거처럼 느낌
  • 클라이언트는 내부 서버에 대한 정보를 알 필요 없이 리버스 프록시에만 요청하면 됨
  • 내부 서버가 직접 서비스를 제공해도 되지만 이렇게 하는 이유는 보안 때문
    • 기업의 네트워크 환경에는 DMZ라 불리는 내부 네트워크 / 외부 네트워크 사이에 위치한 구간 존재
    • 이 구간에 보통 메일 서버, 웹 서버, FTP 서버 등 외부 서비스를 제공하는 서버가 위치
    • 내부 서버(WAS)에 직접적으로 접근한다면 DB에 접근이 가능하기 때문에 해킹 문제가 발생할 수 있음
    • 리버스 프록시 서버를 DMZ에 두고 실제 서비스 서버는 내부망에 위치시킨 후 서비스하는 것이 일반적
  • 내부 서버에 대한 설정으로 로드 밸런싱이나 서버 확장 등에 유리
  • SSL 암호화에 좋음
    • 본래 서버가 클라이언트들과 통신을 할 때 SSL(or TSL)로 암호화, 복호화를 할 경우 비용이 많이 들게 됨
    • 그러나 리버스 프록시를 사용하면 들어오는 요청을 모두 복호화하고 나가는 응답을 암호화해주므로 클라이언트와 안전한 통신을 할 수 있으며 본래 서버의 부담을 줄여줄 수 있음

3) 차이점

  • End Poing
    • Forward : 클라이언트가 요청하는 End Point가 실제 서버 도메인, 프록시는 둘 사이의 통신 담당
    • Reverse : 클라이언트가 요청하는 End Point가 프록시 서버 도메인, 실제 서버 정보를 알 수 없음
  • 감추어지는 대상
    • Forwarad : 클라이언트
    • Reverse : 서버
  • 통신 대상 
    • Forward : 클라이언트와 Proxy서버가 통신하여 인터넷을 통해 외부에서 데이터를 가져옴
    • Reverse : Proxy 서버와 내부망 서버가 통신하여 인터넷을 통해 요청이 들어오면 Proxy 서버가 받아 응답해줌
  • 동작 예시
    • Forward : 사용자가 naver.com에 연결하고자 할 때, 사용자가 PC에 직접 연결하는 것이 아닌 Forward 프록시 서버가 요청을 받아 naver.com에 연결하여 그 결과를 사용자에게 전달해줌
    • Reverse : 사용자가 naver.com웹 서비스에 데이터를 요청 시, Reverse 프록시가 이 요청을 받아 내부 서버에서 데이터를 받은 후 이 데이터를 사용자에게 전달

로드 밸런싱(Load Balancing)

: 요청에 대한 응답을 처리할 때, 서버에서 일을 부하 분산시키는 작업

- NGinx를 로드 밸런서로 사용하여 부담하는 부하를 줄여주는 작업을 많이 진행하고 있음

- 주황색 원 : 일에 대한 부하

  • 일에 대한 부하 = 9
  • 로드 밸런싱 작업으로 각 서버에서 3씩 처리할 수 있게 하여 일의 부하 최소화
  • Scale - out : 서버를 추가로 증설하여 일의 부하를 분산시키는 방법
  • Scale - up : 서버 증설이 아닌 기존 서버 성능 자체를 확장시켜 업그레이드