...
...
...

защитите свою корпоративную сеть от Kazaa

Система Kazaa обладает способностью коварно обходить фаерволлы, однако она недостаточно хитра…

Kazaa является одним из наиболее популярных используемых сейчас приложений для обмена файлами. Такие одноранговые технологии известны как peer-to-peer или P2P и позволяют пользователям искать и загружать друг у друга файлы. Основное применение, по-видимому, Kazaa находит в нарушении законов о защите авторских прав путем обмена аудиофайлами.
Собственный сетевой протокол Kazaa, известный под названием FastTrack был лицензирован разработчиками некоторых других подобных программ, в том числе iMesh и Grokster. Также доступна “очищенная” версия Kazaa, называемая KazaaLite. Существует достаточное количество других P2P-программ, но семейство FastTrack остается намного более популярным, одновременно являясь наиболее трудным объектом для блокировки фаерволлами типа линуксового iptables.
Многие сетевые менеджеры хотели бы заблокировать на своих межсетевых экранах P2P-трафик из-за создаваемой им высокой нагрузки на каналы, последствиям для безопасности, вызванными неконтролируемым обменом файлами, а также возможными судебными исками со стороны владельцев авторских прав. Это не так просто, как может показаться. Поиск в Internet информации о блокировании FastTrack-трафика с помощью iptables дал результаты типа «заблокировать 1241-й порт», «запретить в приказном порядке и сурово наказывать негодяев-нарушителей», или же «это невозможно». Блокировка порта 1214 срабатывала с ранними версиями FastTrack, но не действует на современные. Здесь требуется нечто более утонченное. Несмотря на то, что фаерволлы, построенные на базе прокси-сервисов, способны блокировать трафик FastTrack, прозрачные межсетевые экраны, например основанные на iptables, испытывают трудности, требующие решения.
Данная статья представляет новый open-source проект под названием P2Pwall, в рамках которого разрабатывается программное обеспечение, призванное предотвратить контакты P2P-клиентов из вашей сети с партнерами вне нее. Его компонент ftwall блокирует FastTrack-трафик. Будут написаны другие компоненты, предназначенные для контроля над иными P2P протоколами, и мы приглашаем вас принять в этом участие в качестве разработчиков. Данное программное обеспечение прошло тестирование со следующими FastTrack-клиентами: Kazaa 2.1.1, Kazaa 2.5, KazaaLite 2.0.2, iMesh 4.1 (build 132) и Grokster 1.7.

борьба фаерволлов с FastTrack

Современные дистрибутивы Linux включают файрвольный код ядра Netfilter и управляющие утилиты типа iptables. Данные компоненты работают совместно и позволяют применять Linux-системы в качестве простых, но эффективных фаерволлов, однако сетевой протокол FastTrack ставит перед ними ряд нетривиальных проблем:
•он не использует фиксированные номера портов;
•он не ограничен перебором небольшого количества партнеров. Он держит в кэше две сотни адресов и при своем запуске пытается соединиться со всеми. Этот список регулярно обновляется и уникален для каждой машины;
•поиск партнеров децентрализован;
•в ключевых частях протокола используется мощное шифрование.
Традиционно межсетевые экраны используют одну из двух философий. Первая – строгая, подразумевает блокировку всех портов, кроме некоторых необходимых. Вторая – либеральная и асимметричная, практически не ограничивает исходящие соединения, одновременно блокируя почти все входящие. В обоих случаях гибкий в использовании портов FastTrack отыскивает и использует законно открытые порты. Он даже может воспользоваться 80-м портом. Для блокировки FastTrack потребуется «строгая» парадигма вместе с прокси на 80-м порту, однако такой подход чересчур жесткий для сетей, в которых желательно сохранить «либеральную» парадигму, одновременно заблокировав P2P-трафик.

программа ftwall проекта P2Pwall

Проект P2Pwall призван решить эти проблемы путем предоставления набора инструментов и документации, способной сделать фильтрацию P2P-трафика реальностью. Фильтр для FastTrack под названием ftwall – это первый инструмент такого типа и доступен для загрузки p2pwall.sourceforge.net. Распространяется он на условиях GPL. Ftwall взаимодействует с iptables посредством target’а QUEUE. Он анализирует проходящие фаерволл пакеты и, основываясь на понимании характеристик протокола FastTrack, определяет, должны ли они быть пропущены или отвергнуты. Его задача – попытаться предотвратить как проникновение трафика FastTrack внутрь сети, так и попытки выйти за ее пределы.
Предназначение ftwall – блокировка внешних FastTrack соединений только при условии, что входящие уже заблокированы с помощью iptables. Многие фаерволлы уже используют полную блокировку входящих соединений с ограниченным числом разрешенных серверных соединений. Тем не менее, если FastTrack-клиент, находящийся внутри сети соединяется с партнером, находящимся за ее пределами, ответ от внешнего партнера может дойти, поскольку это будет трафик установленного соединения. Таким образом, если мы сможем положиться на штатный фаерволл в части блокировки входящих и на ftwall для исходящих соединений, то мы получим решение проблемы. В любом случае нам потребуются оба компонента.
Установка и конфигурирование ftwall заключается в загрузке исходных кодов, их компилировании и написании небольшого количества правил iptables. Сложности могут возникнуть в случае опционального улучшения логики программы, что потребует наличия в ядре модуля ip_string. Данный модуль все еще остается экспериментальным и поэтому не включается во многие дистрибутивы Linux. Если вы захотите его использовать, вам, возможно, придется добавлять его самостоятельно. Дополнительная информация по этому вопросу доступна на веб-сайте P2Pwall.

iptables и target QUEUE

Когда в качестве target’a правила iptables определено QUEUE, любой пакет, подпадающий под это правило, ставится в очередь для сбора данных приложением, например ftwall. Затем программа может отбросить пакеты или переправить их к Netfilter для дальнейшей проверки и перенаправления. Типичное правило для осуществления этого механизма выглядит примерно так:

iptables-A FORWARD -p tcp -i eth0 -dport 123 -syn -j QUEUE

Согласно этому правилу все SYN-пакеты из (внешней) сети, поступающие с eth0 и предназначенные для порта 123 на удаленном хосте сначала направляются к программе. Программа читает пакеты и возвращает свой вердикт с использованием библиотеки libpq и модуля ip_queue.
QUEUE является стандартной частью пакета iptables, поставляемого с наиболее популярными дистрибутивами. Для того, чтобы удостовериться, что этот target доступен на вашей системе, выполните команду insmod ip_queue и убедитесь, что у вас не появляется сообщение об ошибке. Подробности можно узнать в Netfilter FAQ по адресуhttp://www.netfilter.org/documentation /FAQ/netfilter-faq-4.html.

как работает ftwall

Описание работы ftwall необходимо вести параллельно с частичным разъяснением логики соединений FastTrack.
FastTrack соединяется с партнерами, используя три различных подхода: поток UDP-пакетов, параллельные TCP-соединения и более традиционную модель TCP-взаимодействия. Программа переключается между этими режимами, если считает, что ее пытаются блокировать. Ftwall старается удерживать работу клиентов в первом режиме настолько долго, насколько это будет возможно, поскольку этот режим наиболее просто определяется и позволяет построить список адресов партнеров.
При своем запуске клиент отсылает через межсетевой экран большое количество UDP-пакетов, которые могут быть распознаны по их длине и содержанию. Netfilter ставит их в очередь на обработку ftwall (Рис.1). Затем ftwall записывает адреса отправителя и назначения пакетов и подменяет ответ клиенту, чем предотвращает его вывод о том, что эти UDP-пакеты блокируются фаерволлом. В результате несколько увеличивается время работы клиента в первом режиме.


Рис. 1. Открытие соединения по UDP.

Правило iptables для формирования такой очереди (подразумевается, что eth0 - это интерфейс внутренней сети) выглядит так:

iptables -A FORWARD -p udp -i eth0 -j QUEUE

