웹사이트 검색

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


소개

프록시 서버는 웹 트래픽을 캐싱하거나 난독화하는 유용한 방법입니다. 이는 중개자에 대한 연결을 오프로드하여 웹 요청이 보이는 것과 다른 인바운드 또는 아웃바운드 주소에서 제공될 수 있음을 의미합니다. 일반 최종 사용자의 경우 이는 일반적으로 자신의 IP 주소가 아닌 다른 IP 주소에서 웹 요청을 할 수 있음을 의미합니다. 이것은 웹이 관할권마다 다르게 제공되는 방식을 연구하거나 일부 감시 방법 또는 웹 트래픽 제한을 피하는 등 다양한 목적에 도움이 될 수 있습니다.

많은 타사 프록시 서비스 공급자가 있지만 신뢰할 수 없습니다. 특히 프록시 사용의 기본 목표가 인터넷 서비스 공급자로부터 트래픽을 라우팅하는 것이라면 상업용 프록시 공급자가 실제로 덜 안전하거나 실제로 법적 구속력이 적습니다.

Squid는 안정적이고 대중적인 오픈 소스 HTTP 프록시입니다. 이 튜토리얼에서는 Rocky Linux 9에서 HTTP 프록시를 제공하도록 Squid를 설치 및 구성합니다.

전제 조건

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

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

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

1단계 - Squid 프록시 설치

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

squid 패키지는 Rocky Linux의 기본 패키지 소스에서 사용할 수 없습니다. 대신 EPEL 저장소를 통해 Squid를 설치할 수 있습니다. EPEL은 Rocky Linux와 같은 RHEL 기반 배포판에서 가장 널리 사용되는 추가 패키지 저장소이며 공식 소스에서 제공하지 않는 여러 신뢰할 수 있는 타사 패키지를 포함합니다.

Rocky Linux EPEL 리포지토리를 추가하려면 dnf 패키지 관리자를 사용하여 dnf install epel-release를 실행합니다.

  1. sudo dnf install epel-release

다음으로 dnf를 사용하여 Squid 설치를 진행할 수 있습니다.

  1. sudo dnf install squid

Rocky Linux에서 Squid는 설치 후 자동으로 시작되지 않습니다. systemctl status를 사용하여 서비스가 생성되었지만 비활성 상태인지 확인할 수 있습니다.

  1. systemctl status squid.service
Output
● squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disa> Active: inactive (dead) Docs: man:squid(8)

Squid를 활성화하기 전에 /etc/squid/squid.conf에 저장된 구성 파일을 일부 변경해야 합니다. Rocky Linux 9와 함께 제공되는 기본 텍스트 편집기는 vi입니다. vi는 매우 강력한 텍스트 편집기이지만 사용 경험이 부족한 사용자에게는 다소 둔감할 수 있습니다. Rocky Linux 9 서버에서 구성 파일 편집을 용이하게 하기 위해 nano와 같은 보다 사용자 친화적인 편집기를 설치할 수 있습니다.

  1. sudo dnf install nano

nano 또는 선호하는 텍스트 편집기에서 Squid 구성 파일을 엽니다.

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

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

. . . 
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# 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 dnf install httpd-tools

이 패키지는 새 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/lib64/squid/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 start squid.service

systemctl status를 다시 사용하여 제대로 시작되었는지 확인할 수 있습니다.

  1. sudo systemctl status squid.service
Output
● squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disa> Active: active (running) since Fri 2022-10-28 19:17:04 UTC; 21s ago Docs: man:squid(8) Process: 263480 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/> Main PID: 263485 (squid) Tasks: 3 (limit: 11152) Memory: 15.7M CGroup: /system.slice/squid.service ├─263485 /usr/sbin/squid --foreground -f /etc/squid/squid.conf ├─263489 (squid-1) --kid squid-1 --foreground -f /etc/squid/squid.conf └─263490 (logfile-daemon) /var/log/squid/access.log Oct 28 19:17:03 rocky systemd[1]: Starting Squid caching proxy... Oct 28 19:17:04 rocky squid[263485]: Squid Parent: will start 1 kids Oct 28 19:17:04 rocky squid[263485]: Squid Parent: (squid-1) process 263489 star> Oct 28 19:17:04 rocky systemd[1]: Started Squid caching proxy.

firewalld를 사용하는 경우 포트 3128에 대한 규칙을 추가하여 Squid가 방화벽을 통과하도록 허용하는 것을 잊지 마십시오.

  1. sudo firewall-cmd --permanent --add-port=3128/tcp
  2. firewall-cmd --reload

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

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 165.227.119.46:3128... * Connected to 165.227.119.46 (165.227.119.46) port 3128 (#0) * Proxy auth using Basic with user 'squid' > 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 165.227.119.46:3128... * Connected to 165.227.119.46 (165.227.119.46) port 3128 (#0) * allocate connect buffer * Establish HTTP proxy tunnel to www.google.com:443 * Proxy auth using Basic with user 'squid' > CONNECT www.google.com:443 HTTP/1.1 > Host: www.google.com:443 > Proxy-Authorization: Basic c3F1aWQ6c3F1aWQ= > User-Agent: curl/7.83.1 > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 Connection established < * Proxy replied 200 to CONNECT request * CONNECT phase completed

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

결론

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

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