본문 바로가기
Cloud/Google Cloud Platform

GCP에서 Squid를 이용한 Proxy 서버 설정 방법

by Kibua20 2022. 2. 13.

1. Proxy 서버란

Proxy 서버(proxy server )는 클라이언트를 대신해서 간접적으로 인터넷에 접속할 수 있는 중계기 역할을 하는 서버입니다.  예를 들어, 집에 있는 PC에서 google.com 서버의 웹 페이지 접속 시 중간에 proxy 서버를 거쳐가면 서버 입장에서는 접속 IP는 Proxy server에서 접속하는 것으로 인식합니다. 

 

인터넷 속도가 느린 시절에서는 Proxy 서버로 요청된 내용들을 '캐시'에 저장해 놓고, 동일한 웹 페이지에 재 접속 시 원격 서버 접속 대신 Proxy 서버의 캐시를 전송하여 웹 접속 시간을 줄이는 방법으로 사용되었습니다.  이는 외부와의 트래픽을 줄여 네트워크 병목 현상을 방지하는 효과도 얻을 수 있습니다.   

 

GCP에서는 Proxy 서버의 활용은 외부 네트워크 접속 access 권한을 제어하거나, 여러 로컬 IP를 묶어 하나의 공용(외부) IP 주소를 사용하여 비용을 줄이고자 하는 경우에도 유용합니다.​  

 

Proxy 서버의 사용 목적은 잠재적으로 다양합니다. 대표적은 활용 예를 다음과 같습니다.  아이러니하게도 회사 내 보안 정책 적용을 위해서 사용할 수 있고, 반대로 보안 정책을 회피하기 위해서도 사용 가능합니다. 

  • Cache로 성능 개선: Proxy Server의 캐시를 사용하여 웹 Proxy 웹 서버로부터 웹 페이지 캐시로 저장하여 접속 속도 개선. 최근 인터넷 속도 개선으로 접속 속도는 개선은 크게 의미는 없습니다.
  • IP 익명성 보장: 컴퓨터의 IP는 개인정보입니다. Proxy 서버를 사용해서 익명성을 보장, IP 역추적을 피하기 위해서 사용합니다.  Proxy 를 사용하더라도 고급 기술을 사용하면 IP 역 추적이 가능하기 때문에 익명성은 100% 보장되지 않습니다. 
  • IP 지역 우회:  Proxy 서버를 외국에 두고 접속하면 컴퓨터의 접속 지역을 외국으로 인식합니다.  지역 제한이 있는 경우 우회 사용
  • 회사 내 보안 회피: Proxy 서버를 통해서 회사 보안 정책을 우회할 수 있습니다. Proxy 서버에는 https 443 port를 사용하여 Request 하기 때문에 보안 팀에서는 일반적인 Request와 구분이 쉽지 않습니다. 
  • 외부 접속 권한 제어 : 사용 기록 확인, 네트워크 서비스나 콘텐츠로의 접근 정책을 적용하기 위해. (이를테면 원치 않는 사이트를 차단),  사용률을 기록하고 검사하기 위해 (이를테면 회사는 인터넷 이용을 파악)

 

2. Proxy 서버의 종류:  Forward Proxy vs Reverse Proxy 

Proxy 서버의 종류는 Forward Proxy와 Reverse Proxy 가 있습니다. 일반적으로 개인 목적으로 사용하는 Proxy는 Forward Proxy로 Client 인터넷의 접속 요청을 Proxy가 대신하여 원격 서버의 웹페이지를 요청합니다. 서버 입장에서는 Proxy가 접속한 것으로 인식합니다.  Reverse Proxy는 Backend의 서버의 IP를 숨기 위해서 사용되며 Proxy가 서버의 Respose를 대신 전달합니다.   상세 설명은 동영상 설명을 참고해주세요. 

 

  • Forward Proxy:  클라이언트의 IP 주소를 숨김. Client에서 Proxy 서버에 Request 요청
  • Revere  Proxy: 서버의 IP 주소를 숨김. 서버의 Response를 Proxy 서버를 통해서 전달

 

 

출처:   www.imperva.com/learn/performance/reverse-proxy/

 

 

출처: youtu.be/ozhe__GdWC8

 

3. Proxy 서버의 동작 방식:  Transparent Proxy vs Anonymous Proxy 

 