Когда FastTrack получает подмененный ответ, он пытается использовать UDP для запроса некоторой дополнительной информации и затем предпринимает попытку установить TCP-соединение с тем же адресом. Эти UDP- и TCP-пакеты пересылаются ftwall, который теперь знает, что адрес назначения имеет отношение к FastTrack и, соответственно, удаляет их (Рис.2). Другие, не принадлежащие FastTrack, UDP- и TCP SYN-пакеты возвращаются к Netfilter для дальнейшей проверки и перенаправления по назначению.


Рис.2 Другие UDP- и TCP SYN-пакеты.

Правило постановки SYN-пакетов в очередь к ftwall таково:

iptables -A FORWARD -p tcp -i eth0 --syn -j QUEUE

Клиент на протяжении некоторого времени повторяет эту последовательность UDP и SYN-пакетов – обычно (но не всегда) до тех пор, пока все известные адреса не будут испробованы хотя бы по одному разу. Это означает, что все эти адреса теперь также известны ftwall как заслуживающие отфильтровывания.
Через некоторое время клиент изменяет курс и переключается на параллельное TCP-соединение с мощным шифрованием данных. Ftwall продолжает блокировать соединения с адресами, взятыми на заметку в первой фазе. Для любых других адресов уликой, идентифицирующей их как соединения FastTrack, будет большое количество SYN-пакетов, наблюдаемых за короткий промежуток времени. Если ftwall для проведения блокировки будет полагаться исключительно на UDP-пакеты, то он потерпит неудачу, особенно если клиент в ходе первой фазы не перебрал все известные ему адреса. Решение этой проблемы – «часовая ловушка».
В этом новом режиме клиент чередует попытки TCP-соединения с адресами, уже известными ftwall, с другими, которые еще не были обнаружены (если таковые были). Ftwall сохраняет временную отметку, когда были испробованы самые последние известные адреса и блокирует все TCP-соединения от того же IP-адреса на конфигурируемый промежуток времени после этого. Каждый SYN-пакет, отправленный на известный адрес сбрасывает таймер. При условии, что эти соединения предпринимаются достаточно часто, ftwall продолжает их блокировку.
Такая логика имеет побочный эффект, заключающийся в том, что все TCP-соединения от непослушной рабочей станции, в том числе доступ к веб- и FTP-сайтам, блокируется на протяжении всего времени, когда на ней запущен FastTrack. Это может быть обосновано как допустимая мера, поскольку пользователь рабочей станции нарушает организационные правила. Как только клиентское приложение закрывается, таймер перестает обновляться и, как только он отработает свое время, TCP-соединения вновь будут разрешены. В конфигурации по умолчанию это займет две минуты.
После того, как FastTrack некоторое время проработает в этом режиме, он приходит к заключению, что параллельный способ попытки соединения вызывает проблемы и переключается в третий режим. Теперь он снижает интенсивность попыток соединения и использует более традиционный подход – пробует адреса по одному с таймаутом в несколько секунд для каждой попытки. Этот новый подход делает бесполезной с таким трудом выстроенную нами логику и клиент, в конечном счете, прорывается сквозь защиту. Это может потребовать более часа времени, но клиенты, не открывшие ранее все известные адреса, вполне могут рассчитывать в этой фазе на реальный шанс установления соединения. Как только хотя бы одно соединение будет установлено, загружается новый набор адресов, и мы оказываемся в положении ничуть не лучше того, в котором мы бы очутились, вообще не блокируя соединения в первой фазе.
Для победы над этим третьим режимом ftwall требуется больше информации, которая позволила бы определить, что FastTrack все еще используется. Один из способов - еще немного подмен. Время от времени ftwall посылает клиенту UDP-пакет, являющийся копией пакета, который сам клиент использует для открытия связи с партнером. Если FastTrack-приложение выполняется на рабочей станции, оно отвечает пакетом, который может быть легко распознан, что вызовет сброс таймера. Сравнительно небольшое количество и размер таких пробных пакетов означает минимальную нагрузку на сеть.


Рис. 3. UDP-проба статуса FastTrack.

Поскольку эти пакеты не перенаправляются на публичный адрес, а предназначены для самого фаерволла, для направления его к ftwall требуется правило iptables в цепочке INPUT. При этом используется такое правило:

iptables -A INPUT -p udp -i eth0 -j QUEUE

Это надолго удерживает клиента в оффлайне, но несколько неэффективно. Если мы выберем правильное значение таймера, отправляя эти UDP-пакеты, когда срок их существования истек ровно наполовину – этого будет достаточно для того, чтобы поддерживать такое значение таймера, которое будет удерживать клиента заблокированным.
Последний кусочек головоломки – это дополнительная подстраховка, которая, теоретически не требуется. Описанная выше логика зависит от набора распознаваемых UDP-пакетов, которые предоставляют ftwall необходимую ему информацию, однако нам стоит подумать: что случится, если эти UDP-пакеты не будут доставлены – например, если пользователь отключит передачу UDP, используя фаерволл на своей рабочей станции? В таком случае у нас нет ничего, что могло бы использоваться для определения адресов партнеров, с которыми устанавливается контакт.
Несмотря на это у нас еще остается одна возможность: проверка всех TCP-пакетов в попытке заметить фактическую передачу файлов. Использование шифрования в FastTrack ограничено подтверждением установления связи и поисками. Разделенные файлы передаются с использованием простого текстового HTTP. Заголовки HTTP-запроса включают некоторые поля, идентифицирующие пользователя FastTrack, протокол и адрес главного узла – то есть узла, предоставляющего индексную информацию. Если эти пакеты будут поставлены в очередь на проверку ftwall, это позволит выделить те, которые будут похожи на начало загрузки файла через FastTrack. Из данных, содержащихся в заголовках HTTP ftwall выделяет IP-адрес назначения и адрес главного узла и добавляет их к своему списку блокируемых адресов. Одновременно он добавляет адрес клиента к списку тех, к кому применяется политика «часовой ловушки».

обзор инсталляции

Процесс установки ftwall подробнейшим образом описан во включенном в комплект файле INSTALL, а также на веб-сайте проекта, однако давайте кратко познакомимся с основными шагами:
•загрузите исходные коды с p2pwall.sourceforge.net и распакуйте их;
•установите библиотеку libpq, если она еще не установлена. На некоторых системах, включая Red Hat 7.x и 8, это означает получение исходников и компиляцию iptables;
•скомпилируйте и установите ftwall с помощью make и make install;
•добавьте запись в каталог загрузчика для запуска ftwall;
•убедитесь, что вам доступен механизм QUEUE и добавьте его, если это не так. Большинство современных Linux-систем им уже располагают, в противном случае его можно добавить пропатчиванием и пересборкой ядра;
•создайте правила iptables в цепочках INPUT и FORWARD;
•если вы хотите задействовать опцию проверки заголовков HTTP на предмет загрузок файлов, добавьте строковый модуль к ядру и iptables. Это потребует патча и пересборки ядра;
•перезагрузитесь.

Заключение

С запущенным на межсетевом экране ftwall трафику FastTrack блокируется доступ к Internet. При условии, что ваш фаерволл также блокирует входящие соединения, ваша сеть стала «Kazaa-непробиваемой». Клиенты FastTrack в рамках вашей сети все еще остаются способными взаимодействовать между собой, но обмен файлами с внешними партнерами предотвращен.
Этот подход ограничен тем, что фокусируется исключительно на FastTrack; однако проект P2Pwall стремится расширить свою деятельность и на другие P2P-протоколы. Если вы желаете каким-либо образом принять участие в проекте, пожалуйста, пишите мне наchris@lowth.com.
Ftwall работает с FastTrack-клиентами, доступными на момент его написания. Не исключено, что протокол FastTrack в будущем претерпит изменения. В этом случае ftwall также будет нуждаться в доработке.

Chris Lowth, перевод Алексея Кутовенко.


© Сетевые решения