Как настроить прокси-сервер 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:
- sudo apt update
- sudo apt install squid
Squid автоматически настроит фоновую службу и запустится после установки. Вы можете проверить правильность работы службы:
- 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
или в вашем любимом текстовом редакторе:
- 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.
- sudo apt install apache2-utils
Этот пакет предоставляет команду htpasswd
, которую вы можете использовать для создания пароля для нового пользователя Squid. Имена пользователей Squid никоим образом не будут пересекаться с системными именами пользователей, поэтому вы можете использовать то же имя, с которым вы вошли в систему, если хотите. Вам также будет предложено добавить пароль:
- sudo htpasswd -c /etc/squid/passwords your_squid_username
Это сохранит ваше имя пользователя вместе с хэшем вашего нового пароля в /etc/squid/passwords
, который будет использоваться Squid в качестве источника аутентификации. После этого вы можете cat
посмотреть файл, чтобы увидеть, как он выглядит:
- sudo cat /etc/squid/passwords
Outputsammy:$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 проверить ваш новый файл passwords
на наличие хэшей паролей, которые можно проанализировать с помощью механизма 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
. Если команда выполнена успешно, вы должны увидеть следующий вывод:
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 между клиентом и сервером:
- 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 для автоматизации развертывания серверов, если вы захотите продублировать эту конфигурацию в других центрах обработки данных. .