본문 바로가기

리눅스

포워드 프록시와 리버스 프록시의 차이점과 역할

728x90

포워드 프록시와 리버스 프록시의 차이점과 역할

포워드 프록시와 리버스 프록시는 모두 프록시 서버의 한 종류로 클라이언트와 서버 사이의 중계 역할을 합니다.

포워드 프록시(Forward Proxy)

클라이언트와 서버 사이에 위치하여 클라이언트의 요청을 대신 전달하고, 서버의 응답을 클라이언트에게 전달하는 역할을 합니다. 즉, 클라이언트는 실제 서버가 아닌 포워드 프록시에게 요청을 하게 됩니다.

 

포워드 프록시는 다음과 같은 목적으로 사용될 수 있습니다.

  • 보안 향상: 포워드 프록시는 클라이언트의 IP 주소를 서버에 노출하지 않고, 프록시 서버의 IP 주소만 노출함으로써 보안을 향상시킬 수 있습니다. 또한, 포워드 프록시는 클라이언트의 요청을 필터링하여 악성 요청을 차단할 수 있습니다.
  • 성능 향상: 포워드 프록시는 자주 사용되는 컨텐츠를 캐싱하여 성능을 향상시킬 수 있습니다. 또한, 포워드 프록시는 여러 클라이언트의 요청을 한 번에 모아서 전달함으로써 성능을 향상시킬 수 있습니다.
  • 접근 제어: 포워드 프록시는 클라이언트가 접근할 수 있는 서버를 제한하여 접근 제어를 할 수 있습니다.

리버스 프록시(Reverse Proxy)

서버와 클라이언트 사이에 위치하여 클라이언트의 요청을 서버로 전달하고, 서버의 응답을 클라이언트에게 전달하는 역할을 합니다. 즉, 클라이언트는 실제 서버의 IP 주소를 알 필요 없이, 리버스 프록시의 IP 주소만 알면 됩니다.

 

리버스 프록시는 다음과 같은 목적으로 사용될 수 있습니다.

  • 로드 밸런싱: 리버스 프록시는 여러 개의 서버에 요청을 분산하여 로드 밸런싱을 할 수 있습니다.
  • 서버 보호: 리버스 프록시는 클라이언트의 요청을 필터링하여 서버를 보호할 수 있습니다.
  • 웹 애플리케이션 통합: 리버스 프록시는 여러 개의 웹 애플리케이션을 하나의 IP 주소로 통합할 수 있습니다.

출처-https://cdn.ttgtmedia.com/rms/onlineimages/forward_proxy_vs_reverse_proxy-f.png

포워드 프록시와 리버스 프록시의 주요 차이점

특징 포워드 프록시 리버스 프록시
위치 클라이언트와 서버 사이에 위치 서버와 클라이언트 사이에 위치
역할 클라이언트의 요청을 대신 전달 클라이언트의 요청을 서버로 전달
목적 보안 향상, 성능 향상, 접근 제어 로드 밸런싱, 서버 보호, 웹 애플리케이션 통합

사용 예시

  • 포워드 프록시
    • 회사의 내부망에서 외부 웹사이트에 접근할 때, 회사의 방화벽 앞에 포워드 프록시를 설치하여 보안을 향상시킬 수 있습니다.
    • 회사의 내부망에서 해외 웹사이트에 접근할 때, 포워드 프록시를 사용하여 성능을 향상시킬 수 있습니다.
    • 회사의 내부망에서 특정 웹사이트에 접근할 수 있도록 허용하기 위해 포워드 프록시를 사용하여 접근 제어를 할 수 있습니다.
  • 리버스 프록시
    • 여러 개의 웹 서버에 로드 밸런싱을 하기 위해 리버스 프록시를 사용할 수 있습니다.
    • DDoS 공격으로부터 서버를 보호하기 위해 리버스 프록시를 사용하여 클라이언트의 요청을 필터링할 수 있습니다.
    • 여러 개의 웹 애플리케이션을 하나의 IP 주소로 통합하기 위해 리버스 프록시를 사용할 수 있습니다.
