Поиск по сайту:

Как настроить прокси-сервер Squid для частных подключений в Debian 11


Введение

Прокси-серверы — это тип серверного приложения, которое функционирует как шлюз между конечным пользователем и интернет-ресурсом. Через прокси-сервер конечный пользователь может контролировать и отслеживать свой веб-трафик для самых разных целей, включая конфиденциальность, безопасность и кэширование. Например, вы можете использовать прокси-сервер для выполнения веб-запросов с IP-адреса, отличного от вашего собственного. Вы также можете использовать прокси-сервер, чтобы исследовать, как Интернет обслуживается по-разному в разных юрисдикциях, или избегать некоторых методов наблюдения или регулирования веб-трафика.

Squid — это стабильный, популярный HTTP-прокси с открытым исходным кодом. В этом руководстве вы будете устанавливать и настраивать Squid для предоставления HTTP-прокси на сервере Debian 11.

Предпосылки

Для выполнения этого руководства вам потребуется:

  • Сервер Debian 11 и пользователь без полномочий root с привилегиями sudo. Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководстве по начальной настройке сервера с Debian 11.

В этом руководстве вы будете использовать доменное имя your_domain, но вы должны заменить его своим собственным доменным именем или IP-адресом.

Шаг 1 — Установка прокси-сервера Squid

У Squid есть много вариантов использования, помимо маршрутизации исходящего трафика отдельного пользователя. В контексте крупномасштабных развертываний серверов его можно использовать в качестве механизма распределенного кэширования, балансировщика нагрузки или другого компонента стека маршрутизации. Однако некоторые методы горизонтального масштабирования серверного трафика, которые обычно включали бы прокси-сервер, уступили по популярности платформам контейнеризации, таким как Kubernetes, которые распределяют больше компонентов приложения. В то же время использование прокси-серверов для перенаправления веб-запросов в качестве отдельного пользователя становится все более популярным для защиты вашей конфиденциальности. Это полезно помнить при работе с прокси-серверами с открытым исходным кодом, которые могут иметь многие десятки функций в режиме обслуживания с более низким приоритетом. Варианты использования прокси со временем изменились, но фундаментальная технология осталась прежней.

Начните с выполнения следующих команд от имени пользователя без полномочий root, чтобы обновить списки пакетов и установить 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 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 разрешено; других подключений нет. Обратите внимание, что эти правила обрабатываются последовательно, поэтому рекомендуется оставить правило deny all внизу этого блока конфигурации. Вы можете изменить это правило на разрешить всем, что позволит любому подключаться к вашему прокси-серверу, но вы, вероятно, не захотите этого делать. Вместо этого вы можете добавить строку выше http_access allow localhost, которая включает ваш собственный 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 означает список контроля доступа, общий термин для политик разрешений
  • localnet в данном случае — это имя вашего ACL-списка.
  • src — это место, откуда будет исходить запрос из этого ACL, т. е. ваш IP-адрес.

Если вы не знаете свой локальный IP-адрес, проще всего перейти на такой сайт, как «Какой у меня 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 передает прокси-сервер 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

Также можно получить доступ к веб-сайтам 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 для автоматизации развертывания серверов, если вы захотите продублировать эту конфигурацию в других центрах обработки данных. .