security by ch4nsec

프록시 서버(Proxy Server) 기본

프록시 서버 기초 개념

#security#network

프록시 서버(Proxy Server)란?

프록시 서버(Proxy Server)는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 프록시, 그 중계 기능을 하는 것을 프록시 서버라고 부른다. (출처: 위키백과)

간단히 말해서, 대신 요청해 주고 대신 요청을 받아주는 서버다. (Proxy라는 단어가 애초에 ‘대리의’ 라는 뜻을 가지고 있다.) 클라이언트가 서버에 접속하는 상황을 예로 들면, 프록시 서버는 클라이언트와 서버 사이에 위치해 클라이언트와 서버의 요청을 전달해주는 역할을 한다.

프록시 서버(Proxy Server)의 특징

실제 사용자 또는 서버의 위치를 감추는 효과가 있다

클라이언트의 요청을 받아 실제 접속하려는 서버에 요청을 보내주는 프록시 서버를 예로 들어보자. 클라이언트가 google.com이라는 사이트(서버)에 요청을 보내면, 실제로는 이 요청을 프록시 서버가 받고 프록시 서버가 google.com에 요청을 보내게 된다. 그리고 요청에 대한 응답은 google.com이 프록시 서버로 보내게 되고, 프록시 서버가 이를 클라이언트에 전달하여 통신이 이루어지게 된다.

이때, 서버는 클라이언트의 IP 주소를 알 수 없다. 왜냐하면 서버가 받은 요청은 프록시 서버가 보낸 요청이기 때문이다. 서버 입장에서는 프록시 서버는 그냥 일반 사용자로 보일 뿐이고, 얘가 요청을 나한테 했으니 나는 단순히 쟤한테 응답을 보내는 입장일 뿐이다.

뉴스에 많이 나온 보이스피싱을 예로 들면, 범인들은 적발을 피하기 위해 범행을 통해 부당하게 얻은 돈을 수거하는 데에 현금수거책을 이용한다. 만약 경찰이 이를 적발하더라도 실제 범인을 검거하는 데에는 어려움을 겪는다. 여기서 현금수거책이 프록시 서버의 역할을 하는 것이다. (물론 프록시도 악용의 사례가 있긴 하지만 예시가 이래서 그렇지 프록시가 나쁜 건 아니다.)

사용자의 위치를 숨기는지 서버의 위치를 숨기는지는 프록시 서버의 종류에 따라 다르지만, 이는 뒤에서 다루기로 하고.

- 캐시를 활용한다

프록시 서버는 프록시 서버에 요청된 내용을 저장하는 웹 캐시가 포함되어 있다. 캐시는 임시 저장장치라고 보면 되는데, 이전과 동일한 요청을 한번 더 요청할 경우, 내용을 두번 불러올 필요 없이 임시 저장장치인 캐시에서 불러옴으로써 처리속도를 절약할 수 있다.

이렇게 되면 처리속도도 빨라지고, 프록시 서버와 외부 네트워크의 불필요한 통신을 줄이는 효과를 가져온다. 따라서 외부와의 트래픽 자체가 줄어들게 되고, 네트워크 병목현상을 방지하는 효과도 가져올 수 있다.

- 접근을 통제할 수 있다

프록시 서버를 사용하게 되면 일단 모든 요청은 프록시 서버를 거쳐가게 된다. 이 과정에서 프록시 서버가 내부망에서 외부 네트워크로 보내는 일부 요청을 차단할 수도 있고, 외부 네트워크에서 내부망으로 오는 요청을 차단할 수도 있다. (내부망과 외부망에 대한 설명은 바로 아래에서 간단히 설명.)

보통 이러한 기능은 기업에서 많이 사용하는데, 기업에서는 내부 pc에서 외부망의 취약한 사이트에 접근하는 것을 막기도 하고, 외부망에서 사내 내부망의 중요 서버에 접근하는 것을 막기도 한다. 이러한 역할을 프록시 서버가 내부망과 외부망 사이에서 담당하게 된다.

※ 내부망? 외부망?

프록시 서버는 어디에 위치하느냐에 따라 클라이언트의 정보를 숨길 수도 있고, 서버의 정보를 숨길 수도 있다. 이때, 클라이언트와 서버 간의 통신에서 드러나지 않는 쪽을 내부망이라고 이해하면 편할 것이다.

그래서 프록시 서버(Proxy Server)를 왜 쓰는건데?

- 보안을 강화하기 위해 사용한다

프록시 서버를 사용하면 내부망에 위치한 컴퓨터는 외부로 ip주소 등의 정보가 공개되지 않는다. 그리고 내부망에 접근하려면 프록시 서버를 경유해야 한다. 이렇게 되면 내부망의 컴퓨터가 공격에 직접적으로 노출되는 것을 막을 수 있다.

또한 내부망의 컴퓨터에서 외부 네트워크에 접속할 때, 보안에 취약한 사이트 등에 접근하지 못하도록 차단하거나, 외부망에서 내부망에 비정상적인 접근을 시도할 경우 이를 차단하는 방화벽의 역할도 수행할 수 있다.

- 인터넷 통신을 제어하는 데에 사용한다

당장 위에서 설명했던 사례가 1번이다. 프록시 서버는 내부망의 컴퓨터에서 외부의 취약한 사이트에 접근하거나 악성코드 등 위험한 파일을 받는 행위를 막을 수도 있고, 내부망으로의 접근 정책을 적용하여 외부망에서 내부망으로의 비정상적인 접근을 막는 방화벽 역할을 수행하기도 한다. 프록시 서버가 클라이언트와 서버간, 내부망과 외부망 사이에서 트래픽을 중개하기 때문에 가능한 일이다. 이밖에도 사용률을 검토하는 데에도 쓰일 수 있다.

- 캐시 활용을 위해 사용한다

웹 캐시 활용을 위해 프록시 서버를 사용하기도 한다. 이전에 요청을 했던 내용에 대해서 추가적인 요청을 보내지 않고도 응답을 할 수 있기 때문에 네트워크 사용 환경을 개선하는 효과도 가져올 수 있다.

(이밖에도 차단 우회를 목적으로 사용하는 경우도 있지만, 원래 프록시 서버가 우회를 위한 서버는 아니다보니 제외)

프록시 서버(Proxy Server)의 종류

프록시 서버의 구조
프록시 서버의 구조

위 그림은 프록시 서버의 대략적인 구조를 그림으로 나타낸 것이다. 분류 기준에 따라 여러 종류의 프록시 서버가 존재하지만, 여기서는 크게 Forward Proxy와 Reverse Proxy에 대해서 설명한다.

Forward Proxy

Forward Proxy는 클라이언트 측의 요청을 대신 받아 인터넷에 접근하는 방식의 프록시 서버다. 클라이언트와 인터넷 사이에 프록시 서버가 위치하는, 위 그림에서 좌측 절반 부분에 해당하는 구조를 가지고 있다. (위에서 언급한 내부망, 외부망에 대한 개념을 적용하면, Forward Proxy는 클라이언트 측이 내부망에 해당한다.)

Forward Proxy는 내부망 구성원들의 인터넷 사용 환경을 제어하기 위해 사용하는 경우가 많다. 기업에서 사원들의 인터넷 사용 내역을 검토하고, 악성 사이트나 위협적인 내용을 차단하여 보안을 유지한다. Forward Proxy를 사용하면서 인터넷 대역폭 사용이 감소하고, 이로 인해 인터넷 속도 개선에도 영향을 주는 건 덤이다.

Reverse Proxy

Reverse Proxy는 서버 측에 위치하여 클라이언트로부터 요청을 받아 서버로 전달해주는 방식의 프록시 서버다. 위 그림에서 우측 절반 부분에 해당하는 구조를 가지고 있다. (내부망, 외부망 개념을 적용하면 Reverse Proxy는 서버 측이 내부망에 해당한다.)

Reverse Proxy는 일반적으로 서버의 보안을 위해 사용한다. DB서버 등 중요한 정보가 저장되어 있는 서버가 공격으로부터 직접 노출되는 것을 막기 위해 Reverse Proxy를 통해 클라이언트의 요청을 대신 서버에 전달한다. (당연히 비정상적인 접근이 감지된다면 프록시 서버 선에서 거른다.) 또한 Reverse Proxy는 서버의 부하를 분산시켜주는 로드 밸런싱(Load Balancing)이라는 기능을 통해 서버의 성능을 향상시켜주는 데에도 도움을 준다.