Установка и настройка Squid на Ubuntu 20.04

Squid — это полнофункциональный прокси-сервер на базе Linux, часто используемый для фильтрации трафика, повышения безопасности и DNS-запросов. Его также применяют для ускорения работы веб-сервера путём кеширования ресурсов. Проще говоря, сервер Squid выступает промежуточным звеном между рабочей станцией и интернетом: он перенаправляет входящие клиентские запросы к серверам, где хранятся данные, чтобы сделать доступ к ним проще и быстрее. Squid поддерживает протоколы HTTP, FTP, TLS, SSL, Gopher и HTTPS.
В этом руководстве показано, как установить и настроить Squid на Ubuntu 20.04.
Что потребуется
- Сервер с Ubuntu 20.04.
- Доступ root или пользователь с sudo-привилегиями.
Перед началом
Обновите списки пакетов и установленные пакеты перед установкой Squid:
apt-get update -y
apt-get upgrade -yПосле обновления при необходимости перезагрузите систему:
rebootУстановка Squid
Пакет squid присутствует в стандартном репозитории Ubuntu 20.04. Установите его командой:
apt-get install squid -yПроверить статус сервиса:
systemctl status squidПример ожидаемого вывода (для ориентира):
? squid.service - Squid Web Proxy Server
Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-08-23 12:00:24 UTC; 11s ago
Docs: man:squid(8)
Process: 49265 ExecStartPre=/usr/sbin/squid --foreground -z (code=exited, status=0/SUCCESS)
Process: 49282 ExecStart=/usr/sbin/squid -sYC (code=exited, status=0/SUCCESS)
Main PID: 49283 (squid)
Tasks: 4 (limit: 2353)
Memory: 16.4M
CGroup: /system.slice/squid.service
??49283 /usr/sbin/squid -sYC
??49285 (squid-1) --kid squid-1 -sYC
??49287 (logfile-daemon) /var/log/squid/access.log
??49288 (pinger)
Aug 23 12:00:24 ubuntu2004 squid[49285]: Max Swap size: 0 KB
Aug 23 12:00:24 ubuntu2004 squid[49285]: Using Least Load store dir selection
Aug 23 12:00:24 ubuntu2004 squid[49285]: Set Current Directory to /var/spool/squid
Aug 23 12:00:24 ubuntu2004 squid[49285]: Finished loading MIME types and icons.
Aug 23 12:00:24 ubuntu2004 squid[49285]: HTCP Disabled.
Aug 23 12:00:24 ubuntu2004 squid[49285]: Pinger socket opened on FD 14
Aug 23 12:00:24 ubuntu2004 squid[49285]: Squid plugin modules loaded: 0
Aug 23 12:00:24 ubuntu2004 squid[49285]: Adaptation support is off.
Aug 23 12:00:24 ubuntu2004 squid[49285]: Accepting HTTP Socket connections at local=[::]:3128 remote=[::] FD 12 flags=9
Aug 23 12:00:25 ubuntu2004 squid[49285]: storeLateRelease: released 0 objectsПо умолчанию Squid слушает порт 3128. Проверить это можно командой:
netstat -plunt | grep 3128Ожидаемый вывод:
tcp6 0 0 :::3128 :::* LISTEN 50017/(squid-1)Если всё в порядке — переходите к настройке доступа.
Настройка аутентификации по IP
Этот метод ограничивает доступ по IP-адресам клиентов. Отредактируйте основной конфигурационный файл:
nano /etc/squid/squid.confДобавьте в начало файла (или рядом с существующими acl):
acl client1 src 192.168.10.10
acl client2 src 192.168.10.11
http_access allow client1 client2Сохраните файл и перезапустите сервис:
systemctl restart squidГде client1 и client2 — произвольные имена ACL, а 192.168.10.10 и 192.168.10.11 — IP клиентов. После этого доступ к интернету через прокси получат только указанные IP.
Важно: порядок правил http_access в конфигурации имеет значение — Squid применяет первое подходящее правило.
Настройка аутентификации по пользователю и паролю
Для аутентификации по логину/паролю удобно использовать Apache utils, который предоставляет утилиту htpasswd.
Установите пакет:
apt install apache2-utils -yСоздайте файл с паролями и первого пользователя:
htpasswd /etc/squid/passwd client1Задайте и подтвердите пароль. Добавьте второго пользователя:
htpasswd /etc/squid/passwd client2Проверьте содержимое файла паролей:
cat /etc/squid/passwdПример строки в файле:
client1:$apr1$CPlx8eVt$NJq3CT/hzfDCnAZRypIq5/Далее в конфигурации Squid замените предыдущие IP-acl правила (если они были) или добавьте в начало:
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_usersПерезапустите Squid:
systemctl restart squidТеперь при попытке выхода в интернет через прокси браузер потребует логин и пароль.
Комбинированная аутентификация (IP + пользователь)
Чтобы требовать одновременно подходящий IP и корректную учетную запись, объедините правила:
acl client1 src 192.168.10.10
acl client2 src 192.168.10.11
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow client1 client2 ncsa_usersЭто правило разрешит доступ только если выполнено условие по IP и (или) по учётной записи в соответствии с вашей логикой. Тонкая настройка доступов возможна через более сложные ACL (time, dst, url_regex и т.д.).
Анонимизация трафика через Squid
Чтобы скрыть исходный IP клиентов от внешних серверов, добавьте в конфигурацию следующие правила, которые убирают или ограничивают заголовки:
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После сохранения перезапустите сервис:
systemctl restart squidПримечание: полная анонимизация невозможна для всех случаев — некоторые приложения используют другие механизмы идентификации (например, WebRTC в браузере, плагины или TLS Fingerprinting).
Проверка работы прокси в браузере
На клиенте откройте браузер Mozilla Firefox и перейдите в настройки сети.

