Гид по технологиям

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

• 7 min read • Сеть • Обновлено 21 Nov 2025
Squid Proxy на Rocky/Alma Linux 9 — руководство
Squid Proxy на Rocky/Alma Linux 9 — руководство

Схема работы прокси-сервера Squid между клиентом и интернет-ресурсом

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:

  1. Системная прокси-конфигурация
  2. Использование Squid как шлюза (transparent/forward proxy — требует дополнительной настройки)
  3. Настройка в браузере

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:

Главная страница расширения FoxyProxy с настройками

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

Окно добавления прокси в FoxyProxy

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

Включение SquidProxy в FoxyProxy

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

Результат теста прокси в браузере — внешний IP сервера прокси

Логи для отладки в реальном времени:

$ 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)

  1. Подготовка: резервная копия текущих конфигов, проверка свободного дискового пространства.
  2. Установка Squid и EPEL.
  3. Первичный запуск на тестовом сегменте (тестовая подсеть ACL).
  4. Настройка базовой фильтрации и аутентификации.
  5. Внедрение мониторинга и логирования.
  6. Перенос в продуктив после 24–72 часов тестирования.
  7. Регулярные обновления и аудит правил.

Принятие работ — Критерии приёмки

  • 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 и настройте мониторинг.

Если остались вопросы — опишите вашу топологию сети и конфигурацию, и можно предложить более конкретные рекомендации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро