В качестве прокси-сервера в архитектуре сетевых шлюзов различных производителей часто используется 3proxy. Этот выбор обусловлен, прежде всего, тем, что 3proxy — бесплатен, имеет открытый исходный код, компактные размеры и может работать под управлением множества ОС. Однако для универсального шлюза безопасности Traffic Inspector Next Generation (TING) мы выбрали другое решение: доработанный и модифицированный Squid. В этой статье мы расскажем о том, почему мы остановили свой выбор именно на этом продукте, а также поговорим о внесенных в него изменениях, добавляющих в реализованный на базе TING прокси-сервер новые возможности. Основное конкурентное преимущество 3proxy перед аналогами — его компактность, благодаря которой этот прокси-сервер иногда даже используют злоумышленники для установки на компьютеры пользователей без их ведома и согласия. 3proxy не имеет графического интерфейса и может запускаться в качестве службы Windows или демона в Unix-подобных системах, а его настройка осуществляется путем редактирования конфигурационного файла. В сочетании с кроссплатформенностью и переносимостью — а версии 3proxy существуют практически для всех ОС — это делает данную программу одним из наиболее популярных вариантов прокси-сервера. Но, к сожалению, популярность не означает, что указанный вариант — самый лучший. В то время, как Squid — промышленный кешируемый прокси, 3proxy зародился в качестве пет-проекта одного русского хакера. Следствием этого стала не слишком развитая техническая документация и поддержка продукта: у Squid намного более широкое и активное комьюнити. Один из наших клиентов, использовавший универсальный шлюз безопасности с прокси-сервером на основе 3proxy, столкнулся с неприятной проблемой. Если конфигурация прокси содержит большое количество правил (числом в несколько тысяч), в процессе их обработки резко возрастает нагрузка на процессор шлюза, что отрицательно сказывается на быстродействии всей системы. Особенно ярко эта особенность проявляется, если к прокси-серверу подключается значительное количество пользователей. Несмотря на то, что клиент приобрел UTM в максимально возможной конфигурации, тот попросту не справлялся с высокой нагрузкой — производительность устройства не соответствовала заявленной. Обращения в службу технической поддержки разработчика не привели к решению проблемы: специалисты клиентского сервиса предположили, что низкая производительность шлюза, вероятно, связана с неправильной настройкой прокси-сервера. Но настроить его таким образом, чтобы сервер выдерживал высокую нагрузку и большое количество клиентских запросов, они так и не помогли. Задачу удалось решить заменой ранее использовавшегося устройства на универсальный шлюз безопасности Traffic Inspector Next Generation (TING), в котором для проксирования трафика применяется модифицированный Squid. Сравнение работы обоих UTM показало, что при одинаковом количестве правил в конфигурации прокси-сервера и при равном числе пользователей TING не демонстрирует заметной просадки производительности, которую показывал другой продукт.  Squid — это популярный кэширующий и пересылающий HTTP-прокси-сервер с открытым исходным кодом, распространяющийся в соответствии с условиями лицензии GNU GPL. Он умеет работать с протоколами HTTP, FTP и Gopher, ограниченно поддерживает SSL, TLS и HTTPS, и чаще всего используется в локальных сетях с целью повышения безопасности за счет фильтрации трафика. Основное функциональное назначение Squid — его применение в качестве HTTP-прокси-сервера и обратного прокси в сетях, использующих общее интернет-соединение. При этом Squid может работать в режиме прозрачного прокси-сервера, перехватывая все HTTP-запросы и кэшируя ответы. В таком режиме на клиентских машинах не требуется явно указывать в настройках соединения прокси-сервер. Для фильтрации HTTPS-трафика Squid использует собственный доверенный СА-сертификат, с помощью которого подписываются динамически генерируемые сертификаты удаленных серверов. Эта технология называется SSL Bump, она широко используется, в частности, для антивирусной проверки данных, передаваемых с использованием протокола HTTPS. Squid поддерживает несколько типов авторизации пользователей: традиционную — по логину и паролю, по IP-адресу, по Useragent (идентификатору браузера), а также с использованием NTLM-авторизации. Доступ к интернет-ресурсам настраивается с использованием так называемых списков ACL (Access Control List), которые могут содержать различные сведения об удаленных и локальных хостах: URL, имя или IP-адрес источника запроса, метод запроса (GET или POST), протокол, порт, User-agent, внешние обработчики и целый ряд других параметров. С помощью Squid можно настроить ограничение максимальной скорости соединения с интернетом — эта функций реализована с помощью так называемых пулов задержки (delay pools). в первом приближении этот механизм можно описать следующим образом: каждому пользователю Squid выделяется определенный виртуальный контейнер (bucket), из которого он может загружать данные с определенной скоростью. До тех пор, пока скорость загрузки ниже входящей скорости, на пользователя не накладывается никаких ограничений, но как только она становится выше входящей, скорость загрузки для клиента снижается. Пулы задержки позволяют гибко балансировать нагрузку и трафик внутри локальной сети и ограничивать для некоторых пользователей скачивание из интернета объемных файлов. Помимо этого, с помощью дополнительных плагинов-редиректоров Squid позволяет организовать настраиваемую фильтрацию контента. При использовании редиректора все входящие URL пропускаются через специальный фильтр, который возвращает клиенту либо новый URL, либо пустую строку. Использование редиректора в сочетании с прозрачным проксированием позволяет эффективно контролировать доступ пользователей к веб-сайтам и блокировать нежелательный контент — социальные сети, развлекательные сайты или ресурсы для взрослых. Squid поддерживает несколько плагинов-редиректоров: написанный на Perl стандартный плагин, работающий на основе списков перенаправления запросов, но не различающий пользователей, а также плагин SquidGuard и редиректор SAMS, разработанный специально для Squid и использующий собственную базу данных. Еще одна важная особенность Squid заключается в том, что он умеет конфигурироваться с использованием протокола Web Cache Communication Protocol (WCCP), что позволяет использовать его совместно с оборудованием Cisco для перенаправления и проксирования веб-трафика. Это очень важно для предприятий, в сетях которых уже установлены маршрутизаторы производства Cisco Systems — такие клиенты могут использовать Traffic Inspector Next Generation в том числе в роли прокси-сервера, контент-фильтра и шлюза безопасности без серьезного изменения имеющейся сетевой инфраструктуры. Все это в совокупности делает Squid более удобным, гибким и функциональным инструментом по сравнению с 3proxy, что во многом и определило выбор именно этого продукта в качестве прокси-сервера для TING. Однако некоторые возможности в базовой конфигурации Squid все-таки отсутствуют: так, клиенту, с истории которого мы начали этот рассказ, очень не хватало возможности авторизации пользователей в режиме прозрачного прокси. По умолчанию Squid не умеет различать клиентов, если он работает в качестве прозрачного прокси-сервера, поэтому компания «Смарт-Софт» разработала и добавила в состав Traffic Inspector Next Generation дополнения, решающие эту задачу. Причем сразу несколькими способами. Прежде всего, благодаря этим доработкам в Squid на TING появилась возможность SSO-аутентификации в Active Directory с использованием протокола Kerberos. SSO-аутентификация избавляет доменного пользователя от повторных запросов на прохождение аутентификации. Пользователь вводит доменный логин и пароль всего один раз при входе в операционную систему, в дальнейшем при соединении с интернетом через прокси-сервер аутентификация происходит автоматически. Использование этой функции потребует изменения настроек TING и контроллера домена Active Directory. Помимо этого, в TING можно настроить SSO-аутентификацию на прокси-сервере с использованием системы проверки подлинности FreeIPA. FreeIPA (Free Identity, Policy and Audit) — открытый проект для создания централизованной системы по управлению идентификацией пользователей, задания политик доступа и аудита для сетей на базе Linux и Unix. Он является своего рода аналогом Active Directory для Linux, поддерживается сообществом разработчиков и спонсируется компанией RedHat. FreeIPA поддерживает протоколы LDAP, Kerberos, а в целях интеграции с Active Directory путем доверительных отношений использует Samba. Для расширенной фильтрации контента с использованием пользовательских ACL в составе Traffic Inspector Next Generation используется специальный плагин os-proxy-useracl. Этот плагин позволяет фильтровать контент на основе различных списков доступа (пользователи, группы, домены источника/назначения и др.), распределения запросов по исходящим каналам или путем выборочной фильтрации контента с использованием протокола ICAP. Плагин устанавливается в панели администрирования TING и может черпать информацию как из созданных вручную локальных списков, так и использовать списки пользователей и групп с настроенным методом аутентификации LDAP или Kerberos в домене Active Directory. Оценивая все перечисленные функциональные возможности, можно сделать вывод, что Squid по сравнению с 3proxy обладает намного большими функциональными возможностями, позволяет гибко настраивать прокси-сервер через удобный веб-интерфейс панели администратора TING и потому гораздо лучше подходит для предприятий среднего и крупного бизнеса. Кроме того, Squid отлично справляется с высокой нагрузкой, связанной с подключением значительного числа пользователей или наличием конфигурации с большим количеством правил. В сочетании с такими возможностями, как авторизация клиентов в режиме прозрачного прокси, настройка фильтрации контента для отдельных пользователей и групп, интеграция с Active Directory и использование в сетях совместно с оборудованием Cisco Systems, — это оптимальное решение для корпоративных сетей и бюджетных учреждений. Squid активно развивается, для этого продукта регулярно выпускаются обновления, а пользователи TING имеют доступ к документации и технической поддержке на русском языке, которая при необходимости поможет правильно настроить прокси-сервер и решить задачу его интеграции в существующую IT-инфраструктуру предприятия.