LINUX.ORG.RU

nDPI как замена l7filter

 ,


23

17

Если кому интересно, то вот рецепт

На большом потоке ( >300мбит/с ) c большим числом протоколов (>20) используется примерно 40% одного ядра Intel(R) Xeon(R) CPU E31230@3.20GHz. Если поток больше или процессор слабее, то включаем RPS или используем сетевые карты с multi-queue и irq-affinity :)

Требуется много памяти. На каждое соединение расходуется примерно 800+264*0.7 байт.

Исходники теперь есть на https://github.com/vel21ripn/nDPI/tree/netfilter

★★★★★

Любопытно. Только по ссылке не особо-то и инструкций. Мне больше интересно, на чем оно у тебя сейчас работает, в плане дистрибутива и версий софта?

pekmop1024 ★★★★★ ()
Ответ на: комментарий от pekmop1024

Оно не расчитано на чайников. Тем кто не в состоянии приложить патчи и пересобрать ядро - лучше пройти мимо.

Дистрибутив - урезанная слака (вырезаны X-ы и всякая мультимедия, которая на роутере ненужна).

Патч для ядра очень простой и IMHO его можно применить для любого ядра 3.X с напильником минимальных размеров.

От версии iptables IMHO зависит не много.

Если кто-то успешно соберет с более другими версиями - пусть расскажет.

В допиливании ndpi-netfilter я пока вижу 2 задачи:

1) Сделать кернельный патч более культурным (в виде netfilter_extension). Сейчас это аккуратный хак.

2) сделать возможным отключать поддержку части протоколов при компиляции, т.к. там есть куча протоколов, которые нужны единицам, а память они едят даже если не используются.

Автору ndpi-netfilter я написал, он вроде заинтересован.

vel ★★★★★ ()
Последнее исправление: vel (всего исправлений: 2)
Ответ на: комментарий от vel

Оно не расчитано на чайников. Тем кто не в состоянии приложить патчи и пересобрать ядро - лучше пройти мимо.

Это такая модная отмазка для лентяев, не пишущих документацию? А как мне узнать, например, заведется ли оно на 3.2 ядре или на 2.6.32?

Дистрибутив - урезанная слака (вырезаны X-ы и всякая мультимедия, которая на роутере ненужна).

Несерьезно это. Я думал, хотя бы деб или центось...

pekmop1024 ★★★★★ ()
Ответ на: комментарий от pekmop1024

Чайники ждут поддержки этой фичи в их дистрибутиве :)

В той инструкции есть только одно нетривиальное действие - создание линков из nDPI в ndpi-netfilter, а все остально можно было не писать.

на 2.6.32 не заведется без правок кода касающегося net_ns и прототипов некоторых функций netfilter.

А на 3.2 должно собираться без особых сложностей.

А инструкцию для чайников можно будет написать после того, как все устаканится.

Пока есть 1 баг - оно не детектит трафик идущий через lo. Почему - пока не ясно.

vel ★★★★★ ()
Ответ на: комментарий от vel

Инструкция для чайников

Можно инструкцию для не совсем чайников, но подробнее той, что имеется? Хотелось бы для Debian 6/7. Заранее спасибо.

Sky560 ()
Ответ на: Инструкция для чайников от Sky560

У меня не дебиан. Для дебиана специфическим действием будет только пересборка ядра. Уверен, что в гугле есть куча подробных инструкций по пересборке ядра в дебиане.

А остально описано максимально подробно.

Что конкретно не получается ?

vel ★★★★★ ()
Ответ на: комментарий от vel

я чайник

я на Ubuntu 13.04 пересобрал ядро и собрал netfilter по инструкции http://devel.aanet.ru/ndpi/ выдает вот такое при попытке включить правила:

# iptables -A FORWARD -m ndpi --skype -j LOG iptables: No chain/target/match by that name. На гитхабе написано что должны быть после установки модуль ядра «xt_ndpi.ko» и библиотека «libxt_ndpi.so». «libxt_ndpi.so» есть, а модуля ядра нет:

#modprobe xt_ndpi FATAL: Module xt_ndpi not found.

Ядро пересобранное: Linux propan 3.8.13.12 #2 SMP Mon Dec 9 22:07:00 MSK 2013 x86_64 x86_64 x86_64 GNU/Linux

