Найти в Дзене
Евгений Лощаков

Настройка прокси-сервера Squid в Debian 13

Squid — это кэширующий прокси-сервер с открытым исходным кодом, который поддерживает протоколы HTTP, HTTPS, FTP и другие. Он работает как промежуточное звено между клиентами и интернетом, обеспечивая кэширование, фильтрацию и контроль доступа. Основные компоненты Squid: Принцип работы: Корпоративные сети: Образовательные учреждения: Провайдеры интернета: Безопасность: Производительность: Безопасность: Мониторинг и отчетность: # Обновление системы sudo apt update && sudo apt upgrade -y # Установка необходимых утилит sudo apt install -y curl wget htop net-tools # Установка Squid sudo apt install -y squid # Проверка установки squid -v # Проверка статуса службы sudo systemctl status squid Основные файлы конфигурации: # Создание резервной копии sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backup # Создание минимальной конфигурации sudo nano /etc/squid/squid.conf # ================= ОСНОВНЫЕ НАСТРОЙКИ=================== # Порт прокси http_port 3128 # Видимый хостname visible_hostname
Оглавление

🔹 Теоретическая часть: Основы Squid

1.1. Что такое Squid?

Squid — это кэширующий прокси-сервер с открытым исходным кодом, который поддерживает протоколы HTTP, HTTPS, FTP и другие. Он работает как промежуточное звено между клиентами и интернетом, обеспечивая кэширование, фильтрацию и контроль доступа.

Историческая справка:

  • 1990-е — первоначальная разработка как Harvest Cache Daemon
  • 1996 — переименован в Squid
  • Постоянное развитие — активное сообщество, регулярные обновления
  • Текущая версия — Squid 5.x с поддержкой современных протоколов

1.2. Архитектура и принцип работы

Основные компоненты Squid:

  • Кэш — хранилище часто запрашиваемых объектов
  • Диспетчер кэша — управление политиками хранения
  • Менеджер доступа — контроль прав доступа (ACL)
  • Интерцептор — обработка входящих запросов

Принцип работы:

  1. Клиент отправляет запрос через прокси
  2. Squid проверяет кэш на наличие объекта
  3. Если объект в кэше — возвращается клиенту
  4. Если объекта нет — запрос перенаправляется к целевому серверу
  5. Ответ кэшируется для будущих запросов

1.3. Области применения Squid

Корпоративные сети:

  • Контроль доступа сотрудников в интернет
  • Экономия трафика за счет кэширования
  • Мониторинг интернет-активности
  • Блокировка нежелательного контента

Образовательные учреждения:

  • Ограничение доступа к социальным сетям
  • Кэширование учебных материалов
  • Контроль времени доступа
  • Защита от вредоносных сайтов

Провайдеры интернета:

  • Ускорение доступа для абонентов
  • Снижение нагрузки на внешние каналы
  • Кэширование популярного контента
  • Статистика использования трафика

Безопасность:

  • Анонимизация трафика
  • Защита внутренней сети
  • Фильтрация вредоносного контента
  • Логирование интернет-активности

1.4. Преимущества использования Squid

Производительность:

  • ✅ Снижение нагрузки на каналы связи
  • ✅ Ускорение доступа к часто используемым ресурсам
  • ✅ Распределение нагрузки между серверами

Безопасность:

  • ✅ Контроль доступа к интернет-ресурсам
  • ✅ Фильтрация контента
  • ✅ Анонимизация внутренних клиентов
  • ✅ Защита от некоторых видов атак

Мониторинг и отчетность:

  • ✅ Детальное логирование всех запросов
  • ✅ Статистика использования трафика
  • ✅ Анализ интернет-активности
  • ✅ Отчеты по использованию ресурсов

🔹 Практическая часть: Установка и настройка Squid в Debian 13

🔹 2. Установка Squid

2.1. Предварительная настройка системы

# Обновление системы

sudo apt update && sudo apt upgrade -y

# Установка необходимых утилит

sudo apt install -y curl wget htop net-tools

2.2. Установка Squid из репозиториев

# Установка Squid

sudo apt install -y squid

# Проверка установки

squid -v

# Проверка статуса службы

