Установка и настройка Squid Proxy на Rocky / Alma Linux 9

Squid — это кэш-прокси, который размещается между двумя сетями и выступает шлюзом между пользователем и интернет-ресурсами. Через прокси можно фильтровать трафик, контролировать доступы, повышать приватность, обеспечивать безопасность и ускорять доставку повторяющихся запросов за счёт кэша.
В этом материале вы найдёте подробную инструкцию по установке и базовой настройке Squid на сервере Rocky Linux 9 или Alma Linux 9, примеры правил ACL, блокировки сайтов и расширенные рекомендации по безопасности и эксплуатации.
Предварительные требования
- Сервер с Rocky Linux 9 или Alma Linux 9.
- Пользователь с sudo-привилегиями (не root).
- Убедитесь, что система обновлена:
$ sudo dnf update
- Установите базовые утилиты (некоторые могут уже быть установлены):
$ sudo dnf install wget curl nano unzip yum-utils -y
Важно: команды и конфигурационные файлы в примерах соответствуют типовой установке; подменяйте IP-адреса и порты под вашу сеть.
Шаг 1 — Установка Squid
EPEL-репозиторий необходим для установки Squid. Установите epel-release:
$ sudo dnf install epel-release
Установите Squid:
$ sudo dnf install squid
Проверьте установку:
$ squid --version
Squid Cache: Version 5.2
Service Name: squid
This binary uses OpenSSL 3.0.1 14 Dec 2021..........
Включите и запустите сервис:
$ sudo systemctl enable squid --now
Проверьте статус:
$ sudo systemctl status squid
? squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-09-28 11:52:24 UTC; 2min ago
Docs: man:squid(8)
Process: 94622 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
Main PID: 94624 (squid)
Tasks: 3 (limit: 5915)
Memory: 16.3M
CPU: 4.207s
CGroup: /system.slice/squid.service
??94624 /usr/sbin/squid --foreground -f /etc/squid/squid.conf
??94626 "(squid-1)" --kid squid-1 --foreground -f /etc/squid/squid.conf
??94627 "(logfile-daemon)" /var/log/squid/access.log
Sep 28 11:52:24 squidproxy systemd[1]: Starting Squid caching proxy...
Sep 28 11:52:24 squidproxy squid[94624]: Squid Parent: will start 1 kids
Sep 28 11:52:24 squidproxy squid[94624]: Squid Parent: (squid-1) process 94626 started
Sep 28 11:52:24 squidproxy systemd[1]: Started Squid caching proxy.
Шаг 2 — Настройка Squid
Конфигурация Squid находится в /etc/squid/squid.conf. Для просмотра файла без комментариев используйте:
$ sudo grep -vE "^#|^$" /etc/squid/squid.conf
Прежде чем вносить изменения, создайте резервную копию:
$ sudo cp /etc/squid/squid.conf{,.bak}
Откройте файл в редакторе:
$ sudo nano /etc/squid/squid.conf
1. Политики доступа (ACL)
ACL определяют, кто и откуда может использовать прокси. В примере мы добавим подсеть 192.168.205.0/24:
acl newlocalnet src 192.168.205.0/24
Чтобы разрешить доступ этой группе, добавьте строку ниже http_access deny all:
http_access allow newlocalnet
Порядок правил важен: Squid читает файл сверху вниз. Помещайте более специфичные правила выше общего deny all.
2. Блокировка доменов
Создайте файл со списком запрещённых доменов:
$ sudo nano /etc/squid/blocked-sites
Пример содержимого:
example.com
example.net
example.org
Включите список в конфигурацию:
acl blocked_sites dstdomain "/etc/squid/blocked-sites"
http_access deny blocked_sites
3. Блокировка скачивания конкретных расширений
Создайте файл расширений:
$ sudo nano /etc/squid/blocked-filextensions
Пример содержимого (регулярные выражения):
\.exe(\?.*)?$
\.bat(\?.*)?$
\.tar(\?.*)?$
\.mp3(\?.*)?$
\.mp4(\?.*)?$
Подключите его:
acl blockfiles urlpath_regex -i "/etc/squid/blocked-filextensions"
http_access deny blockfiles
4. Блокировка по ключевым словам
Создайте список ключевых слов:
$ sudo nano /etc/squid/banned-keywords
Пример:
porn
gamble
ads
movie
Подключение в конфиге:
acl keyword-ban url_regex "/etc/squid/banned-keywords"
http_access deny keyword-ban
5. Маскировка IP клиента (анонимизация)
Чтобы не передавать реальный IP клиента, можно отключить заголовки Via и Forwarded. Добавьте в конфиг:
# Anonymize Traffic
via off
forwarded_for off
request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access User-Agent allow all
request_header_access Cookie allow all
request_header_access All deny all
Важно: Маскировка IP может затруднить аудит и расследование инцидентов. Храните логи и реализуйте процедуру доступа к логам при необходимости.
6. Смена порта Squid
По умолчанию Squid слушает порт 3128. Чтобы сменить порт, закомментируйте строку и укажите новый порт, например 7035:
# Squid normally listens to port 3128
# http_port 3128
http_port 7035
Проверка конфигурации:
$ sudo squid -k parse
Перезапустите сервис:
$ sudo systemctl restart squid
Проверьте, слушает ли Squid указанный порт:
$ sudo ss -altnp | grep 8085
LISTEN 0 4096 *:7035 *:* users:(("squid",pid=94626,fd=11))
7. Брандмауэр и SELinux
Если вы используете системный firewall для служб Squid (порт по умолчанию), разрешите сервис:
$ sudo firewall-cmd --add-service=squid --permanent
$ sudo firewall-cmd --reload
Для кастомного порта используйте:
sudo firewall-cmd --permanent --add-port=[port_number]/tcp
sudo firewall-cmd --reload
А в SELinux необходимо зарегистрировать нестандартный порт:
sudo semanage port -a -t squid_port_t -p tcp [port_number]
Примечание: semanage доступен в пакете policycoreutils-python-utils (dnf install -y policycoreutils-python-utils), если вы его ещё не устанавливали.
Шаг 3 — Настройка базовой аутентификации
Для парой логин/пароль используем утилиту htpasswd (httpd-tools).
$ sudo dnf install httpd-tools
Создайте файл паролей:
$ sudo htpasswd -c /etc/squid/squid_passwd username
Задайте пароль при запросе. После создания смените владельца файла на пользователя squid:
$ sudo chown squid /etc/squid/squid_passwd
Найдите helper для проверки (ncsa_auth):
$ sudo rpm -ql squid | grep ncsa_auth
/usr/lib64/squid/basic_ncsa_auth
/usr/share/man/man8/basic_ncsa_auth.8.gz
Добавьте в squid.conf:
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users
Перезапустите Squid:
$ sudo systemctl restart squid
Шаг 4 — Настройка клиентов для работы через Squid
Есть несколько способов подключения клиентов к Squid:
- Системная прокси-конфигурация
- Использование Squid как шлюза (transparent/forward proxy — требует дополнительной настройки)
- Настройка в браузере
1. Системная конфигурация (переменные окружения)
Создайте файл /etc/profile.d/squid.sh с параметрами прокси:
$ sudo nano /etc/profile.d/squid.sh
Вставьте:
PROXY_URL="192.168.205.10:7035"
HTTP_PROXY=$PROXY_URL
HTTPS_PROXY=$PROXY_URL
FTP_PROXY=$PROXY_URL
http_proxy=$PROXY_URL
https_proxy=$PROXY_URL
ftp_proxy=$PROXY_URL
export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy
Активируйте профиль:
$ source /etc/profile.d/squid.sh
Проверка через wget:
$ wget google.com
--2022-10-04 12:15:59-- http://google.com/
Connecting to 192.168.205.10:7035... connected.
Proxy request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/ [following]
--2022-10-04 12:15:59-- http://www.google.com/
Reusing existing connection to 192.168.205.10:7035.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.1’
index.html.1 [ <=> ] 14.14K --.-KB/s in 0s
2022-10-04 12:15:59 (68.1 MB/s) - ‘index.html.1’ saved [14479]
Для использования аутентификации:
$ wget google.com --proxy-user=YOUR-USERNAME-HERE --proxy-password=YOUR-PASSWORD-HERE
Логи Squid:
1664885759.296 0 192.168.205.10 TCP_MEM_HIT/301 750 GET http://google.com/ - HIER_NONE/- text/html
1664885759.351 54 192.168.205.10 TCP_MISS/200 15113 GET http://www.google.com/ - HIER_DIRECT/216.58.208.100 text/html
2. Настройка в браузере
Браузер можно настроить вручную, однако для передачи имени и пароля удобнее использовать расширение (пример: FoxyProxy для Firefox/Chrome, Proxy Switchomega для Chrome). На примере FoxyProxy:

Нажмите Add для добавления прокси, введите IP, порт, имя и пароль, включите опцию не использовать для localhost и внутренних адресов.

Выберите профиль прокси в выпадающем списке.

Проверьте адрес на https://whatismyip.com — при маскировке вы увидите IP сервера с Squid.

Логи для отладки в реальном времени:
$ sudo tail -f /var/log/squid/access.log
Пример строки лога и её интерпретация приведены в исходном материале.
3. Конфигурация DNF для работы через прокси
Откройте /etc/dnf/dnf.conf и добавьте:
proxy=http://192.168.205.12:8085/
proxy_username=username
proxy_password=password
Сохраните и проверьте apt/механизм обновления пакетов через прокси:
$ sudo dnf update
4. Тестирование через squidclient
squidclient подключается к локальному прокси (по умолчанию localhost:3128):
$ squidclient https://google.com
Пример ответа и заголовков приведены в исходном материале. Для использования с указанием хоста/порта и учётных данных:
$ squidclient -l 192.168.205.12 -p 7035 -u username -w password https://google.com
Рекомендации по безопасности и эксплуатации (жёсткие, но практичные)
- Ограничьте доступ по ACL только доверенным подсетям и IP-адресам.
- Храните файлы паролей с правами доступа 640 и владельцем squid:root.
- Ведите ротацию логов (logrotate) и архивирование за определённый период.
- Разграничьте логи HTTP и access для удобства анализа и расследования.
- Если требуется HTTPS-межсервисный контроль (SSL Bump), настройка гораздо сложнее и требует управления сертификатами: внедряйте только при явной необходимости и после оценки рисков.
- Настройте мониторинг доступности (systemd, Prometheus-exporter или простой скрипт uptime).
Короткий чек-лист для hardening:
- Отключить ненужные ACL.
- Включить аутентификацию для открытых сегментов сети.
- Ограничить
http_accessдо минимально необходимого набора. - Регулярно обновлять пакеты (dnf update).
Дополнительные материалы и подходы (альтернативы и ограничения)
- Альтернативы Squid: специализированные коммерческие proxy-кеши, reverse-proxy (Nginx) для контроля веб-выдачи, transparent proxy с iptables/NAT — каждый подход имеет свои trade-offs.
- Когда Squid не подходит: высоконагруженный стриминг (Squid ориентирован на HTTP-кэш), end-to-end зашифрованный трафик без возможности расшифровки, сложные сценарии DPI (глубокий анализ пакетов).
- Для простого проброса запросов можно использовать Nginx как upstream-прокси, но он не заменит полноценный кэш-альгоритм Squid.
Практическая методология внедрения (мини-SOP)
- Подготовка: резервная копия текущих конфигов, проверка свободного дискового пространства.
- Установка Squid и EPEL.
- Первичный запуск на тестовом сегменте (тестовая подсеть ACL).
- Настройка базовой фильтрации и аутентификации.
- Внедрение мониторинга и логирования.
- Перенос в продуктив после 24–72 часов тестирования.
- Регулярные обновления и аудит правил.
Принятие работ — Критерии приёмки
- Squid установлен и сервис активен (systemctl status active).
- Прокси отвечает на запросы с тестовой машины (wget/curl/squidclient).
- Аутентификация работает для указанных пользователей.
- Правила блокировки доменов/файлов действуют (проверка тестовых доменов и расширений).
- Логи записываются и ротация логов настроена.
- SELinux и firewall настроены для выбранного порта.
Роли и краткие чек-листы
Администратор системы:
- Установить пакеты, создать резервные копии, настроить systemd и мониторинг.
Сетевой инженер:
- Настроить ACL, проброс портов, правила firewall и NAT при необходимости.
Специалист по безопасности:
- Проверить маскировку заголовков, политику логирования, доступ к логам, регламенты хранения.
DevOps/Автоматизация:
- Внедрить конфигурацию в систему управления конфигурацией (Ansible/Chef/Puppet), добавить тесты конфигурации.
Частые ошибки и как их исправить (кратко)
- Проблема: прокси не отвечает — проверяем systemctl status, сетевые правила firewall, слушающий порт ss/ss -ltnp.
- Проблема: аутентификация не проходит — проверяем права на /etc/squid/squid_passwd и корректность пути к basic_ncsa_auth.
- Проблема: правила ACL не применяются — убедитесь в порядке правил в squid.conf и перезапустите сервис.
Схема принятия решений (Mermaid)
flowchart TD
A[Нужен кэш и фильтрация HTTP'S'?] -->|Да| B{Требуется SSL-inspection?}
B -->|Да| C[Рассмотреть SSL Bump и управление сертификатами]
B -->|Нет| D[Внедрить Squid с кэшированием]
A -->|Нет| E[Использовать простой reverse-proxy или NAT]
C --> F[Оценить юридические и privacy-риски]Краткая глоссарий (1 строка для каждого термина)
- ACL — правило контроля доступа в Squid, определяющее разрешённые/запрещённые источники или назначения.
- Cache Miss/Hit — отсутствие/наличие кэшированного ресурса в прокси.
- SSL Bump — техника перехвата и расшифровки HTTPS-трафика прокси для анализа.
- helper — внешняя утилита для проверки аутентификации (например basic_ncsa_auth).
Контроль расходов и влияние на инфраструктуру (качественно)
Внедрение Squid обычно уменьшает исходящий трафик за счёт кэширования повторяющихся запросов, но требует выделения дискового пространства и ресурсов CPU/RAM. Баланс между выгодой (меньше внешний трафик) и затратами (поддержка, место для кэша, безопасность) оценивайте по характеру трафика и политике компании.
Заключение
Это пошаговое руководство охватывает установку Squid на Rocky/Alma Linux 9, базовую настройку ACL, блокировку доменов и расширений, а также интеграцию с клиентами и основные рекомендации по безопасности. После настройки проверьте работу прокси в тестовой сети, убедитесь в корректности логирования и регулярно обновляйте систему.
Важно: Перед внедрением в продуктив убедитесь в соответствии политики прослушивания/анализу трафика требованиям вашей организации или правовой юрисдикции.
Краткое резюме:
- Установите EPEL и Squid.
- Настройте ACL и правила блокировки.
- Включите аутентификацию и настройте права на файлы с паролями.
- Проверьте firewall/SELinux и настройте мониторинг.
Если остались вопросы — опишите вашу топологию сети и конфигурацию, и можно предложить более конкретные рекомендации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента