13. 프록시 서버
프록시 서버(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 : 서버 증설이 아닌 기존 서버 성능 자체를 확장시켜 업그레이드