LINUX.ORG.RU
ФорумAdmin

nDPI как замена l7filter [продолжение]

 , ,


14

12

Продолжение длинной истории

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

Отдельно и более подробно для Ubuntu и CentOS от as_lan

На большом потоке ( ~300мбит/с ) cо всеми протоколами используется примерно 50-60% одного ядра Intel(R) Xeon(R) CPU E31230@3.20GHz. Если поток больше или процессор слабее, то включаем RPS или используем сетевые карты с multi-queue и irq-affinity. У меня оно тестируется на трафике до 400Мбит/~100к conntrack/~90kpps для x86 и x86_64.

В понятиях netfilter оно умеет проверять пакеты на принадлежность к протоколам (match) и ставить на пакеты метки/классы (target) по аналогии с MARK & CLASSIFY. Есть поддержка NET_NS и IPv6.

Требуется много памяти. На каждое соединение расходуется примерно ~850+280*0.7 байт. Этот объем варьируется в зависимости от 32/64 бита, с/без IPv6.

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

От основной ветки на github/ntop/nDPI/1.7-stable отличается меньшим потреблением памяти и «улучшением» определения bittorrent.

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

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

Хотя, у провайдера DPI понимает пакеты даже с маленьким mtu

ne-vlezay ★★★★★
()

в контейнер lxc ndpi можно установить ?

В lxc контейнере её можно установить ? на ubuntu 14.04 и 16.04 без вмешательств в головной linux (не контейнер)

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

так вроде давно доступен.

на github-е последний апрельский коммит явно на 4.4 тестировался.

vel ★★★★★
() автор топика

Поставил на новое ядро Проверил пару фильтров dns http ssh - работает

Стал проверять фильтр halflife2 и он не ловит пакеты css,csgo серверов Готов заплатить тому кто может настроить этот фильтр. Skype: dima-bannik

sovich
()
11 сентября 2016 г.

Сегодня проверил последнюю версию. Заметил, что видео не детектиться (например с rutube) ни как http ни как quicktime либо что-то другое. (смотрю в /proc/net/xt_ndpi/proto). Сама страница определяется как http, но если запустить видео, оно уже не определяется.

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

Отбой. Не знаю в чем бы проблема, но сейчас заработало. Странно конечно, но вчера почему не не детектил.

as_lan ★★
()
24 ноября 2016 г.
Ответ на: комментарий от TTPartizan

у меня есть свой вариант он слегка отличается от гитхабовского на тему поддержки NET_NS: в каждом NET_NS свой набор устройств imq.

для 4.4.32 оно применялось без режектов.

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

Что-то не догоняю просто качаю исходники, накладываю патч включаю в конфиге IMQ make не собирает :(

CC net/core/dev.o In file included from include/linux/linkage.h:6:0, from include/linux/kernel.h:6, from include/asm-generic/bug.h:13, from ./arch/x86/include/asm/bug.h:35, from include/linux/bug.h:4, from include/linux/thread_info.h:11, from ./arch/x86/include/asm/uaccess.h:8, from net/core/dev.c:75: include/linux/export.h:47:29: error: redefinition of ‘__kcrctab_validate_xmit_skb_list’ static const unsigned long __kcrctab_##sym \ ^ include/linux/export.h:58:2: note: in expansion of macro ‘__CRC_SYMBOL’ __CRC_SYMBOL(sym, sec) \ ^ include/linux/export.h:72:2: note: in expansion of macro ‘__EXPORT_SYMBOL’ __EXPORT_SYMBOL(sym, «_gpl») ^ net/core/dev.c:2850:1: note: in expansion of macro ‘EXPORT_SYMBOL_GPL’ EXPORT_SYMBOL_GPL(validate_xmit_skb_list); ^ include/linux/export.h:47:29: note: previous definition of ‘__kcrctab_validate_xmit_skb_list’ was here static const unsigned long __kcrctab_##sym \ ^ include/linux/export.h:58:2: note: in expansion of macro ‘__CRC_SYMBOL’ __CRC_SYMBOL(sym, sec) \ ^ include/linux/export.h:69:2: note: in expansion of macro ‘__EXPORT_SYMBOL’ __EXPORT_SYMBOL(sym, "") ^ net/core/dev.c:2822:1: note: in expansion of macro ‘EXPORT_SYMBOL’ EXPORT_SYMBOL(validate_xmit_skb_list); ^ include/linux/export.h:59:20: error: redefinition of ‘__kstrtab_validate_xmit_skb_list’ static const char __kstrtab_##sym[] \ ^ include/linux/export.h:72:2: note: in expansion of macro ‘__EXPORT_SYMBOL’ __EXPORT_SYMBOL(sym, «_gpl») ^ net/core/dev.c:2850:1: note: in expansion of macro ‘EXPORT_SYMBOL_GPL’ EXPORT_SYMBOL_GPL(validate_xmit_skb_list); ^ include/linux/export.h:59:20: note: previous definition of ‘__kstrtab_validate_xmit_skb_list’ was here static const char __kstrtab_##sym[] \ ^ include/linux/export.h:69:2: note: in expansion of macro ‘__EXPORT_SYMBOL’ __EXPORT_SYMBOL(sym, "") ^ net/core/dev.c:2822:1: note: in expansion of macro ‘EXPORT_SYMBOL’ EXPORT_SYMBOL(validate_xmit_skb_list); ^ include/linux/export.h:63:39: error: redefinition of ‘__ksymtab_validate_xmit_skb_list’ __visible const struct kernel_symbol __ksymtab_##sym \ ^ include/linux/export.h:72:2: note: in expansion of macro ‘__EXPORT_SYMBOL’ __EXPORT_SYMBOL(sym, «_gpl») ^ net/core/dev.c:2850:1: note: in expansion of macro ‘EXPORT_SYMBOL_GPL’ EXPORT_SYMBOL_GPL(validate_xmit_skb_list); ^ include/linux/export.h:63:39: note: previous definition of ‘__ksymtab_validate_xmit_skb_list’ was here __visible const struct kernel_symbol __ksymtab_##sym \ ^ include/linux/export.h:69:2: note: in expansion of macro ‘__EXPORT_SYMBOL’ __EXPORT_SYMBOL(sym, "") ^ net/core/dev.c:2822:1: note: in expansion of macro ‘EXPORT_SYMBOL’ EXPORT_SYMBOL(validate_xmit_skb_list); ^ make[2]: *** [net/core/dev.o] Error 1 make[1]: *** [net/core] Error 2 make: *** [net] Error 2

патчи в основном на dev.c ругаются

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

хм. Помню, что 1 раз я с этим столкнулся, но как была решена проблема - не помню. Возможно обновлением библиотеки.

Этот файл точно есть в libpcap-1.7.x

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

Попробовал в бою. И словил такую неприятность iptables -t mangle -A PREROUTING -i ens1f0 -m ndpi --bittorrent -j IMQ --todev 0 хотел глянуть сколько torrent трафика - потом прижал tc`ом. И в итоге туда попал трафик World of Tanks!!! Причем как то не сразу. А через какое-то время пошли жалобы. Что это может быть?

ЗЫ попробовал выгрузить модуль rmmod: ERROR: Module xt_ndpi is in use :( вроде как правила iptables скинул.

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

1. По поводу WoW я уже года 2 назад говорил. Есть такое, детектит. А еще все что обновляется по p2p протоколу (те же танки обновляются через p2p)
2. conntrack -F надо делать, потом выгружать модуль.

Кстати. у меня часть сайтой детектиться как tor. Например g2a и iis.net. Заучал провайдера, думал у них что-то не так с маршрутами, оказалось что блокировка tor блокироваа и обычные сайты. Оставил репорт на гитхабе, завтра отправлю им pcap, чтоб сами посмотрели.

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

WoT обновляется это понятно, чего сама игра туда попадает!! причем пинг скачет в игре (не знаю правда в клиенте как у них пинг реализован)

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

Самое хреновое, что всё это затевалось из-за онлайн игр, танки в том числе. И тут такое.

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

Vel, Можно как-то «ухудшить» детектирование bittorent трафика, чтоб туда не попадал другой p2p трафик. Кроме танков туда залетел ещё и скайп.

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

можно. Хеш отключить bt_hash_size=0

Если известны адреса и порты танковых серверов, то можно попробовать прибить их через /proc/net/xt_ndpi/ip_proto. Формат

[-]prefix ([[(tcp|udp|any):]port[-port]:]protocol)+
vel ★★★★★
() автор топика
Ответ на: комментарий от vel

bt_hash_size по умолчанию какой? - т.к. его в modeprobe не вписывал.

ЗЫ а что значит прибить? можно пример что и куда вносить пожалуйста.

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

по-умолчанию 0.

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

Переопределение протокола можно сделать через /proc/net/xt_ndpi/ip_proto

Пример: echo '22.22.22.22 tcp:6432:starcraft' >/proc/net/xt_ndpi/ip_proto

имена протоколов в /proc/net/xt_ndpi/proto

А под каким именем в nDPI живет WoT ? WoW там вроде есть...

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

WoT там нету. У меня просто 4Гбита трафика и что самое интересное не у всех пользователей завернулся трафик от танков. а есть способ посмотреть куда попадает?

ЗЫ интересно, а по DNS имени можно переопределять ? или только ip

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

WoT там нету. У меня просто 4Гбита трафика и что самое интересное не у всех пользователей завернулся трафик от танков. а есть способ посмотреть куда попадает?

Советую поставить google cache ( они бесплатно сервак тебе дают) + от akamai и иже от них. Вообще на forum.nag.ru можно также поговорить

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

просто так уже не дают. + я с РБ у нас и более крупным не дали провайдерам, а наш монополист, получил и зажал кеш только своим абонентам даёт, остальным только через внешку. Вообще не тема тут.

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

Это из-за того что у вас траффик для ютуба не виден,вот и в этом трабла ,а нужно чтобы с вашего AS хотябы 700 мбит на сервисы гугла(ютуба) лилось оттуда. + еще akamai есть

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

спасибо. Но часть трафика WoT на 20014 порт всё ровно дедтектит как BitTorrent 5 UDP 172.16.1.10:62285 <-> 92.223.4.187:20014 [proto: 37/BitTorrent][NONF][10 pkts/570 bytes]

это что-то в виде пинга у них.

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

А кстати еще можете попробовать для экономии трафика retracker.local организовать

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

Кстати, я вроде понял почему переопределение не сработало. у каждого протокола есть id и соответственно пакет проходит по порядку, а id 37 BitTorrent , а Starcraft id 213. Надо было переопределять на любой меньше id 37.

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

Так сегодня ещё вылезли Dota 2 и Counter-Strike обе тоже используют мелкие пакеты udp< но тут не прокатит внести ip сервера. :(

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

IMHO в порядке регистрации протоколов и параметров протокола.

c обнаружением WoT есть проблема - оно ооочень похоже на utp/BT

Беда в том, что utp есть пакеты начинающиеся с байтов 0x1,0x0 и длина таких пакетов не фиксированная. Хуже того, в WoT id пакета клиента инкрементируется так же как в utp/BT.

Нужно писать отдельный парсер для WoT чтоб надежно его выделять из BT. Формат части пакетов достаточно специфичный и может использоваться для идентификации.

Возможно необходим отдельная hash-таблица для запоминания WoT серверов.

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

Напрягает, что и КС и Дота пошли «под раздачу» и определились как ВТ. Это, что массово играют, так сообщат. А ещё куча всякого играют, и хз что вылезет.

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

Пока Vel, разбирается. Скомпилел оригинальную 1.8-dev - все игры выкидывает в Unknown. Но модуль для iptables уже не собирается :( может кто подправить под новые компоненты старый ndpi-netfilter ?

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

Скомпилел оригинальную 1.8-dev - все игры выкидывает в Unknown.

Правильно, там и BT определяется значительно хуже.

Но модуль для iptables уже не собирается :( может кто подправить под новые компоненты старый ndpi-netfilter ?

Если бы там все так было просто... Они похерили все «#ifdef __KERNEL__» . Дальше рассказывать ?

Ну и косяки в коде новой меня совсем не радуют. Они бились с проблемами SIGSEGV из-за того, что парсер протокола работающегго только через udp почему-то вызывался для tcp пакетов. При чем исправляли зачем-то парсеры протокола...

Про csgo - там в udp есть шикарная сигнатура - можно достаточно легко детектить.

С dota2 пока разбираюсь.

С BT - мне нужно собрать utp-шный трафик (старые образцы похоже случайно стер) для того, чтобы понять какие пакеты с 0x01 0x00 точно его. Это уменьшит ложные срабатывания на BT

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

Все далее написанное не с целью обидеть Вас.

:) они мне так и ответили nDPI don't support anymore netfilter, so if you need to use it , look at any fork project that still maintain the netfliter support. Maybe the upgratest work is this https://github.com/vel21ripn/nDPI

Улыбнули с утра. Форк в виде модуля nf, AFAIK это личная разработка vel'a, соответственно сейчас поддерживает её только он. Можете попробовать использовать другую реализацию, например betolj/ndpi-netfilter.

В общем с нетерпением жду.

Тут лучше не ждать, а помогать свежими дампами. Вы же на работе, раз у вас 4Gbit'а есть, так запустите tcpdump «перед собой» и играйте в «affected игры». Далее адампы, как я понимаю, можно смотреть nDPI-reader'ом (не уверен, потому что никогда не пользовался). Если там не то что вы ожидаете, например моды Half-Life 2 (CS который у вас попадает я так понимаю это мод на движке Source) не детектятся - можно смело отправлять дамп как issue в основную ветку, т.к. этот протокол есть protocols/halflife2_and_mods.c. А еще лучше взять и поправить/добавить свои протоколы.

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

У Вас есть возможность проверить правило вида
iptables -A FORWARD -m ndpi --tor -j DROP
и
iptables -A OUTPUT -m ndpi --tor -j DROP

и посмотреть откроются ли сайты iis.net и g2a.com. Потому что у меня эти правила блокируют эти сайты.

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

Если есть проблемы, я снимал дампы и отправлял Vel. Он сейчас их смотрит. Если нужны ещё какие то не вопрос. Вообще могу тестировать, но сами понимаете на реальных юзерах нужно осторожно, вам же тоже не понравится если ваш провайдер что-то будет крутить когда вы работаете/играете.

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