Перейти к содержимому
Калькуляторы

FastNetMon - программа для выявления входящих/исходящих атак

Попробуйте библиотеку boost. Там много вкусности, в том числе по управлению памятью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

dignity, а она используется :) Но по тестам работа с памятью на фоне выемки пакетов - ничтожно мало процессора потребляет.

 

Сейчас разобрался с PF_RING и думаю в ближайшее время сделаю версию с его поддержкой тоже (с прямой поддержкой, без эмуляции интерфейсов PCAP). С PF_RING ожидаею снижение потребления CPU до минимума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как и обещал, интегрировал поддержку PF_RING (теперь поддерживаются PCAP/ULOG2/PF_RING), нагрузка на CPU упала в разы.

 

На потоке в 2 гигабита и 250 000 pps нагрузка составляет около 5% по всем ядрам Core i7 2600:

fastnetmon_stats.png?raw=true

 

То есть можно ожидать масштабирования до 10Ge/~5Mpps без проблем на текущем довольно слабом железе.

 

Теперь решение запускается проще некуда, достаточно собрать PF_RING (три команды) и запустить мой анализатор вот так: ./fastnetmon eth3,eth4 (ethX подразумеваются как mirror порты).

 

Какие еще преимущества дает PF_RING:

1) Крайне быстрая обработка данных

2) Возможность одновременно собирать пакеты с 2х и более сетевых карт

3) Возможность работы с отдельными очередями сетевых

4) Возможность распараллелить обработку пакетов по нескольким потокам даже в случае использования одной очереди на сетевой

5) Удалось добиться нулевой потери пакетов!

 

Тестовая ферма: i7 2600/NIC Intel 540 (чип 82599EB)

Изменено пользователем pavel.odintsov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скажите, а вы просто модуль pf_ring использовали или его + ДНК-патченный драйвер для сетевой карты ?

 

netmap не планируете использовать ?

Изменено пользователем wtyd

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Используется чистейший PF_RING на стандартных драйверах ixgbe, Intel 540 10GE. netmap не планируем, решение чисто под Linux да и PF_RING решает задачу на ура. А чем не нравится PF_RING?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Используется чистейший 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 стиле. Нетфлоу не надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

wtyd, zero-copy как я понял актуально лишь в случае когда из одной сетевой трафик перекладывается в другую, то есть если делается какой-то спецовый фильтр/роутер. А в данном случае хватает базового PF_RING, который открыт на 100%, а остальные фишки-примочки в общем-то не нужны на мой взгляд - он и без них ну очень быстро работает.

 

Аккаунтинг по трафику нужен? У меня в анализаторе в принципе есть функция, когда он считает весь трафик на каждый IP (который считает своим), работает довольно быстро, почти без оверхеда. Данные кладутся в Redis откуда их уже можно дернуть как угодно. Но если нужен более подробный отчет по дням/неделям, тут я, честно говоря, не знаю, что предложить. У нас как таковой задачи точной детализации трафика не стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Куча крутых новостей!

 

Итак:

  • Переписал документацию и добавил картинки
  • Собрал статическую версию, работать должна на CentOS 6, Debian 6, Debian 7. Теперь попробовать прогу в работе в сотню раз проще
  • Теперь есть полная поддержка работы на OpenVZ серверах для фиксации атак на VPS
  • Теперь поддерживается конфиг файл, где можно указать свои настройки и лимиты
  • Активировал логгирование, теперь об атаках и отпечатки трафика пишем также в лог файл /var/log/fastnetmon.log

 

Ну и также хотелось похвастаться целым одним внедрением в реальных условиях!

 

Для тех, кто был с нами не сразу - это утилита, которую можно включить на роутере, на зеркальных портах свича или прямо на физической ноде под виртулизацию и она будет фиксировать атаки на Ваши IP. Обращаю внимание, что уведомление идет об атаке на Ваши IP, а не о том, кто атакует. Хотя я думаю это поведение можно поменять в будущем.

 

Прошу: ссылка

Изменено пользователем pavel.odintsov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброе время суток! :)

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

ОС - 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 остается по нулям. Или оно будет расти во время самой атаки?

Заранее благодарю за ответ.

Изменено пользователем Evolution23

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день!

 

Спасибо за интерес к разработке!

 

Evolution23, а вот этот пункт забыли, наверное:

cd /usr/src/PF_RING-5.6.2/userland/lib
./configure  --disable-bpf --prefix=/opt/pf_ring

 

У статической версии весь трафик попадает в other, это означает, что программа не смогла классифицировать весь трафик на предмет принадлежности к Вашим сетям. Чтобы она смогла это сделать, нужно забить в формате CIDR по одной сети на строку Все ваши сети в файл: /etc/networks_list.

 

И все будет ок :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день!

 

Спасибо за интерес к разработке!

 

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.

 

А вообще огромное вам спасибо за труд.

Изменено пользователем Evolution23

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Evolution23, Ваша правда! Исправил в документации.

 

Варнинги "Using 'getaddrinfo' in statically linked applications requires" можно смело игнорировать. Программа у Вас собралась корректно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, работает, спасибо) но смущает что 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 %

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А есть запустить на обоих?

./fastnetmon ethX,ethY

 

На машинке случаем не NAT? В случае NAT на той же машине, где запускается анализатор, я честно говоря, смутно представляю, что будет твориться, но вообще при прослушке интерфейса, где висят клиенты с серыми IP, все должно работать корректно.

 

Трафик без тегирования идет? А-то анализатор его не особо парясь растегирует и анализирует на общих оснвоаниях.

Изменено пользователем pavel.odintsov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С натом работает:

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 %

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BETEPAH, о, значит я зря боялся. Спасибо за фидбэк!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С натом работает:

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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ULOG честно говоря, не рекомендую, как и PCAP, на 200 kpps оно может завалить почти любую машину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ULOG честно говоря, не рекомендую, как и PCAP, на 200 kpps оно может завалить почти любую машину.

Дык я то используею PF_RING, но у меня почему-то проблема. и входящий и исходящий трафик одновременно не получается ловить. Точнее на внешнем интерфейсе получается, но туда попадает NATовский айпи, а не локальный. Поэтому и интересуюсь, может это особенность работы PF_RING с натом, если у ветерана вдруг окажется работает с ULOG. Если же у него тоже PF_RING используется, то я в тупике.

 

P.S. ULOG все-таки не совсем хрень. Используем его для IPCAD, трафик порядка гигабита, кол-во пакетов правда не смотрел на той машине. Ресурсы IPCAD конечно жрет много, но машину не кладет и не падает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я бы попробовал собрать tcpdump из пакета PF_RING, он в папке userland лежит и посмотреть, как видит трафик PF_RING. А интерфейсы у Вас обычные? Ethernet без экзотики?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я бы попробовал собрать tcpdump из пакета PF_RING, он в папке userland лежит и посмотреть, как видит трафик PF_RING. А интерфейсы у Вас обычные? Ethernet без экзотики?

Экзотики, как раз-таки много)) Используется bonding вместе с виланами)

4 интерфейса одной физической сетевой карты. 2 используются под внешний bond0, 2 под локальный bond1) На обоих бондах есть виланы.

Если снимать инфу с внешнего бонда, то в статистике светятся NATовские айпи, если с локального, то айпи нормальные. Но в обоих случаях статистика снимается только в одной сторону - либо outgoing, либо incoming

При этом обычный (не pf_ring-овский) tcpdump на локальном интерфейсе видит, разумеется пакеты и в ту и в другую сторону.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А вот бондинг может очень сильно портить малину. Есть мысли даже где.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А вот бондинг может очень сильно портить малину. Есть мысли даже где.

я пробовал отдельно указывать так ./fastnetmon eth0,eth1 (для внешних интерфейсов) и ./fastnetmon eth2,eth3 (для локальных)

ситуация не менялась

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще смущает то, что оно мне выдает-таки список айпи в разделе 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если IP и там и там реальные, то в целом перехват работает. Сортирует в списках он по числу полученных пакетов, то есть он что-то ловит (достаточное для появления в списке - список я не инициализирую заранее), но очень мало (недостаточно для подсчета реальных скоростей).

 

Попробуйте раскомментировать строку 869:

cout<<"Dump: "<<print_simple_packet(current_packet);

 

Тогда он начнет печатать все пакеты, которые фиксирует. Возможно, это прояснит ситуацию. Он как раз напечатает протокол, направление и размер пакета.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.