Proxy

파이리·2023년 7월 26일

네트워크 기초

목록 보기
16/26


사전적 의미로 대리자.

예를 들어 PC#1에서 Naver 서버에 요청을 보낸다고 가정했을 때, 일반적으로 PC#1에서 인터넷을 통해 Naver 서버로 직접 요청을 보내게 됩니다.

그러나 Proxy 역할을 하는 PC#2가 있다고 가정하고 Proxy를 통해 Naver에 요청을 보내고자 할 경우에는 PC#1이 PC#2에게 요청을 보내고 PC#2가 Naver에게 요청을 보내고 응답을 받아 다시 PC#1에게 전달하는 방식으로 동작합니다.

Proxy 역할을 하는 프로그램은 User Mode Application Proxy라고 부른다. 따라서 이 프로그램에서 다루는 데이터는 Stream 입니다.

Proxy의 활용

우회

Proxy를 통해 요청을 보내게 되면, 응답을 하는 곳에서는 Proxy에 요청을 보낸 곳을 알 수 없고 Proxy에서 요청을 보낸 것으로 판단하게 됩니다.

따라서 Prxoy를 통해 우회하여 요청을 보낼 수 있습니다. 단, Proxy에서는 요청을 보내는 곳에 모든 통신을 감청할 수 있다는 문제가 있으므로 주의해야 합니다.

분석

HTTP를 통해 통신을 할 경우, 이 통신을 평문으로 이루어져 있기 때문에 보안에 취약합니다. 따라서 SSL을 적용하여 암호화하여 통신하는 HTTPS를 사용합니다.

어떤 한 이유로 HTTPS 통신을 분석해야 할 때, 암호화가 되어 분석이 어렵다는 문제가 발생하게 됩니다. 또한 HTTP 통신의 Stream 데이터를 분석하는 것인데, Packet 수준에서 데이터를 분석하는 것은 비효율적일 수 있습니다.

따라서 소켓 수준에서 데이터가 암호화되기 전에 분석을 합니다. Stream 데이터에 Proxy를 127.0.0.1 로 지정하게 되면 소켓을 통해 Proxy로 전달되고 Proxy에서 암호화 되지 않은 데이터를 분석할 수 있습니다. 이후 Proxy 소켓에서 요청을 암호화하여 요청을 보냅니다.

감시와 보호

PC#1 ~ PC#4로 이루어진 네트워크 대역이 존재하고 Gateway에는 Proxy 서버가 연결되어 있다고 가정합니다. 이 때, 해당 네트워크 대역에 존재하는 모든 PC들은 Proxy 설정이 되어 있고 요청을 보낼 때마다 Proxy를 거쳐 요청을 보내게 됩니다.

이때, 어떤 PC가 악성 코드가 존재하는 사이트에 접속했다고 가정합니다. 만약 이 PC가 Proxy 설정 없이 바로 해당 사이트에 접속하였다면 악성 코드에 감염되게 되지만, Proxy를 거쳐 요청을 보냈기 때문에 Proxy에서 악성 코드 유입을 차단할 수 있습니다.

이때 Proxy는 외부에서 오는 악성 코드 유입을 차단하는 역할을 하기 때문에 이러한 경우 Virus Wall이라고 불립니다.

반대로 어떤 PC가 어떤 사이트에 요청을 보내는지 감시할 수 있습니다. 또한 특정 사이트에 대한 접속 혹은 인터넷 접속을 차단할 수도 있습니다.

Reverse Proxy

Web Server가 존재하고 Web Server 앞에 Proxy를 배치할 수 있습니다. 클라이언트에서 Web Server에 요청을 보내기 위해 도메인을 입력하면 DNS 서버에서 Web Server 주소가 아닌 Proxy 서버 주소를 알려줍니다.

Web Server에서 직접 요청을 받지 않고 Proxy가 대신 요청을 받아 Web Server로 전달하고 응답을 받아 클라이언트에 전달합니다.

Proxy와 Web Server 사이의 통신을 Private하기 때문에 외부에서 Web Server에 직접 접속이 불가능합니다. 따라서 Web Server의 보안이 뛰어나다는 장점이 있습니다.

또한, Proxy 클라이언트에서 어떤 요청을 보내는지 감시하고, 해당 요청이 공격인지 식별하여 공격일 경우 해당 요청을 차단하여 Web Server를 보호하는 역할을 수행합니다. 이러한 역할을 하는 Proxy를 WAF ( Web Application Firewall ) 라고 부릅니다. Stream 데이터를 다루기 때문에 대용량 파일을 감시하기에 용이하기 때문에 Server에서 Packet 단위로 감시하기 보다는 WAF 를 사용하는 것이 선호 됩니다.

profile
프론트엔드 개발자

0개의 댓글