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

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

Rolex, исправлено! Было аж два бага. Правильное название параметра в конфиге: threshold_flows, в Git актуальная версия.

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


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

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

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


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

При компиляции возникла следующая ошибка:

[100%] Building CXX object CMakeFiles/fastnetmon.dir/fastnetmon.cpp.o
Linking CXX executable fastnetmon
/usr/bin/ld: CMakeFiles/fastnetmon.dir/fastnetmon.cpp.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
//usr/lib/x86_64-linux-gnu/libboost_system.so.1.55.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/fastnetmon.dir/build.make:93: recipe for target 'fastnetmon' failed
make[2]: *** [fastnetmon] Error 1
CMakeFiles/Makefile2:61: recipe for target 'CMakeFiles/fastnetmon.dir/all' failed
make[1]: *** [CMakeFiles/fastnetmon.dir/all] Error 2
Makefile:76: recipe for target 'all' failed
make: *** [all] Error 2

 

 

вылечил следующим образом:

в файлике /usr/src/fastnetmon/build/CMakeFiles/fastnetmon.dir/link.txt

добавил опцию

-lboost_system

 

 

uname -a
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux

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

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


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

А дебиян точно без кастомщины? У меня тоже на Debian 7 основная машинка под разработку, система не просило ни разу...

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


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

Update: теперь усредненный трафик используется всегда при бане, усреднение по тарфику считается за 5 секунд: https://github.com/FastVPSEestiOu/fastnetmon/commit/990c29ea7b5350980bd98abef954399583f7be10

 

То есть если за последние 5 секунд нагрузка на сеть составляла 50 000 пакетов/секунду, то это повод для бана

 

Хочется больше - меняем параметр average_calculation_time в конфиге /etc/fastnetmon.conf.

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


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

Собрали, запустили. Ждемс, любуемся. Просьба включить отображение списка по среднему по умочанию. И точное при включенном параметре. ;)

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


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

Так, еще апдейт, теперь дампы атак кладутся в спец папку /var/log/fastnetmon_attacks в формате: "/var/log/fastnetmon_attacks/10.10.10.200_05_12_14_13:58:20", из лога убраны, чтобы не засорять его лишней инфой. В принципе такие файлики можно теперь складировать и анализировать в будущем.

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


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

Не собралось:

 

/home/fastnetmon/fastnetmon/fastnetmon.cpp: In function вЂvoid execute_ip_ban(uint32_t, map_element, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, std::string)’:
/home/fastnetmon/fastnetmon/fastnetmon.cpp:2333: error: call of overloaded вЂabs(unsigned int)’ is ambiguous
/usr/include/stdlib.h:771: note: candidates are: int abs(int)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cmath:102: note:     			long double std::abs(long double)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cmath:98: note:     			float std::abs(float)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cmath:94: note:     			double std::abs(double)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cstdlib:170: note:     			long long int __gnu_cxx::abs(long long int)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cstdlib:139: note:     			long int std::abs(long int)
make[2]: *** [CMakeFiles/fastnetmon.dir/fastnetmon.cpp.o] Error 1
make[1]: *** [CMakeFiles/fastnetmon.dir/all] Error 2

 

centos.

Последний коммит который собирается нормально: https://github.com/FastVPSEestiOu/fastnetmon/commit/e5e9ab2a4f02d9753c47872598e8612416f0eb97

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

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


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

Не собралось:

 

/home/fastnetmon/fastnetmon/fastnetmon.cpp: In function вЂvoid execute_ip_ban(uint32_t, map_element, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, std::string)’:
/home/fastnetmon/fastnetmon/fastnetmon.cpp:2333: error: call of overloaded вЂabs(unsigned int)’ is ambiguous
/usr/include/stdlib.h:771: note: candidates are: int abs(int)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cmath:102: note:     			long double std::abs(long double)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cmath:98: note:     			float std::abs(float)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cmath:94: note:     			double std::abs(double)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cstdlib:170: note:     			long long int __gnu_cxx::abs(long long int)
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/cstdlib:139: note:     			long int std::abs(long int)
make[2]: *** [CMakeFiles/fastnetmon.dir/fastnetmon.cpp.o] Error 1
make[1]: *** [CMakeFiles/fastnetmon.dir/all] Error 2

 

centos.

Последний коммит который собирается нормально: https://github.com/FastVPSEestiOu/fastnetmon/commit/e5e9ab2a4f02d9753c47872598e8612416f0eb97

 

Fixed! Там таился более серьезный баг на самом деле - я вычетал два беззнаковых числа и поидее в итоге вышло бы беззнаковое. Спасибо вдвойне и Вам и Центосу за вопли на этом месте :)

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


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

Все фичи собрал воедино, итого вышло так:

 

Всем спасибо за фидбэк! По мере наличия времени буду дописывать фичи. В родмэпе пока вайтлистинг высокоскоростных закачек по http, а там по списку :)

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


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

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


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

Update: добавлена распаковка L2TP, теперь можно ловить DDoS атаки даже если они идут в туннеле.

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


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

Rolex, сделал спецификатор attack_details, чтобы отличать бан от высылки деталей по атаке: https://github.com/FastVPSEestiOu/fastnetmon/blob/master/notify_about_attack.sh

 

Также добавил поддержку PF_RING ZeroCopy/DNA и теперь поидее скорости до которых монитор может анализировать ограничены лишь фантазией автора (и бюджетом! Фича платная, к сожалению).

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

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


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

Пересобрал в тот же день. Очень полезно.

 

Заметил странность:

 

IP: xxx.xxx.xxx.xxx
Initial attack power: 15515 packets per second
Peak attack power: 20678 packets per second
Attack direction: incoming
Attack protocol: udp
Total incoming traffic: 98 mbps
Total outgoing traffic: 8 mbps
Total incoming pps: 15515 packets per second
Total outgoing pps: 3017 packets per second
Total incoming flows: 11735 flows per second
Total outgoing flows: 150 flows per second
Average incoming traffic: 98 mbps
Average outgoing traffic: 8 mbps
Average incoming pps: 15515 packets per second
Average outgoing pps: 3017 packets per second
Average incoming flows: 11735 flows per second
Average outgoing flows: 150 flows per second
Incoming tcp traffic: 0 mbps
Outgoing tcp traffic: 0 mbps
Incoming tcp pps: 14 packets per second
Outgoing tcp pps: 15 packets per second
Incoming udp traffic: 529 mbps
Outgoing udp traffic: 3 mbps
Incoming udp pps: 68634 packets per second
Outgoing udp pps: 1920 packets per second
Incoming icmp traffic: 0 mbps
Outgoing icmp traffic: 0 mbps
Incoming icmp pps: 24 packets per second
Outgoing icmp pps: 1 packets per second

 

Прошу помочь разобраться:

 

Не коррелируют между собой строки:

1) Initial attack power: 15515 packets per second

2) Peak attack power: 20678 packets per second

3) Total incoming pps: 15515 packets per second

4) Incoming udp pps: 68634 packets per second

 

Иначе говоря имхо 3 поле ну никак не может быть меньше чем четвертое. Как формируются эти цифры?

 

P/S автоматическая блокировка отключена. Только наблюдаем.

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

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


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

А в каком режиме работает? ZC или обычном PF_RING?

 

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

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


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

Воспроизвелось и у нас, забил issue: https://github.com/FastVPSEestiOu/fastnetmon/issues/85 попробую разобраться, почему так.

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


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

Надеюсь починил, попробуйте, пожалуйста. Перемудрил с switch/case/break;

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


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

Ага, спасибо.

Пересобрал.

Как будет атака - по результатам, отпишу.

 

P/S Запускаю все со значениями по умолчанию. (кроме параметров конфига)

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

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


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

Угу, тут явно мой баг был :(

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


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

Разбил прогу на две части, теперь есть fastnetmon демон и fastnetmon_client - клиент. Теперь можно запускаться в неинтерактивном режиме и отвязываться от консоли и из клиента дергать состояние демона лишь если это требуется. Если хочется дергать состояние через веб, то милости прошу: /tmp/fastnetmon.dat парсить файлик.

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


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

Несросталочка осталась:

 

 

Initial attack power: 225087 packets per second
Peak attack power: 303720 packets per second
Attack direction: incoming
Attack protocol: udp
Total incoming traffic: 830 mbps
Total outgoing traffic: 5 mbps
Total incoming pps: 225087 packets per second
Total outgoing pps: 1537 packets per second
Total incoming flows: 708 flows per second
Total outgoing flows: 18 flows per second
Average incoming traffic: 830 mbps
Average outgoing traffic: 5 mbps
Average incoming pps: 225087 packets per second
Average outgoing pps: 1537 packets per second
Average incoming flows: 708 flows per second
Average outgoing flows: 18 flows per second
Incoming tcp traffic: 0 mbps
Outgoing tcp traffic: 0 mbps
Incoming tcp pps: 3 packets per second
Outgoing tcp pps: 7 packets per second
Incoming udp traffic: 3906 mbps
Outgoing udp traffic: 0 mbps
Incoming udp pps: 1055516 packets per second
Outgoing udp pps: 179 packets per second
Incoming icmp traffic: 1 mbps
Outgoing icmp traffic: 13 mbps
Incoming icmp pps: 3306 packets per second
Outgoing icmp pps: 3450 packets per second

 

Peak attack power: 303720 packets per second

Incoming udp pps: 1055516 packets per second

Total incoming pps: 225087 packets per second

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

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


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

Вывел fastnetmon_client на мониторинг инженерам для постоянного контроля. Инженеры рады, следят за циферками, сидят медитируют. ;)

 

Продолжаем работу в режиме тестирования.

Выбираем железо для постоянного размещения демона мониторинга на отдельном сервере.

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


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

Можно как-то проверить будет ли программа корректно вызывать скрипт бана? А то поставил новую версию, пусть в конфиге прописал, скрипт имеет права на запись. Пришла атака, а скрипт и не вызвался, хотя в логах "вызываю скрипт с параметрами" и было. В результате пришлось руками срочно разгребать. Как затестить этот момент?

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


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

Можно как-то проверить будет ли программа корректно вызывать скрипт бана? А то поставил новую версию, пусть в конфиге прописал, скрипт имеет права на запись. Пришла атака, а скрипт и не вызвался, хотя в логах "вызываю скрипт с параметрами" и было. В результате пришлось руками срочно разгребать. Как затестить этот момент?

 

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

 

Несросталочка осталась:

 

Peak attack power: 303720 packets per second

Incoming udp pps: 1055516 packets per second

Total incoming pps: 225087 packets per second

 

Пока мыслей нету, почему такое происходит :(

 

Вывел fastnetmon_client на мониторинг инженерам для постоянного контроля. Инженеры рады, следят за циферками, сидят медитируют. ;)

 

Продолжаем работу в режиме тестирования.

Выбираем железо для постоянного размещения демона мониторинга на отдельном сервере.

 

Главное берите хорошие сетевки - Intel 82599 либо XL710.

 

С процами вопрос сложный, но в общем чем больше ядер и чем выше частота - тем лучше. Хотя хорошим приобретением было бы взять лицензию на PF_RING ZC - около 200 баксов на сетевую карту, с ним FastNetMon проворачивает около 6MPPS/10GE (правда, без трекинга соединений) на очень слабом проце (E5-2407).

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


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

В режиме обработки только sFLOW должно теперь компилиться и под FreeBSD. Сборка как и всегда через cmake.

 

git clone https://github.com/FastVPSEestiOu/fastnetmon.git
cd fastnetmon
mkdir build
cd build
cmake ..
make

 

Захочет curses, libstdc++, pcap, pthread, boost. Это все нужно стянуть из портов, далее cmake их найдет.

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


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

Join the conversation

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

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

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

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

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

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

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