Добавить в корзинуПозвонить
Найти в Дзене

Настройка прокси сервера в Linux (Squid)

Проблема Прокси сервер это шлюз между локальной сетью и интернетом. Он позволяет контролировать трафик, кэшировать часто запрашиваемые ресурсы, ограничивать доступ к нежелательным сайтам и скрывать внутреннюю структуру сети. В небольших и средних организациях часто возникает необходимость развернуть прокси без лишних затрат, но стандартные настройки Squid могут быть избыточно сложными для понимания. Администратору нужно не просто установить пакет, но и грамотно настроить доступ, аутентификацию, прозрачный режим (без настройки браузеров) и интеграцию с Active Directory при необходимости. В этой статье мы разберём практическую настройку Squid с нуля, акцентируя внимание на гибкости и безопасности. Решение Squid это высокопроизводительный прокси сервер с открытым исходным кодом, поддерживающий HTTP, HTTPS и FTP. Полная документация доступна на официальном сайте Squid и в wiki проекта. Основные возможности перечислены ниже. Кэширование веб контента для ускорения загрузки и экономии трафик

Проблема

Прокси сервер это шлюз между локальной сетью и интернетом. Он позволяет контролировать трафик, кэшировать часто запрашиваемые ресурсы, ограничивать доступ к нежелательным сайтам и скрывать внутреннюю структуру сети. В небольших и средних организациях часто возникает необходимость развернуть прокси без лишних затрат, но стандартные настройки 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.

text

sudo apt update
sudo apt install squid

RHEL, CentOS, Rocky Linux.

text

sudo dnf install squid
sudo systemctl enable --now squid

Проверяем статус.

text

sudo systemctl status squid

По умолчанию Squid слушает порт 3128. Основной конфигурационный файл это /etc/squid/squid.conf. Перед изменениями создадим резервную копию.

text

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

text

acl localnet src 192.168.1.0/24

Разрешим доступ из локальной сети.

text

http_access allow localnet

Запретим доступ всем остальным.

text

http_access deny all

Настроим порт.

text

http_port 3128

После изменений проверяем конфигурацию и перезапускаем Squid.

text

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 порт для прозрачного режима.

text

http_port 3128 intercept

intercept означает, что Squid будет принимать перенаправленные соединения с межсетевого экрана.

Шаг 2. Настроим перенаправление трафика с помощью iptables. Предположим, что сетевой интерфейс, смотрящий в локальную сеть, это eth0. Перенаправляем входящий HTTP трафик на порт 3128.

text

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Для локальных запросов, генерируемых самой машиной, используются правила в цепи OUTPUT с учётом владельца процесса.

text

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. Настроим маршрутизацию, если сервер является шлюзом.

text

sudo sysctl -w net.ipv4.ip_forward=1

Для постоянного включения раскомментируйте net.ipv4.ip_forward=1 в /etc/sysctl.conf.

После этого клиенты без настройки прокси будут автоматически направлять HTTP запросы через Squid.

4. Ограничение доступа по времени и сайтам

Допустим, нужно разрешить доступ только в рабочее время (9:00–18:00) и запретить доступ к категории «соцсети» (на примере блокировки по доменам).

Создадим ACL для времени.

text

acl worktime time MTWHF 09:00-18:00

M понедельник, T вторник, W среда, H четверг, F пятница, A суббота, S воскресенье.

Создадим ACL для запрещённых доменов. Файл /etc/squid/blocked_domains.

text

facebook.com
vk.com
instagram.com

Загрузим список в ACL.

text

acl social_networks dstdomain "/etc/squid/blocked_domains"

Применим правила. Порядок важен.

text

http_access deny social_networks
http_access allow localnet worktime
http_access deny !worktime

Правило deny social_networks блокирует доступ к доменам из списка. Затем разрешаем доступ из локальной сети только в рабочее время. Вне рабочего времени доступ запрещён (правило deny !worktime).

5. Настройка аутентификации (Basic Auth)

Для дополнительного контроля можно требовать логин и пароль. Используем базовую аутентификацию с NCSA совместимым файлом паролей.

Создадим файл паролей с помощью утилиты htpasswd (установите apache2-utils).

text

sudo apt install apache2-utils
sudo htpasswd -c /etc/squid/passwd user1

Добавим новых пользователей без -c.

text

sudo htpasswd /etc/squid/passwd user2

Настроим Squid для использования аутентификации. Добавим в squid.conf.

text

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

auth_users это ACL, требующий аутентификации. Правило http_access allow auth_users следует разместить выше общих разрешений. Если нужна аутентификация только для определённых сетей, можно комбинировать.

text

http_access allow localnet auth_users

После перезапуска Squid клиенты должны будут вводить логин и пароль.

6. Оптимизация кэша и производительности

Squid по умолчанию использует каталог /var/spool/squid для кэша. Размер кэша задаётся директивой cache_dir.

text

cache_dir ufs /var/spool/squid 10000 16 256

10000 размер в МБ (10 ГБ). 16 количество подкаталогов первого уровня. 256 количество подкаталогов второго уровня. Параметры влияют на производительность. Для больших объёмов используйте aufs вместо ufs. После изменения размера кэша необходимо инициализировать каталог.

text

sudo squid -z

7. Включение доступа к HTTPS через CONNECT

Squid может проксировать HTTPS трафик, используя метод CONNECT. Для этого не требуется дополнительной настройки, достаточно разрешить метод в ACL. По умолчанию метод CONNECT разрешён только для портов 443 и 563 (SSL). Чтобы разрешить для других портов, используйте ACL port.

text

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.

Устранение распространённых проблем

ПроблемаВероятная причинаРешениеTCP_DENIED/403 в логахACL запрещает доступ, нет правил http_access allowПроверить порядок правил. Разрешающие должны идти до запрещающих. Убедиться, что ACL localnet определён и содержит нужную подсеть.Ошибка (13) Permission denied при запускеSquid не может записать кэш или pid файлПроверить права на /var/spool/squid и /var/run/squid. Владелец должен быть proxy:proxy (или squid:squid в RHEL).В прозрачном режиме браузер не открывает сайтыНеправильное перенаправление iptables, или Squid не слушает interceptПроверить правило iptables: iptables -t nat -L. Убедиться, что http_port указан с опцией intercept.Клиенты не могут пройти аутентификациюНе установлена программа аутентификации, неправильный путьПроверить путь к basic_ncsa_auth (в Ubuntu: /usr/lib/squid/basic_ncsa_auth). Убедиться, что файл паролей существует и права доступа позволяют читать Squid.Медленная работа при большом количестве клиентовНедостаточно памяти под кэш, маленькое число дочерних процессовУвеличить cache_mem (до 1/3 оперативной памяти), увеличить cache_dir, поднять maximum_object_size_in_memory и maximum_object_size.Ошибка при запуске после добавления cache_dirНе инициализирована структура каталогов кэшаВыполнить squid -z для создания каталогов кэша.

Мы настроили прокси сервер Squid в Linux, реализовав прозрачный режим, ограничения по времени и доменам, базовую аутентификацию. Полученная конфигурация позволяет эффективно управлять интернет трафиком в офисе, экономить канал с помощью кэширования и обеспечивать дополнительную безопасность. Настройка прокси сервера Linux с использованием Squid это проверенное решение, которое легко масштабируется и интегрируется с существующей инфраструктурой. При необходимости можно расширить функционал инспекцией HTTPS, интеграцией с антивирусом и детальной отчётностью. Детальную информацию по всем директивам можно найти в официальной документации Squid.

Настройка прокси-сервера в Linux (Squid) | Андрей Коровин | Сисадмин | IT-инженер