dignity Опубликовано 14 февраля, 2014 · Жалоба Попробуйте библиотеку boost. Там много вкусности, в том числе по управлению памятью. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 2 марта, 2014 · Жалоба dignity, а она используется :) Но по тестам работа с памятью на фоне выемки пакетов - ничтожно мало процессора потребляет. Сейчас разобрался с PF_RING и думаю в ближайшее время сделаю версию с его поддержкой тоже (с прямой поддержкой, без эмуляции интерфейсов PCAP). С PF_RING ожидаею снижение потребления CPU до минимума. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 12 марта, 2014 (изменено) · Жалоба Как и обещал, интегрировал поддержку PF_RING (теперь поддерживаются PCAP/ULOG2/PF_RING), нагрузка на CPU упала в разы. На потоке в 2 гигабита и 250 000 pps нагрузка составляет около 5% по всем ядрам Core i7 2600: То есть можно ожидать масштабирования до 10Ge/~5Mpps без проблем на текущем довольно слабом железе. Теперь решение запускается проще некуда, достаточно собрать PF_RING (три команды) и запустить мой анализатор вот так: ./fastnetmon eth3,eth4 (ethX подразумеваются как mirror порты). Какие еще преимущества дает PF_RING: 1) Крайне быстрая обработка данных 2) Возможность одновременно собирать пакеты с 2х и более сетевых карт 3) Возможность работы с отдельными очередями сетевых 4) Возможность распараллелить обработку пакетов по нескольким потокам даже в случае использования одной очереди на сетевой 5) Удалось добиться нулевой потери пакетов! Тестовая ферма: i7 2600/NIC Intel 540 (чип 82599EB) Изменено 12 марта, 2014 пользователем pavel.odintsov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 22 апреля, 2014 (изменено) · Жалоба Скажите, а вы просто модуль pf_ring использовали или его + ДНК-патченный драйвер для сетевой карты ? netmap не планируете использовать ? Изменено 22 апреля, 2014 пользователем wtyd Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 8 мая, 2014 · Жалоба Используется чистейший PF_RING на стандартных драйверах ixgbe, Intel 540 10GE. netmap не планируем, решение чисто под Linux да и PF_RING решает задачу на ура. А чем не нравится PF_RING? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 11 мая, 2014 · Жалоба Используется чистейший PF_RING на стандартных драйверах ixgbe, Intel 540 10GE. netmap не планируем, решение чисто под Linux да и PF_RING решает задачу на ура. А чем не нравится PF_RING? Ну ... тем, что он не совсем открытй :-). Я про netmap спросил в той связи, что он есть под linux, я BZD не юзаю. Кстати, PF_RING ещё какую фичу придумали, zero-copy + ещё что-то там = стало ещё быстрей. Я не разбирался, сходу собрать самую фичастую и быструю версию не удалось и они больше не поддерживают e1000, а у меня других карт на мониторилке нет. Сейчас юзаю pf_ring + его libpcap + ipcad для снятия акаунтинга (не продакшн). Сперва без pf_ring попробовал, потом с ним - загрузка раз в 20 спала. Оценивал чисто по top, было 12% , сейчас 0,3-0,5% при прочих равных условиях. Трафик в ipcad поступает через фильтр, т.е. не весь. Если весь слать, то загрузка большая, а это не основная задача. Вот думаю, что будет, если pf_ring со всеми фичами собрать всё же ? Ну там карту поменять придётся. Наверное уже ipcad тормозит. На что его можно заменить ? Задача: ненапрягая проц сильно, снимать ip accounting в cisco-like стиле. Нетфлоу не надо. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 21 мая, 2014 · Жалоба wtyd, zero-copy как я понял актуально лишь в случае когда из одной сетевой трафик перекладывается в другую, то есть если делается какой-то спецовый фильтр/роутер. А в данном случае хватает базового PF_RING, который открыт на 100%, а остальные фишки-примочки в общем-то не нужны на мой взгляд - он и без них ну очень быстро работает. Аккаунтинг по трафику нужен? У меня в анализаторе в принципе есть функция, когда он считает весь трафик на каждый IP (который считает своим), работает довольно быстро, почти без оверхеда. Данные кладутся в Redis откуда их уже можно дернуть как угодно. Но если нужен более подробный отчет по дням/неделям, тут я, честно говоря, не знаю, что предложить. У нас как таковой задачи точной детализации трафика не стоит. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 8 июня, 2014 (изменено) · Жалоба Куча крутых новостей! Итак: Переписал документацию и добавил картинки Собрал статическую версию, работать должна на CentOS 6, Debian 6, Debian 7. Теперь попробовать прогу в работе в сотню раз проще Теперь есть полная поддержка работы на OpenVZ серверах для фиксации атак на VPS Теперь поддерживается конфиг файл, где можно указать свои настройки и лимиты Активировал логгирование, теперь об атаках и отпечатки трафика пишем также в лог файл /var/log/fastnetmon.log Ну и также хотелось похвастаться целым одним внедрением в реальных условиях! Для тех, кто был с нами не сразу - это утилита, которую можно включить на роутере, на зеркальных портах свича или прямо на физической ноде под виртулизацию и она будет фиксировать атаки на Ваши IP. Обращаю внимание, что уведомление идет об атаке на Ваши IP, а не о том, кто атакует. Хотя я думаю это поведение можно поменять в будущем. Прошу: ссылка Изменено 9 июня, 2014 пользователем pavel.odintsov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Evolution23 Опубликовано 18 июня, 2014 (изменено) · Жалоба Доброе время суток! :) пытаюсь собрать тут вашу утилиту, но чего-то видимо делаю не так. ОС - debian 7 Вот что пишет, хотя вроде все по мануалу делаю. Ткните где я накосячил, пожалуйста. Ругается что нет pfring.h (его там действительно нет), но в руководстве не видел строки, которая бы говорила его откуда нибудь доставать и класть вручную в папку перед компиляцией. /usr/src/fastnetmon# make g++ -static -DPF_RING -DREDIS -I/opt/pf_ring/include -c fastnetmon.cpp -o fastnetmon.o -std=c++11 fastnetmon.cpp:68:20: fatal error: pfring.h: No such file or directory compilation terminated. cmake: *** [fastnetmon.o] Error 1 P.S. Вот этот пункт сделал: cd /usr/src wget 'http://downloads.sourceforge.net/project/ntop/PF_RING/PF_RING-6.0.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fntop%2Ffiles%2FPF_RING%2F&ts=1402307916&use_mirror=cznic' -OPF_RING-6.0.1.tar.gz tar -xf PF_RING-6.0.1.tar.gz cd PF_RING-6.0.1 cd kernel make make install modprobe pf_ring Правда оно ругнулось в процессе на что-то (забыл уже что) но тем не менее собралось и модуль подгрузился в систему. Если использовать уже собранный готовый fastnetmon то он запускается и выдает это: FastNetMon v1.0 IPs ordered by: packets threshold is: 20000 Incoming Traffic 0 pps 0 mbps Outgoing traffic 0 pps 0 mbps Internal traffic 0 pps Other traffic 172748 pps Packets received: 2014524 Packets dropped: 0 Packets dropped: 0.0 % Смущает то, что Incoming и outgoing остается по нулям. Или оно будет расти во время самой атаки? Заранее благодарю за ответ. Изменено 18 июня, 2014 пользователем Evolution23 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 18 июня, 2014 · Жалоба Добрый день! Спасибо за интерес к разработке! Evolution23, а вот этот пункт забыли, наверное: cd /usr/src/PF_RING-5.6.2/userland/lib ./configure --disable-bpf --prefix=/opt/pf_ring У статической версии весь трафик попадает в other, это означает, что программа не смогла классифицировать весь трафик на предмет принадлежности к Вашим сетям. Чтобы она смогла это сделать, нужно забить в формате CIDR по одной сети на строку Все ваши сети в файл: /etc/networks_list. И все будет ок :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Evolution23 Опубликовано 18 июня, 2014 (изменено) · Жалоба Добрый день! Спасибо за интерес к разработке! Evolution23, а вот этот пункт забыли, наверное: cd /usr/src/PF_RING-5.6.2/userland/lib ./configure --disable-bpf --prefix=/opt/pf_ring Это сразу сделал. Но сейчас подумал немного и решил сделать еще make && make install, хоть это и не написано в руководстве. После чего продолжил действовать по мануалу: echo "/opt/pf_ring/lib" > /etc/ld.so.conf.d/pf_ring.conf ldconfig -v Далее перехожу в cd /usr/src/fastnetmon/, делаю make и получаю вот это (дело сдвинулось, но не намного): g++ -static -c libipulog.c -o libipulog.o -Wno-write-strings g++ -static -DPF_RING -DREDIS -I/opt/pf_ring/include -c fastnetmon.cpp -o fastnetmon.o -std=c++11 g++ -static libipulog.o fastnetmon.o -o fastnetmon -L/opt/pf_ring/lib -lhiredis -lpfring -lnuma -lrt -lpthread /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libnuma.a(affinity.o): In function `affinity_ip': (.text+0x703): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libhiredis.a(net.o): In function `redisContextConnectTcp': (.text+0x48c): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking У статической версии весь трафик попадает в other, это означает, что программа не смогла классифицировать весь трафик на предмет принадлежности к Вашим сетям. Чтобы она смогла это сделать, нужно забить в формате CIDR по одной сети на строку Все ваши сети в файл: /etc/networks_list. И все будет ок :) перепутал, по дурости и невнимательности своей прописал сетки в /etc/networks)) прописал куда надо и все заработало с готовым файликом fastnetmon. Теперь осталось устранить ту ошибку, чтобы скомпиллировать самому) Хочется фичу с GEOIP и ASN. А вообще огромное вам спасибо за труд. Изменено 18 июня, 2014 пользователем Evolution23 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 18 июня, 2014 · Жалоба Evolution23, Ваша правда! Исправил в документации. Варнинги "Using 'getaddrinfo' in statically linked applications requires" можно смело игнорировать. Программа у Вас собралась корректно! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Evolution23 Опубликовано 18 июня, 2014 · Жалоба Да, работает, спасибо) но смущает что Incoming трафик пустой. А если на внешний интерфейс повесить, то outgoing будет пустым. FastNetMon v1.0 IPs ordered by: packets threshold is: 30000 Incoming Traffic 0 pps 0 mbps 10.x.45.76 0 pps 0 mbps 10.x.43.81 0 pps 0 mbps 10.x.46.80 0 pps 0 mbps 10.x.42.80 0 pps 0 mbps 10.x.44.79 0 pps 0 mbps 10.x.43.78 0 pps 0 mbps 10.x.42.78 0 pps 0 mbps Outgoing traffic 63469 pps 288 mbps 10.x.49.49 11202 pps 103 mbps 10.x.42.29 6531 pps 5 mbps 10.x.43.32 5155 pps 61 mbps 10.x.43.129 3353 pps 8 mbps 10.x.44.55 2782 pps 1 mbps 10.x.46.75 2781 pps 3 mbps 10.x.42.46 2619 pps 20 mbps Internal traffic 254 pps Other traffic 74665 pps Packets received: 30989351 Packets dropped: 0 Packets dropped: 0.0 % Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 19 июня, 2014 (изменено) · Жалоба А есть запустить на обоих? ./fastnetmon ethX,ethY На машинке случаем не NAT? В случае NAT на той же машине, где запускается анализатор, я честно говоря, смутно представляю, что будет твориться, но вообще при прослушке интерфейса, где висят клиенты с серыми IP, все должно работать корректно. Трафик без тегирования идет? А-то анализатор его не особо парясь растегирует и анализирует на общих оснвоаниях. Изменено 19 июня, 2014 пользователем pavel.odintsov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
BETEPAH Опубликовано 19 июня, 2014 · Жалоба С натом работает: FastNetMon v1.0 IPs ordered by: packets threshold is: 20000 Incoming Traffic 96573 pps 760 mbps 172.16.29.166 2903 pps 22 mbps 172.16.29.48 2881 pps 32 mbps 172.16.63.21 2865 pps 32 mbps 172.16.45.1 2581 pps 23 mbps 172.16.7.3 2244 pps 24 mbps 172.16.59.11 2235 pps 24 mbps 172.16.6.116 2161 pps 23 mbps Outgoing traffic 78030 pps 288 mbps 172.16.29.166 2770 pps 11 mbps 172.16.45.1 2517 pps 1 mbps 172.16.59.11 2244 pps 0 mbps 172.16.60.8 2053 pps 4 mbps 172.16.7.3 1839 pps 0 mbps 172.16.19.29 1603 pps 16 mbps 172.16.18.22 1585 pps 16 mbps Internal traffic 0 pps Other traffic 3172 pps Packets received: 62747310 Packets dropped: 0 Packets dropped: 0.0 % Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 19 июня, 2014 · Жалоба BETEPAH, о, значит я зря боялся. Спасибо за фидбэк! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Evolution23 Опубликовано 19 июня, 2014 · Жалоба С натом работает: FastNetMon v1.0 IPs ordered by: packets threshold is: 20000 Incoming Traffic 96573 pps 760 mbps 172.16.29.166 2903 pps 22 mbps 172.16.29.48 2881 pps 32 mbps 172.16.63.21 2865 pps 32 mbps 172.16.45.1 2581 pps 23 mbps 172.16.7.3 2244 pps 24 mbps 172.16.59.11 2235 pps 24 mbps 172.16.6.116 2161 pps 23 mbps Outgoing traffic 78030 pps 288 mbps 172.16.29.166 2770 pps 11 mbps 172.16.45.1 2517 pps 1 mbps 172.16.59.11 2244 pps 0 mbps 172.16.60.8 2053 pps 4 mbps 172.16.7.3 1839 pps 0 mbps 172.16.19.29 1603 pps 16 mbps 172.16.18.22 1585 pps 16 mbps Internal traffic 0 pps Other traffic 3172 pps Packets received: 62747310 Packets dropped: 0 Packets dropped: 0.0 % программе давали только локальный интерфейс или и внешний тоже? когда указываю внешний, то там светятся NAT-овские айпи, что по понятным причинам не подходит. обрабываете через PF_RING или ULOG? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 19 июня, 2014 · Жалоба ULOG честно говоря, не рекомендую, как и PCAP, на 200 kpps оно может завалить почти любую машину. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Evolution23 Опубликовано 19 июня, 2014 · Жалоба ULOG честно говоря, не рекомендую, как и PCAP, на 200 kpps оно может завалить почти любую машину. Дык я то используею PF_RING, но у меня почему-то проблема. и входящий и исходящий трафик одновременно не получается ловить. Точнее на внешнем интерфейсе получается, но туда попадает NATовский айпи, а не локальный. Поэтому и интересуюсь, может это особенность работы PF_RING с натом, если у ветерана вдруг окажется работает с ULOG. Если же у него тоже PF_RING используется, то я в тупике. P.S. ULOG все-таки не совсем хрень. Используем его для IPCAD, трафик порядка гигабита, кол-во пакетов правда не смотрел на той машине. Ресурсы IPCAD конечно жрет много, но машину не кладет и не падает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 19 июня, 2014 · Жалоба Я бы попробовал собрать tcpdump из пакета PF_RING, он в папке userland лежит и посмотреть, как видит трафик PF_RING. А интерфейсы у Вас обычные? Ethernet без экзотики? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Evolution23 Опубликовано 19 июня, 2014 · Жалоба Я бы попробовал собрать tcpdump из пакета PF_RING, он в папке userland лежит и посмотреть, как видит трафик PF_RING. А интерфейсы у Вас обычные? Ethernet без экзотики? Экзотики, как раз-таки много)) Используется bonding вместе с виланами) 4 интерфейса одной физической сетевой карты. 2 используются под внешний bond0, 2 под локальный bond1) На обоих бондах есть виланы. Если снимать инфу с внешнего бонда, то в статистике светятся NATовские айпи, если с локального, то айпи нормальные. Но в обоих случаях статистика снимается только в одной сторону - либо outgoing, либо incoming При этом обычный (не pf_ring-овский) tcpdump на локальном интерфейсе видит, разумеется пакеты и в ту и в другую сторону. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 19 июня, 2014 · Жалоба А вот бондинг может очень сильно портить малину. Есть мысли даже где. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Evolution23 Опубликовано 19 июня, 2014 · Жалоба А вот бондинг может очень сильно портить малину. Есть мысли даже где. я пробовал отдельно указывать так ./fastnetmon eth0,eth1 (для внешних интерфейсов) и ./fastnetmon eth2,eth3 (для локальных) ситуация не менялась Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Evolution23 Опубликовано 19 июня, 2014 · Жалоба Еще смущает то, что оно мне выдает-таки список айпи в разделе Incoming traffic. Но при этом строки pps и mbps по нулям. Не понятно, если оно не получает эти значения, то по какому принципу оно добавляет айпи в этот список и сортирует их. Incoming Traffic 0 pps 0 mbps 10.x.45.76 0 pps 0 mbps 10.x.43.81 0 pps 0 mbps 10.x.46.80 0 pps 0 mbps 10.x.42.80 0 pps 0 mbps 10.x.44.79 0 pps 0 mbps 10.x.43.78 0 pps 0 mbps 10.x.42.78 0 pps 0 mbps Outgoing traffic 63469 pps 288 mbps 10.x.49.49 11202 pps 103 mbps 10.x.42.29 6531 pps 5 mbps 10.x.43.32 5155 pps 61 mbps 10.x.43.129 3353 pps 8 mbps 10.x.44.55 2782 pps 1 mbps 10.x.46.75 2781 pps 3 mbps 10.x.42.46 2619 pps 20 mbps Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 19 июня, 2014 · Жалоба Если IP и там и там реальные, то в целом перехват работает. Сортирует в списках он по числу полученных пакетов, то есть он что-то ловит (достаточное для появления в списке - список я не инициализирую заранее), но очень мало (недостаточно для подсчета реальных скоростей). Попробуйте раскомментировать строку 869: cout<<"Dump: "<<print_simple_packet(current_packet); Тогда он начнет печатать все пакеты, которые фиксирует. Возможно, это прояснит ситуацию. Он как раз напечатает протокол, направление и размер пакета. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...