-
반응형
프록시 서버란?
프록시는 클라이언트와 서버 사이의 중개인이다. 프록시는 클라이언트와 서버 중간에 위치하면서 클라이언트의 모든 HTTP 요청을 받아 서버에 전달한다.
원래는 클라이언트가 서버에 직접 접근해서 요청한 내용을 가져와야 하지만, 프록시 서버를 사용하면 프록시가 대신 서버에 요청하고 클라이언트에게 가져와주게 된다.
프록시 서버의 기능
보안
프록시 서버를 중간에 경유하게 되면 IP를 숨길 수 있게 된다. 또한 프록시 서버를 방화벽으로 사용하기도 한다. 또한, 익명의 사용자가 서버에 접근하는 것을 막는다.
속도(캐시)
Proxy 서버 중 일부는 프록시 서버에 요청된 내용을 Cache한다. 이 후 동일한 요청이 들어오면 서버에 따로 접속할 필요 없이 저장된 Cache 자원을 반환한다. 이로서 전송 시간을 절약할 수 있고 외부 트래픽을 줄임으로써 네트워크 방목현상도 방지할 수 있다. 결국 서비스의 속도를 높여준다.
ACL
ACL = 프록시 서버에 접속할 수 있는 범위를 설정하는 옵션
사이트 접근에 대한 접근 정책을 정의할 수 있다.
Log/Audit
인터넷 사용 기록을 레포링 할 수 있다.
지역 네트워크 제한 우회
IP 접속이 한국에서 막히는 경우 프록시 서버를 사용하면 접속을 우회할 수 있다.
프록시 서버의 종류
Forward Proxy
클라이언트가 example.com에 연결하려고 할 경우 클라이언트에서 PC에 직접 연결하는게 아니라, 포워드 프록시가 서버 앞단에서 먼저 요청을 받은 후 인터넷에 연결하여 그 결과를 클라이언트에게 전달(forward)해준다.
포워드 프록시는 대게 caching 기능이 있어서 자주 사용되는 컨텐츠라면 성능 향상을 가져올 수 있고, 정해진 사이트만 연결 가능하도록 웹 사용 환경을 통제할 수 있다. 따라서 기업 내부망 환경 등에서 많이 사용된다.
Reverse Proxy
클라이언트가 exaple.com에 데이터를 요청하면 Reverse Proxy는 이 요청을 받아서 내부 서버에서 먼저 데이터를 받은 후, 이 데이터를 클라이언트에게 전달한다.
비효율적이지 않은가?
내부 서버가 직접 서비스를 제공해도 되지만, 보안 때문에 이렇게 구성한다.
보통 기업의 네트워크 환경은 외/내부 네트워크 사이에 위치하는 보안 비무장지대(DMZ) 구간이 존재하며 이 구간에는 메일 서버, 웹 서버, FTP 등 외부 서비스를 제공하는 서버가 위치하게 된다. 이런 보안적 이슈 때문에 리버스 프록시 서버를 두고 실제 서비스는 내부망에 위치 시킨다. 프록시 서버만 내부에 있는 서비스 서버와 통신해 결과를 클라이언트에게 제공하는 방식이 되도록 한다.
개인 프록시와 공유 프록시
개인 프록시는 하나의 클라이언트를 위한 프록시이고, 공용 프록시는 여러 클라이언트가 함께 사용하는 프록시이다.
공용 프록시
대부분의 프록시가 공유 프록시이다. 중앙집중형 프록시를 관리하는 것이 더 비용 효율이 높고 쉽기 때문이다. 또한 캐시 프록시 서버와 같은 경우 공통된 요청에서 이득을 취할 수 있으므로 사용자가 많을 수록 유리하다.
개인 프록시
개인 전용 프록시는 클라이언트 컴퓨터에서 직접 실행되는 형태로 흔하지 않지만 꾸준히 사용된다.
프록시 서버의 동작 원리
- 사용자가 웹 브라우저에 도메인을 입력한다(요청)
- 요청에 대하여 캐시 역할을 하는 프록시 서버로 전달한다
- 프록시 서버 내에 도메인 홈페이지의 페이지를 가지고 있는지 체크한다.
- 가지고 있는 경우라면 홈페이지가 있는 서버에 자신이 가진 페이지가 최신 버전인지 체크하고, 갱신이 필요한 경우 갱신할 부분만 가져온다.
- 가지고 있지 않은 경우라면 홈페이지가 서버와 연결하여 페이지를 가져온다.
트래픽은 어떻게 Proxy로 가게 되는 걸까?
- 클라이언트
- 크롬을 비롯한 브라우저들은 수동 혹은 자동 프록시 설정을 지원한다.
- 클라이언트가 Proxy를 사용하도록 설정이 되어 있다면 클라이언트는 HTTP 요청을 의도적으로 Proxy로 보낸다
- 네트워크
- 클라이언트가 눈치챌 수 없도록 네트워크 인프라를 가로채서 웹 트래픽을 프락시로 가도록 한다. 이걸 인터셉트 프락시라고 한다.
- DNS 수정
- 웹 서버 앞에 있는 Proxy는 웹 서버의 이름과 IP 주소를 직접 사용한다.
- 그래서 모든 요청은 대리 프락시를 거쳐 가게 되는데, DNS 테이블을 직접 수정하거나 적절한 프록시 서버를 계산해주는 동적 DNS 서버를 이용해서 요청을 조정할 수 있다.
- 웹 서버 수정HTTP 리다이렉션 명령어를 클라이언트에게 돌려줘서 → 클라리언트의 요청을 프락시로 리다이렉트 시킬 수 있다.
Proxy요청의 특징들
Proxy URI와 서버 URI는 다르다.
서버로 보낼 때와 달리 프락시로 요청을 보낼 때에는 완전한 URI를 보내게 된다.
(서버는 스킴, 호스트, 포트번호 등이 생략이 가능하다.)
목적시 서버와 커넥션을 맺어야 하기 때문에 서버의 이름을 알아야 한다.
인터셉트 프락시는 부분 URI를 받는다.
클라이언트는 항상 자신이 Proxy와 통신하고 있음을 알 수 없다. 몇몇 Proxy는 클라이언트에게 보이지 않을 수 있기 때문이다. 하기 두 가지 경우에는 완전한 URI를 보내지 않을 것이다.
- 대리 프락시는 원 서버의 호스트명과 IP주소를 사용해 원 서버를 대리한다.
- 인터셉트 프락시는 네트워크 흐름에서 클라이언트 서버로 가는 트래픽을 가로채 캐시된 응답을 돌려준다. 가로채는 기능이 있기 때문에 웹 서버로 보내는 URI를 얻게 된다.
다목적 프록시 서버는 완전 URI와 부분 URI를 모두 지원해야 한다.
- 완전한 URI가 주어졌다면 프록시 서버는 그것을 사용해야 한다.
- 부분 URI가 주어졌고 Host 헤더가 있다면 Host 헤더를 사용해 원 서버의 이름과 포트 번호를 알아내야 한다.
- 부분 URI가 주어졌으나 Host 헤더가 없다면
전송 중 URI 변경
프락시는 URI를 전달할 때 절대 경로를 고쳐 쓰는 것을 금지한다.
URI 클라이언트 자동확장과 호스트 명 분석
브라우저는 Proxy 존재 여부에 따라 요청 URI를 다르게 분석한다.
- 웹 사이트의 가운데 부분만 입력했다면, ‘www’를 붙이고 ‘.com’을 붙인다.
- 몇몇 브라우저는 해석할 수 없는 URI를 서드 파티로 넘기고 오타 교정 시도 후 의도했을 법한 URI를 제시한다.
- DNS는 호스트명의 앞부분만 입력하면 자동으로 도메인을 검색하도록 설정 되어 있다.(ex, mail → mail.naver.com)
Via 헤더
via 헤더 필드는 메시지가 지나가는 각 중간 노드(프록시 또는 게이트웨이)의 정보를 나열한다. 메시지가 또 다른 노드를 지날 때 마다, 중간 노드는 Via 목록의 끝에 반드시 추가 되어야 한다.
via 문법
via 헤더 필드는 쉼표로 구분된 경유지의 목록이다. 각 경유지는 개별 프락시 서버나 게이트웨이 홉을 나타내며 그들 중간 노드의 프로토콜과 주소에 대한 정보를 담고 있다.
- 프로토콜 이름 : HTTP, HTTPS, FTP...
- 프로토콜 버전 : '1.0', '1.1'...
- 노드 이름 : 호스트와 포트번호...
- 노드 코멘트
- Via 요청과 응답 경로
단, 프록시 서버가 네트워크 방화벽의 일부인 경우에는 호스트 이름과 포트 정보를 전달해서는 안된다.
Trace 메서드
HTTP/1.1 TRACE 메서드는 Proxy의 연쇄를 따라가면서 어떤 Proxy를 지나가고 요청 메시지를 수정하는지 관찰/추적 할수 있다.
Max-Forwards
Trace 메시지는 Proxy들이 몇개가 있던 신경 쓰지 않고 목적지 서버로의 모든 경로를 여행한다.
테스트, 무한 루프 방지를 위해 Max-Forwards 헤더를 사용해 개수를 제한할 수 있다.
407 Error
- 제한된 컨텐츠에 대한 요청이 Proxy 서버에 도착했을 때, Proxy 서버는 407 상태 코드를 리턴하고 Proxy-Authenticate 헤더 필드에 어떻게 자격을 얻을 수 있는지 담아서 반환할 수 있다.
- 407 응답을 받으면 요구되는 자격을 다시 수집한다.
- 자격을 획득하면 클라이언트는 요구되는 자격을 Proxy-Authorization 헤더 필드에 담아서 다시 요청을 보낸다.
- 자격이 유효하다면 Proxy 는 원 요청을 연쇄를 따라 통과 시킨다. 유효하지 않다면 다시 407 응답을 보낸다.
AWS로도 프록시 서버를 설정할 수 있다..!
Reference
https://velog.io/@syoung125/개념공부-프록시proxy-서버란
https://cheershennah.tistory.com/139
반응형