Учебный центр Skill Up Professional - Главная
> >Установка и настройка прокси-сервера Squid на Ubuntu
При настройке локальной сети офиса или предприятия часто реализуется схема, при которой доступ в интернет для всех компьютеров организован через один общий шлюз. создания шлюза удобно использовать прокси-сервер. Программный пакет Squid выполняет функции прокси-сервера для протоколов HTTP, FTP и, в случае грамотной специализированной настройки, HTTPS. Squid может работать в качестве прозрачного прокси-сервера. В таком случае пользователь может даже не знать, что его запрос был обработан прокси-сервером. Благодаря этому отпадает необходимость настройки каждой клиентской машины для работы в локальной сети. Прежде чем переходить к установке и настройке прокси-сервера Squid, необходимо настроить локальную сеть. Для этого на проксируещем сервере должно быть как минимум два сетевых интерфейса - первый осуществляет взаимодействие с Интернетом, в то время как ко второму будут подключаться компьютеры локальной сети. Все настройки и команды приводится на примере дистрибутива Ubuntu. Чтобы изменить конфигурацию локальной сети или внести полученные от провайдера настройки для подключения сервера к сети Интернет, необходимо отредактировать всего один конфигурационный файл: Приведём его к следующему виду: Для применения новых настроек необходимо перезапустить сеть командой: По окончании настройки желательно убедиться, что интерфейсы настроены верно. Вывод информации о сетевых подключениях осуществляется командой: Полученные данные будут иметь примерно следующий вид: По этим данным ясно, что у сервера имеется два сетевых интерфейса, eth0 и eth1, с IP-адресами 185.22.174.75 для eth0 и 192.168.0.1 для eth1. К адаптеру eth0 подключен кабель интернет-провайдера, а к адаптеру eth1 будут подключены компьютеры локальной сети. На данном этапе уже есть возможность указать на локальной машине статический IP-адрес из локальной подсети, например 192.168.0.2, наш сервер (192.168.0.1), в качестве шлюза, и DNS-сервер. Компьютер будет подключен к локальной сети. Но система статических IP-адресов имеет свои недостатки: необходимо настраивать каждую машину для подключения к локальной сети, возможен конфликт одинаковых IP и тому подобное. Поэтому следующим этапом будет настройка механизма автоматической трансляции IP-адресов через DHCP. В таком случае при подключении к сети нового компьютера все настройки будут переданы ему автоматически. Для установки сервера DHCP используется команда: Файл конфигурации по умолчанию находится в /etc/dhcp/dhcpd.conf, откроем файл в редакторе с помощью команды: В большинстве случаев минимальная настройка производится внесением блока вида: После изменения конфигурационного файла необходимо перезапустить сервер DHCP для применения новых настроек: Теперь все клиенты локальной сети будут получать все настройки автоматически при подключении. После организации локальной сети необходимо подключить её к Интернету - для этого реализуется трансляция сетевых адресов (Network Address Translation или NAT). Благодаря NAT несколько компьютеров могут выходить в интернет, используя один IP-адрес. В Ubuntu механизм NAT реализуется с помощью сетевого фильтра iptables, который одновременно является брандмауэром. Для автоматической загрузки настроек iptables при старте системы создадим новый пустой конфигурационный файл командой: И откроем его для изменения: Варианты конфигурации брандмауэра зависят от политики сетевой безопасности в компании. Минимальный набор настроек выглядит следующим образом: После сохранения изменений обеспечим для файла права на исполнение: Далее необходимо поставить созданный файл на автозагрузку при включении сервера. Для этого откроем рассмотренный ранее файл interfaces: и добавим в самый низ строку: Перезагрузим сервер для автоматического применения новых настроек: Для инсталляции Squid используется команда: Когда установка завершится, сервис запустится автоматически. Перейдём к настройке. Файл конфигурации расположен по адресу /etc/squid3/squid.conf. Для неподготовленного пользователя он может показаться совершенно необъятным - в нём более 7000 строк. Большая часть из них закомментированы и описывают значительную часть всех возможных вариантов работы Squid. Для комфортной работы скопируем файл настроек в ту же папку под другим именем, чтобы всегда иметь под рукой стандартные настройки: При необходимости перед началом настройки можно обратиться к официальной документации проекта. Теперь можно удалять из файла конфигурации все закомментированные строки и пояснения, оставляя только активные директивы. По умолчанию их немного: Основной инструмент настройки Squid - это списки контроля доступа или ACL (Access Control List). ACL объявляются директивой, имеющей следующий синтаксис: Параметр даёт серверу понять тип элементов списка. АCL с параметром port содержит номера портов, а с параметром src - ip-адреса, с которых на сервер поступает запрос. Полный список параметров весьма обширен и доступен в официальной документации. Таким образом, строка добавляет в список Safe_ports, содержащий элементы типа “порт”, новое значение 80. Директива http_access, имеющая формат определяет правила работы с элементами указанного acl. Например, строка: блокирует все порты, не входящие в список Safe_ports. По умолчанию доступ к Squid разрешен только с самого сервера: Чтобы открыть доступ клиентам локальной сети создадим для них новый список доступа c параметром src: И разрешим доступ: Теперь укажем порт, на котором работает Squid, и установим прозрачный режим работы: Минимальная настройка конфигурационного файла Squid завершена, теперь можно перейти к описанию политики информационной безопасности. Параметр Параметр Параметр Если необходимо указать домен источника, используется параметр Параметры Ключ С помощью параметра Параметр Ограничение пользователей по времени осуществляется с помощью параметра Где день: M - Понедельник, T - Вторник, W - Среда, H - Четверг, F - Пятница, A - Суббота, S - Воскресенье. Важно отметить что время начала промежутка должно быть всегда меньше времени конца. Например, возможно указать вариант 00:00-23:59, но промежуток 20:00-09:00 придётся разбить на 20:00-23:59 и 00:00-09:00. Ограничения по времени можно комбинировать и с другими правилами. Есть возможность по расписанию разрешать или запрещать доступ к просмотру определённых сайтов, открывать и закрывать порты, управлять доступностью IP-адресов и отдельных доменов. Например: Параметр Используя его можно запретить пересылку файлов по протоколу ftp: На сегодняшний день, когда ушли в прошлое каналы с пропускной способностью в 256 кбит/с и менее, можно ошибочно предположить что устанавливать ограничения по скорости соединения в случае небольшого количества клиентов локальной сети бессмысленно. Тем не менее, очень желательно устанавливать хотя бы самые простые правила регулирования скорости соединения для отдельных пользователей, чтобы избежать перегрузки сети и нехватки ресурсов для отдельных пользователей, для которых важна хорошая скорость работы сети. Подводные камни могут скрываться в следующих процессах: Прокси-сервер Squid позволяет реализовывать политику ограничения скорости с помощью механизма пулов. Пул можно представить себе, как емкость с водой, которая постоянно заполняется до краёв, а клиенты по мере надобности наливают воду в свои стаканы через персональные краны. Работу пулов регулируют три директивы: Количество пулов устанавливает директива delay_pools: Создадим несколько пулов: Пулы могут быть трёх классов: Класс пула должен быть указан в директиве Укажем класс пула: Директива Формат записи параметров зависит от выбранного класса пула: Для пула №1 выбран класс 1, установим для него скорость передачи данных в 512 кбит/с: Запись параметра производится по следующим правилам: сперва указывается ограничение скорости, затем указывается лимит, после которого это ограничение начинает действовать. Таким образом значение параметра 64000/64000 говорит о том, что после того, как пользователь скачал на максимальной скорости первые 64Кб запроса, на клиента накладывается ограничение скорости в 512 Кбит/с. Удобно устанавливать второе значение параметра несколько больше чем первое, например конфигурация: позволяет пользователю получить первые 256Кбайт запроса на максимальной скорости и только потом ограничить клиента шириной канала в 512 Кбит/с. Для снятия ограничений по скорости используйте значение -1, например: Теперь можно распространять действие пула на отдельных клиентов сети при помощи директивы Параметр “ действие” имеет значения Например, конфигурация: распространяет действия пула №1 на отдельного пользователя SingleUser, но не затрагивает группу пользователей UserGroup. Для группы пользователей используем пул №2: Опишем ограничения: Применим ограничения пула №2: Прокси-сервер Squid поддерживает два вида кэширования - кэш в оперативной памяти и на жестком диске. При их настройке стоит помнить, что кэширование в принципе может ускорить скорость обработки запросов, но может вызвать и обратный эффект - в случае неверно подобранных параметров конфигурации. Также немаловажным является тот факт, что любое кэширование влечет дополнительную нагрузку на ресурсы сервера, в частности, слишком большой объем кэша в RAM может полностью парализовать работу сервера, спровоцировав нехватку оперативной памяти. В стандартной конфигурации Squid включен только RAM кэш, объем используемой памяти установлен на 256Мб. Увеличим объем кэша и установим максимальный размер кэшированного объекта с помощью соответствующих директив: Следует учитывать, что кэш в оперативной памяти сбрасывается каждый раз при перезагрузке или выключении сервера, поэтому оценивать результаты изменения конфигурации стоит только по прошествии некоторого времени. За использование HDD кэша отвечает директива Размер кэша на диске указывается в мегабайтах, в примере выше кэш с максимальным размером 1 Гб будет хранится в папке /var/squid_cache. Тип хранилища ufs стандартный. Параметры 16 и 256 указывают количество директорий первого и второго уровня, эти значения так же прописаны в документации как стандартные. Максимальный размер объекта в дисковом кэше также можно указать: Squid имеет мощную систему подробного логирования для контроля проходящего через прокси-сервер траффика. Логи делятся на три различных журнала: Чаще всего используется журнал access.log. Укажем в конфигурации собственный путь для его хранения: Параметр, имеющий в примере значение “squid” определяет формат лог-файла. Можно задать формат лога “common” для того, чтобы можно было обрабатывать полученный журнал сторонними программами, но в таком случае стоит помнить, что этот формат лога не содержит всей информации, которая есть в логе по умолчанию. Помимо стандартных вариантов имеется возможность создать собственный формат лог-файла, используя директиву logformat. Подробную информацию о работе этой директивы можно найти в документации к продукту. Директивы Помимо различных видов журналов Squid имеет настройку уровней логирования. За глубину отладки отвечает директива Значение секции рекомендуется оставлять ALL (либо осторожно выбирать конкретную секцию из списка). Уровень логирования же может менятся в диапазоне от 1 до 9, где с ростом уровня увеличивается подробность логов, и, соответственно, количество записей в журнале. Как правило, уровень выше 5 редко используется в реальной жизни, потому что выводит уже слишком много “избыточной” информации для каждого произошедшего события. Для того чтобы всегда иметь возможность начать новый файл логов и упорядочить их существует параметр количества ротаций: Значение 31 означает, что при создании нового файла логов старый получит расширение от 0 до 30 и дальнейшая запись в него вестись не будет. Создание нового файла логов производится с помощью команды: Таким образом, добавив в cron задачу каждый день создавать новый файл логов, можно иметь упорядоченный отчет обо всём прошедшем через прокси-сервер трафике за прошедший месяц. Если даже с самым низким уровнем логирования объем логов возрастает до нежелательных масштабов - стоит применить дополнительные средства, вроде автоматического сжатия журналов или переноса их в отдельное хранилище. Так же можно изменить количество или частоту ротаций в зависимости от задачи. Можно хранить меньшее количество логов, либо чаще создавать свежий журнал, а старый архивировать и перемещать. Для прокси-сервера Squid есть множество надстроек и сторонних программ, упрощающих все этапы работы с лог-файлами. Оставим без изменений остальные параметры и проверим файл настроек с помощью команды: Эта команда предназначена для поиска ошибок в конфигурационном файле, если она ничего не выводит - значит ошибок нет. Теперь осталось применить новые параметры: После завершения настройки прокси-сервера перенаправим на него весь трафик локальной сети, внеся изменения в файл /etc/nat командой: Добавим в самый низ файла следующую строку: После этого перезагрузим сервер для автоматического применения новых настроек: Таким образом, несмотря на большое общее количество параметров настройки Squid, минимальный набор для начала работы достаточно скромен. Использование прокси-сервера Squid позволит вам быстро реализовать политику доступа групп пользователей или отдельных клиентов к ресурсам сети интернет, а так же мониторинг их деятельности и сбор статистики об использовании канала.
Пакет Squid распространяется по свободной лицензии GNU General Public License и имеет следующие основные возможности:Настройка локальной сети
nano /etc/network/interfaces
auto eth0
iface eth0 inet dhcp #для автоматичесокго получения настроек от провайдера по dhcp
auto eth1
iface eth1 inet static
address 192.168.0.1 #ip-адрес
netmask 255.255.255.0 #маска подсети
service networking restart
ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3c:fc:93:a6
inet addr:185.22.174.75 Bcast:185.22.174.255 Mask:255.255.255.0
inet6 addr: 2a00:1838:36:1c3::7385/64 Scope:Global
inet6 addr: fe80::216:3cff:fefc:93a6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7576291 errors:0 dropped:0 overruns:0 frame:0
TX packets:65851 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:628650171 (628.6 MB) TX bytes:10778431 (10.7 MB)
eth1 Link encap:Ethernet HWaddr 0a:19:bc:0d:00:9d
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::819:bcff:fe0d:9d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12581 errors:0 dropped:0 overruns:0 frame:0
TX packets:8484 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1884987 (1.8 MB) TX bytes:1123251 (1.1 MB) Настройка DHCP
sudo apt-get install isc-dhcp-server
nano /etc/dhcp/dhcpd.conf
subnet 192.168.0.0 netmask 255.255.255.0 {#подсеть 192.168.0.0/24
range 192.168.0.2 192.168.0.254; #диапазон выдаваемых адресов
option domain-name-servers 8.8.8.8;#dns-сервер
option domain-name "test.loc"; #имя домена
option routers 192.168.0.1; # “рекомендуемый” шлюз
default-lease-time 604800; # стандартная длительность аренды ip-адреса
max-lease-time 604800; #максимальная длительность аренды ip-адреса
}
/etc/init.d/isc-dhcp-server restart
Настройка NAT
sudo touch /etc/nat
nano /etc/nat
#!/bin/sh
#Пересылка пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
#Откроем доступ наружу из внутренней сети
iptables -A FORWARD -i tap0 -o eth0 -j ACCEPT
#Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.1/24 -j MASQUERADE
#Разрешаем принимать ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#Ограничим доступ во внутреннюю сеть снаружи
iptables -A FORWARD -i eth0 -o tap0 -j REJECT
chmod +x /etc/nat
nano /etc/network/interfaces
post-up /etc/nat
reboot
Установка и настройка Squid
apt-get install squid3
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
acl имя параметр элементы_списка
acl Safe_ports port 80
http_access указание имя_acl
http_access deny !Safe_ports
http_access allow localhost
http_access deny all
acl localnet src 192.168.0.0/24
http_access allow localnet
http_port 192.168.0.1:3128 intercept #параметр intercept включает прозрачный режим
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 дни чч:мм-ЧЧ:ММ
acl WeekendTime time AS 10:00-15:00 #обозначим некоторый временной промежуток для выходных дней:
http_access allow SingleUser WeekendTime MusicMP3 #разрешим пользователю достум к файлам формата mp3 в выбранный промежуток времени
http_access deny SingleUser MusicMP3 #и запретим в любое другое время
proto
позволяет указывать протокол передачи информации:acl имя_acl proto список
acl proto_ftp proto ftp
http_access deny SingleUser proto_ftp
Ограничения по скорости
delay_class
, delay_parameters
, delay_access
. delay_pools количество_объявленных_пулов
delay_pools 2 #всего 2 пула с номерами 1 и 2 соответственно
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
delay_parameters 1 64000/64000 # 512 Кбит = 64 Кбайта = 64000 байт
delay_parameters 1 64000/256000
delay_parameters 1 -1 #неограниченная скорость доступа для пула №1
delay_access
, имеющей формат:delay_access номер_пула действие имя_acl
allow
(разрешить) и deny
(запретить). Пул будет действовать на тех клиентов, которым он разрешен и не будет действовать на тех, кому запрещён.delay_access 1 deny UserGroup
delay_access 1 allow SingleUser
delay_class 2 2 # пул №2 позволит отрегулировать общую ширину канала для всей группы клиентов и установить отдельные органичения для каждого пользователя группы.
delay_parameters 2 512000/512000 64000/128000 # 8 Мбит/с - ограничение ширина канала для всей группы, на этой скорости клиент может скачать первые 128Кбайт запроса, а затем скорость его соединения упадёт до 512 Кбит/с.
delay_access 1 allow UserGroup #действует на группу пользователей UserGroup
delay_access 1 deny SingleUser #но не действует на отдельного пользователя SingleUser
Настройка кэширования
cache_mem 1024 MB # объем доступной для кэширования памяти
maximum_object_size_in_memory 512 KB # максимальный размер объекта в кэше
cache_dir
, имеющая формат: cache_dir тип_хранилища путь_к_хранилищу размер L1 L2
cache_dir ufs /var/squid_cache 1024 16 256
maximum_object_size 2 MB
Настройка логирования
access_log daemon:/etc/squid3/logs/access.log squid
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
debug_options
. У неё два обязательных параметра - секция и глубина отладки: debug_options ALL,1 # секция “ALL”, глубина отладки 1
logfile_rotate 31
squid -k rotate
squid3 -k check
service squid3 reload
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