우리가 몰랐던 프록시의 50가지 그림자
1편에서 우리는 익스플로러, 크롬 등 웹 브라우저에서 우리가 원하는 페이지를 볼 수 있는 이유가 웹 클라이언트와 웹 서버 간 상호작용이라는 사실을 알게 되었고, 2편에서는 클라이언트와 서버가 HTTP라는 프로토콜로 인해 데이터를 주고받을 수 있으며 교환 유형(요청/응답)에 따른 일정한 HTTP 메시지 형식이 있음을 알게 되었습니다.
오늘은 더 나아가 웹 클라이언트와 웹 서버 사이에서 데이터를 전달해주는 '프록시 서버'에 대해 알아보겠습니다.
프록시(Proxy)는 "대리인"이라는 사전적 의미를 지니며 클라이언트와 서버 사이에서 HTTP 메시지를 대신 전달하는 중계 기능을 말합니다. 그리고 이러한 프록시 기능을 수행하는 서버를 가리켜 "프록시 서버"라고 부르지요.
지금은 IP주소를 우회하기 위한 용도로 쓰이고 있지만 90년대 후반까지만 해도 빠른 인터넷 속도 향상을 목적으로 사용되었답니다.
프록시 서버에는 클라이언트와 서버가 주고받은 적이 있는 데이터의 사본이 저장되어 있습니다. 그래서 이전과 동일한 데이터를 요청하는 경우 서버를 거치지 않고 바로 프록시에서 캐싱해 둔 데이터를 반환하여 전송 시간을 줄일 수 있다는 장점이 있습니다.
또한 메시지가 지나갈 때마다 Via 헤더에 정보를 추가해야 하는데, 프록시 서버의 정보 또한 Via 헤더에 기록되므로 나중에 메시지 접근을 제어하거나 추적하는 데 사용할 수 있습니다. Via 헤더에 대한 내용은 아래 파트에서 자세히 다루겠습니다.
마지막으로 IP, 쿠키 등 HTTP 메시지에 신원을 확인할 수 있는 정보들을 제거함으로써 익명성을 보호할 수 있습니다. 다만 이러한 프록시 서버의 특징이 이전에는 개인 정보를 보호할 수 있는 보안 기능으로 작용했다면 요즘에는 이를 악용하여 유해 사이트에서 IP 추적을 당하지 않게 우회하기 위한 용도로 사용되고 있다는 문제가 있습니다.
저번에 웹 서비스 영역은 크게 클라이언트와 서버로 나뉜다고 언급했었죠? 이 때 프록시가 둘 중 어느 쪽의 내용을 전달하는지에 따라 2가지 유형으로 나뉩니다.
포워드 프록시(Forward Proxy)는 서버의 메시지를 클라이언트에게 전달하는 역할을 수행합니다. 포워드가 영어로 "앞으로"라는 뜻인데 해석하자면 말그대로 서비스 중 사용자에게 보여지는 앞면, 즉 클라이언트에게 데이터를 전달하는거죠.
반면에 리버스 프록시(Reverse Proxy)는 클라이언트의 요청을 다수 서버에 분배하여 전달하는 역할을 수행합니다. 가령 서버가 3개라고 할 때, 클라이언트에서 요청이 발생할 때 프록시는 이 요청을 어떤 서버에게 전달하면 좋을지 확인하고 서버를 선택하는 것이지요. 리버스라는 이름은 아마도 앞에 있던 클라이언트가 뒤에 있던 서버에게 역으로 데이터를 전달하는 것을 보고 그렇게 지은 것 같습니다.
마지막으로 하나의 프록시 서버는 위의 2가지 기능을 모두 수행할 수 있습니다.
2편에서 우리는 HTTP 메시지 중 헤더에 대해 이해헀습니다. 헤더에서 표시할 수 있는 항목은 다양하기 때문에 일부만 알아보았는데, 설명하지 않았던 헤더 항목 중에 Via라는 헤더 필드가 있습니다.
Via는 해당 HTTP 메시지가 거쳐온 프록시 또는 게이트웨이의 정보를 담고 있습니다.
포맷은 다음과 같으며 [] 내 항목은 생략 가능합니다.
[<프로토콜 이름> /]<프로토콜 버전> <호스트>[:<포트>]
[<프로토콜 이름> /]<프로토콜 버전> <내부 프록시의 이름 or 별칭>
예를 들면 해당 데이터가 프록시를 거쳤을 경우 헤더에서 다음과 같이 끝 부분에 특정 정보가 추가된 걸 확인할 수 있습니다.
Via: 1.1 vegur
Via: HTTP/1.1 GWA
Via: 1.0 fred, 1.1 p.example.net
이처럼 메시지가 1개 이상의 프록시, 게이트웨이를 지나갈 경우 반드시 Via 목록의 끝 에 정보가 추가되어야 하며, 최종으로 나열된 목록을 통해 우리는 클라이언트와 서버 사이에 어떤 중계기가 있었는지 추적할 수 있습니다.
오늘은 클라이언트와 서버의 중계 역할을 하는 프록시와 게이트웨이, 그리고 그들의 정보를 담고 있는 HTTP 메시지 중 Via 필드에 대해 알아보았습니다.
이제는 IP 우회를 위한 도구로만 알려져 있는 프록시 서버가 이런 다양한 특징을 가지고 있었다는 게 신기하지 않나요?
시대의 흐름에 따라 기술의 역할과 용도 또한 다양하게 변화하는가 봅니다.
그럼 다음 포스팅에서 뵙겠습니다.