본문 바로가기
네트워크

[네트워크] 프록시 서버 너는 누구냐?

by 주주병 2024. 10. 7.
728x90
반응형

프록시 서버란?

프록시 서버(Proxy Server)는 네트워크에서 클라이언트와 서버 간의 중간에 위치하는 중개 서버를 의미합니다.

클라이언트가 요청을 보낼 때, 직접 서버에 요청하지 않고 프록시 서버를 거쳐 요청을 전송하며, 서버의 응답 또한 프록시 서버를 통해 클라이언트에 전달됩니다.

 

이로 인해 클라이언트와 서버는 직접적으로 통신하지 않고, 프록시 서버가 대신 데이터를 주고받는 역할을 합니다.

프록시 서버는 다양한 목적으로 사용될 수 있으며, 보안, 성능 최적화, 접근 제어, 콘텐츠 캐싱 등 여러 측면에서 중요한 역할을 합니다.

 

프록시 서버란 대충 중간에서 요청을 받아서 서버로 전달해주는 역할이라고 생각하면 된다.

그렇지만 우리는 이러한 의문이 생긴다. "왜 굳이 중간에 중개자를 두는 거지?"

프록시

 

프록시 서버의 주요 역할

1. 익명성 제공

  • 프록시 서버는 클라이언트의 IP 주소를 숨기고, 대신 프록시 서버의 IP 주소를 서버에 노출시킵니다. 이를 통해 클라이언트는 익명성을 유지할 수 있으며, 보안과 개인 정보 보호를 강화할 수 있습니다.

단순히 생각했을 때 클라이언트의 ip와 서버의 ip를 노출하면 위험한 상황이 벌어질 확률이 엄청 높지 않을까?

2. 보안 강화

  • 프록시 서버는 외부 공격으로부터 클라이언트를 보호할 수 있습니다. 클라이언트와 서버 간의 직접 통신을 차단하여 악의적인 공격이나 데이터 유출을 방지할 수 있습니다.
  • 또한, SSL 프록시를 통해 암호화된 통신을 중개하여 데이터의 보안을 강화할 수 있습니다.

3. 접근 제어 및 로깅

  • 프록시 서버는 클라이언트의 인터넷 사용을 제어하거나 모니터링할 수 있습니다. 이를 통해 기업이나 기관은 사용자들이 접근할 수 있는 웹사이트를 제한하거나, 트래픽을 기록해 사용자 활동을 추적할 수 있습니다.
  • 이러한 기능은 내부 보안 강화데이터 보호 정책 준수를 위해 주로 사용됩니다.

4. 콘텐츠 캐싱

  • 프록시 서버는 자주 요청되는 웹 페이지나 리소스를 캐싱할 수 있습니다. 이를 통해 같은 요청이 반복될 때 속도를 개선하고, 서버의 부하를 줄이는 효과를 제공합니다.
  • 예를 들어, 대형 웹사이트에서 자주 요청되는 이미지나 CSS 파일 등을 캐싱하면 클라이언트의 요청이 더 빠르게 처리되고, 서버 측 트래픽을 줄일 수 있습니다.

캐시라는 기능을 알면 매우 좋은데, 매번 똑같은 요청을 서버에 요청하는 것은 무리일 수도 있다. 그렇기에 중간에 프록시 서버를 두고 자주 쓰는 정보를 캐싱해 두면 매번 서버에 요청을 안 해도 돼서 좋다!.

5. 콘텐츠 필터링

  • 프록시 서버는 콘텐츠 필터링 기능을 제공할 수 있습니다. 이를 통해 사용자가 접근할 수 있는 콘텐츠를 제한하거나, 특정 사이트에 대한 접근을 차단할 수 있습니다.
  • 학교, 회사, 공공기관 등에서 유해 사이트 차단, 소셜 미디어 접근 제한 등을 설정할 때 주로 활용됩니다.

6. 로드 밸런싱

  • 프록시 서버는 여러 서버로 요청을 분산하여 로드 밸런싱 역할도 수행할 수 있습니다. 이를 통해 특정 서버에 트래픽이 몰리는 것을 방지하고, 시스템의 안정성을 높일 수 있습니다.
728x90

프록시 서버의 종류