728x90

Squid를 사용하여 포워드 프록시를 구성하는 방법

1. Squid 설치

Squid를 설치합니다. 리눅스 기반 시스템에서는 패키지 관리자를 사용하여 Squid를 설치할 수 있습니다.

sudo apt-get update
sudo apt-get install squid

2. Squid 설정 파일 편집

Squid의 주요 설정 파일인 squid.conf를 편집합니다. 이 파일은 일반적으로 /etc/squid/squid.conf에 위치합니다.

sudo vim /etc/squid/squid.conf

이 설정은 Squid가 3128 포트로 HTTP 요청을 받아들이고, 모든 클라이언트로부터의 요청을 허용한다는 것을 의미합니다.

3. 포워드 프록시 구성

Squid 설정 파일에서 다음과 같은 포워드 프록시 구성을 추가합니다. 이 설정은 Squid가 클라이언트 요청을 받아 원격 서버로 전달하게 합니다.

# 포워드 프록시 설정
http_port 3128       # 포워드 프록시 포트 (선택적)
cache_peer <원격 서버 IP> parent <원격 서버 포트> 0 no-query
never_direct allow all

위의 <원격 서버 IP> 및 <원격 서버 포트>를 원하는 포워드 프록시 서버의 IP 주소와 포트 번호로 바꿉니다.

4. 접근 제어 및 인증 설정

필요한 경우 Squid를 사용하는 클라이언트의 접근을 제어하고, 사용자 인증을 설정할 수 있습니다.

  • http_access 설정을 사용하여 특정 IP 주소나 네트워크만 Squid를 사용할 수 있도록 제어합니다.
  • 인증을 설정하여 Squid를 사용하는 클라이언트의 신원을 확인할 수 있습니다.

5. Squid 실행

설정을 저장한 후 Squid를 다시 시작하여 변경 사항을 적용합니다.

sudo systemctl start squid

6. 클라이언트 설정

클라이언트에서 웹 브라우저 또는 다른 네트워크 애플리케이션에서 Squid 포워드 프록시 서버의 IP 주소 및 포트 번호를 설정합니다.

Nginx를 사용하여 리버스 프록시를 구성하는 방법

1. Nginx 설치

Nginx를 설치해야 합니다. 리눅스 시스템에서는 패키지 관리자를 사용하여 Nginx를 설치할 수 있습니다.

sudo apt-get update
sudo apt-get install nginx

2. Nginx 설정 파일 편집

Nginx의 주요 설정 파일인 nginx.conf를 편집합니다. 이 파일은 일반적으로 /etc/nginx/nginx.conf 또는 /etc/nginx/sites-available/default에 위치합니다.

sudo vim /etc/nginx/nginx.conf

3. 리버스 프록시 구성

Nginx 설정 파일에서 다음과 같은 리버스 프록시 구성을 추가합니다. 이 설정은 Nginx가 클라이언트 요청을 받아 원격 서버로 전달하게 합니다.

location / {
    proxy_pass http://원격_서버_IP:포트;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

위의 원격_서버_IP 및 포트를 원하는 원격 서버의 IP 주소와 포트 번호로 바꿉니다.

4. 설정 파일 검증

Nginx 설정 파일을 검증하여 오류가 있는지 확인합니다.

sudo nginx -t

5. nginx 실행

설정을 저장한 후 Nginx를 다시 시작하여 변경 사항을 적용합니다.

sudo systemctl start nginx

6. 클라이언트 설정

클라이언트에서 웹 브라우저 또는 다른 네트워크 애플리케이션에서 Nginx 리버스 프록시 서버의 IP 주소를 사용하고 원격 서버에 대한 요청이 Nginx를 통해 전달되도록 설정합니다.

 

참고URL

- TechTarget : Forward proxy vs. reverse proxy: What's the difference?

 

728x90