인프라, 운영에 필수적인 프록시 서버

1

네트워크

목록 보기
1/1
post-thumbnail

Before Posting....

영어로 직역하면 대리 라는 뜻을 가진 proxy는 보통 웹서버 구축시 앞단에 많이 설치되어 보안에 큰 도움을 줍니다.

본 글은 [면접을 위한 CS 전공지식 노트] 1.1.5 55page를 참고하였으며, 책에서 코드나 개념 설명이 더 필요하다 싶은 부분은 추가적으로 조사하여 작성하였습니다.

프록시 패턴

대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 객체 앞단의 인터페이스 역할을 하는 디자인 패턴입니다.

[그림 1] 프록시 패턴]

이를 통해 객체의 속성, 변환 등을 보완하여, 보안, 데이터 검증, 캐싱, 로깅에 사용합니다.

[Term]
프록시 서버에서의 캐싱(Cashing)

캐시안에 정보를 담아두고 그 안에 정보를 요구해 다시 원격 서버에 테이터를 요청하지 않고 캐시 내의 데이터를 활용하는 방식입니다.

불필요하게 외부와 연결하지 않기 때문에 트래픽을 줄일 수 있는 장점을 지닙니다.

프록시 서버(Proxy Server)

서버와 클라이언트 사이에 위치해, 클라이언트가 자신을 통해 다른 네트워크를 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용프로그램을 지칭합니다.

ngnix 프록시 서버

ngnix는 주로 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리가능한 웹서버이며, 주로 NodeJS 서버 앞단의 프록시 서버로 활용됩니다.

NodeJS창시자 라이언 달도 강조했듯이, ngnix(Web server)를 앞단, Node.js(WAS)를 뒷단에 두면 버퍼 오버플로우 취약점을 예방할 수 있다고 합니다.

이 외에도 익명의 사용자의 직접적 서버 접근 차단, 보안 강화등 다양한 이유에서 ngnix가 사용됩니다.

[그림 2- 참고자료] youtube - 우리밋_woorimIT

ngnix가 무엇이고 어떻게, 왜 사용되는지는 아래 노션에 글을 정리해 놓았습니다.

[참조 링크]
https://www.notion.so/Ngnix-a4ebd5c9ccc5433a99d452e72197ed03?pvs=4

[Term]
버퍼 오버플로우

  • 버퍼는 데이터가 저장되는 메모리 공간
  • 이를 벗어나는 경우를 지칭함
  • 이때, 사용되지 않아야 할 영역에 데이터가 덮어씌워져 주소, 값을 바꾸는 공격이 발생한다

프록시 서버로 쓰는 CloudFlare

[그림3] - CloudFlare 동작원리

CloudFlare는 존 세계적으로 분산된 서버가 있어 어떠한 시스템의 콘텐츠 전달을 빠르게 할 수 있는 CDN 서비스입니다.

ngnix와 마찬가지로 웹 서버 앞단에 프록서 서버로 두어 1. DDOS공격 방어 나 2. HTTPS구축에 쓰입니다.

또한 의심스러운 트래픽인지 먼저 판단해 CAPTCHA등을 기반으로 일정부분 막아주기도 합니다.

DDOS 공격 방어

DDOS짧은 시간동안 네트워크에 엄청난 요청을 보내 네트워크를 마비시켜 웹사이트의 가용성을 방해하는 사이버 공격의 유형입니다.

CloudFlare는 의심스러운 트래픽, 특히, 사용자가 접속하는 것이 아닌 시스템을 통해 오는 트래픽을 자동 차단하여 DDOS로 부터 보호합니다.

CloudFlare의 거대한 네트워크 용량과 캐싱 전략으로 1. 소규모 DDOS공격은 쉽게 방어 가능하며, 2. 방화벽 대시보드도 제공합니다.

[Term]
Firewall Dashboard

  • 방화벽 로그로부터 생성된 방화벽 보안 사건에 대한 인사이트를 제공

[그림 4] - 방화벽 대시보드 예시

HTTPS 구축

서버에서 HTTPS를 구축할 때 인증서를 기반으로 구축도 가능합니다.

하지만 CloudFlare를 사용하면 더 수월하게 HTTPS를 구축할 수 있습니다.

HTTP VS HTTPS

HTTP: 서버/ 클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이며, application level의 프로토콜로 TCP/IP 위에서 동작합니다.
암호화되지 않은 평문 데이터를 전송하기 때문에 제 3자가 중요정보를 열람할 수 있기 때문에 HTTPS가 등장하였습니다.

HTTPS: HTTP데이터 암호화가 추가된 프로토콜이며, 데이터 암호화 방식은 1. 대칭키2.비대칭키를 모두 사용합니다.

[그림 5] - HTTPS 데이터 암호화 동작 방식

- 대칭키: 클라이언트/서버가 동일한 키를 사용해 암/복호화, 키노출에 취약, 연산속도 빠름
- 비대칭키: 1개의 쌍으로 구성된 공개키와 개인키를 암/복호화하는데 사용
	- 공개키 암호화: 개인키(나만 소유)로만 복호화 가능
    - 개인키 암호화: 공개키로만 암호화가능, 모두에게 공개된 키이므로 신뢰성을 보장한다.

[Term]
CDN(Cross-Origin Resource Sharing)

  • 각 사용자가 인터넷에서 접속하는 곳과 가까운 곳에서 콘텐츠를 <span style:"color:yellow">캐싱 또는 배포하는 서버 네트워크를 말한다. 이를 통해 사용자가 웹 서버로부터 콘텐츠를 다운로드하는 시간을 줄일 수 있다.

CORS와 프론트엔드의 프록시 서버

CORS(Cross-Origin Resource Sharing)는 서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP헤더 기반 메커니즘 입니다.

프론트와 벡엔드 서버가 통신할 때 마주치는 CORS에러를 해결하기 위해 프론트에서 프록시 서버를 만듭니다.

[Term]
오리진

예를 들어 프론트엔드에서는 127.0.0.1:3000으로 테스팅하는데 벡엔드 서버는 127.0.01:2010이라면 포트번호가 다르므로 CORS에러가 발생한다.

이때 프록시 서버를 두어서 프론트엔드 서버에서 요청되는 오리진을 127:0.0.1:2010으로 바꿉니다.

[127.0.0.1 의 의미]

루프백(Looback)IP로, 본인 PC의 서버 IP이다.
localhost나 127.0.0.1을 주소창에 입력하면 DNS를 거치지 않고 바로 본인 PC서버로 연결됩니다.

After Reading... (느낀점)

프록시 서버를 사용함으로써, 시스템의 안전성과 보안을 높일 수 있다는 것을 글로 직접 정리해보면서 알게 되었다.

또한, 다양한 프록시 서버를 직접 프로젝트에 적용하여 서버를 배포하면 더 안전한 프로젝트가 될 수 있음을 깨닫게 되었다.

profile
성장에 목마른 소프트웨어 엔지니어

0개의 댓글