sudo systemctl status squid

2.3. Базовая структура файлов Squid

Основные файлы конфигурации:

  • /etc/squid/squid.conf — основной файл конфигурации
  • /etc/squid/conf.d/ — дополнительные конфигурационные файлы
  • /var/log/squid/ — директория логов
  • /var/spool/squid/ — директория кэша

🔹 3. Базовая настройка Squid

3.1. Резервное копирование конфигурации

# Создание резервной копии

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backup

# Создание минимальной конфигурации

sudo nano /etc/squid/squid.conf

3.2. Минимальная рабочая конфигурация

# ================= ОСНОВНЫЕ НАСТРОЙКИ===================

# Порт прокси

http_port 3128

# Видимый хостname

visible_hostname squid-proxy

# Администратор

cache_mgr admin@company.local

# ==================== БЕЗОПАСНОСТЬ ====================

# Запрет доступа по умолчанию

http_access deny all

# Разрешение локальной сети

acl localnet src 192.168.1.0/24

http_access allow localnet

# ==================== КЭШИРОВАНИЕ ====================

# Размер кэша (1 ГБ)

cache_dir ufs /var/spool/squid 1000 16 256

# Максимальный размер объекта в кэше (100 МБ)

maximum_object_size 100 MB

# Минимальный размер объекта (0 КБ - кэшировать всё)

minimum_object_size 0 KB

# ================ ПРОИЗВОДИТЕЛЬНОСТЬ====================

# Максимальное количество файловых дескрипторов

max_filedescriptors 4096

# Кэширование DNS запросов

positive_dns_ttl 6 hours

negative_dns_ttl 30 minutes

# ==================== ЛОГИРОВАНИЕ ====================

# Формат логов

access_log daemon:/var/log/squid/access.log squid

cache_log /var/log/squid/cache.log

# Уровень логирования

debug_options ALL,1

3.3. Запуск и проверка работы

# Проверка синтаксиса конфигурации

sudo squid -k parse

-2

# Запуск службы

sudo systemctl start squid

# Включение автозапуска

sudo systemctl enable squid

# Проверка статуса

sudo systemctl status squid

-3

# Проверка прослушиваемых портов

sudo netstat -tulpn | grep 3128

-4

🔹 4. Пояснение параметров конфигурации

4.1. Параметры сети и портов

-5

4.2. Параметры кэширования

-6

4.3. Параметры производительности

-7

🔹 5. Настройка контроля доступа (ACL)

5.1. Создание списков доступа (ACL)

# ================== ОПРЕДЕЛЕНИЕ ACL ====================

# Сети

acl localnet src 192.168.1.0/24

acl wifi_net src 192.168.2.0/24

acl admin_net src 192.168.1.100

# Время доступа

acl work_hours time MTWHF 09:00-18:00

acl weekend time SA 00:00-23:59

# Домены и URL

acl social_networks dstdomain .facebook.com .twitter.com .instagram.com

acl work_sites dstdomain .google.com .github.com .stackoverflow.com

acl blocked_sites url_regex -i "/etc/squid/blocked_sites.txt"

# Типы файлов

acl media_files urlpath_regex -i \.mp4$ \.avi$ \.mkv$ \.mp3$

acl exe_files urlpath_regex -i \.exe$ \.msi$ \.bat$

# Методы HTTP

acl safe_methods method GET HEAD POST

acl unsafe_methods method PUT DELETE CONNECT

# =================== ПРАВИЛА ДОСТУПА ====================

# Администраторы - полный доступ

http_access allow admin_net

# Рабочие часы - доступ к рабочим сайтам

http_access allow local_net work_hours work_sites

# Запрет социальных сетей в рабочее время

http_access deny local_net work_hours social_networks

# Запрет скачивания исполняемых файлов

http_access deny exe_files

# Запрет небезопасных методов

http_access deny unsafe_methods

# Разрешение локальной сети в нерабочее время

http_access allow local_net

# Запрет всего остального

http_access deny all

5.2. Создание файла заблокированных сайтов

sudo nano /etc/squid/blocked_sites.txt

Содержимое файла:

# Социальные сети

facebook.com

twitter.com