Vel, в чем мой фейл??

kluger ()
Ответ на: комментарий от vel

нету. я не заметил, что он не создался, make выдал ошибку, а я не заметил. у меня в headers нет net/netfilter/nf_conntrack_ndpi.h

Спасибо :)

kluger ()
Ответ на: комментарий от vel

Подскажи, пожалуйста, я правильно понял, что все новые ревизии nDPI надо патчить?

и вот еще, может я конечно чего-то не понимаю, но почему последняя строка из патча nDPI-strtok выглядит так?:

 static void ndpi_int_http_add_connection (struct ndpi_detection_module_struct *ndpi_struct, 

в конце нет закрывающей круглой скобки, насколько я понимаю, это аргументы функции и по синтаксису Си там должна быть закрывающая круглая скобка. Поправьте если не так :)

Sky560 ()
Ответ на: комментарий от Sky560

Потому, что патч соответствует синтаксиису программы patch, а не патчимого файла, лол.

anonymous ()
Ответ на: комментарий от vel

Пытаюсь собрать, но при этом появляется ошибка

/usr/src/nDPI/ndpi-netfilter/src/../lib/ndpi_main.c:36:26: фатальная ошибка: ../../config.h: Нет такого файла
компиляция прервана.

Нахожусь при этом в каталоге /usr/src/nDPI/ndpi-netfilter

Что не так?

as_lan ★★ ()
Ответ на: комментарий от as_lan

Собрать собрал, но как и в случае ipp2p не весь трафик маркируется(( Исходящий. С входящим проблем нет

as_lan ★★ ()

установка nDPI

День добрый! Яро пересобрал. Далее

cd /usr/src/nDPI
./configure
cd ./ndpi-netfilter/
make

WARNING: «ndpi_search_collectd» [/usr/src/nDPI/ndpi-netfilter/src/xt_ndpi.ko] undefined!

sudo make install

make -C ipt install make[1]: Вход в каталог `/usr/src/nDPI/ndpi-netfilter/ipt' if [ -d /lib/xtables ]; then install libxt_ndpi.so /lib/xtables; else echo «No pkg-config --variable=xtlibdir xtables»; fi make[1]: Выход из каталога `/usr/src/nDPI/ndpi-netfilter/ipt'

sudo make modules_install

make -C src modules_install make[1]: Вход в каталог `/usr/src/nDPI/ndpi-netfilter/src' make -C /lib/modules/3.8.13.13-v-ndpi+imq/build M=$PWD modules_install; make[2]: Вход в каталог `/usr/src/linux-lts-raring-3.8.0' INSTALL /usr/src/nDPI/ndpi-netfilter/src/xt_ndpi.ko DEPMOD 3.8.13.13-v-ndpi+imq WARNING: /lib/modules/3.8.13.13-v-ndpi+imq/extra/xt_ndpi.ko needs unknown symbol ndpi_search_collectd make[2]: Выход из каталога `/usr/src/linux-lts-raring-3.8.0' depmod -a; make[1]: Выход из каталога `/usr/src/nDPI/ndpi-netfilter/src'

sudo modprobe xt_ndpi

FATAL: Error inserting xt_ndpi (/lib/modules/3.8.13.13-v-ndpi+imq/extra/xt_ndpi.ko): Unknown symbol in module, or unknown parameter (see dmesg)

dmesg

[11930.534086] xt_ndpi: Unknown symbol ndpi_search_collectd (err 0)

Что не так с ndpi_search_collectd? =) бьюсь второй день =)

rassion ()
Ответ на: установка nDPI от rassion

Какая версия/ревизия nDPI ?

У меня нет такой функции в исходниках. Очень похоже, что добавили новый протокол.

Попробуй собрать из тех исходников, что я выкладывал.

vel ★★★★★ ()
Ответ на: комментарий от vel

Да спасибо, по вашим исходникам все пошло, как дети в школу. А DPI качал и с githab'a и с svn. Копал исходники, они добавили новый протокол collectd. Я его и комментировал и тд и тп.. Не хотел становиться)

rassion ()

Столкнулся с проблемой. Не могу понять в чем причина. Есть циска анонсирует пакеты BGP (по определенным IP) на сервер (с DPI + quagga)

Вот так работает блокировка sudo iptables -A FORWARD -m string --string «pchelovod.info» --algo kmp -j DROP

А как должна работать, нет( sudo iptables -A FORWARD -m ndpi --proto http -m string --string «pchelovod.info» --algo kmp -j DROP

Если же наложить правило на внутренние соединения sudo iptables -A OUTPUT -m ndpi --proto http -m string --string «pchelovod.info» --algo kmp -j DROP , то локально wget pchelovod.info дропает соединение.

rassion ()

тут вычитал

«Иными словами, входящий и исходящий трафик в пределах одного flow должны пройти через одно и то же устройство. Если оборудование понимает, что видит только одно направление в рамках сессии, оно не имеет возможности соотнести данный flow с какой-либо известной категорией трафика со всеми вытекающими последствиями.»

у нас трафик приходит на eth0 уходит через eth1

судя по всему ndpi не может определить трафик т.к. разные устройства.

Так ли?)

rassion ()
Ответ на: комментарий от rassion

Под устройством понимается роутер, а не физический интерфейс. DPI хорошо работает, когда через него проходит прямой и обратный трафик. Этот как с NAT-ом.

Это проблема в пределах AS, т.к. входящий трафик одного соединения может приходить через один канал, а уходить через другой.

vel ★★★★★ ()
Ответ на: комментарий от vel

Завернули весь трафик по eth1

@server-DPI:/usr/src/nDPI/example$ sudo tcpdump -ni eth1 -s0 -w /var/tmp/capture.pcap

Далее

@server-DPI:/usr/src/nDPI/example$ ./pcapReader -i /var/tmp/capture.pcap

----------------------------------------------------------- * NOTE: This is demo app to show *some* nDPI features. * In this demo we have implemented only some basic features * just to show you what you can do with the library. Feel * free to extend it and send us the patches for inclusion ------------------------------------------------------------

Using nDPI 1.4.0 ($Revision: 6863 $) Reading packets from pcap file /var/tmp/capture.pcap...

WARNING: only IPv4/IPv6 packets are supported in this demo (nDPI supports both IPv4 and IPv6), all other packets will be discarded

pcap file contains IP packets: 382 of 386 packets total IP bytes: 127066 Unique flows: 12 nDPI throughout: 227.52 K pps / 577.39 Mb/sec Guessed flow protocols: 0

Detected protocols: HTTP packets: 382 bytes: 117898 flows: 12

rassion ()

Приветствую. Возник вопрос по установке ndpi. Предоставленный тобой «рецепт» пока слишком сложен для меня, я пока не такой матёрый линуксоид, как хотелось бы) Делал все по инструкции парня, которого вдохновил ты

http://a7lanov.blogspot.ru/2014/01/ubuntu-imq-ndpi.html

С костылями наперевес добрался наконец до конца сего мануала без ошибок, но, в самом конце, где собираем nDPI, у меня всё крашится на команде make

Вход в каталог `/usr/src/linux-lts-raring-3.8.0'

make[3]: *** Нет правила для сборки цели `/usr/src/nDPI/ndpi-netfilter/src/../lib/protocols/flash.o', требуемой для `/usr/src/nDPI/ndpi-netfilter/src/xt_ndpi.o'. Останов.

make[2]: *** [_module_/usr/src/nDPI/ndpi-netfilter/src] Ошибка 2

make[2]: Выход из каталога `/usr/src/linux-lts-raring-3.8.0'

make[1]: *** [modules] Ошибка 2

make[1]: Выход из каталога `/usr/src/nDPI/ndpi-netfilter/src'

make: *** [all] Ошибка 2

Можешь, пожалуйста, глянуть его инструкцию, может он разжевал что-то не так? Или мои кривые руки всему виной. Устал я уже воевать с этим nDPI, сил уже нет. Надеюсь на понимание и помощь)

aksenk ()
Ответ на: комментарий от aksenk

Возможно я в ближайшее время (неделю) обновлю данные, но это будет для ядер 3.12 или 3.14. Там полностью переписана ядерная часть и она не будет совместима со старым вариантом.

svn nDPI часто обновляют :( У меня небыло времени на погоню за ними.

Попробуй сначала собрать из тех исходников которые были на тот момент.

В текущей версии svn добавлены новые протоколы. Это требует правки Makefile-ов и исходников.

vel ★★★★★ ()

Поясни плиз - На каком потоке и на скольких pps и при каких протоколах у тебя максимум это решение работает ?

Тема очень интересная, особенно для меня работающего в ISP

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

я тестировал его на скоростях до 300Мбит и до 150000 conntrack. pps не могу сейчас вспомнить. Были графики не только pps, но и потребляемых ресурсов (cpu + mem), числа conntrack/s, но куда все это сейчас делось - не могу найти!

правила - счетчики для ~20 протоколов.

трафик получал через port-mirror & bridge setageing=0

vel ★★★★★ ()
Ответ на: комментарий от vel

это грузило в сумме 1 ядро на 100% ( реально это проверялось на 2х ядрах через rps )

Ок.

pinachet ★★★★★ ()
Ответ на: комментарий от post-factum

в 3.14-pre до 3.14.2 несколько утечек пофиксили в сетевом коде.

Я пока запустил ndpi-netflter на тестовой машинке. Путь несколько суток поработает. Я несколько параметров мониторю.

Собственно, если не использовать nf_tables, то проблем не должно быть. А nf_tables им еще пилить и пилить...

vel ★★★★★ ()
Ответ на: комментарий от post-factum

Что-то в ndpi резко изменилось!

Что-то стал совсем хреново определятся udp-трафик ( в отличии от tcp )!

Еще нашел несколько странностей (периодически из моста прилетают skb > 1500 да еще с фрагментами ).

Найдена еще одна принципиальная ошибка в ndpi-netfilter: один и тот же skb анализировался много раз. Это только ухудшало результат распознования и создает допонительную нагрузку на cpu.

Сейчас тестируется новая версия. Если все будет хорошо, то через 3-4 дня выложу.

vel ★★★★★ ()
Ответ на: комментарий от vel

спасибо. Буду ждать. Давно хотел новые версии ndpi потестить, никак руки не доходили.

as_lan ★★ ()
Ответ на: комментарий от vel

А какой патч ставить, если ядро 3,13 ? для 12 или 14 версии. Просто ставлю еще патчи imq, а под 14 версию их нет. Есть только под 12,4 и 13.

as_lan ★★ ()
Ответ на: комментарий от as_lan

Да и вообще. В 12.04 из свежих есть только 3.11 и 3.13 ядра. А патчи, как назло, именно на четные версии ядер))