Proxy 서버에도 동작 방식은 Http 헤더의 VIA와 X_FORWARD_FOR를 설정 방법에 따라서 다음과 같은 4가지 유형이 있습니다.  (출처: 나무위키)

  • Transparent Proxy : HTTP 헤더의 VIA, X_FORWARD_FOR 영역에 원래 IP를 전달
  • Simple anonymous Proxy : HTTP 헤더의 VIA, X_ FORWARD_FOR 영역에 Proxy 서버의 IP를 저장해서 Proxy임을 알린다. 원래 IP는 제공되지 않는다.
  • Distorting Proxy : HTTP 헤더의 VIA 영역에는 자신의 IP, X_FORWARD_FOR 영역에는 랜덤으로 생성된 값을 박아서 자신이 Proxy임을 알린다. 원래 IP는 제공되지 않는다.
  • High Annonymity Proxy(또는 Elite) : Proxy를 사용하지 않는 것과 동일하게 동작한다. HTTP 헤더의 VIA, X_ FORWARD_FOR 영역을 IP를 저장하지 않는다.   Proxy임을 숨긴다. (http 표준은 아님)

Transparent Proxy 설정 시 Http Header  예제:

Proxy Server를 통해서 Web server에서 Http 헤더를 확인하면 아래와 같이 Via와 X-Forwarded-For에 원본 IP 설정해서 전달됩니다.   단, Proxy 서버를 익명인 Elite로 설정하는 경우 Via와 X-Forwarded-For 없이 서버에 전달됩니다. 

If-Modified-Since: Fri, 09 Oct 2020 00:10:17 GMT
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) ... 중략....Chrome/85.0.4183.121 Safari/537.36
Accept: text/html,application/xhtml+xml,.. 중략.... application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
If-None-Match: "1602202217.8904505-7256-3328445520"
Host: ***.***.***.***      → 서버 주소
Via: 1.1 ubuntu18-gcp (squid/3.5.27) →  Proxy 사용 중임을 알 수 있음
X-Forwarded-For: 112.***.***.***        →  자신의 IP 주소
Cache-Control: max-age=0
Connection: keep-alive

 

4. GCP에서 Squid를 사용한 Proxy 서버 설정

GCP에서 Proxy 서버 설정에 대한 전체적인 flow는 아래 그림과 같습니다.  앞서 설명한 내용의 Fowward Proxy 서버로 구성하고, 설치 툴로는 'Squid'를 사용할 예정입니다.  PC (윈도우/ 우분투)에서 GCP 방화벽을 거쳐 Proxy 서버에  데이터 패킷을 전달하고 인터넷 망으로 접속할 예정입니다.  각 항목별로 아래와 같은 단계를 거쳐 설명합니다.  

 

  1. GCP VM에 Squid 설치 및 접속 권한 설정 (각 VM 단위 보안 정책 설정임)
  2. GCP에서 방화벽 설정 (가상 네트워크 단위로 설정 가능)
  3. Client (우분투, Windows 10, 안드로이드 스마트폰)에서 Proxy 연결 설정
  4. Proxy 서버 동작 확인

 

GCP에서 Squid를 사용한 Proxy 서버 설정

 

4.1. Squid 설치

GCP VM에 SSH로 접속해서 apt로 squid를 설치합니다.  설치 버전 및 $ systemctl status squid와  $ netstat -antp 명령어로 squid가 정상 동작하는지 확인합니다.  특히 netstat 은 3128 포트를 listen하도록 설정되어 있어야 합니다.

 

$ sudo apt install squid

 

Squid 설치

 

$ squid -version

 

Squid 버전 확인

 

$ sudo systemctl status squid

 

squid 서비스 동작 확인

 

 

 $ netstat -antp

 

Proxy server squid 에서 3128 포트 사용

 

 

 

 

4.2.  Squid 환경 파일 수정

Squid를 정상적으로 설치했으면 환경 파일을 수정해야 합니다.   Squid는 환경 파일은 /etc/squid/squid.conf 이며, 기본 설정 값은 squid.conf에 rule이 없으면 접속을 허용하지 않습니다.  Squid의 여러 설정 값 중에서 http_port, http_access, request_header를 설정해야 합니다.   세부적인 설정 내용은 링크1링크2를 참고해주세요. 

 

Squid 기본 설정:   " Deny, unless rules exist in squid.conf.​"

#http_port 3128  → Squid Proxy 서버의  서비스 포트를 지정해주는 부분입니다. 변경 시 주석을 풀고 값을 변경할 수 있습니다.

http_access deny all  Squid Proxy 서버의 사용 권한.  기본 값을 모두 거부함

request_header_access   → Squid Proxy 서버에서 http request 전달 시 header 추가 여부.  기본 값을 모두 허용함

http_access 기본 설정 확인

$ cat  /etc/squid/squid.conf​ | grep http_access

 

 

 

http_access allow all로 수정합니다. 이는 모든 네트워크에서 proxy를 허용하는 것입니다.  보안 측면에서는 squid에서는 모든 리소스에 대해서 접속을 허용하고 GCP에 방화벽에서 보안 설정을 할 수 있습니다. 

 

$ vi /etc/squid/squid.conf​ 

http_access deny all을 커멘트 처리하고  http_access allow all로 수정합니다.

 

 

High Annonymity Proxy(또는 Elite)로 설정을 하는 경우에는 아래와 같은 조건을 추가합니다. (default는 모두 허용되어 있음)

 

$ vi /etc/squid/squid.conf​ 

request_header_access From deny all

request_header_access Referer deny all

request_header_access User-Agent deny all

request_header_access X-Forwarded-For deny all

request_header_access Via deny all

 

4.3 GCP에서 방화벽 설정

Squid에서는 모든 IP에 대해서 접속을 허용했고, GCP 방화벽에 proxy server 프로토콜의 방화벽 규칙을 추가하여 외부 접속 권한을 조정할 수 있습니다.  VM에 접속해서 VPC 네트워크 → 방화벽 →방화벽 규칙 만들기를 선택하여 방화벽 규칙을 추가합니다.

 

 

GCP에서 방화벽 설정

 

방화벽 규칙 만들기 메뉴에서 1) 방화벽 이름 입력, 2) 수신 (inbound) 방향, 3) IP 소스 범위 확정 (0.0.0.0/0 모든 IP 허용임 or 특정 IP 설정), 4) tcp/udp의 3128 포트 허용으로 설정하여 방화벽 규칙을 추가합니다.  특정 IP만 접속을 허용하는 경우에 3) IP 소스 범위에 IP address를 추가하면 특정 IP만 접속을 허용합니다. 

 

 

GCP 방화벽 규칙 만들기

 

5. Client에서 Poxy 연결 설정

우분투와 Windows 10, 안드로이드 스마트 폰에 각각 네트워크 Proxy를 설정합니다. 

 

  • 우분투:  시스템 설정 메뉴 > 네트워크 > 네트워크 프록시 : 수동 설정으로 변경하고 Proxy 서버의 IP와 포트 입력
  • 윈도우10: 시스템 설정 > 프록시 설정 :  프록시 서버 설정을 on으로 변경하고 Proxy 서버의 IP와 포트를 입력
  • Android 폰: WiFi 설졍 > SSID 편집 > 고급 설정에서  Proxy 서버 주소를 입력

 

 

우분투에서 네트워크 Proxy 설정
윈도우에서  네트워크 Proxy 설정
안드로이드 폰에서 네트워크 Proxy 설정 (SSDI 고급 편집 메뉴)

 

6. Poxy Server 동작 확인

공인 IP를 확인할 수 있는 https://ko.infobyip.com/​에 접속해서 접속 PC의 공인 IP 주소를 확인합니다.  네트워크 Proxy를 설정하는 경우에는 IP 가 미국 ( Oregon, Dalles)로 인식되고, Proxy server의 IP 주소로 인식되는 것을 확인할 수 있습니다. 

 

Network Proxy 동작 확인

 

 

관련 글:

[개발환경/Oracle Cloud] - 오라클 클라우드 '평생' 무료 VM 만들기 (Google Cloud 무료 조건 비교)

[개발환경/Web Server] - 우분투 20.04에서 lighttpd Web Server 설치 (Embedded용으로 활용 가능)

[개발환경/Web Server] - 우분투 20.04에서 Apache와 Tomcat 완전 삭제 방법

[개발환경/Google Cloud Platform] - GCP(Google Cloud) 로컬 PC에서 VM에 로그인 없이 바로 SSH로 바로 접속: 다른 SSH 클라이언트 사용 및 SSH Key 등록

[개발환경/Google Cloud Platform] - GCP(Google Cloud) 하드 디스크 추가하기 (영구 디스크는 30GB까지 무료)

[개발환경/Google Cloud Platform] - Google Cloud Platform을 활용하여 평생 '무료' PC 만들기

[개발환경/Google Cloud Platform] - GCP(Google Cloud) 방화벽 설정: 프로토콜과 포트를 사용 허용 또는 거부하기

[개발환경/Oracle Cloud] - Oracle Cloud 방화벽 설정 (http/https 특정 포트 열기)




