Како да поставите Squid Proxy за приватни врски на Debian 11


Вовед

Прокси-серверите се тип на серверска апликација која функционира како порта помеѓу крајниот корисник и интернет ресурсот. Преку прокси-сервер, крајниот корисник може да го контролира и следи својот веб-сообраќај за широк спектар на цели, вклучувајќи приватност, безбедност и кеширање. На пример, можете да користите прокси-сервер за да правите веб-барања од различна IP адреса од вашата. Можете исто така да користите прокси-сервер за да истражите како мрежата се опслужува поинаку од една јурисдикција до друга или да избегнете некои методи на надзор или загушување на веб сообраќајот.

Squid е стабилен, популарен HTTP-прокси со отворен код. Во ова упатство, ќе го инсталирате и конфигурирате Squid за да обезбедите HTTP прокси на серверот Debian 11.

Предуслови

За да го комплетирате овој водич, ќе ви требаат:

  • Дебиан 11 сервер и корисник без корен со sudo привилегии. Можете да дознаете повеќе за тоа како да поставите корисник со овие привилегии во нашето Initial Server Setup with Debian 11 водич.

Ќе го користите името на доменот your_domain во ова упатство, но треба да го замените ова со сопствено име на домен или IP адреса.

Чекор 1 - Инсталирање на Squid Proxy

Squid има многу случаи на употреба надвор од рутирање на излезниот сообраќај на индивидуален корисник. Во контекст на распоредувања на сервери од големи размери, може да се користи како механизам за дистрибуиран кеширање, балансирач на оптоварување или друга компонента на рутирачки стек. Сепак, некои методи за хоризонтално скалирање на сообраќајот на серверот кои обично вклучуваат прокси-сервер се надминати по популарност со рамки за контејнери како што е Kubernetes, кои дистрибуираат повеќе компоненти на апликацијата. Во исто време, користењето на прокси-сервери за пренасочување на веб-барањата како индивидуален корисник стана сè попопуларно за заштита на вашата приватност. Ова е корисно да се има на ум кога работите со прокси-сервери со отворен код кои може да изгледаат дека имаат многу десетици функции во режим на одржување со помал приоритет. Случаите на употреба за прокси се сменија со текот на времето, но основната технологија не се промени.

Започнете со извршување на следните команди како корисник без корен за да ги ажурирате списоците на пакети и да инсталирате Squid Proxy:

  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 одбие сè. Треба да видите блок текст кој ги објаснува стандардните правила за пристап на 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 е дозволено; други врски не се. Имајте предвид дека овие правила се анализираат последователно, па затоа е добра идеја да го задржите правилото негирај сè на дното на овој конфигурациски блок. Може да го промените тоа правило во дозволи сè, овозможувајќи секој да се поврзе со вашиот прокси-сервер, но веројатно не сакате да го направите тоа. Наместо тоа, можете да додадете линија над http_access дозволи локален хост што вклучува ваша сопствена IP адреса, на пример:

#
# 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 значи Aпристап Cконтрола List, вообичаен термин за политики за дозволи
  • localnet во овој случај е името на вашиот ACL.
  • src е местото каде што барањето би потекнувало од овој ACL, т.е., вашата IP адреса.

Ако не ја знаете вашата локална IP адреса, најбрзо е да отидете на страница како What's my IP која може да ви каже од каде сте пристапиле до неа. Откако ќе ја направите таа промена, зачувајте ја и затворете ја датотеката. Ако користите nano, притиснете Ctrl+X, а потоа кога ќе биде побарано, Y и потоа Enter.

Во овој момент, можете да го рестартирате Squid и да се поврзете со него, но има повеќе што можете да направите за прво да го обезбедите.

Чекор 2 - Обезбедување лигњи

Повеќето прокси и повеќето апликации од клиентот кои се поврзуваат со прокси (на пр., веб-прелистувачи) поддржуваат повеќе методи за автентикација. Тие може да вклучуваат споделени клучеви или посебни сервери за автентикација, но најчесто вклучуваат редовни парови корисничко име-лозинка. Squid ви овозможува да креирате парови корисничко име-лозинка користејќи вградена функционалност на Linux, како дополнителен или алтернативен чекор за ограничување на пристапот до вашиот прокси по IP адреса. За да го направите тоа, ќе создадете датотека наречена /etc/squid/passwords и ќе ја посочите конфигурацијата на Squid на неа.

Прво, ќе треба да инсталирате некои алатки од проектот Apache за да имате пристап до генератор на лозинки што му се допаѓа на Squid.

  1. sudo apt install apache2-utils

Овој пакет ја обезбедува командата htpasswd, која можете да ја користите за да генерирате лозинка за нов корисник на Squid. Корисничките имиња на Squid на кој било начин нема да се преклопуваат со системските кориснички имиња, па можете да го користите истото име со кое сте најавени ако сакате. Ќе ви биде побарано да додадете и лозинка:

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

Ова ќе го зачува вашето корисничко име заедно со хаш на вашата нова лозинка во /etc/squid/passwords, што ќе се користи како извор за автентикација од Squid. Потоа можете да ја cat датотеката за да видите како изгледа:

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

Откако ќе потврдите дека вашето корисничко име и лозинка се зачувани, можете да ја ажурирате конфигурацијата на Squid за да ја користите вашата нова датотека /etc/squid/passwords. Користејќи го 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
…

Овие дополнителни директиви му кажуваат на Squid да провери во вашата нова датотека passwords за хашови на лозинки што може да се анализираат со помош на механизмот basic_ncsa_auth и да бара автентикација за пристап до вашиот прокси. Можете да ја прегледате документацијата на Squid за повеќе информации за овој или други методи за автентикација. После тоа, конечно можете да го рестартирате Squid со вашите промени во конфигурацијата. Ова може да потрае малку за да се заврши.

  1. sudo systemctl restart squid.service

И не заборавајте да ја отворите портата 3128 во вашиот заштитен ѕид ако користите ufw:

  1. sudo ufw allow 3128

Во следниот чекор, конечно ќе се поврзете со вашиот прокси.

Чекор 3 - Поврзување преку Squid

За да го демонстрирате вашиот Squid сервер, ќе користите програма за командна линија наречена 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 пренесува прокси-сервер за да се завитка, и во овој случај го користите протоколот 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

Исто така, можно е да пристапите до веб-локациите https:// со вашиот прокси Squid без да правите дополнителни промени во конфигурацијата. Овие користат посебна директива за прокси наречена CONNECT со цел да се зачува SSL помеѓу клиентот и серверот:

  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 со отворен код за прокси сообраќај со малку или без трошоци. Многу апликации имаат вградена поддршка за прокси (често на ниво на оперативен систем) со децении наназад, што го прави овој стек прокси многу повеќекратно употреблив.

Следно, можеби ќе сакате да научите како да го распоредите Dante, прокси SOCKS што може да работи заедно со Squid за застапување на различни видови веб сообраќај.

Бидејќи еден од најчестите случаи на употреба за прокси-сервери е прокси сообраќајот до и од различни глобални региони, можеби ќе сакате да прегледате како да го користите Ansible за автоматизирање на распоредувањата на серверите следно, во случај да се најдете дека сакате да ја дуплирате оваа конфигурација во други центри за податоци .