Настройка прокси-сервера Squid в Ubuntu Linux
Squid — кэширующий прокси-сервер с расширенными возможностями управления доступом. Его используют разработчики, интернет-провайдеры и компании для экономии трафика, повышения производительности и ускорения доставки контента. Читайте статью, чтобы узнать, как установить прокси-сервер и настроить под свои задачи.

О Squid
Squid — это высокопроизводительный прокси-сервер, который поддерживает протоколы HTTP, HTTPS, FTP и другие. Изначально он был задуман как кэширующий сервер, но со временем его функциональность расширилась.
Squid основан на демоне Harvest Cache, который разработали в начале 1990-х годов. Проект в то время финансировался грантом NSF, поддерживающим исследования технологий кэширования. По окончании финансирования Squid продолжал развиваться благодаря поддержке программистов-энтузиастов и коммерческих организаций.
Какие функции Squid может выполнять в сетевой инфраструктуре:
Кэширование веб-контента. Хранение копий веб-страниц, изображений и других файлов на локальном диске для быстрого доступа
Проксирование запросов. Выполнение роли посредника для всех исходящих веб-запросов.
Управление доступом. Контроль использования интернета сотрудниками компании, реализация корпоративных политик доступа к онлайн-ресурсам.
Прозрачное проксирование. Перехват трафика без необходимости специфических настроек на устройствах.
Фильтрация контента. Блокировка нежелательных сайтов, рекламы и сомнительных файлов.
Обычно Squid работает как прямой прокси и служит посредником между пользователями и интернетом — передает все запросы к веб-ресурсам от своего имени. Так он скрывает реальные IP-адреса, помогает обходить географические блокировки, управлять доступом к внешним ресурсам.
Squid также может работать и наоборот — стоять перед серверами внутренней сети и перенаправлять к ним запросы от внешних пользователей. В этой схеме прокси распределяет нагрузку между серверами и защищает от сетевых атак.
Схема работы Squid 
Предварительные требования для успешной установки Squid
Перед установкой прокси-сервера рекомендуем обновить операционную систему с помощью команды sudo apt update && sudo apt upgrade.
Для развертывания Squid на виртуальной машине в облаке можно использовать Evolution Image от Cloud.ru — каталог готовых образов популярных дистрибутивов Linux. Сервис предоставляет подготовленные образы Ubuntu различных версий, оптимизированные для облачной инфраструктуры. Это позволяет быстро развернуть виртуальную машину с нужной версией Ubuntu, не тратя время на установку и базовую настройку операционной системы.
Что еще нужно сделать:
Убедиться, что дискового пространства будет достаточно для хранения кэша и логов Squid. Должно быть не менее 1–2 ГБ свободного места.
Установить права суперпользователя root. Это необходимо для установки пакетов и изменения системных конфигураций.
Установить инструменты управления пакетами для Ubuntu.
Открыть сетевой порт 3128, который Squid использует по умолчанию и убедиться, что он не занят другими службами.
Настроить в брандмауэре разрешения для работы прокси-сервера.
Установить удобный текстовый редактор для редактирования конфигурационного файла /etc/squid/squid.conf. Например, можно использовать Vim или Nano.
Шаги установки
Для установки отправьте через терминал команду sudo apt -y install squid.
После установки Squid на Ubuntu необходимо выполнить несколько базовых шагов по проверке, настройке и запуску сервиса. Убедитесь, что служба запущена:
Если служба неактивна, запустите ее:
Если хотите, чтобы прокси автоматически запускался после перезагрузки, выполните команду:
Для удобства основные команды по установке мы собрали в таблицу.
Действие | Команда / Действие | Результат |
Обновление списка пакетов | sudo apt update | Система получает актуальную информацию о пакетах |
Установка Squid | sudo apt -y install squid | Squid загружается и устанавливается вместе с зависимостями |
Проверка статуса сервиса | systemctl status squid | Проверка, что служба установлена и корректно работает |
Запуск службы при необходимости | sudo systemctl start squid | Squid запускается вручную |
Добавление в автозагрузку | sudo systemctl enable squid | Squid запускается автоматически при загрузке ОС |
Резервное копирование конфигурации | sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak | Сохранение оригинальной конфигурации |
Проверка конфигурации на ошибки | sudo squid -k parse | Проверка корректности файла конфигурации |
Перезапуск сервиса | sudo systemctl restart squid | Применение новых настроек |
Основные настройки Squid
Чтобы начать работать со Squid, достаточно базовых настроек. Потом можно добавить более тонкие, позволяющие расширить функциональность прокси.
Конфигурация базовых параметров
Основные параметры для настройки — порт, имя хоста, список контроля доступа.
Параметр | Пояснение | Пример настройки |
http_port | Определяет порт, на котором будет работать Squid | Стандартный порт — 3128 |
visible_hostname | Устанавливает имя хоста, которое Squid будет использовать в сообщениях об ошибках и HTTP-заголовках | visible_hostname mysquidserver.local |
acl localnet src | Определяет список контроля доступа (ACL). Он нужен для идентификации локальных сетей, которым будет разрешен доступ через прокси | acl localnet src 192.168.1.0/24 (Разрешает всю подсеть) |
http_access allow | Директива в настройке Squid, которая разрешает доступ к прокси-серверу на основе ACL | http_access allow localnet |
http_access deny all | Правило в настройке Squid, которое запрещает доступ ко всем ресурсам | http_access deny all |
Пример минимальной настройки:
Настройка кэширующего прокси и оптимизация производительности
Кэширование — основная функция Squid. Она влияет на производительность прокси и позволяет экономить внешний трафик.
Параметр | Пояснение | Рекомендованное значение |
cache_dir | Определяет местоположение и размер кэша на диске. Для хранения кэша нужно использовать быстрое хранилище (SSD) Формат: тип_хранилища путь_к_кэшу размер_в_МБ кол-во_каталогов_1го_уровня кол-во_каталогов_2го_уровня | cache_dir ufs /var/spool/squid 10000 16 256 |
maximum_object_size | Максимальный размер файла в КБ, который Squid будет кэшировать. Файлы большего размера будут просто проходить через прокси | maximum_object_size 4096 KB (4 МБ) |
minimum_object_size | Минимальный размер файла (в байтах), который Squid будет кэшировать. Опция исключает кэширование очень маленьких объектов, поскольку в этом нет смысла | minimum_object_size 0 bytes |
Для оптимизации производительности нужно настроить память для кэша: cache_mem 256 MB. Здесь стоит значение по умолчанию, можно поменять на свое. Этот объем памяти будет использоваться для метаданных кэша и хранения часто запрашиваемых объектов.
Если есть родительский кэш, разместите его здесь: cache_peer, never_direct/always_direct.
Настройка доступа и управления
Для управления доступом используются списки контроля доступа (ACL) и правила http_access. Рассказываем, что это и как настроить.

Списки доступа (ACL) и примеры настройки: src, dst, dstdomain, url_regex и time
ACL (Access Control List) — это список правил, который позволяет управлять доступом к интернет-ресурсам через прокси-сервер. Его можно задать в конфигурационном файле /etc/squid/squid.conf.
Пример файла /etc/squid/squid.confМожно настроить списки по разным параметрам.
ACL по IP-адресу клиента (src). Позволяет ограничить доступ для определенных машин или подсетей:
ACL по IP-адресу назначения (dst). Можно ограничить доступ к определенным серверам:
ACL по домену назначения (dstdomain). Разрешение или блокировка определенных сайтов:
ACL по URL (url_regex). Используется для фильтрации запросов по шаблону или регулярному выражению:
Файл /etc/squid/ads_block.list может содержать список шаблонов, например ads, banner, tracking.
ACL по времени (time). Ограничение доступа в интернет в определенные часы или дни недели. Например, после 18 часов или в выходные:
Пример ACL Правила доступа
Правила доступа в Squid на Ubuntu используются для управления трафиком и определяют, что будет разрешено, а что — запрещено. Они настраиваются в конфигурационном файле /etc/squid/squid.conf и опираются на механизмы ACL.
Сначала создаются ACL-списки, описывающие характер трафика: диапазоны внутренних IP-адресов, домены, время суток, протоколы или типы запросов. Затем эти ACL применяются в директиве http_access.
Можно разрешить доступ для доверенных подсетей, заблокировать определенные сайты, ограничить использование по времени или запретить работу анонимным пользователям.
Правило | Описание | Пример |
ACL (Access Control List) | Определяет критерии трафика: IP, домены, время, протоколы | acl localnet src 192.168.1.0/24 |
http_access allow | Разрешает доступ по заданному ACL | http_access allow localnet |
http_access deny | Запрещает доступ | http_access deny blocked_sites |
Порядок правил | Squid обрабатывает правила сверху вниз до первого совпадения | Размещать allow выше deny all |
Блокировка доменов | Ограничивает доступ к определенным сайтам | acl bad dstdomain .example.com → http_access deny bad |
Разрешение доверенной сети | Предоставляет доступ внутренним подсетям | allow localnet |
Ограничения по времени | Позволяют регламентировать использование прокси | acl worktime time MTWHF 08:00-18:00 |
Запрет по умолчанию | Защищает сервер, блокируя весь неявно разрешенный трафик | http_access deny all |
Файл конфигурации | Местоположение всех правил доступа | /etc/squid/squid.conf |
Применение изменений | Перезапуск службы после правки конфигурации | systemctl restart squid |
Ограничение скорости и управление трафиком
Squid позволяет контролировать использование полосы пропускания, ограничивать скорость загрузки и распределять трафик между пользователями. В этом помогут директивы в конфигурационном файле /etc/squid/squid.conf.
Как действовать:
Откройте конфигурационный файл Squid:sudo nano /etc/squid/squid.conf.
Используйте директиву delay_pools для ограничения скорости. Задайте пулы задержки, которые определяют правила.
Пример конфигурации:
Продвинутые настройки
Выше мы описали базовые настройки, которых достаточно для начала работы с Squid. Рассказываем, как подключить дополнительные опции.
Настройка прозрачного прокси
Прозрачный прокси — режим, при котором пользователям не нужно ничего настраивать. Их интернет-трафик перехватывается на шлюзе и принудительно перенаправляется на Squid. Пользователи могут даже не знать, что работают через прокси.
Настройки выполняются не в Squid, а на Linux-шлюзе (роутере) с помощью iptables. Весь трафик будет идти с порта 80 и перенаправляться через порт 3128, который слушает прокси.
Команда для настройки через iptables:
Расшифровываем:
-t nat: работаем с таблицей NAT (Network Address Translation):
-A PREROUTING: добавляем правило в цепочку PREROUTING до принятия решения о маршрутизации трафика;
-i eth1: вводим правило, которое касается трафика, приходящего с интерфейса eth1 в локальной сети;
-p tcp --dport 80: перенаправляем TCP-пакеты, которые идут на 80-й порт (HTTP);
-j REDIRECT --to-port 3128: выбираем REDIRECT и выполняем перенаправление, меняя порт назначения на 3128.
Теперь нужно сделать так, чтобы Squid «знал», что будет получать перехваченный трафик. В файле squid.conf нужно изменить директиву http_port. Вместо обычной http_port 3128 нужно добавить опцию intercept:
Метод работает только для HTTP на порту 80. Прозрачно перехватить HTTPS на порту 443 намного сложнее. Трафик зашифрован, поэтому Squid не сможет его прочитать. Единственный способ — «вскрыть» шифрование. Этот процесс называется SSL Bumping (или SSL Interception). Squid как бы выполняет «атаку человек посередине» (Man-in-the-Middle):
Squid притворяется для пользователя сайтом, подменяя его сертификат своим. Чтобы браузеры не заметили подвоха, нужно на каждый компьютер в сети установить специальный корневой сертификат (CA) вашего Squid-сервера и сделать его доверенным.
Логирование и мониторинг
Все запросы, которые прошли через Squid, записываются в журнал доступа — access.log. Вы можете определять формат логов с помощью директивы logformat. Например, выбрать похожий на логи веб-сервера Apache (combined):
В логах будет видна такая информация, как время запроса, IP-адрес клиента, код ответа, URL, метод, статус кэша.
Формат логовВторой журнал — cache.log. Туда записываются все процессы и ошибки Squid.
Настройка в squid.conf:
Иногда в cache.log нужно больше информации для отладки. За это отвечает директива debug_options:
Чтобы постоянно не читать файлы логов, можно обратиться к менеджеру кэша. Для работы с ним используйте утилиту squidclient. Команды:
Этот инструмент позволяет отслеживать работу Squid и в реальном времени вести статистику.
Управление и обслуживание Squid
Управление Squid обычно осуществляется через стандартные инструменты управления службами вашей операционной системы. Метод зависит от того, какую систему инициализации использует дистрибутив Linux. Чаще всего это systemd. Для старых дистрибутивов применяется SysVinit.
Управление через systemd
Этот способ используется в большинстве современных дистрибутивов, в частности, Ubuntu 16.04+ и старше. С помощью утилиты systemd можно запускать, останавливать, перезапускать и проверять состояние службы Squid, настраивать автозапуск при старте системы.
Основные команды для старта, остановки и перезапуска службы Squid:
Запуск Squid: sudo systemctl start squid или sudo service squid start (в старых версиях Ubuntu).
Остановка Squid: sudo systemctl stop squid или sudo service squid stop.
Перезапуск Squid, например, после изменения конфигурации: sudo systemctl restart squid или sudo service squid restart.
Перезагрузка конфигурации без полного перезапуска: sudo systemctl reload squid или sudo squid -k reconfigure.
Проверка статуса службы: sudo systemctl status squid или sudo service squid status.
Перед применением изменений можно проверить корректность настроек с помощью команды sudo squid -k parse.
Заключение
Администрирование Squid на Ubuntu требует внимания к настройке производительности, безопасности и мониторинга. Регулярно проверяйте конфигурационные файлы и ведите централизованные логи, чтобы своевременно обнаруживать проблемы. Для повышения производительности оптимизируйте параметры кэша. Для повышения отказоустойчивости настройте списки ACL и правила доступа.
