Rocky Linux 8에서 개인 연결을 위해 Squid 프록시를 설정하는 방법
소개
프록시 서버는 웹 트래픽을 캐싱하거나 난독화하는 유용한 방법입니다. 이는 중개자에 대한 연결을 오프로드하여 웹 요청이 보이는 것과 다른 인바운드 또는 아웃바운드 주소에서 제공될 수 있음을 의미합니다. 일반 최종 사용자의 경우 이는 일반적으로 자신의 IP 주소가 아닌 다른 IP 주소에서 웹 요청을 할 수 있음을 의미합니다. 이것은 웹이 관할권마다 다르게 제공되는 방식을 연구하거나 일부 감시 방법 또는 웹 트래픽 제한을 피하는 등 다양한 목적에 도움이 될 수 있습니다.
많은 타사 프록시 서비스 공급자가 있지만 신뢰할 수 없습니다. 특히 프록시 사용의 기본 목표가 인터넷 서비스 공급자로부터 트래픽을 라우팅하는 것이라면 상업용 프록시 공급자가 실제로 덜 안전하거나 실제로 법적 구속력이 적습니다.
Squid는 안정적이고 대중적인 오픈 소스 HTTP 프록시입니다. 이 튜토리얼에서는 Rocky Linux 8에서 HTTP 프록시를 제공하도록 Squid를 설치 및 구성합니다.
전제 조건
이 가이드를 완료하려면 다음이 필요합니다.
- Rocky Linux 8 서버 및 sudo 권한이 있는 루트가 아닌 사용자. Rocky Linux 8 가이드로 초기 서버 설정에서 이러한 권한을 가진 사용자를 설정하는 방법에 대해 자세히 알아볼 수 있습니다.
이 자습서에서는 도메인 이름 your_domain을 사용하지만 이를 자신의 도메인 이름 또는 IP 주소로 대체해야 합니다.
1단계 - Squid 프록시 설치
Squid에는 개별 사용자의 아웃바운드 트래픽을 라우팅하는 것 외에 많은 사용 사례가 있습니다. 대규모 서버 배포의 맥락에서 분산 캐싱 메커니즘, 로드 밸런서 또는 라우팅 스택의 다른 구성 요소로 사용할 수 있습니다. 그러나 일반적으로 프록시 서버와 관련된 서버 트래픽을 수평으로 확장하는 일부 방법은 애플리케이션의 더 많은 구성 요소를 배포하는 Kubernetes와 같은 컨테이너화 프레임워크에 의해 널리 보급되었습니다. 동시에 프록시 서버를 사용하여 개인 사용자로서 웹 요청을 리디렉션하는 것이 개인 정보 보호를 위해 점점 더 대중화되고 있습니다. 이것은 낮은 우선 순위 유지 관리 모드에서 수십 가지 기능이 있는 것처럼 보일 수 있는 오픈 소스 프록시 서버로 작업할 때 염두에 두는 데 도움이 됩니다. 프록시의 사용 사례는 시간이 지남에 따라 변경되었지만 기본 기술은 그렇지 않습니다.
squid
패키지는 Rocky Linux의 기본 패키지 소스에서 사용할 수 없습니다. 대신 EPEL 저장소를 통해 Squid를 설치할 수 있습니다. EPEL은 Rocky Linux와 같은 RHEL 기반 배포판에서 가장 널리 사용되는 추가 패키지 저장소이며 공식 소스에서 제공하지 않는 여러 신뢰할 수 있는 타사 패키지를 포함합니다.
Rocky Linux EPEL 저장소를 추가하려면 dnf install epel-release
를 사용하십시오.
- sudo dnf install epel-release
다음으로 dnf
를 사용하여 Squid 설치를 진행할 수 있습니다.
- sudo dnf install squid
Rocky Linux에서 Squid는 설치 후 자동으로 시작되지 않습니다. systemctl status
를 사용하여 서비스가 생성되었지만 비활성 상태인지 확인할 수 있습니다.
- 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 8과 함께 제공되는 기본 텍스트 편집기는 vi
입니다. vi
는 매우 강력한 텍스트 편집기이지만 사용 경험이 부족한 사용자에게는 다소 둔감할 수 있습니다. Rocky Linux 8 서버에서 구성 파일 편집을 용이하게 하기 위해 nano
와 같은 보다 사용자 친화적인 편집기를 설치할 수 있습니다.
- sudo dnf install nano
nano
또는 선호하는 텍스트 편집기에서 Squid 구성 파일을 엽니다.
- 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 프로젝트에서 일부 유틸리티를 설치해야 합니다.
- sudo dnf install httpd-tools
이 패키지는 새 Squid 사용자의 비밀번호를 생성하기 위해 사용할 수 있는 htpasswd
명령을 제공합니다. Squid의 사용자 이름은 어떤 식으로든 시스템 사용자 이름과 겹치지 않으므로 원하는 경우 로그인한 것과 동일한 이름을 사용할 수 있습니다. 암호를 추가하라는 메시지도 표시됩니다.
- sudo htpasswd -c /etc/squid/passwords your_squid_username
이렇게 하면 Squid에서 인증 소스로 사용되는 /etc/squid/passwords
에 새 암호의 해시와 함께 사용자 이름이 저장됩니다. 나중에 파일을 cat
하여 어떻게 보이는지 확인할 수 있습니다.
- sudo cat /etc/squid/passwords
Outputsammy:$apr1$Dgl.Mtnd$vdqLYjBGdtoWA47w4q1Td.
사용자 이름과 암호가 저장되었는지 확인한 후 새 /etc/squid/passwords
파일을 사용하도록 Squid 구성을 업데이트할 수 있습니다. nano
또는 선호하는 텍스트 편집기를 사용하여 Squid 구성 파일을 다시 열고 다음 강조 표시된 줄을 추가합니다.
- 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를 시작할 수 있습니다. 완료하는 데 약간의 시간이 걸릴 수 있습니다.
- sudo systemctl start squid.service
systemctl status
를 다시 사용하여 제대로 시작되었는지 확인할 수 있습니다.
- 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가 방화벽을 통과하도록 허용하는 것을 잊지 마십시오.
- sudo firewall-cmd --permanent --add-port=3128/tcp
- firewall-cmd --reload
다음 단계에서는 마지막으로 프록시에 연결합니다.
3단계 — Squid를 통한 연결
Squid 서버를 시연하기 위해 다양한 유형의 웹 요청을 만드는 데 널리 사용되는 curl
이라는 명령줄 프로그램을 사용합니다. 일반적으로 주어진 연결이 이상적인 환경에서 브라우저에서 작동하는지 여부를 확인하려면 항상 먼저 curl
로 테스트해야 합니다. 이를 위해 로컬 컴퓨터에서 curl을 사용하게 됩니다. curl은 모든 최신 Windows, Mac 및 Linux 환경에 기본적으로 설치되므로 모든 로컬 셸을 열어 이 명령을 실행할 수 있습니다.
- 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
라는 별도의 프록시 지시문을 사용합니다.
- 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을 사용하여 서버 배포를 자동화하는 방법을 검토할 수 있습니다. .