instagram.com

tiktok.com

reddit.com

# Развлечения

youtube.com

netflix.com

twitch.tv

# Нежелательный контент

porn

gambling

warez

crack

5.3. Настройка аутентификации пользователей

# Установка утилиты для аутентификации

sudo apt install -y apache2-utils

# Создание файла паролей

sudo htpasswd -c /etc/squid/passwords user1

sudo htpasswd /etc/squid/passwords user2

# Настройка аутентификации в squid.conf

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords

auth_param basic realm "Squid Proxy"

auth_param basic credentialsttl 2 hours

acl authenticated proxy_auth REQUIRED

http_access allow authenticated

🔹 6. Расширенные настройки

6.1. Настройка прозрачного прокси

# Перенаправление трафика с порта 80 на порт прокси

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

# В конфигурации Squid

http_port 3128 intercept

http_port 3129 transparent

6.2. Настройка родительского прокси

# Если Squid работает за другим прокси, то в конфигурации прописать

cache_peer parent-proxy.company.com parent 3128 0 default

never_direct allow all

6.3. Оптимизация производительности

# Увеличение размера кэша

cache_dir ufs /var/spool/squid 5000 16 256

# Настройка памяти

cache_mem 512 MB

maximum_object_size_in_memory 512 KB

# Оптимизация DNS

dns_nameservers 8.8.8.8 1.1.1.1

dns_timeout 30 seconds

# Настройка кэширования

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern -i (/cgi-bin/|\?) 0 0% 0

refresh_pattern . 0 20% 4320

🔹7. Правильное расположение правил в файле настроек Squid

7.1. Основной принцип порядка правил

В Squid правила обрабатываются СВЕРХУ ВНИЗ - первое совпавшее правило применяется немедленно!

7.2. Корректная структура конфигурации

1. НЕПРАВИЛЬНЫЙ подход (так делать НЕЛЬЗЯ):

# ❌ ОШИБОЧНАЯ КОНФИГУРАЦИЯ

http_access allow local_net

http_access allow admin_net

http_access deny social_networks

http_access deny all

Проблема: После первого же allow local_net все пользователи из local_net получат доступ, и последующие правила для них не применятся!

2. ПРАВИЛЬНЫЙ подход (так делать НУЖНО):

# ✅ КОРРЕКТНАЯ КОНФИГУРАЦИЯ

# ============ ШАГ 1: ВСЕ ЗАПРЕТЫ СНАЧАЛА====================

# Самые строгие запреты - в начале

http_access deny banned_users

http_access deny dangerous_sites

http_access deny exe_files

http_access deny social_networks work_hours

# ============= ШАГ 2: СПЕЦИФИЧЕСКИЕ РАЗРЕШЕНИЯ=============

# Затем специфические разрешения

http_access allow admin_net

http_access allow manager_net important_sites

http_access allow local_net work_sites work_hours

# ============= ШАГ 3: ОБЩИЕ РАЗРЕШЕНИЯ ====================

# Общие разрешения после специфических

http_access allow local_net

# ================ ШАГ 4: ФИНАЛЬНЫЙ ЗАПРЕТ=================

# Все что не разрешено явно - запрещено

http_access deny all

7.3. Детальный пример корректной конфигурации

# ================== ОПРЕДЕЛЕНИЕ ACL ====================

acl local_net src 192.168.1.0/24

acl admin_net src 192.168.1.100

acl work_hours time MTWHF 09:00-18:00

acl social_networks dstdomain .facebook.com .twitter.com .instagram.com

acl work_sites dstdomain .google.com .github.com .stackoverflow.com

acl exe_files urlpath_regex -i \.exe$ \.msi$ \.bat$

# ================== ПОРЯДОК ПРАВИЛ ====================

# 1. САМЫЕ СТРОГИЕ ЗАПРЕТЫ (приоритетные)

http_access deny exe_files # Запрет исполняемых файлов

http_access deny social_networks work_hours # Соцсети в рабочее время

# 2. СПЕЦИАЛЬНЫЕ РАЗРЕШЕНИЯ (условные)

http_access allow admin_net # Админам - всегда разрешено