1. 정방향 프록시(Forward Proxy)

  • 클라이언트의 요청을 대신 서버로 전달하는 프록시 서버입니다. 클라이언트는 프록시 서버를 통해 서버에 접근하며, 서버는 클라이언트의 실제 IP 주소를 알지 못합니다.
  • 웹 프록시, 캐시 프록시가 정방향 프록시의 대표적인 예입니다. 주로 사용자 측에서 IP 차단 우회익명성 유지를 목적으로 사용됩니다.

2. 역방향 프록시(Reverse Proxy)

  • 서버 측에서 클라이언트의 요청을 대신 받아 서버에 전달하는 프록시 서버입니다. 클라이언트는 역방향 프록시가 서버인 것처럼 요청을 보내고, 역방향 프록시가 실제 서버로 요청을 중계합니다.
  • 로드 밸런싱, 캐싱, 보안 목적으로 주로 사용되며, NGINX, Apache 같은 웹 서버가 역방향 프록시 역할을 수행할 수 있습니다.

3. 투명 프록시(Transparent Proxy)

  • 투명 프록시는 클라이언트가 프록시 서버를 사용하고 있다는 사실을 알지 못하도록 요청을 중계합니다. 클라이언트는 직접 서버와 통신하는 것처럼 보이지만, 실제로는 프록시 서버가 중간에서 모든 요청을 처리합니다.
  • 이 방식은 주로 트래픽 모니터링이나 네트워크 정책 관리에 사용됩니다.

4. SSL 프록시

  • SSL 프록시는 클라이언트와 서버 간의 암호화된 HTTPS 통신을 중계합니다. 이를 통해, 보안이 중요한 웹사이트나 애플리케이션에서 데이터를 안전하게 전송할 수 있습니다.
  • SSL 프록시는 네트워크의 보안 통신 강화를 위해 주로 사용됩니다.

 

프록시 서버의 단점

1. 프록시 서버 과부하:

  • 모든 트래픽이 프록시 서버를 통과하기 때문에, 프록시 서버에 과부하가 걸릴 경우 전체 시스템 성능에 영향을 줄 수 있습니다.

2. 보안 위협:

  • 프록시 서버가 잘못 설정되거나 공격을 받을 경우, 민감한 데이터가 노출될 수 있습니다. 특히 공용 프록시 서버 사용 시 보안 위험이 존재합니다.

3. 추가적인 복잡성:

  • 프록시 서버를 설정하고 관리하는 것은 네트워크 구성의 복잡성을 증가시킬 수 있으며, 네트워크 트래픽에 대한 추가적인 지연을 유발할 수 있습니다.

 

Nginx로 프록시 서버 구현하기

1. Nginx 설치

먼저 Nginx가 설치되어 있어야 합니다.

우분투(Ubuntu) 시스템에서 Nginx를 설치하려면 다음 명령어를 사용합니다.

 
sudo apt update sudo apt install nginx
//설치 후, Nginx 서버가 실행 중인지 확인합니다.

sudo systemctl status nginx

2. Nginx 리버스 프록시 설정

프록시 서버 설정을 위해, Nginx의 설정 파일을 수정해야 합니다. 기본 설정 파일은 /etc/nginx/sites-available/default에 있습니다.

sudo nano /etc/nginx/sites-available/default
 

설정 파일에서 리버스 프록시를 설정합니다. 예를 들어, 클라이언트의 요청을 http://example.com이라는 원격 서버로 프록시하려는 경우, 다음과 같이 설정할 수 있습니다.

// /etc/nginx/sites-available/default의 내용

server {
    listen 80;  # HTTP 포트
    server_name your-domain.com;  # 사용할 도메인 또는 IP

    location / {
        proxy_pass http://example.com;  # 프록시할 서버 주소
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

설명:

  • proxy_pass http://example.com;:모든 요청을 example.com 서버로 전달합니다.
  • proxy_set_header Host $host;: 원본 요청의 Host 헤더를 유지합니다.
  • proxy_set_header X-Real-IP $remote_addr;: 클라이언트의 실제 IP 주소를 전달합니다.
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: 클라이언트의 IP 주소를 추적하는 X-Forwarded-For 헤더를 설정합니다.
  • proxy_set_header X-Forwarded-Proto $scheme;: 요청이 HTTP 또는 HTTPS로 이루어졌는지 나타내는 헤더를 설정합니다.

3. 프록시 서버 적용

설정을 저장한 후, Nginx 설정이 제대로 적용되었는지 확인합니다.

 
sudo nginx -t
// 설정 파일이 올바르면, Nginx를 재시작하여 변경 사항을 적용합니다.

sudo systemctl restart nginx
728x90
반응형