Proxy의 구조와 작동원리
네트워크를 이루는 수많은 요소들이 있다.
하지만 기억할 것은 장치든 라우터든 스위치든 간에 기본적으로 Inline 구조, Inline 구조인데 Out of Path구조로 설치한 것, Application Proxy 3가지 중 하나이다.
Proxy가 뭘까?
어떤 PC#1가 한대가 인터넷에 연결되어있고 네이버에 접속하고 싶다고 가정해보자.
이 PC#1의 IP는 2.2.2.2, Naver의 IP는 5.5.5.5 이라고 하면 2.2.2.2라는 Host가 5.5.5.5라는 Host에 통신을 한 것으로 볼 수 있다.
이때 PC#2(IP:4.4.4.4)가 있고 PC#1이 PC#2를 Proxy라고 설정해버리면 PC#1입장에서 바로 네이버에 접속하는 것이아니라, PC#1(2.2.2.2)의 요청을 PC#2(IP:4.4.4.4)가 그대로 받아서 네이버(IP:5.5.5.5)에 연결하는 것이 Proxy 구조이다.
PC#2 에는 Proxy라고 부를 수 있는 역할을 수행해주는 Process가 있다. 또 이 Process에 Socket 인터페이스들이 있을 것이다. 이들을 S1, S2로 명칭하겠다.
S1은 자기와 연결되는 것을 기다린다.(Listen)
PC#1이 PC#2에 접속하여 인바운드 정보가 유입되면 들어온 정보를 가지고 뭔가를 하는 것이 아니라, S1→ Process → S2로 넘겨준다. 이후 S2 소켓을 열어서 네이버(5.5.5.5)으로 넘겨준다.
어떤 프로그램이 Proxy 역할을 한다고하면 [User모드 Application Proxy] 이다. Inline 이나 Out of Path은 다루는 데이터가 Packet인 반면, [User모드 Application Proxy]에서 다루는 데이터는 Stream이다. 즉 ,살고있는 계층이 다르단 것.
##
Proxy 구조는 왜 쓰는 걸까?
첫 번째, ‘우회’
PC#1가 네이버에 접속할때를 생각해보자.
PC#1이 PC#2를 Proxy로 설정하고 이 Proxy를 거쳐가게 된다면 PC#1에서 Proxy에 TCP#1 연결, Proxy에서 네이버에 TCP#2 연결을 하게된다.
문제는 이 연결을 수신한 네이버 입장에서 만약에 Proxy가 한국이 아니라 중국이라면 네이버에서는 PC#1가 아니라 중국에서 접속했다라고 인식하게 된다.
관련프로젝트 : Tor Project (토르 프로젝트)
이 우회할 때 주의할 점은 Proxy를 통해서 우회하는 순간, Proxy는 PC#1의 모든 통신을 감청할 수 있다. 그러니까 중국으로 IP주소를 세탁할 수는 있지만, Proxy서버를 운영하는 쪽에서 Socket통신 내역을 싹다 뒤벼볼 수 있다. 이는 나중에 VPN 네트워크와 연결되는 사안이다.
두 번째, ‘분석’
PC#1이 Web으로 통신한다고하면 기본적으로 HTTP 통신을 한다. 하지만 이렇게되면 ‘평문’이기때문에 인터넷에서 PC#1의 정보가 다 돌아다니게된다. 그래서 SSL을 적용해서 Socket#1에다가 PKI 기술을 붙여서 암호화시켜버린다. HTTP가 아니라 HTTPS 기술을 사용하는 것이다. 그러면 PC#1로부터 구글같은곳에 통신하는 것이 암호화되서 마치 터널안에 들어가있는 것처럼 보이지않게 된다.
업무적인이유로 WireShark같은 프로그램을 이용해서 구글과 PC#1의 통신상태를 분석한다거나 모니터링하는일이 있다. TCP/IP와 Driver 사이에 필터링 같은게 있는데 이를 Sensor로 쓴다. 하지만 이는 트래픽을 수집해서 WireShark로 보내주는데 문제가 있다.
구글에서 Socket#1 통신을 타고 내려올 때 SSL이 다 적용된다. 그리고 Sensor에서 수집한 패킷이 있다고하면 패킷의 Header와 payload가 있을것이다. 근데 Payload를 분석하려고 하니 다 암호화가 되어있다. 암호를 해석하기 전에는 분석할 수 없는 문제가 생긴다.
소위 암호화될 때 Session key가 크롬에 생겼기에 그걸 찾아서 분석을 할 수는 있지만 피곤한 일이다. 자, 분석하려는 트래픽이 HTTP이고 ‘User 모드 Application layer’ 이기 때문에 데이터 단위는 기본적으로 Stream인데 그것을 Packet 수준에서 뜯어서 분석하는 것이 과연 적절할까?
그럼 Packet 수준에서 암호화 되기전에 분석해버리면 어떨까? 예를들면 새로운 Proxy서버를 두고 Stream에다가 Proxy서버 주소를 127.0.0.1으로 Proxy설정한다. 이는 로컬인 자기자신을 뜻한다. 이러면 Proxy쪽에도 Socket#2가 새로이 열리게 된다.
PC#1가 크롬에 접속한다고하면 Socket#1을 통해서 Proxy에 접속하게 된다. 이후 Socket#2을 타고나가게 된다. 중요한건 암호화를 Proxy에서 하게된다는 것이다. 그러니까 크롬에서 Proxy로 가는 내용은 오히려 전부다 ‘평문’ 즉, 암호화가 안되어있다는 것이다. 또한 Stream수준이라서 Pakcet을 조립한다는 짓을 안해도된다.
세 번째, ‘감시와 보호’
어떤 네트워크가 있는데 쓰고있는 대역이 3.3.3.X 대역이라고 하고, PC#1는 3.3.3.2 , PC#2는 3.3.3.3 PC#3은 3.3.3.4 PC#4는 3.3.3.5 그리고 Proxy 서버는 3.3.3.100 세팅이 되어있다고 가정해보자.
여기서 전제조건은 ‘모든 PC들이 Proxy설정을 하고있다’고 설정한다.
PC#1이 네이버든 유튜브든 연결을 하면 HTTPS 통신을 할 수 있을텐데 Proxy를 두었기 때문에 Proxy를 거쳐서 가게되어있다. (여기에 IPS 등 보안장비가 들어감)
중요한건 PC#1이 HTTPS 통신으로 유튜브에 접속했다고하면 Proxy를 거치기때문에 Proxy에서 감청이 가능하다는 것이다. 그럼 만약에 유튜브나 네이버같은 곳이 아니라 악성코드가 심어진 사이트(4.4.4.4)에 들어갔다고 하면 어떻게될까?
PC#4가 4.4.4.4에 접속했다고 하면 Proxy가 없는경우에는 직접가서 악성코드에 감염이 되겠지만 Proxy 세팅이 되어있으면 Proxy에 일단 접속을하고 그 Proxy를 타고 악성사이트로 가게된다. 따라서 악성코드가 PC#4에 가기전에 Proxy에서 먼저 확인이 된다. 즉, Proxy가 외부 네트워크에서 악성코드들이 유입되는 것을 차단해준다.
이는 Virus wall이라고 불러도 좋지않을까?
또한 IPS와 연동해서 HTTPS 통신을 3.3.3.100만 가능게 설정한다면 Proxy 세팅을 안하면 인터넷을 못하게 된다. 이는 유입되는 것도 막지만 인터넷 접근도 차단할 수 있게 된다. 따라서 인터넷 접근통제 시스템이 된다.
동시에 감시도 가능하단점도 있진말자. 예를들어 PC#3가 증권, 코인거래소 사이트에 접속한다고하면 똑같이 Proxy를 거쳐서 접속하게 될것인데, 이를 통해 PC#3을 감시할 수 있다. 나아가 Proxy가 증권,코인거래소 사이트 행세를 하며 PC#3에 응답을 보낼 수 있다는것도 알아두자.
###
네 번째, Reverse Proxy
지금까지 Proxy를 주로 Web Client쪽에서 다루는 경우를 설명했는데, Web Server 쪽에도 앞에다가 Proxy를 둘 수 있다.
Web Server가 구글이라고 가정한다면, PC#1 에서 구글에 접속할 때 google.co.kr이라고 쓰면 DNS서버가 IP주소를 알려줄 것이다. 이때 알려주는 것은 Web Server앞에 두었던 Proxy의 ip주소이다. 따라서 PC#1는 Proxy에 접속하게 된다.
중요한점은 Proxy는 Web Server가 아니기 때문에 Proxy가 request를 받으면 Web server에 연결을해서 응답을 받아오고 그 응답을 PC#1한테 보내주게 된다.
즉, PC#1가 Web Server인줄 알고 접속한게 실제로 Web Server가 아닌 Reverse Proxy구조를 가지고 있는 것에 접속한 것이다.
생각할 포인트) 그럼 왜 이런걸 뒀을까?
Internet Network는 Public이다. 반면 Proxy와 Web server 구간은 Private으로 빼버린다. 이 말은 Proxy를 거치지않고 외부에서 직접 접속하는 것이 불가능하다는 것이다.(보안성이 뛰어남)
이 Proxy도 동시에 감시와 보호도 할 수 있다. 보호의 대상은 Web Server가 된다. 해커(4.4.4.4)가 구글에 접속하면 실제로는 Proxy서버에 접속하게 된다. 그러면 Proxy는 접속한 Client들이 뭘 요청하는지 싹다 감시해버리기 때문에 공격을 식별해내고 차단한다. 이를 WAF(web application Firewall)이라 부른다.
해커들이 주로 파일업로드를 통해 하기에 몇백 메가바이트가 될 수도있기에 악성여부를 서버가 판단하기에 힘들기 떄문에 WAF가 해준다.
이처럼 클라이언트를 위한게 아닌, 서버를 위한 Proxy를 Reverse Proxy라 한다.
또한 이 Proxy가 감시하는 트래픽의 단위는 Application Proxy이기에 Socket Stream임을 기억해두자.
HTTP 통신으로 L7이고 Socket으로 통신하는 것이기에 Stream형태의 데이터