Как настроить прокси-сервер Squid

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

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

Требования

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

  • Настроенный удаленный сервер, а также пользователь с привилегиями sudo. Мы используем Ubuntu 20.04, но подойдет и другой дистрибутив Linux.
  • В этом руководстве мы используем условный домен your_domain, который вы должны заменить своим собственным доменом или IP-адресом.

1: Установка прокси-сервера Squid

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

Начнем со следующих команд (они обновят списки пакетов и установят Squid Proxy):

sudo apt update
sudo apt install squid

Squid автоматически настроит сервис и запустится после установки. Вы можете проверить работу сервиса с помощью команды:

systemctl status squid.service

Вы получите:

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 или в другом текстовом редакторе:

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 в конце этого блока конфигурации. Вы можете изменить это правило на allow 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 – это сокращение Access Control List, общий термин для политик разрешений.
  • localnet в данном случае — это имя вашего списка ACL.
  • src — это место, откуда должен исходить запрос из этого ACL, то есть ваш IP-адрес.

Если вы не знаете свой локальный IP-адрес, проще всего обратиться к сайту What’s my IP, который подскажет вам, откуда вы к нему обращались. После внесения этого изменения сохраните и закройте файл. Если вы используете nano, нажмите Ctrl+X, а затем Y и Enter.

На этом этапе вы можете перезапустить сервер Squid и подключиться к нему, но сначала рекомендуем получше защитить его.

2: Защита прокси-сервера Squid

Большинство прокси-серверов и клиентских приложений, которые подключаются к прокси-серверам (например, веб-браузеры), поддерживают несколько методов аутентификации. Они могут использовать общие ключи или отдельные серверы аутентификации, но чаще всего применяются обычные учетные данные (имя пользователя и пароль). Squid позволяет создавать пары логин-пароль, используя встроенную функцию Linux. Этот дополнительный шаг ограничит доступ к вашему прокси по IP-адресу. Для этого нужно создать файл /etc/squid/passwords и указать в нем конфигурацию Squid.

Во-первых, установите некоторые утилиты из проекта Apache, чтобы иметь доступ к генератору паролей, который нравится серверу Squid.

sudo apt install apache2-utils

Этот пакет предоставляет команду htpasswd, которую вы можете использовать для создания пароля нового пользователя Squid. Имена пользователей Squid никоим образом не будут пересекаться с именами системных пользователей, поэтому вы можете использовать то же имя, что и у вашего системного пользователя. Вам также будет предложено добавить пароль.

sudo htpasswd -c /etc/squid/passwords your_squid_username

Эта команда сохранит имя пользователя вместе с хэшем в файле /etc/squid/passwords, который будет использоваться Squid в качестве источника аутентификации. После этого вы можете просмотреть файл, чтобы узнать, как он выглядит:

sudo cat /etc/squid/passwords

Вы получите такой вывод:

8host:$apr1$Dgl.Mtnd$vdqLYjBGdtoWA47w4q1Td.

Убедившись, что имя пользователя и пароль сохранены, вы можете обновить конфигурацию Squid, чтобы сервер мог использовать новый файл /etc/squid/passwords. С помощью 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/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 проверит новый файл паролей на наличие хэшей, которые можно проанализировать с помощью механизма basic_ncsa_auth, и потребует аутентификацию для доступа к вашему прокси. Читайте документацию Squid для получения дополнительной информации об этом или других методах аутентификации. После этого перезапустите Squid, процедура может занять некоторое время.

sudo systemctl restart squid.service

И не забудьте открыть порт 3128 в брандмауэре, если вы используете ufw:

sudo ufw allow 3128

3: Подключение через Squid

Чтобы продемонстрировать работу сервера Squid, мы будем использовать программу командной строки под названием 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. Если команда выполнена успешно, вы должны увидеть следующий вывод:

*   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 '8host'
> GET http://www.google.com/ HTTP/1.1

Получить доступ к веб-сайтам https:// с помощью прокси-сервера Squid можно также без внесения каких-либо дополнительных изменений в конфигурацию. Команда использует отдельную директиву прокси под названием CONNECT для сохранения SSL-соединения между клиентом и сервером:

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

Вы должны получить такой результат:

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

Читайте также: Автоматизация начальной настройки сервера с помощью Ansible в Ubuntu 18.04

Tags:

Добавить комментарий