Установка и настройка прокси-сервера Squ > Рубрика: Линукс
Squid – самый популярный HTTP-прокси сервер для кэширования и перенаправления. Он широко используется различными компаниями для кэширования веб-страниц с веб-сервера для повышения скорости работы последнего, снижения времени ответа и ограничения использования пропускной способности сети. В данном руководстве мы рассмотрим установку прокси-сервера squid и его использование в качестве HTTP-прокси сервера.
Установка прокси-сервера Squid
Прежде чем начать, стоит отметить, что сервер Squid не требует значительных ресурсов, но использование оперативной памяти может изменяться в зависимости от количества клиентов, осуществляющих доступ в интернет через прокси-сервер.
Пакет Squid доступен в стандартном репозитории
В Ubuntu/Debian
Запустите его и задайте запуск при загрузке:
После этого можно проверить статус службы:
источник
Кэширующий прозрачный прокси сервер SQUID на Debian squeeze
Задача: Кэширующий прозрачный прокси сервер
Для начала нам понадобиться:
- Чистая система с Debian Squeeze
- Непосредственно
серверкомпьютер с двумя сетевыми картами eth0 и eth1.
Для чистоты эксперимента будем считать что eth0 смотрит к провайдеру и получает от него настройки по DHCP, а eth1 смотрит в нашу локальную сеть и имеет классический адресс вида 192.168.100.1.
1) Настроим нашу сеть вот так:
#Localhost Network
auto lo
iface lo inet loopback
#WAN Network
auto eth0
iface eth0 inet dhcp
#LAN Netowrk
auto eth1
iface eth1 inet static
address 192.168.100.1
netmask 255.255.255.0
2) Установим и натсроим DHCP сервер вот так:
# apt-get -y install isc-dhcp-server
Отмечу, что сразу после установки он у нас не запустится, поэтому сразу приводим /etc/dhcp/dhcpd.conf к разумному виду
# cat /etc/dhcp/dhcpd.conf
dns-update-style none;
option domain-name «localdomain»;
option domain-name-servers 192.168.100.1;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.100.0 netmask 255.255.255.0 <
range dynamic-bootp 192.168.100.10 192.168.100.99;
option broadcast-address 192.168.100.255;
option routers 192.168.100.1;
>
Из конфига видно что клиенты будут получать адреса от *.10 до *.99.
3) Для нормальной работы нам обязательно потребуется сервер имен.
4) Теперь пришло время поднять и настроить Squid как кэширующий прозрачный прокси сервер
Стоит заметить, что можно работать со стандартным конфигом, но это будет не так как нам требуется и уж совсем не Debian way.
Поэтому приводим конфиг к такому виду:
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl my_network src 192.168.100.0/24
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 allow my_network
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
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 . 0 20% 4320
shutdown_lifetime 5.00 second
cache_dir ufs /var/cache/squid 2048 16 256
maximum_object_size 10024.00 bytes
Как видно из конфига, мы создали правило my_network и разрешили ему смотреть интернеты.
Параметр http_port 3128 transparent означает что наш сервер будет прозрачным.
Также мы переобозначили кэш, задав под него директорию /var/cache/squid размером в 2 Гб.
chmod 755 -R /var/cache/squid
И спокойно перезапускаем наш Squid.
После перезапуска должен пересоздаться кэш.
5) Очень важно правильно настроить iptables.
На этом шаге я предлагаю Вам создать скрипт настройки, так как он пригодится как универсальное средство.
#!/bin/bash
LAN=$1
WAN=$2
IP=$3
GW=$4
iptables -t nat -A PREROUTING -i $LAN -p tcp —dport 80 -j DNAT —to $IP:3128
iptables -t nat -A PREROUTING -i $WAN -p tcp —dport 80 -j REDIRECT —to-port 3128
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i $WAN -o $LAN -s $GW/24 -p tcp -m multiport —dport 443,21,22 -j ACCEPT
echo ‘net.ipv4.ip_forward = 1’ > /etc/sysctl.conf
sysctl -w net.ipv4.ip_forward=1
Мы обозначили переменные (для удобства), 3 правила для таблицы NAT и 1 для FORWARD.
Порты 443,21,22 пускаем в обход прокси сервера.
Помимо настроек iptables, в этом скрипте, мы включаем форвардинг пакетов.
# sh ./setiptables.sh eth0 eth1 192.168.100.1 192.168.100.0
6) Настроим автозагрузку натсроек iptables.
Сохраням настройки iptables.
# mkdir -p /usr/local/iptables && iptables-save > /usr/local/iptables/session.ipt
Добавляем команду авотзапуска в /etc/rc.local (мне нравится Perl но тут кому как).
# perl -i -pe ‘print «iptables-restore
Также не забываем про форвардинг пакетов
# perl -i -pe ‘print «sysctl -w net.ipv4.ip_forward=1\n» if $. == 3’ /etc/rc.local
В целом настройка прозрачного прокси сервера закончена, но чтобы логи были читаемы, нам наобходимо отключить поддержку ipv6 (из за того что ipv6 у нас не настроен на адаптере будет много warnings).
Предлагаю опять же сделать скрипт чтобы не запутаться.
#!/bin/bash
perl -i -pe ‘print «alias net-pf-10 ipv6 off\n» if $. == 17’ /etc/modprobe.d/aliases.conf
perl -i -pe ‘print «alias net-pf-10 off\n» if $. == 18’ /etc/modprobe.d/aliases.conf
perl -i -pe ‘print «alias ipv6 off\n» if $. == 19’ /etc/modprobe.d/aliases.conf
echo 1 | tee /proc/sys/net/ipv6/conf/all/disable_ipv6
echo «blacklist ipv6» | tee -a /etc/modprobe.d/blacklist.conf
STR=$(cat /boot/grub/grub.cfg | sed -n ’67p’)
STR=$
sed ’67d’ /boot/grub/grub.cfg > /boot/grub/grub.cfg.backup
cp /boot/grub/grub.cfg.backup /boot/grub/grub.cfg
sed -i 67i\ «$STR» /boot/grub/grub.cfg
В общих чертах что в этом скриптике происходит:
Сперва отключаем пожжержку ipv6 в модулях ядра.
Далее указываем маркер в /proc на не использование ipv6.
И в 67 строке /boot/grub/grub.cfg дописываем параметр ipv6.disable=1.
Такая канитель с tee и sed нужна для того чтобы сохранить настройки /boot/grub/grub.cfg, так как там устройства обозначаются не по /dev/sd* и по UUID.
Хотя все всегда можно дописать ручками.
И на последок, для тех кто ручками писать не хочет, я выложил скрипт:
www.uralcode.ru
Не корысти ради, а дабы облегчить нелегкую жизнь админов.
Скрипт все время допиливается. В ближайшее время будет добавлена поддержка havp (проверка трафика антивирусом на лету до вхождения в squid) с кастомными темплейтами. Соответственно постараюсь максимально изложить мат. часть в необходимой для понимания мере.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Установка и настройка прокси-сервера Squ > Август 29, 2016
При настройке локальной сети офиса или предприятия часто реализуется схема, при которой доступ в интернет для всех компьютеров организован через один общий шлюз. создания шлюза удобно использовать прокси-сервер. Программный пакет Squid выполняет функции прокси-сервера для протоколов HTTP, FTP и, в случае грамотной специализированной настройки, HTTPS.
Пакет Squid распространяется по свободной лицензии GNU General Public License и имеет следующие основные возможности:
- Контроль доступа к сети Интернет. Ограничение доступа для групп или отдельных пользователей, доступ по расписанию, доступ к ограниченному числу ресурсов или создание “запрещённого списка” сайтов — для регуляции доступа сотрудников к “развлекательным” сайтам в рабочее время и защиты от проникновения во внутреннюю сеть посторонних клиентов;
- Контроль трафика. Множество вариантов настройки, позволяющие серверу обеспечивать доступ максимальному количеству клиентов без перегрузки возможностей сетевого оборудования, в том числе отдельные конфигурации для разных видов трафика. Организация открытой точки wi-fi без боязни за возможную нестабильность сети. Возможность выдавать отдельным клиентам или группам ограниченного объема трафика для работы;
- Мониторинг использования сетевых ресурсов. Различные статистические данные, которые собирает Squid, и созданные для него расширения будут незаменимы для оптимизации локальной сети, анализа нагрузки, исследования причин возможных сбоев сети и обнаружения атак на локальную сеть компании;
- Обратное кэширование. Возможность работы в режиме “обратного прокси” или “ускорителя” — для существенного снижения нагрузки на сервер путем кэширования запросов, к которым идет больше всего обращений от пользователей.
Squid может работать в качестве прозрачного прокси-сервера. В таком случае пользователь может даже не знать, что его запрос был обработан прокси-сервером. Благодаря этому отпадает необходимость настройки каждой клиентской машины для работы в локальной сети.
Настройка локальной сети
Прежде чем переходить к установке и настройке прокси-сервера Squid, необходимо настроить локальную сеть. Для этого на проксируещем сервере должно быть как минимум два сетевых интерфейса — первый осуществляет взаимодействие с Интернетом, в то время как ко второму будут подключаться компьютеры локальной сети. Все настройки и команды приводится на примере дистрибутива Ubuntu.
Чтобы изменить конфигурацию локальной сети или внести полученные от провайдера настройки для подключения сервера к сети Интернет, необходимо отредактировать всего один конфигурационный файл:
Приведём его к следующему виду:
Для применения новых настроек необходимо перезапустить сеть командой:
По окончании настройки желательно убедиться, что интерфейсы настроены верно. Вывод информации о сетевых подключениях осуществляется командой:
Полученные данные будут иметь примерно следующий вид:
По этим данным ясно, что у сервера имеется два сетевых интерфейса, eth0 и eth1, с IP-адресами 185.22.174.75 для eth0 и 192.168.0.1 для eth1. К адаптеру eth0 подключен кабель интернет-провайдера, а к адаптеру eth1 будут подключены компьютеры локальной сети.
Настройка DHCP
На данном этапе уже есть возможность указать на локальной машине статический IP-адрес из локальной подсети, например 192.168.0.2, наш сервер (192.168.0.1), в качестве шлюза, и DNS-сервер. Компьютер будет подключен к локальной сети.
Но система статических IP-адресов имеет свои недостатки: необходимо настраивать каждую машину для подключения к локальной сети, возможен конфликт одинаковых IP и тому подобное.
Поэтому следующим этапом будет настройка механизма автоматической трансляции IP-адресов через DHCP. В таком случае при подключении к сети нового компьютера все настройки будут переданы ему автоматически.
Для установки сервера DHCP используется команда:
Файл конфигурации по умолчанию находится в /etc/dhcp/dhcpd.conf, откроем файл в редакторе с помощью команды:
В большинстве случаев минимальная настройка производится внесением блока вида:
После изменения конфигурационного файла необходимо перезапустить сервер DHCP для применения новых настроек:
Теперь все клиенты локальной сети будут получать все настройки автоматически при подключении.
Настройка NAT
После организации локальной сети необходимо подключить её к Интернету — для этого реализуется трансляция сетевых адресов (Network Address Translation или NAT). Благодаря NAT несколько компьютеров могут выходить в интернет, используя один IP-адрес.
В Ubuntu механизм NAT реализуется с помощью сетевого фильтра iptables, который одновременно является брандмауэром.
Для автоматической загрузки настроек iptables при старте системы создадим новый пустой конфигурационный файл командой:
И откроем его для изменения:
Варианты конфигурации брандмауэра зависят от политики сетевой безопасности в компании. Минимальный набор настроек выглядит следующим образом:
После сохранения изменений обеспечим для файла права на исполнение:
Далее необходимо поставить созданный файл на автозагрузку при включении сервера. Для этого откроем рассмотренный ранее файл interfaces:
и добавим в самый низ строку:
Перезагрузим сервер для автоматического применения новых настроек:
Установка и настройка Squid
Для инсталляции Squid используется команда:
Когда установка завершится, сервис запустится автоматически.
Перейдём к настройке. Файл конфигурации расположен по адресу /etc/squid3/squid.conf. Для неподготовленного пользователя он может показаться совершенно необъятным — в нём более 7000 строк. Большая часть из них закомментированы и описывают значительную часть всех возможных вариантов работы Squid.
Для комфортной работы скопируем файл настроек в ту же папку под другим именем, чтобы всегда иметь под рукой стандартные настройки:
При необходимости перед началом настройки можно обратиться к официальной документации проекта.
Теперь можно удалять из файла конфигурации все закомментированные строки и пояснения, оставляя только активные директивы. По умолчанию их немного:
Основной инструмент настройки Squid — это списки контроля доступа или ACL (Access Control List). ACL объявляются директивой, имеющей следующий синтаксис:
acl имя параметр элементы_списка
Параметр даёт серверу понять тип элементов списка. АCL с параметром port содержит номера портов, а с параметром src — ip-адреса, с которых на сервер поступает запрос. Полный список параметров весьма обширен и доступен в официальной документации.
добавляет в список Safe_ports, содержащий элементы типа “порт”, новое значение 80.
Директива http_access, имеющая формат
http_access указание имя_acl
определяет правила работы с элементами указанного acl. Например, строка:
блокирует все порты, не входящие в список Safe_ports.
По умолчанию доступ к Squid разрешен только с самого сервера:
Чтобы открыть доступ клиентам локальной сети создадим для них новый список доступа c параметром src:
Теперь укажем порт, на котором работает Squid, и установим прозрачный режим работы:
Минимальная настройка конфигурационного файла Squid завершена, теперь можно перейти к описанию политики информационной безопасности.
Параметр src позволяет регулировать доступ для клиентов со статичными ip-адресами:
Параметр dst позволяет указать список ip-адресов назначения, к которым клиент желает получить доступ:
Параметр dstdomain даёт возможность указывать домен, к которому выполняется запрос:
Если необходимо указать домен источника, используется параметр srcdomain .
Параметры srcdom_regex и dstdom_regex позволяют использовать в ACL регулярные выражения:
Ключ -i необходим для игнорирования регистра символов в регулярных выражениях:
acl имя [-i] url_regex элементы_списка
С помощью параметра url_regex возможно указать шаблон регулярного выражения для URL:
Параметр 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-адресов и отдельных доменов. Например:
Параметр proto позволяет указывать протокол передачи информации:
Используя его можно запретить пересылку файлов по протоколу ftp:
Ограничения по скорости
На сегодняшний день, когда ушли в прошлое каналы с пропускной способностью в 256 кбит/с и менее, можно ошибочно предположить что устанавливать ограничения по скорости соединения в случае небольшого количества клиентов локальной сети бессмысленно. Тем не менее, очень желательно устанавливать хотя бы самые простые правила регулирования скорости соединения для отдельных пользователей, чтобы избежать перегрузки сети и нехватки ресурсов для отдельных пользователей, для которых важна хорошая скорость работы сети. Подводные камни могут скрываться в следующих процессах:
- автоматическое резервное копирование данных с сервера компании и прочие процессы передачи больших объемов данных, выполняющиеся сервером по расписанию;
- операции передачи файлов для личных и рабочих нужд, особенно своей способностью использовать все доступные сетевые ресурсы известен протокол BitTorrent;
- технические неисправности в отдельных компьютерах и программах, а так же действия вредоносных программ;
- злонамеренные сетевые атаки на отдельные компьютеры локальной сети.
Прокси-сервер Squid позволяет реализовывать политику ограничения скорости с помощью механизма пулов. Пул можно представить себе, как емкость с водой, которая постоянно заполняется до краёв, а клиенты по мере надобности наливают воду в свои стаканы через персональные краны.
Работу пулов регулируют три директивы: delay_class , delay_parameters , delay_access .
Количество пулов устанавливает директива delay_pools:
Пулы могут быть трёх классов:
- Один кран на всю сеть ограничивает поток воды;
- Весь поток ограничен одним краном, после которого идут отдельные персональные краны(для каждого IP-адреса сети);
- Весь поток ограничен одним краном, от которого идут отдельные краны для каждой группы пользователей(подсети), каждый из которых, в свою очередь, делится на персональные краны для каждого клиента(для отдельного IP-адреса).
Класс пула должен быть указан в директиве delay_class :
delay_class номер_пула класс_пула
Директива delay_parameters устанавливает параметры пула:
delay_parameters номер_пула параметры
Формат записи параметров зависит от выбранного класса пула:
Для пула №1 выбран класс 1, установим для него скорость передачи данных в 512 кбит/с:
Запись параметра производится по следующим правилам: сперва указывается ограничение скорости, затем указывается лимит, после которого это ограничение начинает действовать. Таким образом значение параметра 64000/64000 говорит о том, что после того, как пользователь скачал на максимальной скорости первые 64Кб запроса, на клиента накладывается ограничение скорости в 512 Кбит/с. Удобно устанавливать второе значение параметра несколько больше чем первое, например конфигурация:
позволяет пользователю получить первые 256Кбайт запроса на максимальной скорости и только потом ограничить клиента шириной канала в 512 Кбит/с.
Для снятия ограничений по скорости используйте значение -1, например:
Теперь можно распространять действие пула на отдельных клиентов сети при помощи директивы delay_access , имеющей формат:
delay_access номер_пула действие имя_acl
Параметр “ действие” имеет значения allow (разрешить) и deny (запретить). Пул будет действовать на тех клиентов, которым он разрешен и не будет действовать на тех, кому запрещён.
распространяет действия пула №1 на отдельного пользователя SingleUser, но не затрагивает группу пользователей UserGroup.
Для группы пользователей используем пул №2:
Применим ограничения пула №2:
Настройка кэширования
Прокси-сервер Squid поддерживает два вида кэширования — кэш в оперативной памяти и на жестком диске. При их настройке стоит помнить, что кэширование в принципе может ускорить скорость обработки запросов, но может вызвать и обратный эффект — в случае неверно подобранных параметров конфигурации. Также немаловажным является тот факт, что любое кэширование влечет дополнительную нагрузку на ресурсы сервера, в частности, слишком большой объем кэша в RAM может полностью парализовать работу сервера, спровоцировав нехватку оперативной памяти.
В стандартной конфигурации Squid включен только RAM кэш, объем используемой памяти установлен на 256Мб. Увеличим объем кэша и установим максимальный размер кэшированного объекта с помощью соответствующих директив:
Следует учитывать, что кэш в оперативной памяти сбрасывается каждый раз при перезагрузке или выключении сервера, поэтому оценивать результаты изменения конфигурации стоит только по прошествии некоторого времени.
За использование HDD кэша отвечает директива cache_dir , имеющая формат:
cache_dir тип_хранилища путь_к_хранилищу размер L1 L2
Размер кэша на диске указывается в мегабайтах, в примере выше кэш с максимальным размером 1 Гб будет хранится в папке /var/squid_cache. Тип хранилища ufs стандартный. Параметры 16 и 256 указывают количество директорий первого и второго уровня, эти значения так же прописаны в документации как стандартные.
Максимальный размер объекта в дисковом кэше также можно указать:
Настройка логирования
Squid имеет мощную систему подробного логирования для контроля проходящего через прокси-сервер траффика. Логи делятся на три различных журнала:
- access.log — содержит записи о запросах клиентов;
- store.log — содержит записи, относящиеся к действиям с кэшем;
- cache.log — содержит сообщения об ошибках, возникающих при работе Squid.
Чаще всего используется журнал access.log. Укажем в конфигурации собственный путь для его хранения:
Параметр, имеющий в примере значение “squid” определяет формат лог-файла. Можно задать формат лога “common” для того, чтобы можно было обрабатывать полученный журнал сторонними программами, но в таком случае стоит помнить, что этот формат лога не содержит всей информации, которая есть в логе по умолчанию. Помимо стандартных вариантов имеется возможность создать собственный формат лог-файла, используя директиву logformat. Подробную информацию о работе этой директивы можно найти в документации к продукту.
Директивы cache_log и cache_store_log позволяют указать путь к файлам cache.log и store.log соответственно. Они не требуют указания формата:
Помимо различных видов журналов Squid имеет настройку уровней логирования. За глубину отладки отвечает директива debug_options . У неё два обязательных параметра — секция и глубина отладки:
Значение секции рекомендуется оставлять ALL (либо осторожно выбирать конкретную секцию из списка). Уровень логирования же может менятся в диапазоне от 1 до 9, где с ростом уровня увеличивается подробность логов, и, соответственно, количество записей в журнале. Как правило, уровень выше 5 редко используется в реальной жизни, потому что выводит уже слишком много “избыточной” информации для каждого произошедшего события.
Для того чтобы всегда иметь возможность начать новый файл логов и упорядочить их существует параметр количества ротаций:
Значение 31 означает, что при создании нового файла логов старый получит расширение от 0 до 30 и дальнейшая запись в него вестись не будет. Создание нового файла логов производится с помощью команды:
Таким образом, добавив в cron задачу каждый день создавать новый файл логов, можно иметь упорядоченный отчет обо всём прошедшем через прокси-сервер трафике за прошедший месяц.
Если даже с самым низким уровнем логирования объем логов возрастает до нежелательных масштабов — стоит применить дополнительные средства, вроде автоматического сжатия журналов или переноса их в отдельное хранилище. Так же можно изменить количество или частоту ротаций в зависимости от задачи. Можно хранить меньшее количество логов, либо чаще создавать свежий журнал, а старый архивировать и перемещать. Для прокси-сервера Squid есть множество надстроек и сторонних программ, упрощающих все этапы работы с лог-файлами.
Оставим без изменений остальные параметры и проверим файл настроек с помощью команды:
Эта команда предназначена для поиска ошибок в конфигурационном файле, если она ничего не выводит — значит ошибок нет.
Теперь осталось применить новые параметры:
После завершения настройки прокси-сервера перенаправим на него весь трафик локальной сети, внеся изменения в файл /etc/nat командой:
Добавим в самый низ файла следующую строку:
После этого перезагрузим сервер для автоматического применения новых настроек:
Таким образом, несмотря на большое общее количество параметров настройки Squid, минимальный набор для начала работы достаточно скромен. Использование прокси-сервера Squid позволит вам быстро реализовать политику доступа групп пользователей или отдельных клиентов к ресурсам сети интернет, а так же мониторинг их деятельности и сбор статистики об использовании канала.