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

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

Есть отличная новость! Нашел и поправил неприятнейший баг с обсчетом счетчиков по протоколам, там данные были +- километр, особенно в режиме netflow/sflow.

 

Сборка как и всегда скриптом:

wget https://raw.githubusercontent.com/pavel-odintsov/fastnetmon/master/src/fastnetmon_install.pl -Ofastnetmon_install.pl
sudo perl fastnetmon_install.pl --use-git-master

 

Патчи:

https://github.com/pavel-odintsov/fastnetmon/commit/24cc84e5ab33443bfa2bbfb62e2ddef81b2d55e0

https://github.com/pavel-odintsov/fastnetmon/commit/0f2be7279cc47473dab05f4f02daca60576d19e7

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


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

Добрый день. Программа перестала собираться на 32-битных системах. http://git.altlinux.org/tasks/155344/build/100/i586/log:

make[2]: Entering directory `/usr/src/RPM/BUILD/fastnetmon-1.1.2/src/BUILD'
[ 21%] Building CXX object CMakeFiles/fast_dpi.dir/fast_dpi.cpp.o
/usr/src/RPM/BUILD/fastnetmon-1.1.2/src/fast_dpi.cpp: In function 'ndpi_detection_module_struct* init_ndpi()':
/usr/src/RPM/BUILD/fastnetmon-1.1.2/src/fast_dpi.cpp:38:89: error: invalid conversion from 'void* (*)(size_t) throw () {aka void* (*)(unsigned int) throw ()}' to 'void* (*)(long unsigned int)' [-fpermissive]
        ndpi_init_detection_module(detection_tick_resolution, malloc, free, debug_printf);
                                                                                        ^
In file included from /usr/src/RPM/BUILD/fastnetmon-1.1.2/src/fast_dpi.h:5:0,
                from /usr/src/RPM/BUILD/fastnetmon-1.1.2/src/fast_dpi.cpp:1:
/usr/include/libndpi/ndpi_api.h:77:40: note:   initializing argument 2 of 'ndpi_detection_module_struct* ndpi_init_detection_module(u_int32_t, void* (*)(long unsigned int), void (*)(void*), ndpi_debug_function_ptr)'
  struct ndpi_detection_module_struct *ndpi_init_detection_module(u_int32_t ticks_per_second,
                                       ^
make[2]: *** [CMakeFiles/fast_dpi.dir/fast_dpi.cpp.o] Error 1
make[2]: Leaving directory `/usr/src/RPM/BUILD/fastnetmon-1.1.2/src/BUILD'

 

И еще не совсем понятны танцы с путями к заголовкам и библиотекам. Как результат, при сборке они не находятся, если располагаются в штатных /usr/include, /usr/lib[64]. Пришлось править CMakeLists.txt "по живому"

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


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

Добрый день. Программа перестала собираться на 32-битных системах. http://git.altlinux.org/tasks/155344/build/100/i586/log:

make[2]: Entering directory `/usr/src/RPM/BUILD/fastnetmon-1.1.2/src/BUILD'
[ 21%] Building CXX object CMakeFiles/fast_dpi.dir/fast_dpi.cpp.o
/usr/src/RPM/BUILD/fastnetmon-1.1.2/src/fast_dpi.cpp: In function 'ndpi_detection_module_struct* init_ndpi()':
/usr/src/RPM/BUILD/fastnetmon-1.1.2/src/fast_dpi.cpp:38:89: error: invalid conversion from 'void* (*)(size_t) throw () {aka void* (*)(unsigned int) throw ()}' to 'void* (*)(long unsigned int)' [-fpermissive]
        ndpi_init_detection_module(detection_tick_resolution, malloc, free, debug_printf);
                                                                                        ^
In file included from /usr/src/RPM/BUILD/fastnetmon-1.1.2/src/fast_dpi.h:5:0,
                from /usr/src/RPM/BUILD/fastnetmon-1.1.2/src/fast_dpi.cpp:1:
/usr/include/libndpi/ndpi_api.h:77:40: note:   initializing argument 2 of 'ndpi_detection_module_struct* ndpi_init_detection_module(u_int32_t, void* (*)(long unsigned int), void (*)(void*), ndpi_debug_function_ptr)'
  struct ndpi_detection_module_struct *ndpi_init_detection_module(u_int32_t ticks_per_second,
                                       ^
make[2]: *** [CMakeFiles/fast_dpi.dir/fast_dpi.cpp.o] Error 1
make[2]: Leaving directory `/usr/src/RPM/BUILD/fastnetmon-1.1.2/src/BUILD'

 

И еще не совсем понятны танцы с путями к заголовкам и библиотекам. Как результат, при сборке они не находятся, если располагаются в штатных /usr/include, /usr/lib[64]. Пришлось править CMakeLists.txt "по живому"

 

Привет!

 

За mess с путями извиняюсь, для разработки использую версии из сорцов, чтобы не зависеть от дистрибутива - это последствие.

 

По поводу бага выше - это баг nDPI, я сделал на него патч: https://github.com/ntop/nDPI/pull/132, как примут, нужно будет обновить либу в Альте и тогда все соберется... Можно, конечно, закостылить, но не хочется.

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

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


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

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

Вроде уже приняли

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


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

Не, нет еще, пул риквест открытый еще...

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


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

taf_321! Готово, nDPI приняли пул риквест и теперь FastNetMon соберется корректно на 32битных платформах: https://github.com/ntop/nDPI/pull/132 :)

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


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

небольшая хотелка

возможность складывать логи атак в своем формате файловой структуры

к примеру так: /opt/fastnetmon_attacks/{Y}/{M}/{D}/{hms}_{ip}.log

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


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

небольшая хотелка

возможность складывать логи атак в своем формате файловой структуры

к примеру так: /opt/fastnetmon_attacks/{Y}/{M}/{D}/{hms}_{ip}.log

 

Проще включите лог в syslog и там настройте :)

 

# enable this option if you want to send logs to local syslog facility
logging:local_syslog_logging = off

# enable this option if you want to send logs to a remote syslog server via UDP
logging:remote_syslog_logging = off

# specify a custom server and port for remote logging
logging:remote_syslog_server = 10.10.10.10
logging:remote_syslog_port = 514

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


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

А если не ставится, в логе ошибок не пишет.

 

[ 53%] Built target pfring_plugin

Linking CXX static library libsflow_plugin.a

[ 53%] Built target sflow_plugin

Command finished with code 512

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


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

Сделал инсталлер более "разговорчивым", теперь будет плевать ошибку прямо на консоль для более простой отладки.

 

Запустите, пожалуйста, инсталлер повторно:

wget https://raw.githubusercontent.com/pavel-odintsov/fastnetmon/master/src/fastnetmon_install.pl -Ofastnetmon_install.pl 
sudo perl fastnetmon_install.pl --use-git-master

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


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

Спасибо, теперь все запустилось без проблем.

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


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

Отлично=) Хотя я ничего не правил, кроме отображения ошибок на консоль.

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


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

Во какая радость сегодня прилетела в пару гигабит. (192.168.0.1 фейк)

 

2016-01-11 03:39:17.061494 94.67.87.47:53 > 192.168.0.1:23452 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061506 149.86.189.171:53 > 192.168.0.1:19257 protocol: udp frag: 1 packets: 1 size: 1454 bytes sample ratio: 1

2016-01-11 03:39:17.061518 94.67.87.47:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061530 5.164.124.148:53 > 192.168.0.1:27393 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061542 148.235.133.34:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1157 bytes sample ratio: 1

2016-01-11 03:39:17.061554 91.112.210.124:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

2016-01-11 03:39:17.061566 94.228.80.156:53 > 192.168.0.1:22883 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

2016-01-11 03:39:17.061578 94.228.80.156:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

2016-01-11 03:39:17.061594 94.228.80.156:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1181 bytes sample ratio: 1

2016-01-11 03:39:17.061623 178.254.205.250:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061636 178.254.205.250:53 > 192.168.0.1:2692 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061648 82.207.59.190:53 > 192.168.0.1:40585 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

2016-01-11 03:39:17.061661 82.207.59.190:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

2016-01-11 03:39:17.061690 82.207.59.190:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1181 bytes sample ratio: 1

2016-01-11 03:39:17.061718 178.254.205.250:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1229 bytes sample ratio: 1

2016-01-11 03:39:17.061728 188.187.18.173:53 > 192.168.0.1:40735 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061738 91.112.210.124:53 > 192.168.0.1:55886 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

2016-01-11 03:39:17.061770 188.187.18.173:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061780 188.187.18.173:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1229 bytes sample ratio: 1

2016-01-11 03:39:17.061790 178.130.13.58:53 > 192.168.0.1:6502 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

2016-01-11 03:39:17.061799 95.70.81.186:53 > 192.168.0.1:24059 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061809 95.70.81.186:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1494 bytes sample ratio: 1

2016-01-11 03:39:17.061818 188.255.7.103:53 > 192.168.0.1:55098 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

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


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

Амплификация же. А вот кто с нулевого порта шлет - так и не понятно, много раз такие видел, но разобраться руки не доходили. Что там за payload?

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


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

К сожалению внутрених подробностей нету, только поверхностное.

Или я не правильно понял ваш вопрос?

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


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

Ну я предлагаю включить сбор дампов pcap collect_attack_pcap_dumps = on и посмотреть, что наберется :)

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


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

Так нулевой порт - вроде ж и tcpdump такое пишет для фрагментированного трафика?

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


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

А, ну вообще да - 2016-01-11 03:39:17.061661 82.207.59.190:0 > 192.168.0.1:0 protocol: udp frag: 1 packets: 1 size: 1518 bytes sample ratio: 1

 

Это фрагментация.

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


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

по поводу fastnetmon. есть у него возможность указать руками необходимые условия и действия ? ну например, используя я ipfix, все что мне надо, это по нескольким параметрам (типа трафика, пакетрейт, биторейт, список dst networks и чот-то еще по мелочи) определить наличие ддоса и выполнить команду шелл вида "/path/to/program $arg1 $arg2" ?

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


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

Все умеет :) Именно в этом виде и умеет. Вот гайда более-менее актуальная с общим описанием фич: https://github.com/pavel-odintsov/fastnetmon/blob/master/docs/FastNetMon_Reference_Russian.pdf

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


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

Спасибо, пдф полистаю. :)

 

у меня проблема с компиляцией:

кусок автоконфига

-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found

ошибка в логе сборки

/tmp/fastnetmon.build.dir.UCX2k7P1Nt/fastnetmon/src/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:(.text+0x19): undefined reference to `pthread_create'
cc: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeFiles/cmTC_f581c.dir/build.make:97: recipe for target 'cmTC_f581c' failed
gmake[1]: *** [cmTC_f581c] Error 1
gmake[1]: Leaving directory '/tmp/fastnetmon.build.dir.UCX2k7P1Nt/fastnetmon/src/build/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_f581c/fast' failed
gmake: *** [cmTC_f581c/fast] Error 2

File /tmp/fastnetmon.build.dir.UCX2k7P1Nt/fastnetmon/src/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:
/* */
#include <pthread.h>

int main(int argc, char** argv)
{
 (void)argv;
#ifndef pthread_create
 return ((int*)(&pthread_create))[argc];
#else
 (void)argc;
 return 0;
#endif
}

Determining if the function pthread_create exists in the pthreads failed with the following output:
Change Dir: /tmp/fastnetmon.build.dir.UCX2k7P1Nt/fastnetmon/src/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/local/bin/gmake" "cmTC_4ba7e/fast"
/usr/local/bin/gmake -f CMakeFiles/cmTC_4ba7e.dir/build.make CMakeFiles/cmTC_4ba7e.dir/build
gmake[1]: Entering directory '/tmp/fastnetmon.build.dir.UCX2k7P1Nt/fastnetmon/src/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_4ba7e.dir/CheckFunctionExists.c.o
/usr/bin/cc    -DCHECK_FUNCTION_EXISTS=pthread_create   -o CMakeFiles/cmTC_4ba7e.dir/CheckFunctionExists.c.o   -c /usr/local/share/cmake/Modules/CheckFunctionExists.c
Linking C executable cmTC_4ba7e
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4ba7e.dir/link.txt --verbose=1
/usr/bin/cc   -DCHECK_FUNCTION_EXISTS=pthread_create    CMakeFiles/cmTC_4ba7e.dir/CheckFunctionExists.c.o  -o cmTC_4ba7e  -lpthreads
/usr/bin/ld: cannot find -lpthreads
cc: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeFiles/cmTC_4ba7e.dir/build.make:97: recipe for target 'cmTC_4ba7e' failed
gmake[1]: *** [cmTC_4ba7e] Error 1
gmake[1]: Leaving directory '/tmp/fastnetmon.build.dir.UCX2k7P1Nt/fastnetmon/src/build/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_4ba7e/fast' failed
gmake: *** [cmTC_4ba7e/fast] Error 2

система freebsd 10, сборка из того скрипта перлового. почему автоконфиг говорит про pthread, а линкер пытается в pthreadS ? :'-(

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

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


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

На фре есть порт в портах: http://www.freshports.org/net-mgmt/fastnetmon/ :) Юзайте его, собирать из сорцов на фре - не стоит.

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

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


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

На фре есть порт в портах: http://www.freshport...gmt/fastnetmon/ :) Юзайте его, собирать из сорцов на фре - не стоит.
если бы в портах/пакаджах было что-то актуальное я бы обязательно это использовал. но там окаменело уже все. :) ни ipfix, ни gobgp/exabgp, ни еще там чего-то. 1.1.2 же версия.

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

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


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

С чего Вы это все взяли? Это полная дезинформация. И ipfix и ExaBGP поддерживаются в FreeBSD порте (порту?). В портах стабильная на текущий момент версия 1.1.2, на GitHub - девелоперская git версия, которую я нередко ломаю. Пушить такой код в порты - я смысла не вижу. Будет релиз - будет и апдейт.

 

Полный список фич стабильной версии - https://habrahabr.ru/post/259399/, именно он поддерживается на Фре.

 

Чего не умеет версия из портов - это GoBGP, но я не уверен, что у кого-то хватит смелости и усидчивости собрать весь стек protobuf/gRPC под FreeBSD. Если и соберется - это само по себе будет чудом.

 

Но в целом, в данный момент число установок с FreeBSD не превышает 1% (на фоне четких 99 % у Linux) и я скорее подумываю о том, чтобы просто прекратить выпускать релизы под данную платформу вообще. И если у кого-то планы по долгосрочному использованию - я бы рекомендовал запастись Ubuntu 14.04 / 64 бита и развертываться на ней :)

 

Меня можно разубедить, если кто-то сможет достать оценку числа скачиваний FreeBSD порта и убедить меня, что он популярный - я передумаю, возможно :)

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

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


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

Чего не умеет версия из портов - это GoBGP, но я не уверен, что у кого-то хватит смелости и усидчивости собрать весь стек protobuf/gRPC под FreeBSD. Если и соберется - это само по себе будет чудом.
а в чем проблема это все на фряше собрать ? вообще с того перлового скрипта все собралось, кроме fastnetmon в конце
Но в целом, в данный момент число установок с FreeBSD не превышает 1%
ну так и напишите тогда, что дальше 1.1.2 версий для фряши не будет. хотите, партесь сами. а то скрипт вроде детекстит фряшу и что-то пытается собирать, но при этом не знает про версию golang для фряши и что-то там еще по мелочи.

анивей, спасибо за информацию. подумаю что с этим делать или не делать Ж)

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

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


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

Join the conversation

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

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

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

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

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

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

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