В разделе сетевых настроек выберите ручную конфигурацию, введите IP-адрес вашего Squid-сервера и порт 3128, поставьте галочку “Use this proxy server for all protocols” и сохраните.

При обращении к ресурсу, например https://www.whatismyip.com/, браузер может запросить имя пользователя и пароль (если включена базовая аутентификация):

Введите учётные данные, после чего сайт должен показать IP адрес Squid-сервера, а не клиента:

Чеклист для развёртывания (роль: системный администратор)
- Обновил систему и установил squid.
- Настроил бэкап /etc/squid/squid.conf перед изменениями.
- Выбрал модель аутентификации (IP / пароль / комбинированная).
- Настроил логирование и ротацию логов (/var/log/squid).
- Ограничил доступ по firewall (порт 3128 только для доверенных сетей).
- Проверил работу через браузер и командную строку (curl/wget).
- Задокументировал учётные записи и ACL.
Критерии приёмки
- Squid запущен и слушает порт 3128.
- Для авторизованных клиентов доступ в интернет проходит через прокси.
- Неавторизованные клиенты получают отказ или запрос на аутентификацию.
- Логи фиксируют запросы и ошибки.
Отладка и часто встречаемые проблемы
- “Connection refused” — проверьте, слушает ли Squid порт 3128:
ss -plunt | grep 3128. - Проблемы с правами на /etc/squid/passwd — файл должен быть доступен процессу squid (обычно root:root с 640/600 в зависимости от настроек).
- 407 Proxy Authentication Required — браузер не передал или неправильно передал учётные данные; проверьте auth_param и путь к basic_ncsa_auth.
- Ошибки в конфигурации — используйте
squid -k parseдля проверки синтаксиса.
squid -k parseЕсли вы вносите ошибки в конфиг и сервис не перезапускается, восстановите резервную копию конфигурации и выполните systemctl restart squid.
Рекомендации по безопасности
- Ограничьте доступ к порту прокси на уровне брандмауэра (ufw/iptables) только для доверенных подсетей.
- Ограничьте административный доступ к серверу (SSH с ключевой аутентификацией, отключение root-login по паролю).
- Включите TLS/HTTPS-терминацию, если вы действуете как HTTPS-прокси или используете SSL Bump (требует дополнительной политики и сертификатов).
- Минимизируйте количество разрешённых заголовков и не применяйте
request_header_access All allow allбез строгой необходимости. - Периодически проверяйте и чистите /var/spool/squid и настройки кэширования.
- Включите ротацию логов (logrotate) и контроль доступа к логам.
Приватность и соответствие (коротко)
Squid хранит логи запросов; если ваши пользователи подпадают под требования законодательства о защите данных (например, GDPR), обеспечьте:
- Минимизацию собираемых данных.
- Периоды хранения логов и процедуру их удаления.
- Разрешения на обработку персональных данных и документирование целей обработки.
Быстрые команды и шпаргалка
- Проверить статус сервиса:
systemctl status squid - Проверить порт:
ss -plunt | grep 3128 - Проверить конфигурацию:
squid -k parse - Перезапустить:
systemctl restart squid
Примеры конфигураций — шаблоны
Минимальная конфигурация для IP-ограничения:
# /etc/squid/squid.conf (фрагмент)
acl trusted src 192.168.10.0/24
http_access allow trusted
http_access deny all
http_port 3128
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.logМинимальная конфигурация для базовой аутентификации:
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users
http_access deny all
http_port 3128Когда такой подход не подходит
- Если вам нужна полная прозрачность и контроль на уровне приложений (например, детальный DPI), то Squid может быть недостаточен — используют специализированные NGFW/UTM.
- Для высоконагруженных сетей потребуется тонкая настройка кэша и дисковых подсистем; стандартная конфигурация под тяжёлую нагрузку не готова.
План развития и тесты приёмки
Короткая дорожная карта:
- Этап 1: установка и базовая настройка (текущая инструкция).
- Этап 2: внедрение аутентификации и брандмауэра.
- Этап 3: мониторинг, ротация логов, SSL/Bump (при необходимости).
Критерии тестов приёмки:
- Проход запроса из доверенной подсети через прокси — OK.
- Блокировка из недоверенной подсети — OK.
- Запрос с неверными учётными данными — блок.
Сводка
Squid — гибкий инструмент для проксирования, кеширования и контроля доступа. Начните с простой конфигурации, протестируйте доступы, затем добавляйте аутентификацию, правила и механизмы безопасности. Документируйте изменения и поддерживайте бэкапы конфигураций.
Важно: перед внесением изменений в продакшн — тестируйте конфигурации на тестовом окружении и сохраняйте резервные копии файлов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента