Как настроить 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
.
- sudo dnf install epel-release
Далее вы можете приступить к установке Squid с помощью dnf
:
- sudo dnf install squid
В Rocky Linux Squid не запускается автоматически после установки. Вы можете проверить, что сервис был создан, но неактивен, используя systemctl status
:
- 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:
- sudo dnf install nano
Откройте файл конфигурации Squid в nano
или в вашем любимом текстовом редакторе:
- 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.
- sudo dnf install httpd-tools
Этот пакет предоставляет команду 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/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 с изменениями конфигурации. Это может занять некоторое время.
- sudo systemctl start squid.service
Вы можете снова использовать systemctl status
, чтобы убедиться, что он запустился правильно:
- 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:
- sudo firewall-cmd --permanent --add-port=3128/tcp
- firewall-cmd --reload
На следующем шаге вы, наконец, подключитесь к своему прокси.
Шаг 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 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 между клиентом и сервером:
- 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 для автоматизации развертывания серверов, если вы захотите продублировать эту конфигурацию в других центрах обработки данных. .