Серпом по аськамю Режем IM, Skype, P2P и все остальное_ssh3r1ff- (ssh3r1ff@gmail.com) Очень многие любят на работе общаться по аське, зависать в «Одноклассниках», качать файлы, в общем, заниматься всем, чего угодно, но только не своими непосредственными служебными обязанностями. Естественно, рано или поздно это надоест начальству, и решение по блокировке всего и вся претворять в жизнь придется тебе как админу. Изучаем вопросВообще говоря, процесс блокировки доступа пользователей к IM-сетям довольно прост: достаточно указать в пакетном фильтре пару правил, и клиент просто не сможет подключиться к серверу. Но такой метод помогает только в 90% случаев, остальные 10% приходятся на умников, знающих о том, что сегодня предлагается большое количество утилит и сервисов, задача которых - помочь задавленному админскими правилами пользователю вырваться на свободу. Для этого используется подключение через стандартный http-порт или шифрование соединения, что не позволяет просто взять и отбросить пакет или просмотреть его содержимое. Поэтому универсального решения, скорее всего, не будет никогда. Хотя это даже делает нашу работу интереснее. Вперед! Так как мы пока не знаем, что конкретно искать, запускаем tcpdump без параметров:
А вот и наша аська:
Вывод нам дал, как минимум, два полезных параметра - IP-адрес сервера ICQ, к которому подключается клиент, и название протокола. Номер нужного порта можно узнать командой «grep aol /etc/protocols», запустив tcpdump с ключом '-n' или просто спросив у гугла. Мы ищем аську, поэтому пишем:
Теперь в расставленные сети будет попадаться только то, что нужно. Аналогично отлавливаются данные и по остальным IM-сетям. Все клиенты ICQ, в том числе и рамблеровские, для подключения к серверу по умолчанию используют адрес login.icq.com и порт 5190. В асечных рекомендациях сказано, что в случае недоступности 5190 подключаться можно и к порту 443. Продолжаем исследование и смотрим, что мы можем узнать о домене:
Вывод показывает, что login.icq.com является псевдонимом для другого имени, и, подозреваю, далеко не единственным. Его также не мешает заблокировать в правилах. Как видишь, ситуацию с ICQ и многими другими сервисами немного усложняет наличие большого количества алиасов и подсервисов, поэтому приходится искать и прикрывать все возможные варианты. Еще одна полезная команда – dig – даст наиболее полную инфу по любому домену (dig login.icq.com). В первом случае заблокировать доступ очень просто. Сначала режем по порту и затем для верности добавляем правило для домена, если кто-то захочет нас надуть (все примеры буду приводить для iptables, но при необходимости их легко можно переписать для любого другого пакетного фильтра):
Использование доменного имени с одной стороны более универсально, так как IP всегда может измениться, но с другой стороны – «в лет» найти все алиасы сложновато, поэтому нелишней будет блокировка и по адресу. Тем более, разработчики постоянно идут навстречу клиенту и предлагают сервисы вроде
Но даже неискушенный юзверь найдет в интернете еще с десяток реализаций icq2go (а-ля www.meebo.com), предлагающих коннект к IM-системе в обход ограничений. Вот здесь уже придется повозиться. Не буду мучить детальным выводом tcpdump'а, скажу только, что Yahoo! Messenger использует TCP-порты: 5000-5001,5050,5100 и UDP-порты: 5000-5010, MSN - 1863, Jabber/Gtalk - 5222, 5223, IRC обычно 6667-6669, Мail-Агент работает по портам: 2041, 2042. Особо не раздумывая, сделай запрет на все! Помни, что некоторые сервисы (например, узкопрофильные IRC и т.п.) могут менять порты по умолчанию. Правила для этих сетей строим по аналогии с предыдущим. Например, для Yahoo Messenger:
Из дополнительных мер можно посоветовать перенастроить свой DNS-сервер, чтобы пользователь вместо правильного адреса получал изначально нерабочий. К слову, анализ DNS-запросов в сети может дать не меньше информации к размышлению, чем отлов пакетов с tcpdump. Поскольку мой DNS-сервер крутится на OpenBSD, приведу пример для BIND 9.3.4:
Перезапускаем демон named и включаем журналирование DNS-запросов:
Смотрим в логи:
В дальнейшем борьба будет вестись по принципу «увидел что-то новое в netstat/tcpdump/queries.log, проанализировал и добавил правило». В репозиториях дистрибутивов полно всяких полезных утилит. Например, iptstate выводит TOP-образную таблицу по соединениям. Чтобы упростить задачу, можно использовать фильтр портов или адресов:
Так мы увидим все попытки подключения к асечному порту. Перекрываем кислород средствами кальмараКак только основные порты для связи с IM-сервером будут перекрыты, пользователи начнут подключаться через стандартный порт 80/443 или через прокси. Здесь iptables в том виде, в котором он есть, нам уже не поможет, но не забываем о существовании Squid'а – он работает на прикладном уровне и умеет анализировать передаваемую информацию. Надеюсь, к этому времени кальмар у тебя уже настроен, и все пользователи через него выходят в интернет (подробнее о настройке Squid смотри в летних номерах ][ за 2008 год). Сам принцип блокировок остается тем же - запрещаем доступ к определенным адресам. Итак, открываем squid.conf и дописываем:
Учитывая, что резать придется и другие IM-сети, а также бесплатные почтовики вроде mail.ru, проще для всех блокируемых адресов создать отдельный файл, подключив его в правиле:
Остается только почаще заглядывать в отчеты Sarg (анализатор лог-файлов Squid) и проверять, все ли лазейки прикрыты. Допиливаем iptablesВсе сделано правильно, нужные порты и адреса заблокированы, но хитрые пользователи все равно нашли способ обойти преграды. Снова возвращаемся на нижний уровень OSI к нашему iptables. Начиная с версии 2.6.14, в состав ядра включен модуль (ранее он был в patch-o-matic-ng), позволяющий заглянуть внутрь пакета и построить правило, опираясь на наличие/отсутствие определенных строк. Модуль называется string (xt_string). В большинстве современных дистрибутивов все необходимое уже есть, и пересобирать ничего не придется. Чтобы проверить, достаточно просмотреть список файлов в каталоге модулей:
С его помощью задавать правила довольно просто:
Теперь, если в пакете обнаружится соответствующая строка, в доступе будет отказано. Так же можно резать и все остальное, к чему не лежит душа начальства/админа. Например, пользователи любят на шару качать файлы на работе, посему блокируем Download Master:
Подобным образом можно закрыть доступ к «Одноклассникам», «ВКонтакте» и прочим ресурсам. Параметр '--algo' обязателен, – он определяет алгоритм, который будет использован для проверки совпадения строк. Здесь возможны варианты - kmp (от Knuth-Pratt-Morris) или bm (от Boyer-Moore). В подробности работы алгоритмов вдаваться не буду, скажу только, что bm считается одним из наиболее быстрых среди алгоритмов сравнения в «простых» ситуациях. А kmp является усовершенствованным вариантом bm, оптимизированным для разбора сложных строк. Кстати, модуль string поддерживает и параметр '--hex-string', что позволяет производить поиск в бинарном формате. К сожалению, это все, что можно сделать, используя стандартные возможности iptables. Далее необходимо обращаться уже к другим решениям. Блокировки седьмого уровняСуществует несколько проектов, которые предоставляют больше возможностей по контролю трафика. Это l7-filter (l7-filter.sf.net), Zorp (www.balabit.com/network-security/zorp-gateway), IPP2P (ipp2p.org) и P2PWall (www.lowth.com/p2pwall). Последние два проекта, как видно из названия, специализируются на идентификации P2P-сетей. Задача Zorp (Modular Application Level Gateway) – защита приложений от направленных атак. Zorp представляет собой прозрачный прокси, который выступает посредником при работе клиента и сервера. Зная особенности протоколов и на основании настроек, он принимает решение о необходимости продолжения текущего соединения. Его главная фича - возможность проверки защищенных соединений (HTTPS, POP3S, IMAPS или SSH), что недоступно многим IDS. Версия GPL поддерживает только протоколы (HTTP/1.1, FTP, SSL, finger, whois и telnet), поэтому Zorp нас пока не интересует. L7-filter позволяет Netfilter идентифицировать пакет на прикладном уровне данных, основываясь на его содержимом, и классифицировать пакеты по их назначению, без привязки к номеру порта. В настоящее время поддерживаются протоколы HTTP и FTP; P2P сети (Kazaa, BitTorrent, eDonkey2000, FastTrack); IM-системы (AIM/Jabber/IRC/MSN); VoIP/Skype; VPN; игры (Battlefield, CS, Doom3, WoW); файлы (exe, mp3) и даже черви вроде Code Red и Nimda. Проект предлагает две версии l7-filter:
Несмотря на то, что версия userspace стабильна в работе, ее не рекомендуют использовать на критических системах и для блокировки трафика. Ниже рассмотрим установку kernel-варианта l7-filter, который затем дополним IPP2P. Для успешного проведения сборки в твоей системе должны быть установлены пакеты build-essential, iptables, iptables-dev и linux-source. Берем настройки текущего ядра, которые будем использовать как базовые, и копируем их в /usr/src/linux:
Получаем архив с патчами для ядра с сайта l7-filter (либо с прилагаемого к журналу диска), распаковываем его и переходим в каталог с сырцами ядра:
В архиве несколько патчей для разных версий ядер и iptables. Нужно выбрать вариант для своего ядра (в настоящее время есть патчи только до 2.6.28):
Аналогично патчим iptables:
Собираем iptables:
Теперь конфигурируем и компилируем ядро:
Переходим в «Networking - Networking option - Network packet filtering framework(Netfilter) - Core Netfilter Configuration», где активируем «Connection tracking flow accounting» и «Layer 7 match support». На этой же вкладке активируется модуль string, о котором говорилось выше, поддержка Netfilter отдельных протоколов (FTP, H323 и пр.) и другие полезные функции. Ставим фильтры протоколов; фактически они просто копируются в каталог /etc/l7-protocols:
После перезагрузки можно проверить работу фильтра. Команда «iptables -m layer7 --help» выдаст список параметров. Например, чтобы заблокировать BitTorrent, AIM и Skype, пишем:
Далее блокируем по аналогии: ищем в списке название протокола и баним. Ставим IPP2PСейчас рассмотрим установку IPP2P - проекта, который специализируется на P2P-сервисах. Как и l7-filter, он является надстройкой над Netfilter/iptables, с которым легко интегрируется. Его функциональность расширяется за счет добавления новых правил. Для идентификации протокола IPP2P использует подготовленные шаблоны. Кроме блокировки трафика, IPP2P можно использовать для его маркировки, например, чтобы задавать меньший приоритет или канал. Учитывая, что все у нас уже подготовлено, описание установки много места не займет. Забираем с DVD-диска архив с исходными текстами ipp2p-0.8.2.tar.gz, накладываем патч
Скорее всего, в ответ получим ошибку «ipp2p-0.8.2/Makefile:36: You need to install iptables sources and maybe set IPTABLES_SRC». В инструкции по установке сказано, что скрипту нужно правильно указать на каталог, в котором находится заголовочный файл iptables.h. В нашем случае это – /usr/src/iptables. Открываем Makefile и правим:
Повторяем попытку. Если ядро ранее не собиралось, например, ты решил обойтись без l7-filter, то перед сборкой IPP2P следует установить исходники и ввести «make oldconfig && make prepare» (иначе процесс сборки IPP2P завершится неудачей). По окончании компиляции переносим libipt_ipp2p.so в каталог с библиотеками iptables:
Загружаем модуль:
Все готово! Смотрим список параметров:
И блокируем все, что не нужно:
ЗаключениеПосле описанных действий лазеек в сети не останется, хотя это не должно усыплять твою бдительность. Правильным будет запретить доступ к USB/CD/DVD, а также проконтролировать, какие программы установлены на компьютерах пользователей, и заблокировать возможность самостоятельной их установки. MIPKO Employee MonitorПредставим такую ситуацию: политикой компании разрешено использовать ICQ только менеджеру по продажам, но он целый день болтает в аське с друзьями, вместо того, чтобы разводить клиентов на заказы. При помощи программ, описанных в статье, это определить нельзя. Поэтому возможен и альтернативный подход - наблюдение. На рабочем месте устанавливается программа, которая перехватывает все вводимые сообщения, контролирует запуск приложений и работу в интернете. Начальство в этом случае получает отчеты по всем действиям пользователя, включая снимки рабочего стола, и может оценить эффективность работы сотрудника. Пример такой программы - MIPKO Employee Monitor (www.mipko.ru). Она разработана российской компанией, имеет локализованный интерфейс и довольно проста в использовании. Программа может быть запущена в скрытом режиме. В этом случае отследить ее работу штатными системными средствами невозможно. Цепкий захватПо умолчанию l7-filter просматривает лишь первые 10 пакетов или 12 Кб каждого соединения, чего обычно более чем достаточно. При необходимости можно указать свое значение, прописав его в /proc/net/layer7_numpackets:
Пример блокировки ICQ для packet filter
INFO
WWW
|