http_access allow local_net work_sites work_hours # Рабочие сайты в рабочее время

# 3. ОБЩИЕ РАЗРЕШЕНИЯ

http_access allow local_net # Общий доступ для локальной сети

# 4. ФИНАЛЬНЫЙ ЗАПРЕТ

http_access deny all # Все остальное запрещено

7.4. Логика обработки правил

Для запроса от пользователя 192.168.1.50 к facebook.com в рабочее время:

  1. ✅ deny exe_files — не совпало (не exe файл)
  2. ✅ deny social_networks work_hours — СОВПАЛО! Запрос блокируется
  3. ❌ Последующие правила не проверяются

Для запроса от администратора 192.168.1.100 к facebook.com:

  1. ✅ deny exe_files — не совпало
  2. ✅ deny social_networks work_hours — совпало, НО...
  3. ✅ allow admin_net — СОВПАЛО раньше! Доступ разрешен

7.5. Частые ошибки и их исправление

ОШИБКА 1: Разрешения перед запретами

# ❌ НЕПРАВИЛЬНО

http_access allow local_net

http_access deny social_networks # Это правило никогда не сработает для local_net!

# ✅ ПРАВИЛЬНО

http_access deny social_networks

http_access allow local_net

ОШИБКА 2: Неполное покрытие

# ❌ НЕПРАВИЛЬНО

http_access deny bad_sites

# Отсутствует http_access deny all - будут разрешены все остальные сайты

# ✅ ПРАВИЛЬНО

http_access deny bad_sites

http_access deny all # Явный запрет всего остального

7.6. Универсальный шаблон конфигурации

# ==================== ACL DEFINITIONS ====================

# Определяем все необходимые ACL

acl network1 src 192.168.1.0/24

acl network2 src 192.168.2.0/24

acl admins src 192.168.1.100

acl work_time time MTWHF 09:00-18:00

acl blocked_sites dstdomain "/etc/squid/blocked.list"

acl allowed_sites dstdomain "/etc/squid/allowed.list"

# ==================== ACCESS RULES ====================

# 1. АБСОЛЮТНЫЕ ЗАПРЕТЫ (без исключений)

http_access deny blocked_sites

# 2. УСЛОВНЫЕ ЗАПРЕТЫ

http_access deny !work_time network1 # Сеть1 только в рабочее время

http_access deny network2 allowed_sites # Сеть2 только к разрешенным сайтам

# 3. СПЕЦИАЛЬНЫЕ РАЗРЕШЕНИЯ (привилегированные пользователи)

http_access allow admins

# 4. ОСНОВНЫЕ РАЗРЕШЕНИЯ

http_access allow network1 work_time

http_access allow network2

# 5. ФИНАЛЬНЫЙ ЗАПРЕТ

http_access deny all

7.7. Ключевое правило для запоминания

"Сначала запрети всё опасное и нежелательное, затем разреши нужное, и в конце запрети всё остальное"

Этот принцип гарантирует, что:

  • Безопасность обеспечивается в первую очередь
  • Привилегированные пользователи получают нужный доступ
  • Непредусмотренные сценарии блокируются
  • Конфигурация предсказуема и безопасна

🔹 8. Мониторинг и управление

8.1. Управление службой Squid

# Перезапуск службы

sudo systemctl restart squid

# Перезагрузка конфигурации

sudo squid -k reconfigure

# Проверка статуса кэша

sudo squidclient mgr:info

# Остановка службы

sudo systemctl stop squid

8.2. Мониторинг логов

# Просмотр логов доступа в реальном времени

sudo tail -f /var/log/squid/access.log

# Просмотр логов кэша

sudo tail -f /var/log/squid/cache.log

# Анализ логов с помощью утилит

sudo grep "DENIED" /var/log/squid/access.log

sudo awk '{print $3}' /var/log/squid/access.log | sort | uniq -c | sort -nr

8.3. Статистика и отчеты

# Получение статистики через squidclient

sudo squidclient mgr:info

sudo squidclient mgr:60min

sudo squidclient mgr:client_list

# Установка утилит для отчетов

sudo apt install -y calamaris

# Генерация отчетов

cat /var/log/squid/access.log | calamaris -a

