Jump to content
Калькуляторы

Rolex

Пользователи
  • Content Count

    55
  • Joined

  • Last visited

About Rolex

  • Rank
    Абитуриент
  • Birthday 11/28/1976

Информация

  • Пол
    Не определился

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Приветствую Павел. Как с предложением http://forum.nag.ru/forum/index.php?showtopic=89703&view=findpost&p=1301221 , есть сдвиги? Появилось ли время?
  2. Проблема заключается в том что инициацию вызова скрипта производит сам FastNetMon, соответственно если fastnetmon среагировал на атаку то повторного вызова banscript для этой атаки уже не будет. Соответственно даже если мы запустим анализатор на дамп, это ничего не даст. Уровни срабатывания и информация об атакуемом очень нужны. предлагаемый конфиг: threshold_pps = 25000, 250000, 1000000, threshold_mbps = 150, 1500, 8000, threshold_flows = 20000, 250000, 2500000, Алгоритм: Зафиксировав атаку Fastnetmon продолжает отслеживать атаку, и в случае если атака переходит указанную в threshold границу - повторно вызывает скрипт с те ми же параметрами. В случае если атака снижается то происходит то же самое но в обратном порядке. При этом: В пятом параметре передается IP:PORT:PROTO, В 6м параметре в бан скрипт передается достигнутый threshold. К примеру pps=25000 или mbps=8000. ./ban_script 120.12.22.166 incoming 25000 ban 120.12.22.166:27125:udp 1 или ./ban_script 120.12.22.166 incoming 250000 ban 120.12.22.166:27125:udp 2 как то так... :) P/S Это нужно для того чтобы срастить детектор FastNetMon с аппаратными пакетными фильтрами.
  3. а в вызов скрипта ban/unban добавить атакуемый порт и протокол возможно ?
  4. Павел, приветствую. Вот появилась возможность фильтровать трафик в случае мелких атак (до 10 гбит), однако при этом хочется сохранить возможность блокирования c помощью блекхола всего что больше этого объема. По сему вопрос: Можно ли добавить уровни атак к treshholds? К примеру в случае атак: threshold_pps = 20000 threshold_mbps = 1000 threshold_flows = 3500 выполняем только sh script а в случае: big_threshold_pps = 200000 big_threshold_mbps = 10000 big_threshold_flows = 35000 уже вызываем все что можно: и sh скрипт и ExaBGP и все остальное?
  5. Спасибо. ;)Пытаюсь понять, но пока не совсем ухватил ход мыслей. Почему именно Монго? Почему не редис. Для него же уже почти все есть. Почитав, понял. Окей, не вопрос... будем изучать Монго... ;)
  6. Фиксирую пожелания по взаимодействию с redis. В конфиге: redis_max_records_of_dump = 20000 # максимальное количество записей о пакетах в redis об одной атаке; redis_max_records_of_flow = 20000 # максимальное количество записей o Flow в redis об одной атаке; redis_time_of_store = 267840 # Время жизни записей об атаках в минутах (полгода); redis_keyfield = ( date,ip,subnet, direction и тд...) # какое поле является ключевым для хранения данных. К примеру если указана date то ключи выглядят так "2012.11.34 22:15_attack" или если IP то как сейчас. Это требуется для точного отбора данных по атаке по запросу а не перебора всех ключей в попытке найти нужный. Сами данные хранить в одном ключе на каждую атаку но в формате JSON. { metadata: { # Тут то что есть сейчас в *_information но каждый элемент в виде json "Initial attack power": "261419", "Peak attack power": "261419", ... # и так далее по всем параметрам. }, flow: {#Храним данные о ботах тоже в формате json: {"ip_dst": "xxx.xxx.xxx.xxx", "port_dst":"23434", "ip_src": "xxx.xxx.xxx.xxx","port_dst":"8798", "bytes": "4746", "packets":"27"} {"ip_dst": "xxx.xxx.xxx.xxx", "port_dst":"23434", "ip_src": "xxx.xxx.xxx.xxx","port_dst":"8798", "bytes": "4746", "packets":"27"} {"ip_dst": "xxx.xxx.xxx.xxx", "port_dst":"23434", "ip_src": "xxx.xxx.xxx.xxx","port_dst":"8798", "bytes": "4746", "packets":"27"} {"ip_dst": "xxx.xxx.xxx.xxx", "port_dst":"23434", "ip_src": "xxx.xxx.xxx.xxx","port_dst":"8798", "bytes": "4746", "packets":"27"} ... }, attack: { # То же самое и с атакой. Все в формате JSON. {date: "2015-07-05 07:50:33.254087", "ip_dst": "xxx.xxx.xxx.xxx", "port_dst":"23434", "ip_src": "xxx.xxx.xxx.xxx","port_dst":"8798", "proto": "6", "packets": "1", "size":"64", "ttl":"0", "sample":"1"; } {date: "2015-07-05 07:50:33.254087", "ip_dst": "xxx.xxx.xxx.xxx", "port_dst":"23434", "ip_src": "xxx.xxx.xxx.xxx","port_dst":"8798", "proto": "6", "packets": "1", "size":"64", "ttl":"0", "sample":"1"; } {date: "2015-07-05 07:50:33.254087", "ip_dst": "xxx.xxx.xxx.xxx", "port_dst":"23434", "ip_src": "xxx.xxx.xxx.xxx","port_dst":"8798", "proto": "6", "packets": "1", "size":"64", "ttl":"0", "sample":"1"; } {date: "2015-07-05 07:50:33.254087", "ip_dst": "xxx.xxx.xxx.xxx", "port_dst":"23434", "ip_src": "xxx.xxx.xxx.xxx","port_dst":"8798", "proto": "6", "packets": "1", "size":"64", "ttl":"0", "sample":"1"; } ... } } Вообще по идеологии хранения NO SQL имеет смысл сделать отдельный ключ для хранения ссылок на ключи где в свою очередь хранятся данные об атаках но раз у нас в redis есть такая душевная вещь как keys *, то можно и не делать. ;) Помещать данные которые выводим на экран с помощью fastnetmon_client в redis в ключе fastnetmon_client в формате json { incoming : {pps: 108635, mbps:162, flows: 9722}, outgoing : {pps: 108635, mbps:162, flows: 9722}, Internal: {pps: 1085, mbps:16}, other:{ pps: 1085, mbps:16}, incoming_ip: { xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97, banned:1}, # пример забаненного IP xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, }, outgoing_ip: { xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, xxx.xxx.xxx.xxx: {pps: 1086, mbps:12, flows: 97}, }, datetime: $now, # дата и время последнего апдейта calculated: 993, total amount: 3434343, rcv: 187359781234987, drop: {count:0,percent: 0}, subnet: { 111.222.222.111/24:{pps_in:232, pps_out:322, bps_in:232323, bps_out:232323}, 222.111.111,222/24:{pps_in:232, pps_out:322, bps_in:232323, bps_out:232323}, } banned: { # если есть забаненные... 10.10.10.10/32 : {packets:100500, bytes:222323232323, flows: 12121212, type: udp_flood}, 10.10.20.30/32 : {packets:100500, bytes:222323232323, flows: 12121212, type: icmp_flood}, } } Данные этого ключа обновлять по мере их изменений, установить срок жизни равным check_period в конфиге. По сути это позволит использовать эти данные по желанию в любых программах, выводить это в системы сбора статистики, в режиме реального времени (pooling) выводить в веб, в общем обкручивать fastnetmon внешними системами и обработчиками. Например натравить nagios на список забаненых, так чтобы он орал всегда когда обнаружена атака, отображать в cacti текущий поток обрабатываемых данных, уведомлять abuse админов сетей ботов, и т.д. P/S Прошу извинить за сумбурность описания.
  7. Не получается собрать fastnetmon с redis на 7 centos. #uname -a Linux mirror.xxxxxx.xx 3.10.0-229.4.2.el7.x86_64 #1 SMP Wed May 13 10:06:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux #yum install hiredis-devel hiredis -y ]Package hiredis-devel-0.12.1-1.el7.x86_64 already installed and latest version Package hiredis-0.12.1-1.el7.x86_64 already installed and latest version Соответствующие ремарки в CMakeLists.txt сняты. # whereis hiredis hiredis: /usr/include/hiredis Итог: CMake Error at CMakeLists.txt:174 (find_package): By not providing "FindHiredis.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Hiredis", but CMake did not find one. Could not find a package configuration file provided by "Hiredis" with any of the following names: HiredisConfig.cmake hiredis-config.cmake Add the installation prefix of "Hiredis" to CMAKE_PREFIX_PATH or set "Hiredis_DIR" to a directory containing one of the above files. If "Hiredis" provides a separate development package or SDK, be sure it has been installed. -- Configuring incomplete, errors occurred! Что я делаю не так? Можно ли сделать сборку RPM для 7го центоса включая полный комплект поддерживаемого функционала. P/S - Редис нужен для отправки системой детальной информации по атаке непосредственно клиенту по его запросу.
  8. Вывел fastnetmon_client на мониторинг инженерам для постоянного контроля. Инженеры рады, следят за циферками, сидят медитируют. ;) Продолжаем работу в режиме тестирования. Выбираем железо для постоянного размещения демона мониторинга на отдельном сервере.
  9. Несросталочка осталась: 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
  10. Ага, спасибо. Пересобрал. Как будет атака - по результатам, отпишу. P/S Запускаю все со значениями по умолчанию. (кроме параметров конфига)
  11. Пересобрал в тот же день. Очень полезно. Заметил странность: 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 автоматическая блокировка отключена. Только наблюдаем.
  12. Не собралось: /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
  13. Собрали, запустили. Ждемс, любуемся. Просьба включить отображение списка по среднему по умочанию. И точное при включенном параметре. ;)
  14. Собрал через cmake. Действительно удобно. Повторный вызов нужен не зависимо от unban. Иначе говоря если зададим время бана - то система сначала вытащит из бана и только затем засунет обратно в бан. Что не есть гуд. пример: Атака 1mpps. Можем зафильтровать своими силами. Дергаем бан скрипт которому передаем параметр атаки. Тот, видя что атака в пределах возможностей самостоятельной фильтрации, отдает команду на рероутинг этого IP на фильтр. Атака идет, однако ущерба хосту не наносит. Через сколько то секунд атака увеличивается до 15mpps: Такое предположим обработать сами уже не получается. Соответственно повторно вызываем бан скрипт где опять передаем объем атаки: Тот, видя что атака уже вне пределов самостоятельной фильтрации, отдает команду на блекхол этого IP выставляя BGP комьюнити. Завершение атаки: по таймауту (standard_ban_time = 1800) вызываем скрипт с параметром unban, Который в свою очередь снимает рероутинг и комьюнити с этого IP. Вот как то так. P/S Фиксирую баг. При использовании следующих параметров настройки: ban_for_pps = on ban_for_bandwidth = on ban_for_flows = on threshold_pps = 20000 threshold_mbps = 1000 ban_threshold_flows = 5000 Получил в бане всех и вся по flows. При изменении параметра ban_threshold_flows = 5000 на threshold_flows = 5000 получил дефолтное значение в 3500, работает корректно. Полагаю ошибка в указании параметра в конфиге или обработке конфига.