프록시 서버는 클라이언트와 웹 서버 사이에 위치한 중개 서버로, 클라이언트가 자신을 통해 다른 네트워크 서비스에 '간접적으로' 접속하도록 하는 응용 시스템 혹은 응용 프로그램이다.
이렇게 프록시 서버를 통해 통신할 경우 클라이언트는 프록시 서버를 웹 서버로 인식하고, 웹 서버는 프록시 서버를 클라이언트로 인식하게 된다.
프록시 서버는 위치에 따라 크게 두 종류로 구분한다.
순방향 프록시 서버는 가장 일반적인 프록시로서 클라이언트와 인터넷 사이에 위치한다. 순방향 프록시 서버는 클라이언트의 요청을 받아 서버에 대신 전달하고, 서버로부터 전달받은 응답을 다시 클라이언트에 전달한다. 따라서 서버는 실제 클라이언트의 주소를 알지 못한다.
순방향 프록시 서버는 다음과 같은 용도로 사용될 수 있다.
역방향 프록시 서버는 순방향과 반대로 인터넷과 웹 서버 사이에 위치한다. 클라이언트는 역방향 프록시 서버의 주소를 목적지 서버로 하여 데이터를 요청하며, 프록시 서버는 클라이언트의 요청을 받아 실제 서버에 데이터를 요청하고, 전달받은 데이터를 클라이언트에 전달한다.
역방향 프록시 서버는 다음과 같은 목적으로 활용된다.
역방향 프록시 서버는 기본적으로 순방향 프록시 서버와 동일한 역할을 한다. 그런데 한 가지 주요한 차이점이 하나 있는데, 그것은 역방향 프록시 서버의 경우 DMZ에 위치한다는 점이다.
한국인이라면 DMZ라는 개념이 익숙할 것이다. 네트워크에서의 DMZ도 유사한 개념으로 이해할 수 있는데, 외부 네트워크와 내부 네트워크에 위치한 특수한 네트워크 영역으로서 '내부에서 DMZ로의 접근'은 가능하나, 'DMZ에서 내부로의 접근'은 불가능한 특징을 지니고 있다.
예를 들어 사내 시스템 중 외부와의 접속이 필요한 웹 서버, 이메일 서버, FTP 서버 등이 존재하고(이 영역을 A라 하자), 그 외에 내부에서만 사용하는 영역(B)이 있다고 하자. 외부로 열려 있는 A에서 B로의 접속이 가능하다면 공격자가 A를 통해 B로 칩입할 수 있어 보안상 문제가 발생한다. 따라서 A에서 B로 접근하는 것을 막아 버리면 내부 영역(B)의 보안성이 증가하게 된다(B에서 A로의 접근은 보안상 우려가 없으니 열어 둔다).
이때 외부 네트워크에서 DMZ로의 연결은 일반적으로 포트 주소 변환(Port Address Translation, PAT)을 통해 제어된다.
포트 주소 변환이란 내부 네트워크상의 호스트 및 포트와 외부 네트워크상의 호스트 및 포트 간 이루어지는 TCP(UDP) 통신을 변환해주는 네트워크 장비의 기능이다. 이를 이용해 여러 개의 내부 호스트가 하나의 IP 주소를 이용할 수 있다. 일반적으로 NAT/PAT으로서 IP 주소와 포트 번호를 모두 변경하는 방식이 이용된다.
그림처럼 내부 IP가 10.10.10.10이고 포트 번호가 2000인 클라이언트가 20.20.20.20/80의 외부 네트워크를 목적지로 하여 통신한다고 하자. 그러면 NAT 장비는 클라이언트의 IP와 포트 번호를 공통으로 사용하는 IP/포트 번호인 11.11.11.11/3000으로 변경한다(이렇게 변환한 정보는 PAT가 저장해 둔다). 그러면 웹 서버는 해당 요청을 11.11.11.11/3000으로부터 온 요청으로 이해하고 필요한 응답을 전송한다. 그러면 NAT은 다시 이 요청을 받아 원래의 내부 IP(10.10.10.10/2000)로 전달한다.