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

★★★★★

Последнее исправление: vel (всего исправлений: 3)

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

"-j CONNMARK --save-mark" можно сделать 1 раз после всех ndpi

В принципе, подправить xt_ndpi не сложно.

На счет CLASSIFY в prerouting.

CLASSIFY предпологает передачу пакета т.е. когда определен исходящий интерфейс, а в mangle/prerouting он еще не определен (и его вообще может на быть). Это защита от дурака.

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

В смысле ? Метки ndpi в прероутинге использовать в imq для шепинга входящего трафика ?

Об исправлениях.

В текущей версии я добавил только несколько дополнительных форматов пакетов мю-TP/utp. Анализ самого протокола не производится.

А ты обратил внимание, что на последнеи графике доля неизвестного udp-трафика упала и стала видна доля неопознанного исходящего tcp трафика ?

Надо будет его еще раз проанализировать. То, что я видел было TCP-syn на недоступные торрент-хосты. С точки зрения шейпинга они не представляют проблемы, а вот если хочется блокировать, то с ними что-то надо делать.

Есть одна мысль на эту тему, но пока нет времении на ее реализацию. На данный момент прежде всего волнует стабильность работы и по-возможности уменьшение потребляемой памяти.

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

Да. У себя проверил. Работает. Если через mark, то сперва в iptables маркируем трафик, потом в TC создаем классы и правила обработки маркированного тарфика, какую метку в какой класс. А если CLASSIFY то сразу в нужный класс кидать, без маркировки и создания правил соотвествия метки тому или иному классу.

Ну то что udp упал вижу. А вот tcp.. Так вроде рост неизвестного tcp и до этого на графиках видно.

Ну а вообще чуть лучше кажется шифрованный ловить стал ndpi, но все равно недостаточно. За час-полтора приблизительно 25% поймал. Может чуть больше. А вот с нешифрованным все очень отлично. Вроде все детектирует.

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

70-80 мс из 800 мс процессорного времени. т.е. если запускать на одном ядре, то оно будет занято на 70-80%

Я не пробовал запускать его только на одном ядре. У меня оно разнесено на 4 ядра в среденем (25%,15%,15%,15%) на 0-м ядре irq, а остальные ядра 0%

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

Для мелких роутеров такое решение можно применять только с большими ограничениями. Оно не только процессор жрет, но и память, которой на мелких роутерах обычно мало (16-32Мб это вообще ниочем). На 1024 conntrack в нормальном варианте уходит 1.9Мб RAM, в худшем 2.2Мб .

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

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

У меня аналог atom. AMD e-350. Пока включил 3 протокола. Остальное по портам в шейпере. Могу и остальные протоколы включить, но как протестировать, ведь это домашний шлюз с шириной интернет канала в 30мбит. Только битторент может создать более менее нагрузку. Сейчас softirq в районе 10% на 25мбит p2p при сидировании.

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

Я добавил на тебя ссылку.

Запустил transmission c обязательным шифрованием, запустил сбор трафика. Как наберу несколько гигов, попробую проанализировать.

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

В принципе если кому-то интересно, могу попробовать собрать и на других дистрибутивах и написать инструкцию.

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

гм. Обнаружилось, что не определяется только 2 вида трафика (в режиме обязательного шифрования) :

1) неудачные коннекты (syn)

2) коннекты открытые до запуска ndpi или до момента идентификации BT на ip:port.

Проблема в том, что нужно делать переклассификацию соединений неопознанных ранее, что пока непонятно как делать. Есть еще мелкие проблемки, но у них наверняка есть хорошее решение.

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

Я вроде бы сбрасывал все текущие соединения, потом запускал уже ndpi Все равно бОльшую часть шифрованного трафика не определялось. Клиент rtorrent. В натройках выбирал все типы шифрования. Может другие клиенты при не все, а только часть трафика шифрует. Сегодня-завтра посмотрю как с utorrent будет.

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

Попробую в течении дня-двух на Centos сделать. Но не обещаю, так как год-полтора назад пробовал его собрать с поддержкой imq. Тогда не вышло.

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

Проверил так же на Ubuntu 14.04. Надо доустановить только 2 пакета. Добавил это в инструкцию. Кроме Centos еще заодно и в Debian попробую собрать.

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

Меньше чем на 3.4 не собирал.

режектов от патча 3.4.97 на ядро 3.2.1 нет. Возможно будет работать. Попробуй :)

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

Ну объем трафика, который показывал и реально был потреблен не совпадал. И изначально я думал по нему смотреть какая локальная машина какое количество трафика потребила, с разбивкой по портам и адресам назначения. Детальную статистику от нее ждал. Но в текущем виде он это умел не так, как я этого хотел.

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

а где бы взять инструкцию по доп функционалу? поставить-то поставил, а как потестить даже ума не приложу. мало общался с iptables

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

не понял если честно. Я просто подключал репозиторий, ставил ntop (jy тянул еще несколько пакетов) потом в вебке смотрел статистику.

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

например. Блокировка DNS

iptables -t mangle -A PREROUTING -m ndpi --dns -j DROP

Маркировка DNS

iptables -t mangle -A PREROUTING -m ndpi --dns -j MARK --set-mark 10

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

да пофиг где маркировать. У MARK нет ограничений. Главное маркировать до проверки метки :)

Но в mangle PREROUTING удобнее, т.к. там проходят все входящие пакеты, а в filter оно разделено на INPUT/FORWARD

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

Ну в общем дам. Я слишком критичен был в своих словах) Надо было просто уточнить что первым идет mangle, и маркировать тоже принято там.

as_lan ★★
()

скоро выложу обновление патч для ядра 3.17.3 и обновление nDPI до svn r8568

Удалось еще немного сократить затраты памяти - osdpi_id_node на 32 байта и ndpi_flow_struct на 96

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

Сейчас началось тестирование обнаружения торрент-трафика с декодированием dht и ответов трекера/нод. Каждая обнаруженная нода/пир заносятся в отдельную хеш-таблицу на 15 минут(?). При обнаружении пакета с адресом и портом из этой таблици трафик считается торрентом.

Это создает дополнительные расходы памяти (24 байта на ipv4:port), так что эта фича будет отключаемая.

на реальном ~300mbit/s трафике это давало больше 600000 записей.

С другой стороны - это всего дополнительно 15Мбайт к 200Мбайтам занимаемых flow & id

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

cpu будет использоваться чуть-чуть больше.

На данный момент общий результат улучшился - 1706kb неизвестного трафика на 358Mb принятого трафика и 22Mb неизвестного трафика на 14Gb переданного трафика за 21 час.

Но вот всплеск неизвестного трафика с 8 до 11 часов пока непонятен. Весь трафик идущий на хост записывается, так что нужно анализировать вручную.

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

Честно сказать результаты по мне так отличные. Из 14Gb только 6% неизвестного. Если же использовать в качестве блокировщика p2p на работе то думаю будет 100% результат.

as_lan ★★
()

Выложил обновленную версию на основе nDPI-1.5.1+ svn rev.8568

Очень рекомендую прочтитать описание изменений.

Тестирование было не очень длительное ( особенно на полном трафике).

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

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

крутяк!!! апплодисменты твоим трудам )) сейчас буду собирать на свежем SLES 12 и тестить)

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

я бы поставил 2 и посмотрел на число элементов Вот сейчас у меня

hash_size 8192 hash timeout 2100s count 860912 min 72 max 144
на 800к элементов / 8к кеш-таблица = ~100 элеменов в очереди IMHO нормально.

На мой взгляд очередь до 300 элементов не должна создавать заметной нагрузки.

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

Ок. Спасибо. Сегодня-завтра соберу новое ядро и ndpi

as_lan ★★
()

Я там сегодня некоторые уточнения написал.

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

Есть еще желание сделать список имен торрентов которые раздают клиенты - эта инфа (имя и хеш) есть после декодирования протокола.

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

Видно кто чего раздает. Но это явно будет опцией.

Мне тут летом несколько раз приходила abuse за раздачу спайдермена2. Определить кто раздает было не очень просто. А с таким функционалом можно было бы определить мгновенно. Я даже в чем-то был солидарен с правообладателем - раздавать экранку такого дерьмового качества просто преступление :)

Наверно полезным было бы выделение торрент-трекеров. С точки зрения блокировки ( а не шейпинга) выгоднее блокировать трекеры. DHT вроде и так опрделяется без проблем.

Есть 2 ближайшие задачи:

- определить какие данные декодирования являются наиболее полезными в определении BT трафика и стратегия удаления данных из хеша. Возможно разные данные нужно хранить разное время.

- IPv6. У меня дома давно уже есть /56, а тут на работе появилась сетка /48. В ndpi-netfilter ipv6 пока отрезано, а в nDPI оно есть. Поддержка ipv6 будет определятся на уровне компиляции.

С каждым годом доля ipv6 растет, да и все современные ОС уже готовы для работы с ipv6.

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