취약점분석 (Blue Team)/Network

[Netwrok] 프록시 (Proxy)

poiri3r 2026. 3. 12. 15:28

이번 포스팅에서는 네트워크에서 프록시에 대해 알아보겠습니다.

밥먹으면서

https://youtu.be/AtTAraheXbs?si=Pygvpjgqf26DLFVP

위의 영상을 봤었는데, 사실 블루팀이라고 하면 이런 기본적인 DOS 방어나 봇에 대한 방어 개념을 알아야한다고 생각합니다.

근데 제가 약한 부분이 네트워크 CS지식들도 조금 부족하다고 생각하기 때문에 시간이 있을 때마다 이런 CS 지식들에 대해 정확하게 알아봐야 할 것 같습니다.

 

프록시란 클라이언트와 서버 사이에서 통신을 할 때, 중간에서 '중계 역할을 수행하는 서버'를 의미합니다.

프록시의 개념 자체는 어려울 게 없습니다.

우리가 흔히 C-S 구조를 생각하면 이렇게 직접 연결된 구조를 생각하기 쉽습니다.

하지만 실제로 서버에 접속하는 클라이언트가 많기에 위처럼 클라이언트가 서버에 1대 다수의 형태로 연결이 되어 있을 것 입니다.

클라이언트 수가 많으면 많을 수록 서버에 가는 부담이 클 것 입니다.

따라서 위와 같이 프록시 서버를 앞에 세워서 클라이언트와의 직접 연결 대신 간접적인 연결을 제공합니다.

 

이렇게 서버의 앞단에 존재하면서 프록시가 할 수 있는 역할을 하나하나씩 살펴보겠습니다.

 

1. 보안 및 익명성 : 위에 작성된 대로 클라이언트와 서버의 직접 연결 대신 간접적인 연결을 제공하므로, 사용자의 IP를 숨겨 개인정보를 보호합니다.

 

2. 성능 최적화 : 자주 요청되는 데이터를 캐시에 저장하여, 빠른 응답을 제공합니다. 이를 통해 네트워크 트래픽을 줄이고, 서버 부하를 감소시킬 수 있습니다.

발퀄이긴 하지만 다음과 같이 서버의 주소가 poiri3r.tistory.com으로 된다고 생각해보겠습니다.

그러면 대부분의 사람들은 제 블로그에 접속할 때 메인페이지로 접속할 것 입니다.

이때 모든 클라이언트의 요청을 서버에 전송하는 것 대신, 중간의 프록시 서버에 main페이지를 저장해 뒀다가 main페이지에 대한 요청은 proxy 서버에서 전부 처리합니다.

그 외에 /137 의 요청은 프록시에 저장되어 있지 않으므로, 그 해당하는 요청만 서버에 요청을 보내고, 프록시 서버에서 받은 뒤 client로 다시 보내줍니다.

 

메인 서버에서의 요청 처리는 DB에서 데이터를 찾고, 로직을 계산하는 등 무거운 작업들이 많은데에 비해, 프록시 서버는 단순히 데이터를 캐싱하고 안내하는 작업이기 때문에 프록시 서버에 많은 요청이 들어와도 그에 대한 부하는 적은 편 입니다.

 

3. 필터링 : 해당 내용은 저희가 흔히 알고 있는 프록시에 대한 내용입니다. 프록시 서버는 내부 -> 외부 혹은 외부 -> 내부에서의 패킷을 잡아서 방화벽처럼 악성 요청을 차단할 수 있고, 국가별/IP별로도 차단할 수 있습니다.

아까 5개의 요청 중 3개는 한국 1개는 중국 1개는 일본에서 온 요청이라고 생각해보겠습니다.

프록시서버는 IP 주소와 포트를 보고, 중국과 일본에서 온 요청을 차단할 수 있고, 만약에 조금 더 자세하게 필터링을 하고 싶다면 HTTP 헤더, 쿠키, URL 경로 등의 정보를 자세하게 열어보고 차단을 할 수 있습니다.

또한 이런 필터링 요청을 프록시서버딴에서 기록하고 정리할 수 있으면, 로그를 찾아보는데도 훨씬 수월할 수 있습니다.

 

4. 부하 분산 : 클라이언트가 많아서, 서버에 부하가 많아져서 서버를 두대를 운용한다고 가정해보겠습니다.

/main대신 /136 의 요청이 100개 /category에 대한 요청이 100개씩 들어왔습니다.

이를 한 서버에서 처리하는건 부하가 늘어나기 때문에 프록시 서버는 이를 알고리즘에 따라 서버에 나누어서 요청을 보내고 처리합니다.

이 과정에서 중요한 내용이 있는데, 바로 X-Forwared-For 헤더입니다.

 

웹 카테고리의 워게임을 풀다보면 패킷에 X-Forwared-For : 127.0.0.1과 같이 헤더를 붙여서 보내면 풀 수 있는 문제들이 있습니다. 해당 헤더는 Proxy와 서버 사이에서 패킷을 주고 받을 때 백엔드 서버가 실제 사용자 IP를 알 수 있도록 프록시가 헤더에 원래 IP 정보를 적어서 보내는 헤더입니다.

 

여기서 한가지 의문점이 들었습니다. 아까 프록시의 기능 중 개인정보보호에서 IP를 보호한다고 하지 않았나 ? 했었는데, 프록시를 사용하는 목적에 따라 X-Forwarded-For 헤더를 붙일수도 있고, 안붙일 수도 있다고 합니다.

또한 외부에서 프록시서버와 서버사이의 패킷 교환은 Proxy <-> Server 인 것이고, 그 내부 패킷을 분석 해야 상세 IP를 알 수 있기 때문에 보안적인 관점에서도 큰 문제가 발생하지 않습니다

 

5. 암호화 처리 : 이것은 위에 성능 최적화와 조금 비슷한 느낌인데, 사용자와 서버가 주고받는 암호화된 트래픽을 프록시 서버에서 복호화하는 방식입니다. 암호화와 복호화는 수학적으로 복잡하기에 CPU를 많이 소모하는데, 백엔드 서버가 암호를 푸는 대신 ,고성능 프록시가 이 일을 전담하여 프록시 서버에서 복호화한 뒤 서버로 보내는 것은 백엔드 서버의 부하를 많이 줄여줍니다.

 

6. 로깅 및 모니터링 : 이것도 위에 것과 비슷한데, 프록시 서버는 통과하는 모든 패킷의 명세서를 기록으로 남깁니다. 

 

프록시는 크게 두가지 종류가 있습니다.

포워드 프록시와 리버스 프록시입니다. 

 

포워드 프록시 

포워드 프록시는 클라이언트와 서버 사이에서 클라이언트의 요청을 대신 전달하는 프록시입니다.

처음에는 관련한 부분이 이해가 잘 안됐는데, 클라이언트 딴에서 사용하는 프록시라고 생각을 하면 편한것 같습니다.

저희가 VPN을 쓰는  부분과 비슷한데, 그림으로 설명하겠습니다.

포워드 프록시는 아까 설명한 기능들 중, 개인정보보호에 대한 측면이 강한데, 사내 컴퓨터나 교내 컴퓨터에서 외부 네트워크에 접속을 할 때, 포워드 프록시를 걸쳐서만 나가게 됩니다.

이럴 경우 개인 PC의 IP도 보호가 가능하고, 두번째 그림처럼 금지된 사이트에 대한 접근을 차단합니다.

개인이 설치하는 Burp suite와 같은 툴도 로컬 포워드 프록시로 동작을 합니다.

 

리버스 프록시

이름이 리버스라 헷갈릴 수 있지만, 보통 일반적으로 프록시를 떠올리면 생각하는 프록시는 리버스 프록시입니다.

포워드 프록시와는 반대로 서버 측을 보호하기 위한 형태입니다.

다음과 같은 그림을 살펴보겠습니다.

서버컴퓨터가 있고 poiri3r.tistory.com이고 ip주소는 1.2.3.4라고 해보겠습니다.

공격자는 서버의 ip주소를 알아낼 수 없기에, ping poiri3r.tistory.com으로 주소를 알아내려 할 것 입니다.

이때 패킷이 바로 서버의 ip로 날아가는 것이 아닌 proxy서버를 걸쳐가기 때문에 공격자는 실제 서버의 주소에서 받은

1.2.3.4 OK가 아닌 5.6.7.8 OK를 받기에 실제 서버의 IP 주소를 알아낼 수 없습니다.

 

보통 서버를 외부 봇들로부터 보호한다 생각할 때는 리버스 프록시를 사용한다고 생각하면 됩니다.

맨 처음 유튜브 영상에서도 마찬가지로 리버스 프록시를 통해 1차적으로 방어를 수행했습니다.

 

보안을 높이기 위해서는 프록시를 여러대 연결해 프록시 체이닝도 가능합니다.

또한 포워드 프록시 대신에 최근에는 투명 프록시라는 더 강력한 프록시도 존재하는데 나중에 기회가 되면 살펴보도록 하겠습니다.

리버스 프록시에는 Nginx와 Apache가 있는데 나중에 이걸 직접 사용해보기도 하겠습니다.

 

읽어주셔서 감사합니다