포스트

리눅스 (8) - Proxy

리눅스 (8) - Proxy

Proxy(프록시)의 개념과 Squid를 이용한 실습 구축

프록시의 기본적인 개념부터 사용 목적, 그리고 리눅스 환경(Squid)에서 직접 서버와 클라이언트를 구축해 보는 실습까지 정리한다.


1. Proxy(프록시)란?

개요

프록시 서버(Proxy Server)는 클라이언트와 서버 사이에서 데이터를 중개하는 대리인 역할을 수행하는 서버다.

사용자가 외부 인터넷이나 다른 서버와 통신하고자 할 때, 목적지에 직접 접속하는 대신 프록시 서버가 사용자의 요청을 받아 전달하고, 그 응답을 다시 사용자에게 전달하는 방식으로 동작한다.

기본 동작 원리

  1. 요청 (Request): 클라이언트가 외부 서버에 데이터를 요청할 때, 직접 보내지 않고 프록시 서버로 요청을 전송한다.
  2. 중개 (Relay): 프록시 서버는 클라이언트를 대신해 목적지 서버로 데이터를 요청한다.
  3. 응답 (Response): 목적지 서버가 프록시 서버로 응답을 보내면, 프록시 서버가 이를 받아 최종 클라이언트에게 전달한다.

2. 사용 목적 및 주요 특징

1) 익명성 및 보안 (Privacy & Security)

  • IP 주소 숨김: 목적지 서버에는 클라이언트의 실제 IP가 아닌 프록시 서버의 IP가 남기 때문에 사용자의 신원을 보호할 수 있다.
  • 방화벽 역할: 외부의 직접적인 공격으로부터 내부 네트워크를 보호하고, 위험하거나 허가되지 않은 사이트로의 접근을 사전에 차단할 수 있다.

2) 성능 향상 (Caching)

  • 캐싱(Caching): 자주 방문하는 웹 페이지나 데이터의 복사본을 프록시 서버에 임시로 저장해 둔다.
  • 동일한 요청이 다시 들어오면 목적지 서버까지 가지 않고 프록시 서버에 저장된 데이터를 즉시 반환하여 응답 속도를 높이고 대역폭을 절약한다.

3) 접근 제어 및 필터링

  • 사내 네트워크 등에서 유해 사이트나 특정 웹사이트 접근을 차단할 때 활용한다.
  • IP 위치 제한이 있는 특정 지역의 콘텐츠에 접근하기 위해 우회 접속할 때 사용하기도 한다. (보통 VPN 형태로 많이 활용된다)

Forward Proxy vs Reverse Proxy

구분Forward Proxy (포워드 프록시)Reverse Proxy (리버스 프록시)
위치클라이언트 앞에 위치서버 앞에 위치
목적내부망의 외부 접속 관리, 익명성, 보안, 웹 캐싱로드 밸런싱(부하 분산), 서버 보안, SSL 암호화 처리
대상 보호클라이언트 보호 및 관리서버 보호 및 인프라 효율화

3. 리눅스 환경에서의 프록시 구축 실습 (Squid)

우분투(Ubuntu) 환경에서 오픈소스 프록시 소프트웨어인 Squid를 이용하여 프록시 서버를 구축하고, 클라이언트 환경에서 이를 연동하는 실습 과정이다.


3-1. 서버 측 설정 (Squid 설치 및 환경 구성)

1) 패키지 설치

1
2
sudo apt update && sudo apt install squid -y

2) 설정 파일 수정

Squid 설정 파일을 열어 접근 권한 및 캐시 설정을 추가한다.

1
2
sudo vim /etc/squid/squid.conf

squid.conf 내 주요 설정 작성:

1
2
3
4
5
6
7
8
9
10
11
12
# 대역 지정 (본인의 네트워크 대역에 맞게 수정)
acl myserver src 192.168.64.0/24

# 지정한 대역 허용
http_access allow myserver

# 캐시 디렉터리 및 용량 설정 (ufs 경로 용량(MB) 1차디렉터리수 2차디렉터리수)
cache_dir ufs /var/spool/squid 1000 16 256

# 프록시 호스트 이름 설정
visible_hostname myserver

3) 방화벽 설정 및 서비스 재시작

테스트 환경을 위해 방화벽을 비활성화하거나 Squid 기본 포트(3128)를 열어준 뒤 서비스를 재시작한다.

1
2
3
4
5
6
# 방화벽 비활성화 (필요 시 3128/tcp 포트만 허용)
sudo ufw disable

# Squid 서비스 재시작
sudo systemctl restart squid


3-2. 클라이언트 측 설정

프록시 서버(192.168.64.16:3128)를 거쳐 인터넷에 연결되도록 클라이언트 환경변수 및 패키지 매니저 설정을 진행한다.

1) 시스템 전체 환경변수 설정

/etc/environment 파일에 프록시 정보를 등록한다.

1
2
sudo vim /etc/environment

내용 추가:

1
2
3
4
5
6
7
8
9
10
http_proxy="http://192.168.64.16:3128/"
https_proxy="http://192.168.64.16:3128/"
ftp_proxy="http://192.168.64.16:3128/"
no_proxy="localhost,127.0.0.1,localaddress"

HTTP_PROXY="http://192.168.64.16:3128/"
HTTPS_PROXY="http://192.168.64.16:3128/"
FTP_PROXY="http://192.168.64.16:3128/"
NO_PROXY="localhost,127.0.0.1,localaddress"

변경 내용을 즉시 적용한다.

1
2
source /etc/environment

2) APT 패키지 매니저 프록시 설정

apt 명령어 실행 시에도 프록시를 타도록 설정 파일을 생성한다.

1
2
sudo vim /etc/apt/apt.conf.d/99proxy

내용 추가:

1
2
3
Acquire::http::Proxy "http://192.168.64.16:3128/";
Acquire::https::Proxy "http://192.168.64.16:3128/";


3-3. 동작 확인 및 테스트

curl 명령어를 사용해 프록시 통신이 정상 동작하는지 테스트한다.

1
2
3
4
5
6
7
8
9
# 1. 환경변수에 설정된 프록시를 통해 요청
curl -I https://www.google.com

# 2. 특정 프록시 서버를 명시하여 헤더 요청 확인
curl -x http://192.168.64.16:3128 -I https://www.google.com

# 기본 문법 참고
# curl -x <프록시주소:포트> <요청할 URL>

정상적으로 응답 헤더(HTTP/1.1 200 OK 등)가 수신되면 프록시 서버를 통한 네트워크 통신 구축이 완료된 것이다.


4. 마치며

이번 글에서는 Proxy(프록시)의 기본 개념과 사용 목적, 그리고 리눅스 환경에서 Squid를 활용해 직접 포워드 프록시 서버를 구축하고 클라이언트 환경변수를 설정하는 방법까지 알아보았다.

  • 핵심 요약
    1. 프록시 서버는 클라이언트와 외부 인터넷 간의 중개자(대리인) 역할을 수행한다.
    2. 보안 향상(IP 숨김), 성능 향상(웹 캐싱), 접근 제어(유해 사이트 차단) 등 다양한 목적에 맞게 활용된다.
    3. 클라이언트 측 설정 시 환경변수(http_proxy, HTTPS_PROXY 등)와 애플리케이션별 설정(apt.conf.d)을 각각 적용해 주어야 시스템 전반에 제대로 반영된다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.