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

Как настроить Squid Proxy для частных подключений в Rocky Linux 8


Введение

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

Существует множество сторонних прокси-провайдеров, но они могут быть ненадежными, особенно если ваша основная цель использования прокси-сервера — перенаправить трафик от вашего интернет-провайдера. Могут быть случаи, когда коммерческий прокси-провайдер на самом деле менее безопасен или на практике менее юридически связаны.

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

Предпосылки

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

  • Сервер Rocky Linux 8 и пользователь без полномочий root с привилегиями sudo. Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководстве Initial Server Setup with Rocky Linux 8.

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

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

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

Пакет squid недоступен в исходниках пакетов Rocky Linux по умолчанию. Вместо этого вы можете установить Squid через репозиторий EPEL. EPEL является самым популярным дополнительным репозиторием пакетов в дистрибутивах на основе RHEL, таких как Rocky Linux, и содержит ряд надежных сторонних пакетов, которые не предоставляются официальными источниками.

Чтобы добавить репозиторий Rocky Linux EPEL, используйте dnf install epel-release.

  1. sudo dnf install epel-release

Далее вы можете приступить к установке Squid с помощью dnf:

  1. sudo dnf install squid

В Rocky Linux Squid не запускается автоматически после установки. Вы можете проверить, что сервис был создан, но неактивен, используя systemctl status:

  1. 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 — чрезвычайно мощный текстовый редактор, но он может быть несколько бестолковым для пользователей, не имеющих опыта работы с ним. Возможно, вы захотите установить более удобный редактор, такой как nano, чтобы упростить редактирование файлов конфигурации на вашем сервере Rocky Linux 8:

  1. sudo dnf install nano

Откройте файл конфигурации Squid в nano или в вашем любимом текстовом редакторе:

  1. 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 разрешено; других подключений нет. Обратите внимание, что эти правила обрабатываются последовательно, поэтому рекомендуется оставить правило 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 dnf install httpd-tools

Этот пакет предоставляет команду 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/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
…

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

  1. sudo systemctl start squid.service

Вы можете снова использовать systemctl status, чтобы убедиться, что он запустился правильно:

  1. 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.

И не забудьте разрешить Squid проходить через брандмауэр, если вы используете firewalld, добавив правило для порта 3128:

  1. sudo firewall-cmd --permanent --add-port=3128/tcp
  2. firewall-cmd --reload

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

Шаг 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 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

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

Поскольку одним из наиболее распространенных вариантов использования прокси-серверов является проксирование трафика в разные глобальные регионы и из них, вы можете рассмотреть, как использовать Ansible для автоматизации развертывания серверов, если вы захотите продублировать эту конфигурацию в других центрах обработки данных. .