Для инсталляции Squid используется команда:
apt-get install squid3
Когда установка завершится, сервис запустится автоматически.
Перейдём к настройке. Файл конфигурации расположен по адресу /etc/squid3/squid.conf. Для неподготовленного пользователя он может показаться совершенно необъятным — в нём более 7000 строк. Большая часть из них закомментированы и описывают значительную часть всех возможных вариантов работы Squid.
Для комфортной работы скопируем файл настроек в ту же папку под другим именем, чтобы всегда иметь под рукой стандартные настройки:
cp /etc/squid3/squid.conf /etc/squid3/backup-squid.conf
При необходимости перед началом настройки можно обратиться к официальной документации проекта.
Теперь можно удалять из файла конфигурации все закомментированные строки и пояснения, оставляя только активные директивы. По умолчанию их немного:
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid3
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
Основной инструмент настройки Squid — это списки контроля доступа или ACL (Access Control List). ACL объявляются директивой, имеющей следующий синтаксис:
acl имя параметр элементы_списка
Параметр даёт серверу понять тип элементов списка. АCL с параметром port содержит номера портов, а с параметром src — ip-адреса, с которых на сервер поступает запрос. Полный список параметров весьма обширен и доступен в официальной документации.
Таким образом, строка
acl Safe_ports port 80
добавляет в список Safe_ports, содержащий элементы типа “порт”, новое значение 80.
Директива http_access, имеющая формат
http_access указание имя_acl
определяет правила работы с элементами указанного acl. Например, строка:
http_access deny !Safe_ports
блокирует все порты, не входящие в список Safe_ports.
По умолчанию доступ к Squid разрешен только с самого сервера:
http_access allow localhost
http_access deny all
Чтобы открыть доступ клиентам локальной сети создадим для них новый список доступа c параметром src:
acl localnet src 192.168.0.0/24
И разрешим доступ:
http_access allow localnet
Теперь укажем порт, на котором работает Squid, и установим прозрачный режим работы:
http_port 192.168.0.1:3128 intercept #параметр intercept включает прозрачный режим
Минимальная настройка конфигурационного файла Squid завершена, теперь можно перейти к описанию политики информационной безопасности.
Параметр src
позволяет регулировать доступ для клиентов со статичными ip-адресами:
acl UserGroup src 192.168.0.2-192.168.0.9 # группа пользователей
acl SingleUser src 192.168.0.10 #отдельный пользователь
http_access allow UserGrour #разрешаем доступ для группы
http_access allow SingleUser # и для отдельного пользователя
http_access deny all #запрещаем всем остальным
Параметр dst
позволяет указать список ip-адресов назначения, к которым клиент желает получить доступ:
acl Net194 dst 194.67.0.0/16 #описываем некую подсеть 194.67.0.0/16
http_access deny SingleUser Net194 # запрещаем пользователю доступ к ней
Параметр dstdomain
даёт возможность указывать домен, к которому выполняется запрос:
acl SitesBlocked dstdomain .example.ru .sample.ru #указываем несколько доменных имён
http_access deny UserGroup SitesBlocked #и запрещаем к ним доступ группе пользователей
Если необходимо указать домен источника, используется параметр srcdomain
.
Параметры srcdom_regex
и dstdom_regex
позволяют использовать в ACL регулярные выражения:
acl SitesRegexFree dstdom_regex free #сайты, содержащие в доменном имени слово “free”
acl SitesRegexComOrg dstdom_regex \.com$ \.org $ #сайты доменных зон .com и .org
http_access deny SingleUser SitesRegexFree
http_access deny SingleUser SitesRegexComOrg
Ключ -i
необходим для игнорирования регистра символов в регулярных выражениях:
acl имя [-i] url_regex элементы_списка
С помощью параметра url_regex
возможно указать шаблон регулярного выражения для URL:
acl MusicMP3 url_regex -i \.mp3$ #охватывает музыкальные файлы .mp3
Параметр port
используется для указания списка портов. Он будет полезен для запрета отдельных портов, которые используются установленными на клиентской машине программами, например интернет-мессенджерами.
Ограничение пользователей по времени осуществляется с помощью параметра time
:
acl имя time дни чч:мм-ЧЧ:ММ
Где день: M — Понедельник, T — Вторник, W — Среда, H — Четверг, F — Пятница, A — Суббота, S — Воскресенье.
Важно отметить что время начала промежутка должно быть всегда меньше времени конца. Например, возможно указать вариант 00:00-23:59, но промежуток 20:00-09:00 придётся разбить на 20:00-23:59 и 00:00-09:00.
Ограничения по времени можно комбинировать и с другими правилами. Есть возможность по расписанию разрешать или запрещать доступ к просмотру определённых сайтов, открывать и закрывать порты, управлять доступностью IP-адресов и отдельных доменов. Например:
acl WeekendTime time AS 10:00-15:00 #обозначим некоторый временной промежуток для выходных дней:
http_access allow SingleUser WeekendTime MusicMP3 #разрешим пользователю достум к файлам формата mp3 в выбранный промежуток времени
http_access deny SingleUser MusicMP3 #и запретим в любое другое время
Параметр proto
позволяет указывать протокол передачи информации:
acl имя_acl proto список
Используя его можно запретить пересылку файлов по протоколу ftp:
acl proto_ftp proto ftp
http_access deny SingleUser proto_ftp
Ограничения по скорости
На сегодняшний день, когда ушли в прошлое каналы с пропускной способностью в 256 кбит/с и менее, можно ошибочно предположить что устанавливать ограничения по скорости соединения в случае небольшого количества клиентов локальной сети бессмысленно. Тем не менее, очень желательно устанавливать хотя бы самые простые правила регулирования скорости соединения для отдельных пользователей, чтобы избежать перегрузки сети и нехватки ресурсов для отдельных пользователей, для которых важна хорошая скорость работы сети. Подводные камни могут скрываться в следующих процессах:
- автоматическое резервное копирование данных с сервера компании и прочие процессы передачи больших объемов данных, выполняющиеся сервером по расписанию;
- операции передачи файлов для личных и рабочих нужд, особенно своей способностью использовать все доступные сетевые ресурсы известен протокол BitTorrent;
- технические неисправности в отдельных компьютерах и программах, а так же действия вредоносных программ;
- злонамеренные сетевые атаки на отдельные компьютеры локальной сети.
Прокси-сервер Squid позволяет реализовывать политику ограничения скорости с помощью механизма пулов. Пул можно представить себе, как емкость с водой, которая постоянно заполняется до краёв, а клиенты по мере надобности наливают воду в свои стаканы через персональные краны.
Работу пулов регулируют три директивы: delay_class
, delay_parameters
, delay_access
.
Количество пулов устанавливает директива delay_pools:
delay_pools количество_объявленных_пулов
Создадим несколько пулов:
delay_pools 2 #всего 2 пула с номерами 1 и 2 соответственно
Пулы могут быть трёх классов:
- Один кран на всю сеть ограничивает поток воды;
- Весь поток ограничен одним краном, после которого идут отдельные персональные краны(для каждого IP-адреса сети);
- Весь поток ограничен одним краном, от которого идут отдельные краны для каждой группы пользователей(подсети), каждый из которых, в свою очередь, делится на персональные краны для каждого клиента(для отдельного IP-адреса).
Класс пула должен быть указан в директиве delay_class
:
delay_class номер_пула класс_пула
Укажем класс пула:
delay_class 1 1 #пул №1 ограничит скорость для всех клиентов, для которых он будет применен
Директива delay_parameters
устанавливает параметры пула:
delay_parameters номер_пула параметры
Формат записи параметров зависит от выбранного класса пула:
delay_parameters 1 байт_на_всю_сеть # для класса 1
delay_parameters 1 на_всю_сеть на_клиента #для класса 2
delay_parameters 1 на_всю_сеть на_подсеть на_клиента #для класса 3
Для пула №1 выбран класс 1, установим для него скорость передачи данных в 512 кбит/с:
delay_parameters 1 64000/64000 # 512 Кбит = 64 Кбайта = 64000 байт
Запись параметра производится по следующим правилам: сперва указывается ограничение скорости, затем указывается лимит, после которого это ограничение начинает действовать. Таким образом значение параметра 64000/64000 говорит о том, что после того, как пользователь скачал на максимальной скорости первые 64Кб запроса, на клиента накладывается ограничение скорости в 512 Кбит/с. Удобно устанавливать второе значение параметра несколько больше чем первое, например конфигурация:
delay_parameters 1 64000/256000
позволяет пользователю получить первые 256Кбайт запроса на максимальной скорости и только потом ограничить клиента шириной канала в 512 Кбит/с.
Для снятия ограничений по скорости используйте значение -1, например:
delay_parameters 1 -1 #неограниченная скорость доступа для пула №1
Теперь можно распространять действие пула на отдельных клиентов сети при помощи директивы delay_access
, имеющей формат:
delay_access номер_пула действие имя_acl
Параметр “ действие” имеет значения allow
(разрешить) и deny
(запретить). Пул будет действовать на тех клиентов, которым он разрешен и не будет действовать на тех, кому запрещён.
Например, конфигурация:
delay_access 1 deny UserGroup
delay_access 1 allow SingleUser
распространяет действия пула №1 на отдельного пользователя SingleUser, но не затрагивает группу пользователей UserGroup.
Для группы пользователей используем пул №2:
delay_class 2 2 # пул №2 позволит отрегулировать общую ширину канала для всей группы клиентов и установить отдельные органичения для каждого пользователя группы.
Опишем ограничения:
delay_parameters 2 512000/512000 64000/128000 # 8 Мбит/с - ограничение ширина канала для всей группы, на этой скорости клиент может скачать первые 128Кбайт запроса, а затем скорость его соединения упадёт до 512 Кбит/с.
Применим ограничения пула №2:
delay_access 1 allow UserGroup #действует на группу пользователей UserGroup
delay_access 1 deny SingleUser #но не действует на отдельного пользователя SingleUser
Настройка кэширования
Прокси-сервер Squid поддерживает два вида кэширования — кэш в оперативной памяти и на жестком диске. При их настройке стоит помнить, что кэширование в принципе может ускорить скорость обработки запросов, но может вызвать и обратный эффект — в случае неверно подобранных параметров конфигурации. Также немаловажным является тот факт, что любое кэширование влечет дополнительную нагрузку на ресурсы сервера, в частности, слишком большой объем кэша в RAM может полностью парализовать работу сервера, спровоцировав нехватку оперативной памяти.
В стандартной конфигурации Squid включен только RAM кэш, объем используемой памяти установлен на 256Мб. Увеличим объем кэша и установим максимальный размер кэшированного объекта с помощью соответствующих директив:
cache_mem 1024 MB # объем доступной для кэширования памяти
maximum_object_size_in_memory 512 KB # максимальный размер объекта в кэше
Следует учитывать, что кэш в оперативной памяти сбрасывается каждый раз при перезагрузке или выключении сервера, поэтому оценивать результаты изменения конфигурации стоит только по прошествии некоторого времени.
За использование HDD кэша отвечает директива cache_dir
, имеющая формат:
cache_dir тип_хранилища путь_к_хранилищу размер L1 L2
cache_dir ufs /var/squid_cache 1024 16 256
Размер кэша на диске указывается в мегабайтах, в примере выше кэш с максимальным размером 1 Гб будет хранится в папке /var/squid_cache. Тип хранилища ufs стандартный. Параметры 16 и 256 указывают количество директорий первого и второго уровня, эти значения так же прописаны в документации как стандартные.
Максимальный размер объекта в дисковом кэше также можно указать:
maximum_object_size 2 MB
Настройка логирования
Squid имеет мощную систему подробного логирования для контроля проходящего через прокси-сервер траффика. Логи делятся на три различных журнала:
- access.log — содержит записи о запросах клиентов;
- store.log — содержит записи, относящиеся к действиям с кэшем;
- cache.log — содержит сообщения об ошибках, возникающих при работе Squid.
Чаще всего используется журнал access.log. Укажем в конфигурации собственный путь для его хранения:
access_log daemon:/etc/squid3/logs/access.log squid
Параметр, имеющий в примере значение “squid” определяет формат лог-файла. Можно задать формат лога “common” для того, чтобы можно было обрабатывать полученный журнал сторонними программами, но в таком случае стоит помнить, что этот формат лога не содержит всей информации, которая есть в логе по умолчанию. Помимо стандартных вариантов имеется возможность создать собственный формат лог-файла, используя директиву logformat. Подробную информацию о работе этой директивы можно найти в документации к продукту.
Директивы cache_log
и cache_store_log
позволяют указать путь к файлам cache.log и store.log соответственно. Они не требуют указания формата:
cache_log daemon:/etc/squid3/logs/cache.log
cache_store_log daemon:/etc/squid3/logs/store.log
Помимо различных видов журналов Squid имеет настройку уровней логирования. За глубину отладки отвечает директива debug_options
. У неё два обязательных параметра — секция и глубина отладки:
debug_options ALL,1 # секция “ALL”, глубина отладки 1
Значение секции рекомендуется оставлять ALL (либо осторожно выбирать конкретную секцию из списка). Уровень логирования же может менятся в диапазоне от 1 до 9, где с ростом уровня увеличивается подробность логов, и, соответственно, количество записей в журнале. Как правило, уровень выше 5 редко используется в реальной жизни, потому что выводит уже слишком много “избыточной” информации для каждого произошедшего события.
Для того чтобы всегда иметь возможность начать новый файл логов и упорядочить их существует параметр количества ротаций:
logfile_rotate 31
Значение 31 означает, что при создании нового файла логов старый получит расширение от 0 до 30 и дальнейшая запись в него вестись не будет. Создание нового файла логов производится с помощью команды:
squid -k rotate
Таким образом, добавив в cron задачу каждый день создавать новый файл логов, можно иметь упорядоченный отчет обо всём прошедшем через прокси-сервер трафике за прошедший месяц.
Если даже с самым низким уровнем логирования объем логов возрастает до нежелательных масштабов — стоит применить дополнительные средства, вроде автоматического сжатия журналов или переноса их в отдельное хранилище. Так же можно изменить количество или частоту ротаций в зависимости от задачи. Можно хранить меньшее количество логов, либо чаще создавать свежий журнал, а старый архивировать и перемещать. Для прокси-сервера Squid есть множество надстроек и сторонних программ, упрощающих все этапы работы с лог-файлами.
Оставим без изменений остальные параметры и проверим файл настроек с помощью команды:
squid3 -k check
Эта команда предназначена для поиска ошибок в конфигурационном файле, если она ничего не выводит — значит ошибок нет.
Теперь осталось применить новые параметры:
service squid3 reload
После завершения настройки прокси-сервера перенаправим на него весь трафик локальной сети, внеся изменения в файл /etc/nat командой:
nano /etc/nat
Добавим в самый низ файла следующую строку:
#Перенаправление всего http-трафика на прокси-сервер
iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128
После этого перезагрузим сервер для автоматического применения новых настроек:
reboot
Таким образом, несмотря на большое общее количество параметров настройки Squid, минимальный набор для начала работы достаточно скромен. Использование прокси-сервера Squid позволит вам быстро реализовать политику доступа групп пользователей или отдельных клиентов к ресурсам сети интернет, а так же мониторинг их деятельности и сбор статистики об использовании канала.
Один комментарий на «Установка и настройка Squid»