Использование L7-filter

26 Ноя
2009

Традиционный Netfilter имеет мало средств для анализа протоколов, но для Linux сегодня доступны несколько проектов, которые предоставляют больше возможностей по контролю трафика, одним из самых популярных является – l7-filter (l7-filter.sf.net), который дает возможность 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:

  • Kernel version – развивается уже давно и хорошо протестирована, немного сложна в установке, не очень дружит с SMP-процессорами и позволяет использовать только самые простые регулярные выражения;
  • Userspace version – находится в ранней стадии развития, и, возможно, в будущем будет поддерживаться только эта версия, обладает большими возможностями по фильтрации, так как поддерживает весь спектр команд GNU grep.

Несмотря на то, что userspace стабилен в работе, этот вариант не рекомендуют использовать на критических системах и для блокировки трафика. В дальнейшем рассмотрим установку kernel варианта l7-filter, который затем дополним IPP2P. Данный способ потребует пересборки ядра.
Для успешного проведения сборки в твоей системе должны быть установлены пакеты build-essential, iptables, iptables-dev и linux-source. Берем настройки текущего ядра, которые будем использовать как базовые, и копируем текущую конфигурацию в /usr/src/linux:

$ sudo cp /boot/config-`uname -r` /usr/src/linux/.config

Получаем архив с патчами для ядра с сайта L7-filter, распаковываем его и переходим в каталог с сырцами ядра:

$ tar xzvf netfilter-layer7-v2.21.tar.gz
$ cd /usr/src/linux

В архиве несколько патчей для разных версий ядер и iptables, нужно выбрать вариант для своего ядра:

$ sudo patch -p1 < ../netfilter-layer7-v2.21/for_older_kernels/kernel-2.6.22-2.6.24-layer7-2.18.patch

Теперь аналогично патчим iptables, выбрав также свою версию:

$ cd ../iptables
$ iptables -v
iptables v1.3.8
$ sudo patch -p1 < ../netfilter-layer7-v2.21/iptables-1.3-for-kernel-2.6.20forward-layer7-2.21.patch
$ sudo chmod +x extensions/.layer7-test

Собираем iptables:

$ make KERNEL_DIR=/usr/src/linux
$ sudo make install

Конфигурируем и компилируем ядро:

$ sudo make menuconfig

Переходим в "Networking - Networking option - Network packet filtering framework(Netfilter) - Core Netfilter Configuration", где активируем "Connection tracking flow accounting" и "Layer 7 match support".
netfilter-layer7
Cтавим фильтры протоколов, фактически они просто копируются в каталог /etc/l7-protocols:

$ tar xzvf l7-protocols-2009-05-28.tar.gz
$ cd l7-protocols-2009-05-28/
$ sudo make install

После перезагрузки можно проверить работу фильтра. Команда "iptables -m layer7 --help" выдаст список параметров. Например, чтобы заблокировать BitTorrent, AIM и Skype, пишем:

iptables -A FORWARD -m layer7 –l7proto bittorrent -j DROP
iptables -A FORWARD -m layer7 –l7proto aim -j DROP
iptables -A FORWARD -m layer7 –l7proto skypetoskype -j DROP
iptables -A FORWARD -m layer7 –l7proto skypeout -j DROP

То есть ищем в списке название протокола и производим нужное действие.

Комментировать

Наверх