Проблема
Прокси-сервер это шлюз между локальной сетью и интернетом, который позволяет контролировать трафик, кэшировать часто запрашиваемые ресурсы, ограничивать доступ к нежелательным сайтам и скрывать внутреннюю структуру сети. В небольших и средних организациях часто возникает необходимость развернуть прокси без лишних затрат, но стандартные настройки Squid могут быть избыточно сложными для понимания. Администратору нужно не просто установить пакет, но и грамотно настроить доступ, аутентификацию, прозрачный режим (без настройки браузеров) и интеграцию с Active Directory (при необходимости). В этой статье мы разберём практическую настройку Squid с нуля, акцентируя внимание на гибкости и безопасности.
Решение
Squid это высокопроизводительный прокси-сервер с открытым исходным кодом, поддерживающий HTTP, HTTPS и FTP. Полная документация доступна на официальном сайте Squid и в wiki проекта. Основные возможности:
- Кэширование веб-контента для ускорения загрузки и экономии трафика.
- Контроль доступа на основе ACL (Access Control Lists) по IP, времени, доменам, URL, аутентификации.
- Прозрачный режим (transparent proxy), при котором клиенты не требуют настройки прокси в браузере .
- Работа с аутентификацией через NCSA, LDAP, NTLM.
В статье мы настроим Squid в режиме прозрачного прокси с ограничением доступа по времени и категориям сайтов, а также добавим базовую аутентификацию для дополнительного контроля. В качестве дистрибутива используем Ubuntu 22.04 LTS, но команды будут аналогичны для Debian, а для RHEL-подобных будут указаны отличия.
Пошаговая инструкция
1. Установка Squid
Ubuntu / Debian:
sudo apt update
sudo apt install squid
RHEL / CentOS / Rocky Linux:
sudo dnf install squid
sudo systemctl enable --now squid
Подробнее об установке в разных дистрибутивах можно прочитать в ArchWiki Squid и официальной документации Squid.
Проверяем статус:
sudo systemctl status squid
По умолчанию Squid слушает порт 3128. Основной конфигурационный файл — /etc/squid/squid.conf. Перед изменениями создадим резервную копию:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
2. Базовая настройка ACL и доступа
Откроем /etc/squid/squid.conf и добавим настройки. В Squid порядок ACL и правил важен: сначала определяются ACL, затем правила http_access, которые проверяются сверху вниз.
Определим локальную сеть (ACL для подсети 192.168.1.0/24):
acl localnet src 192.168.1.0/24
Разрешим доступ из локальной сети:
http_access allow localnet
Запретим доступ всем остальным:
http_access deny all
Настроим порт:
http_port 3128
После изменений проверяем конфигурацию и перезапускаем Squid:
sudo squid -k check
sudo systemctl restart squid
Теперь клиенты из сети 192.168.1.0/24 могут использовать прокси, указав в браузере IP сервера и порт 3128.
3. Настройка прозрачного прокси
Прозрачный режим позволяет перенаправлять HTTP-трафик (порт 80) на прокси без изменений на клиентах . Для HTTPS (порт 443) прозрачное проксирование сложнее, обычно используется SSL-инспекция (SSL Bumping), описанная в документации Squid .
Шаг 1. Добавим в конфигурацию Squid порт для прозрачного режима:
http_port 3128 intercept
intercept означает, что Squid будет принимать перенаправленные соединения с межсетевого экрана.
Шаг 2. Настроим перенаправление трафика с помощью iptables:
Предположим, что сетевой интерфейс, смотрящий в локальную сеть, eth0. Перенаправляем входящий HTTP-трафик на порт 3128:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Для локальных запросов, генерируемых самой машиной, используются правила в цепи OUTPUT с учётом владельца процесса :
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner --uid-owner proxy -j ACCEPT
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128
Для постоянства правил установите пакет iptables-persistent (Ubuntu) или сохраните через netfilter-persistent. В RHEL можно добавить правила в firewalld.
Шаг 3. Настроим маршрутизацию, если сервер является шлюзом:
sudo sysctl -w net.ipv4.ip_forward=1
Для постоянного включения раскомментируйте net.ipv4.ip_forward=1 в /etc/sysctl.conf.
После этого клиенты без настройки прокси будут автоматически направлять HTTP-запросы через Squid.
4. Ограничение доступа по времени и сайтам
Допустим, нужно разрешить доступ только в рабочее время (9:00–18:00) и запретить доступ к категории «соцсети» (на примере блокировки по доменам).
Создадим ACL для времени (формат описан в официальной документации Squid):
acl worktime time MTWHF 09:00-18:00
Где M — понедельник, T — вторник, W — среда, H — четверг, F — пятница, A — суббота, S — воскресенье .
Создадим ACL для запрещённых доменов (файл /etc/squid/blocked_domains):
facebook.com
vk.com
instagram.com
Загрузим список в ACL:
acl social_networks dstdomain "/etc/squid/blocked_domains"
Применим правила (порядок важен):
http_access deny social_networks
http_access allow localnet worktime
http_access deny !worktime
Правило deny social_networks блокирует доступ к доменам из списка. Затем разрешаем доступ из локальной сети только в рабочее время, а вне рабочего времени запрещаем (правило deny !worktime).
5. Настройка аутентификации (Basic Auth)
Для дополнительного контроля можно требовать логин и пароль. Используем базовую аутентификацию с NCSA-совместимым файлом паролей это стандартный подход, описанный в Squid Wiki .
Создадим файл паролей с помощью утилиты htpasswd (установите apache2-utils):
sudo apt install apache2-utils
sudo htpasswd -c /etc/squid/passwd user1
Добавим новых пользователей без -c:
sudo htpasswd /etc/squid/passwd user2
Настроим Squid для использования аутентификации :
Добавим в squid.conf:
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Proxy
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED
http_access allow auth_users
Описание helper-программы basic_ncsa_auth доступно в man-странице Debian . Она поддерживает алгоритмы хеширования Blowfish, SHA256, SHA512, MD5 и DES.
auth_users ACL, требующий аутентификации. Правило http_access allow auth_users следует разместить выше общих разрешений. Если нужна аутентификация только для определённых сетей, можно комбинировать:
http_access allow localnet auth_users
После перезапуска Squid клиенты должны будут вводить логин и пароль.
6. Оптимизация кэша и производительности
Squid по умолчанию использует каталог /var/spool/squid для кэша. Размер кэша задаётся директивой cache_dir. Подробная документация по настройке кэша доступна в Squid Wiki :
cache_dir ufs /var/spool/squid 10000 16 256
-
10000— размер в МБ (10 ГБ). -
16— количество подкаталогов первого уровня. -
256— количество подкаталогов второго уровня.
Параметры влияют на производительность; для больших объёмов используйте aufs вместо ufs. После изменения размера кэша необходимо инициализировать каталог :
sudo squid -z
7. Включение доступа к HTTPS через CONNECT
Squid может проксировать HTTPS-трафик, используя метод CONNECT. Для этого не требуется дополнительной настройки, достаточно разрешить метод в ACL. По умолчанию метод CONNECT разрешён только для портов 443 и 563 (SSL). Чтобы разрешить для других портов, используйте ACL port:
acl SSL_ports port 443 8443
http_access allow CONNECT SSL_ports
Для полной фильтрации HTTPS-сайтов (по URL) требуется SSL-инспекция (SSL Bumping), описанная в документации Squid .
8. Настройка логов
Логи Squid находятся в /var/log/squid/access.log. Формат логов настраивается директивой logformat, информация доступна в официальной документации. Для анализа можно использовать sarg или calamaris.
Устранение распространённых проблем
Мы настроили прокси-сервер Squid в Linux, реализовав прозрачный режим, ограничения по времени и доменам, базовую аутентификацию. Полученная конфигурация позволяет эффективно управлять интернет-трафиком в офисе, экономить канал с помощью кэширования и обеспечивать дополнительную безопасность. Настройки прокси сервера Linux с использованием Squid это проверенное решение, которое легко масштабируется и интегрируется с существующей инфраструктурой. При необходимости можно расширить функционал инспекцией HTTPS, интеграцией с антивирусом и детальной отчётностью. Детальную информацию по всем директивам можно найти в официальной документации Squid.







