웹사이트 검색

Debian 11에서 개인 연결을 위해 Squid 프록시를 설정하는 방법


소개

프록시 서버는 최종 사용자와 인터넷 리소스 간의 게이트웨이 역할을 하는 일종의 서버 응용 프로그램입니다. 프록시 서버를 통해 최종 사용자는 개인 정보 보호, 보안 및 캐싱을 비롯한 다양한 목적을 위해 웹 트래픽을 제어하고 모니터링할 수 있습니다. 예를 들어 프록시 서버를 사용하여 자신의 IP 주소가 아닌 다른 IP 주소에서 웹 요청을 할 수 있습니다. 또한 프록시 서버를 사용하여 관할권마다 웹이 어떻게 다르게 제공되는지 조사하거나 감시 또는 웹 트래픽 제한 방법을 피할 수 있습니다.

Squid는 안정적이고 대중적인 오픈 소스 HTTP 프록시입니다. 이 자습서에서는 Debian 11 서버에서 HTTP 프록시를 제공하도록 Squid를 설치 및 구성합니다.

전제 조건

이 가이드를 완료하려면 다음이 필요합니다.

  • Debian 11 서버 및 sudo 권한이 있는 루트가 아닌 사용자. Debian 11 가이드로 초기 서버 설정에서 이러한 권한을 가진 사용자를 설정하는 방법에 대해 자세히 알아볼 수 있습니다.

이 자습서에서는 도메인 이름 your_domain을 사용하지만 이를 자신의 도메인 이름 또는 IP 주소로 대체해야 합니다.

1단계 - Squid 프록시 설치

Squid에는 개별 사용자의 아웃바운드 트래픽을 라우팅하는 것 외에 많은 사용 사례가 있습니다. 대규모 서버 배포의 맥락에서 분산 캐싱 메커니즘, 로드 밸런서 또는 라우팅 스택의 다른 구성 요소로 사용할 수 있습니다. 그러나 일반적으로 프록시 서버와 관련된 서버 트래픽을 수평으로 확장하는 일부 방법은 애플리케이션의 더 많은 구성 요소를 배포하는 Kubernetes와 같은 컨테이너화 프레임워크에 의해 널리 보급되었습니다. 동시에 프록시 서버를 사용하여 개인 사용자로서 웹 요청을 리디렉션하는 것이 개인 정보 보호를 위해 점점 더 대중화되고 있습니다. 이는 낮은 우선 순위 유지 관리 모드에서 수십 개의 기능이 있는 것처럼 보일 수 있는 오픈 소스 프록시 서버로 작업할 때 염두에 두는 데 도움이 됩니다. 프록시의 사용 사례는 시간이 지남에 따라 변경되었지만 기본 기술은 그렇지 않습니다.

루트가 아닌 사용자로 다음 명령을 실행하여 패키지 목록을 업데이트하고 Squid 프록시를 설치하십시오.

  1. sudo apt update
  2. sudo apt install squid

Squid는 자동으로 백그라운드 서비스를 설정하고 설치 후 시작합니다. 서비스가 제대로 실행되고 있는지 확인할 수 있습니다.

  1. systemctl status squid.service
Output
● squid.service - Squid Web Proxy Server Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-12-15 21:45:15 UTC; 2min 11s ago

기본적으로 Squid는 클라이언트가 이 서버 외부에서 연결하는 것을 허용하지 않습니다. 이를 활성화하려면 /etc/squid/squid.conf에 저장된 구성 파일을 일부 변경해야 합니다. nano 또는 선호하는 텍스트 편집기에서 엽니다.

  1. sudo nano /etc/squid/squid.conf

Squid의 기본 구성 파일은 매우 길고, 줄의 시작 부분에 #를 넣어 일시적으로 비활성화된 엄청난 수의 옵션을 포함하고 있습니다. 주석. 편집할 줄을 찾기 위해 파일을 검색하고 싶을 것입니다. nano에서는 Ctrl+W를 누르고 검색어를 입력하고 Enter를 누른 다음 Alt+를 반복해서 눌러 수행합니다. W 필요한 경우 해당 용어의 다음 인스턴스를 찾습니다.

http_access deny all 문구가 포함된 줄로 이동하여 시작합니다. Squid의 기본 액세스 규칙을 설명하는 텍스트 블록이 표시되어야 합니다.

. . . 
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all
. . . 

여기에서 현재 동작을 볼 수 있습니다. – localhost가 허용됩니다. 다른 연결은 그렇지 않습니다. 이러한 규칙은 순차적으로 구문 분석되므로 이 구성 블록의 맨 아래에 모두 거부 규칙을 유지하는 것이 좋습니다. 이 규칙을 모두 허용으로 변경하여 누구나 프록시 서버에 연결할 수 있도록 할 수 있지만 아마도 그렇게 하고 싶지 않을 것입니다. 대신 다음과 같이 자신의 IP 주소를 포함하는 줄을 http_access allow localhost 위에 추가할 수 있습니다.

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost

  • acl은 권한 정책에 대한 일반적인 용어인 액세스 제어 목록을 의미합니다.
  • 이 경우 localnet은 ACL의 이름입니다.
  • src는 이 ACL, 즉 귀하의 IP 주소에서 요청이 시작되는 위치입니다.

로컬 IP 주소를 모르는 경우 어디에서 액세스했는지 알려주는 What's my IP와 같은 사이트로 이동하는 것이 가장 빠릅니다. 변경한 후 파일을 저장하고 닫습니다. nano를 사용하는 경우 Ctrl+X를 누른 다음 메시지가 표시되면 Y를 누른 다음 Enter를 누르십시오.

이 시점에서 Squid를 다시 시작하고 연결할 수 있지만 먼저 보안을 유지하기 위해 더 많은 작업을 수행할 수 있습니다.

2단계 — 오징어 확보

대부분의 프록시와 프록시에 연결하는 대부분의 클라이언트 측 앱(예: 웹 브라우저)은 여러 가지 인증 방법을 지원합니다. 여기에는 공유 키 또는 별도의 인증 서버가 포함될 수 있지만 일반적으로 일반 사용자 이름-비밀번호 쌍이 필요합니다. Squid를 사용하면 내장된 Linux 기능을 사용하여 IP 주소로 프록시에 대한 액세스를 제한하는 추가 또는 대체 단계로 사용자 이름-비밀번호 쌍을 만들 수 있습니다. 이를 위해 /etc/squid/passwords라는 파일을 만들고 Squid의 구성을 가리킵니다.

먼저 Squid가 좋아하는 암호 생성기에 액세스하려면 Apache 프로젝트에서 일부 유틸리티를 설치해야 합니다.

  1. sudo apt install apache2-utils

이 패키지는 새 Squid 사용자의 비밀번호를 생성하기 위해 사용할 수 있는 htpasswd 명령을 제공합니다. Squid의 사용자 이름은 어떤 식으로든 시스템 사용자 이름과 겹치지 않으므로 원하는 경우 로그인한 것과 동일한 이름을 사용할 수 있습니다. 암호를 추가하라는 메시지도 표시됩니다.

  1. sudo htpasswd -c /etc/squid/passwords your_squid_username

이렇게 하면 Squid에서 인증 소스로 사용되는 /etc/squid/passwords에 새 암호의 해시와 함께 사용자 이름이 저장됩니다. 나중에 파일을 cat하여 어떻게 보이는지 확인할 수 있습니다.

  1. sudo cat /etc/squid/passwords
Output
sammy:$apr1$Dgl.Mtnd$vdqLYjBGdtoWA47w4q1Td.

사용자 이름과 암호가 저장되었는지 확인한 후 새 /etc/squid/passwords 파일을 사용하도록 Squid 구성을 업데이트할 수 있습니다. nano 또는 선호하는 텍스트 편집기를 사용하여 Squid 구성 파일을 다시 열고 다음 강조 표시된 줄을 추가합니다.

  1. sudo nano /etc/squid/squid.conf
…
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
http_access allow authenticated
# And finally deny all other access to this proxy
http_access deny all
…

이러한 추가 지시문은 basic_ncsa_auth 메커니즘을 사용하여 구문 분석할 수 있는 암호 해시에 대해 새 암호 파일을 체크인하고 프록시에 액세스하려면 인증을 요구하도록 Squid에 지시합니다. 이 또는 다른 인증 방법에 대한 자세한 내용은 Squid의 문서를 검토할 수 있습니다. 그런 다음 마지막으로 구성 변경 사항으로 Squid를 다시 시작할 수 있습니다. 완료하는 데 약간의 시간이 걸릴 수 있습니다.

  1. sudo systemctl restart squid.service

ufw를 사용하는 경우 방화벽에서 포트 3128을 여는 것을 잊지 마십시오.

  1. sudo ufw allow 3128

다음 단계에서는 마지막으로 프록시에 연결합니다.

3단계 — Squid를 통한 연결

Squid 서버를 시연하기 위해 다양한 유형의 웹 요청을 만드는 데 널리 사용되는 curl이라는 명령줄 프로그램을 사용합니다. 일반적으로 주어진 연결이 이상적인 환경에서 브라우저에서 작동하는지 여부를 확인하려면 항상 먼저 curl로 테스트해야 합니다. 이를 위해 로컬 컴퓨터에서 curl을 사용하게 됩니다. curl은 모든 최신 Windows, Mac 및 Linux 환경에 기본적으로 설치되므로 모든 로컬 셸을 열어 이 명령을 실행할 수 있습니다.

  1. curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 http://www.google.com/

-x 인수는 curl에 프록시 서버를 전달하며, 이 경우 http:// 프로토콜을 사용하여 이 서버에 대한 사용자 이름과 암호를 지정합니다. 그런 다음 google.com과 같이 작동이 알려진 웹사이트에 연결합니다. 명령이 성공하면 다음 출력이 표시됩니다.

Output
* Trying 138.197.103.77... * TCP_NODELAY set * Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0) * Proxy auth using Basic with user 'sammy' > GET http://www.google.com/ HTTP/1.1

추가 구성 변경 없이 Squid 프록시를 사용하여 https:// 웹사이트에 액세스할 수도 있습니다. 이들은 클라이언트와 서버 간의 SSL을 유지하기 위해 CONNECT라는 별도의 프록시 지시문을 사용합니다.

  1. curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
Output
* Trying 138.197.103.77... * TCP_NODELAY set * Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0) * allocate connect buffer! * Establish HTTP proxy tunnel to www.google.com:443 * Proxy auth using Basic with user 'sammy' > CONNECT www.google.com:443 HTTP/1.1 > Host: www.google.com:443 > Proxy-Authorization: Basic c2FtbXk6c2FtbXk= > User-Agent: curl/7.55.1 > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 Connection established < * Proxy replied OK to CONNECT request * CONNECT phase completed!

curl에 사용한 자격 증명은 이제 새 프록시 서버를 사용하려는 모든 위치에서 작동합니다.

결론

이 자습서에서는 오버헤드가 거의 또는 전혀 없는 프록시 트래픽을 위해 널리 사용되는 오픈 소스 API 엔드포인트를 배포하는 방법을 배웠습니다. 많은 애플리케이션에는 수십 년 전의 프록시 지원(종종 OS 수준에서)이 내장되어 있어 이 프록시 스택을 매우 재사용할 수 있습니다.

다음으로 다양한 유형의 웹 트래픽을 프록시하기 위해 Squid와 함께 실행할 수 있는 SOCKS 프록시인 Dante를 배포하는 방법을 배울 수 있습니다.

프록시 서버의 가장 일반적인 사용 사례 중 하나는 서로 다른 글로벌 지역 간에 트래픽을 프록시하는 것이므로 다른 데이터 센터에서 이 구성을 복제하려는 경우 Ansible을 사용하여 서버 배포를 자동화하는 방법을 검토할 수 있습니다. .