as_lan ★★ ()
Ответ на: комментарий от vel

1. А что это за параметр NF_CONNTRACK_CUSTOM, и какую цифру надо лучше поставить? 2. CONFIG_NF_CONNTRACK_NDPI после этого появится?

as_lan ★★ ()
Ответ на: комментарий от as_lan

Это универсальный патч который позволяет динамически регистрировать экстеншены в CT без пересборки ядра. Я обычно указываю 2.

CONFIG_NF_CONNTRACK_NDPI после этого не появится т.к. ненужен. Все перенесено в ndpi-netfilter.

Я тестирую его на стабильность и возможность сократить объем потребляемой памяти.Сейчас минимум 3800+2*256 байт на 1 ct (без учета динамически выделяемой памяти). IMHO это очень много. L7 использует 2к на CT.

Я нашел, что там резервируется 2*200 указателей на строки, хотя по статистике больше 50 не используется (я урезал их до 100 и получил вместо 3800 байт 2220).

Во-вторых я хочу понять как эта хрень будет себя вести при недостатке вычислительной мощности и при нехватки памяти. Есть подозрение, что нехватает блокировок при работе с некоторыми общими структурами, что приводит утечки памяти и дальнейшему oom Я пока не смотрел как все это будет работать на x86_64. Возможно некоторые проблемы исчезнут, а некоторые появятся. Явно увеличится размер структур, но и доступной памяти станет больше.

vel ★★★★★ ()
Ответ на: комментарий от vel

Тогда поправьте мануал) Там указано что CONFIG_NF_CONNTRACK_NDPI надо включать. Вчера много времени потратил в поисках его. Думал «то ли лыжи не едут, то ли я ... ».

as_lan ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.