Proxy : 대리인 역할, 중계 역할
→ 클라이언트와 서버 간의 요청한 데이터를 전달함 + Proxy를 통해 실제 IP를 가상 IP로 대체함
역할
- 캐시 : 웹 서버에서 가져온 데이터를 클라이언트에 전송 후 캐시로 저장(같은 데이터를 요청하면 서버까지 가지 않고 캐시에서 바로 데이터 전송
- 보안성 1 : 한 단계 서버를 더 거쳐야 하기 때문에 들어오는 요청에 대한 보안 유지 가능 → 외부 인터넷에서는 Client의 정보를 알 수 없음 ( Proxy를 이용하면 실제 IP 주소를 숨길 수 있음, 사이트에서는 원래 IP 주소가 아닌 Proxy 의 IP 주소를 인식 )
- 보안성 2: 바깥으로 나가는 데이터를 검사 가능(지역 제한 우회로도 쓰임)
- 보안성 3: 방화벽의 역할도 할 수 있음
- 보안성 4: 부적절한 사이트로의 접근 방지
프록시 서버의 대표적인 유형 세 가지
- HTTP Proxy: 웹페이지에만 적합한 프록시
- HTTP Proxy는 브라우저를 설정하면 모든 브라우저 트래픽이 해당 경로를 통해 라우팅
- SOCKS Proxy: 웹페이지뿐만 아니라 응용프로그램에서도 사용할 수 있는 프록시
- SOCKS Proxy는 모든 종류의 트래픽을 처리할 수 있지만 보통 HTTP Proxy보다 연결 속도가 느리고 로딩 시간이 더 오래 걸림
- transparent Proxy: 사용자들이 transparent Proxy를 사용하고 있다는 사실 자체를 모르는 경우가 많음
- 일반적으로 transparent Proxy는 회사가 기기 사용자의 온라인 활동을 모니터링하고 특정 웹사이트에 접근하지 못하도록 차단하고 싶은 경우에 사용되며 호텔과 카페는 transparent Proxy를 통해 공용 와이파이에서 사용자를 인증하고 액세스 권한을 허용
**Web Server와 WAS를 이해하기 위해선 Reverse Proxy에 대한 선행 학습이 필수
Proxy 의 종류
Proxy는 서버가 어디에 위치하느냐에 따라 종류가 나누어짐
각각 용도와 역할이 달라짐
1. Forward Proxy(일반적인 프록시) → 기업의 내부망에서 주로 사용
클라이언트에서 서버로 리소스를 요청할 때 직접 요청하지 않고 Proxy에 요청
- 클라이언트가 서버에 요청
- 포워드 프록시 서버가 클라이언트의 요청을 받아서 서버에 전달
- 서버의 결과를 다시 클라이언트에 전달
2. Reverse Proxy(포워드의 반대 개념) → 애플리케이션 서버를 감추는 역할 ★★★★★
**Nginx, Apache, Squid가 이를 지원함
클라이언트의 요청을 Proxy를 통해 받음
- 애플리케이션 서버를 직접 호출하는 것이 아니라 Proxy를 통해 호출
- A라는 회사가 고객들에게 제공하기 위한 example.com 서비스를 만듦
- 클라이언트가 example.com 서비스에 요청을 핢
- 리버스 프록시는 이 요청을 받아 내부 서버(WAS)에서 데이터를 받음
- 데이터를 받은 후 클라이언트에게 전달
Reverse Proxy의 역할 ★★★★★
- LB 1: 리버스 프록시 뒤에 여러 개의 WAS를 둠으로써, 요청을 분산시킴
- LB 2: End-Point 마다 호출 서버를 설정할 수 있어 역할에 따라 서버 트래픽 분산
- 보안 : 서버에 직접 접근하는 것을 막기 위해 DMZ 같은 네트워크에 리버스 프록시 구성
- 캐싱 : 포워드와 같음
아래 그림이 추가되어 더 이해하기 쉬울 것 같다.
GSLB에서 Reverse Proxy를 쓴다.
[DevOps] - GSLB, 트래픽이 높을 때 로드밸런싱하기
여기서부터는 Linux로 Proxy Server를 운영하는 예이다.
Proxy Server 운영
예시 Proxy Open source : squid
관련 설정 파일
/etc/squid/squid.conf
주요 파일 설정
acl : Access Control List, 모든 컴퓨터가 아닌 지정된 컴퓨터나 네트워크만 프록시 서버에 접근할 수 있도록 제한하는 구문
http_access : allow, deny 설정 가능 ( http 접근 허용 여부)
cache_dir : 캐시할 디스크를 지정
ufs : 일반적으로 사용되는 스퀴드용 파일 시스템 지정
/var/spool/squid : 캐시 디렉터리 지정
1000: 캐시할 데이터 공간을 지정 (MB)
16: 캐시에서 사용할 하부 디렉터리 개수
256: 앞의 16개 디렉터리 안에 다시 생성할 디렉터리 개수
visible_hostname : 네트워크 이름을 외부에 보이도록 허용할 지 여부
Squid : 기본 포트(3128)
차단한 웹사이트는 아래 디렉터리에서 지정할 수 있음
/etc/squid/blocked_sites
기본 설정 방법
#1
sudo vi /etc/squid/blocked_sites
#2
facebook.com
twitter.com
instagram.com
#3
sudo vi /etc/squid/squid.conf
#4
acl blocked_sites dstdomain "/etc/squid/blocked_sites"
http_access deny blocked_sites
#5
sudo systemctl restart squid
#6 접속 시 403 Error
참고 링크
https://www.jscape.com/blog/forward-proxy-vs-reverse-proxy
http://www.ktword.co.kr/test/view/view.php?m_temp1=1829\
https://www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html
'컴퓨터(Computer Science) > 네트워크, Network' 카테고리의 다른 글
Dedicated Game Server (1) | 2022.12.07 |
---|---|
NAT와 포트포워딩의 차이 (0) | 2022.11.27 |
SSL의 동작방식 (0) | 2022.10.10 |
소켓 프로그래밍, Socket Programming (0) | 2022.09.03 |
네트워크 바이트 오더 [네트워크] (0) | 2021.10.01 |