댓글15

  • 좋은  정보 얻고 갑니다~ 전 신입 블로거라 아는게 별로 없어 정보 공유하고 싶어 구독신청합니다~ 맞구독 해주시면 진심으로 감사드립니다^^;
    답글

  • ㅇㅇ 2021.01.16 09:09

    오오 설명 잘하신다 잘 보고 가요
    답글

  • Onex88 2021.12.04 04:36

    혹시 안되는데 이유를 아시나요..? 정말 하나하나 다 따라했고 아무것도 틀린 게 없는데 왜 안되는질 모르겠네요... 이것 말고도 Squid를 사용하는 강좌 수십개를 다 따라해봤는데 어떻게 하나같이 다 되지를 않습니다 ㅠㅠ
    답글

    • Favicon of https://kibua20.tistory.com BlogIcon Kibua20 2021.12.05 19:27 신고

      dmesg로 얻은 로그가 없는지요? 안될 수 이유는 너무 많아서 로그를 확인해야 합니다.

    • BlogIcon Onex88 2022.01.08 02:32

      dmesg로 로그 확인해봐도 Squid라는 단어가 뜨지 않네요 ㅠㅠ dmesg를 어느 시점에서 해봐야할까요??

    • Favicon of https://kibua20.tistory.com BlogIcon Kibua20 2022.01.08 20:15 신고

      squid service (daemon)이 올라 오지 않는 것인지? 아니면 Cloud Network 의 port 가 방화벽으로 막혀 있는 것인 확인을 해보세요.

    • BlogIcon Onxe88 2022.01.09 01:15

      네, dmesg | gref squid로 확인해봐도 squid라는 단어는 없네요... 네트워크 관리자가 Windows 환경에서 VPN/Proxy 프로토콜을 차단하긴 했는데 만약 그랬다면 안될까요?

    • Favicon of https://kibua20.tistory.com BlogIcon Kibua20 2022.01.09 19:58 신고

      squid 설치한 vm 에서 아래 명령어 실행하면 어어떻게 나오는지요?

      $ sudo systemctl status squid

  • con 2022.02.12 22:23

    squid 환경파일 설정 부분의 링크1,2가 연결되지 않는데 혹시 사이트 주소 알수 있을까요?
    답글

  • Favicon of https://yeejooho.tistory.com BlogIcon yeejooho 2022.08.14 04:38 신고

    急/미공습 경계 경보 발령 하나(1)


    갠적인 사안으로,지난 또(라이)럼프 미의사당 폭력사태의 배후이고 국정문란의 배후로 지목한 미 똥성지하컬트(bi-sexual포함 the same-sex marriage와는 관계가 없거나 커밍아웃 못하는@)범죄 집단의 괴수로 개페이오 前 국무(서자/똥성sex파트너도 동일한 극단적 난교형태로 추정 ㅠ)를 지목한 바로 최소한 그 악마들의 만행은 오제이 심슨 케이스 싯점정도로 추급되고 목하 전세계 똥테러리스트 주범ㆍ괴수로서 결코 사랑이라고는 전혀 느껴지지도 확인 할 수있는 바도 아니면서 개페이오 하노이 회담( '19년 2/28)테러의 주동자(a pure evil)는 임기 막판에 교황청까지 찾아가는-결국 불발로 끝났지만-대담함까지 보인 바가 있답니다. 쩝! 글쎄요.


    그리고 미국 현대사의 큰 고비인 대공황기(the great depression)에 뉴딜정책으로 대변되는 미 경제 회복 시기 이후 줄곧 거시경제 정책의 기초가된 케인즈 학파(이론의 창시자인 존 메이너드 케인즈 1883-1946 영국경제학자)의 이론도 논자는 지금 이론을 제기하고자 합니다. 왜냐면 케인즈 본인이 상당히 유명한 똥성애자로서 단지 말년에 천생연분 젊은 배우자를 만난후 정상적(straight)결혼 생활을 영유하다 죽은 것으로 알려져 있어요 ㅎㅎ 즉 지금 미국의 총생산(GNP등 지표로@)측면서 원유ㆍ식량등 USA 총경제-총량이 전세계의 4/1정도로 경제블록의 다양화로 미제국주의 위세가 크게 기조부터 흔들리곤 있지만 아직은 기축 달러화를 중심으로 한 세계2차대전을 전후한 국제질서에서 케인즈 학파의 경제이론이 중시되기 때문입니다.


    여하튼 현재 파악되는 빙산의 일각인 미똥성테러의 주체내지는 악당ㆍ악마집단의 뿌리는 상당히 깊고도 광범위한 규모로 가히 가능한 공포 그 자체로 최악의 추산/추정도 가능합니다만. 똥테러 미제국주의 앞잽이와 관련 사안이 더 명철하게 파악되는 대로 우리의 생존과 자결ㆍ자립에 중차대함이 분명한,계속되는 보고 올릴 것을 약속드리며 타락한 자유우방 미국을 고발합니다.나뻐요,정말. ㅠㅠ똥성(타도)박멸! 투쟁!! 


    잘 보고감다. 블친님 정치가 아주 잘못됐뜸.

    왕창 썩은 미쿡 망합니다. 시간 문제입니다. 똥성  미쿡은   양아치 일본의 배후로 우린 또 "젖되는" 겁니당! 일본 타도!양키 고홈이랑께유 ㅠㅡ똥성테러리스트의 날강도 짓을 고발하는 "분기탱천한" 똥성 타도 야전사령관 삼가 올림 (♡꾸벅)^^*
    답글

  • Favicon of https://yeejooho.tistory.com BlogIcon yeejooho 2022.08.14 04:38 신고

    닥똥년 왕레즈개와 공범으로 똥틀러 마이크 폼페이오 前 美국무장관 악마의 최악 지구멸망의 시나리오를 공개함다; 미제국이 망한당께라~핵쓰레기를 태평양에 기습적 무단 방류 담합한 양키ㆍ몽키를 환경테러/오염 전쟁 선포한 악의 축들로 규탄함다 Yankee go home!@
    답글

  • Favicon of https://yeejooho.tistory.com BlogIcon yeejooho 2022.08.14 04:38 신고

    Refrain❤💟해피 데이🇰🇷나뻐요. 미꾹 반드시 망합니다 ㅎㅎ 그간 십년가까이 똥테러로 고문을 당했는데 최근 작년 미대선후 미쿡 똥틀러 똥개인/똥성애 가이세들은 인간도 아닙니당. 한시도 가만히 있질 못/않하고 분탕 ㆍ똥질입니다. 이젠 헤커 수준으로 기능적 커서,클릭 테러뿐아니라 댓글삭제 포함 내용을 조작 날조하고 심지어 ctrl+v내용을 뜨악하게 바꾸다가 종내는 눈속임등으로 순리ㆍ논리 구조를 망가뜨려 신체가 마비되는 지경에 이르게까지 합니다. 치가 떨립니다. 나뻐요 정말 ㅠㅠ(드뎌 인터넷뱅킹으로 돈까지 강탈!Let it go/다 가져감,윽)포기한 검새 미국식 돼지머리 김회재같은 썩어빠진 친일 똥성개나 판치고 타락한 극우파 미쿡은 날강도 집단입니다 ㅡ 충남 부여서 똥성타도 야전사령관 삼가 올림 ♡♡^^*


    PS. ㅠㅠ ㅠㅠ🏴‍☠️🏴‍☠️🇱🇷🏴‍☠️ㅠㅠㅠ ㅠ나쁜 러시아 우크라이나 침공은ㅠ ㅠㅠㅠㅠㅠ ㅠㅠㅠㅠ ㅠㅠㅠㅠㅠ 광주 (금지된 대인지뢰,백린탄,집속탄 ㆍ진공폭탄 ==납탄등'80년)유럽버젼 ㅠㅠㅠㅠㅠㅠㅠ ㅠㅠㅠㅠㅠ 🌋🏴‍☠️💔도리 도리 도리 썩두 악질 반동 친일우파 까꿍 나가(난이李가임)도적년들! 일본 타도! 미제국주의 박살!도리 도리 도리 썩두 악질 반동 친일우파 까꿍 ~ 나갓! 나가시오(난이李가임)도적년들! 일본 타도! 미제국주의 박살!
    답글

  • Favicon of https://yeejooho.tistory.com BlogIcon yeejooho 2022.08.14 04:39 신고

    잘보고갑니다 ㅎㅎ 누리호2차 성공적 발사&다누리 런칭을 경하함다 즉,

    사랑하는 형/~♥님 3/29청주 산부인과 방화사건은 ㅡ 미 제국주의의 일당 똥개들의 글로벌 테러를 필두로 ㅡ '18년 밀양 세종병원 화재사건 '17년 여수수산시장(1/15)화재와 더불어 같은 해 년말 동지경(12/21) 제천 찜질방 방화는 유사한 똥성 범죄로 겹쳐진 재앙이였음을 주장합니다. 그 이전 화재로는 '15년初 의정부 화재(1/10)는 십알단이 아닌 똥테러일 가능성이 농후합니다.


    단 최근 대선 기간만 해도 크고 작은 산불이나 겨울철 화재가 많이 발생하고 방화 여부등이 수사등으로 밝혀지기도 하지만 그런 경우와는 다른 범죄 백과사전적으로 무고한 인명ㆍ물적 피해를 야기하는 인면수심의 "뜨악한" 범죄들인 방화입니다. (♡꾸벅)^^*
    답글