🔹 9. Настройка клиентов для работы с прокси

9.1. Настройка в браузере

Ручная настройка:

  • Адрес прокси: IP-адрес сервера Squid
  • Порт: 3128
  • Тип: HTTP прокси
-8
-9

9.2. Настройка через PAC-файл

#javascript

// Создание файла /var/www/html/proxy.pac

function FindProxyForURL(url, host) {

// Прямой доступ к локальным ресурсам

if (isPlainHostName(host) ||

shExpMatch(host, "*.local") ||

isInNet(host, "192.168.1.0", "255.255.255.0")) {

return "DIRECT";

}

// Доступ к рабочем сайтам через прокси

if (shExpMatch(host, "*.company.com") ||

shExpMatch(host, "*.google.com") ||

shExpMatch(host, "*.github.com")) {

return "PROXY squid-server:3128";

}

// Заблокированные сайты

if (shExpMatch(host, "*.facebook.com") ||

shExpMatch(host, "*.twitter.com")) {

return "PROXY 127.0.0.1:65535"; // Заблокировать

}

// По умолчанию - через прокси

return "PROXY squid-server:3128";

}

9.3. Настройка в операционной системе

Linux:

# Временная настройка

export http_proxy="http://squid-server:3128"

export https_proxy="http://squid-server:3128"

# Постоянная настройка в /etc/environment

http_proxy="http://squid-server:3128"

https_proxy="http://squid-server:3128"

ftp_proxy="http://squid-server:3128"

Windows (PowerShell):

# Настройка прокси в реестре

Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyEnable -Value 1

Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyServer -Value "squid-server:3128"

🔹 10. Безопасность и оптимизация

10.1. Настройка firewall

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

sudo ufw allow from 192.168.1.0/24 to any port 3128

sudo ufw deny 3128

# Или использование iptables

sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3128 -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 3128 -j DROP

10.2. Настройка SELinux/AppArmor

# Проверка статуса AppArmor

sudo aa-status

# Настройка профиля для Squid

sudo nano /etc/apparmor.d/usr.sbin.squid

10.3. Регулярное обслуживание

# Создание скрипта для ротации логов

sudo nano /etc/logrotate.d/squid

Содержимое:

/var/log/squid/*.log {

daily

missingok

rotate 52

compress

delaycompress

notifempty

create 640 squid squid

postrotate

/usr/sbin/squid -k rotate

endscript

}

🔹 11. Устранение неисправностей

11.1. Типичные проблемы и решения

-10

11.2. Команды диагностики

# Проверка синтаксиса конфигурации

sudo squid -k parse

# Проверка открытых портов

sudo netstat -tulpn | grep squid

# Тестирование подключения

curl -x http://localhost:3128 http://www.google.com

# Проверка кэша

sudo squidclient mgr:cache

🔹 Заключение

Итоги настройки:

Установлен и настроен полнофункциональный прокси-сервер
Настроены политики доступа для разных групп пользователей
Реализовано кэширование для ускорения доступа
Настроено логирование и мониторинг активности
Обеспечена безопасность через ACL и firewall

Ключевые преимущества решения:

  • Экономия трафика до 30-40% за счет кэширования
  • Контроль доступа к интернет-ресурсам
  • Мониторинг интернет-активности
  • Гибкая настройка под конкретные требования
  • Бесплатность и открытый исходный код

Рекомендации по эксплуатации:

  1. Регулярно обновляйте списки блокировки
  2. Мониторьте использование кэша и производительность
  3. Настраивайте ротацию логов для экономии места
  4. Периодически проверяйте актуальность правил ACL
  5. Резервируйте конфигурацию перед изменениями

Пример команды для ежедневной проверки:

#!/bin/bash

# check-squid-health.sh

echo "=== Squid Status ==="

systemctl status squid --no-pager

echo -e "\n=== Cache Stats ==="

squidclient mgr:info | grep -E "(Store|Memory)"

echo -e "\n=== Recent Connections ==="

tail -20 /var/log/squid/access.log | grep -v "TCP_DENIED"

Squid прокси-сервер готов к работе и обеспечивает эффективное управление интернет-доступом в вашей сети.