UAVpilot Опубликовано 4 июля, 2015 · Жалоба UAVpilot, а можно дамп трафика на pavel.odintsov@gmail.com? Да, в понедельник или вторник организую. Фича 2 - уже есть: Это да. Но было-бы логичнее ещё и из fastnetmon.dat выкинуть показ того, что не считается. :) Фича 3 - скажите, какие переменные нужны и я добавлю :) Я думаю на первое время достаточно будет банальных число, месяц, год, номер дня недели, часы минуты секунды, ну и ip. :) Например я для подобных случаев люблю задавать пути типа "/var/log/fastnetmon_attacks/%Y/%m/%d/%H:%M:%S-%i". В идеале конечно было-бы замечательно повторить формат команды date, %i - ip. Но приоритет этого крайне низкий, т.к. несложно реализуется внутри скрипта notify_script_path Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Rolex Опубликовано 4 июля, 2015 · Жалоба Rolex, поправлено. Все собралось. Спасибо ;) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 4 июля, 2015 · Жалоба Прекрасно! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 5 июля, 2015 · Жалоба UAVpilot, приветствую! Сделал сокрытие полотна, если определенное направление отработки трафика отключено в конфиге - https://github.com/FastVPSEestiOu/fastnetmon/commit/7e55afe7ea14f284cb0c01bf2999528e7ef830cd Просьба вытянуть изменения и пересобраться :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Rolex Опубликовано 5 июля, 2015 (изменено) · Жалоба Фиксирую пожелания по взаимодействию с 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 Прошу извинить за сумбурность описания. Изменено 5 июля, 2015 пользователем Rolex Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
olegarhiy Опубликовано 6 июля, 2015 (изменено) · Жалоба А у вас точно последняя версия? Просто в 1.1.2 уже везде используются усредненные графики и клиент отображает именно их, а не абсолютные значения. Они как раз должны обсчитываться корректно и не мотаться сильно (ибо они же берутся и для бана). Неочень прозрачно (поправив версию branch c 1.1.2 на 1.1.3 в инсталляционном скрипте), но обновился до 1.1.3. Здесь действительно усреднение в клиенте работает. Не так как хотелось бы, но подозреваю, что с данными, которые получаем дискретно, лучше не получится :) Теперь не просто пик один раз в 60 сек и потом в течение 59 секунд счетчик по нулям, а действительно текущее среднее значение за 60 сек и плавное снижение до 50% :) Учитывая, что важны порядки значений, то вполне приемлемо. Подумаю на досуге над этой математической задачкой. Павел, спасибо большое за Fastnetmon! Классный проект и уверен у него большое будущее! Будет очень классно, если научиться совместно с ExaBGP научится синхронизировать информацию о маршрутах. Иначе в случае падения Fastnetmon они просто "залипают" в exabgp и наоборот. Изменено 8 июля, 2015 пользователем olegarhiy Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
UAVpilot Опубликовано 7 июля, 2015 · Жалоба UAVpilot, а можно дамп трафика на pavel.odintsov@gmail.com? Отправил 30-секундный дамп, ~20MB. :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 8 июля, 2015 · Жалоба Rolex, сложный вопрос, обдумываю! UAVpilot, спасибо, постараюсь его разобрать поскорее. Пока почти точно видно, что он битый. olegarhiy, про залипание маршрутов я обдумаю. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 8 июля, 2015 · Жалоба Между делом добавил поддержку групп хостов. Теперь можно создать сколкьо угодно групп хостов, добавить туда любое количество сетей. И для каждой группы указать собственные пороги срабатывания на атаки. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
olegarhiy Опубликовано 9 июля, 2015 · Жалоба Между делом добавил поддержку групп хостов. Теперь можно создать сколько угодно групп хостов, добавить туда любое количество сетей. И для каждой группы указать собственные пороги срабатывания на атаки. Павел, спасибо! Полезная фича, т.к. есть "особенные" хосты в сети :) Но у меня сходу не заработала. Добавил в группу "my_hosts" хост, который банить по глобальным критериям не надо, но все равно банит. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 9 июля, 2015 · Жалоба А код актуальный точно из репо? Покажите конфиг :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
olegarhiy Опубликовано 9 июля, 2015 (изменено) · Жалоба А код актуальный точно из репо? Покажите конфиг :) Код актуальный. # We could create group of hosts with non standard thresholds # You should create this groups before (in configuration file) specifying any limits #hostgroup = my_hosts:10.10.10.221/32,10.10.10.222/32 hostgroup = my_hosts:10.11.12.13/32 # Configure this group my_hosts_enable_ban = yes my_hosts_ban_for_pps = yes my_hosts_ban_for_bandwidth = yes my_hosts_ban_for_flows = yes my_hosts_threshold_pps = 50000 my_hosts_threshold_mbps = 1000 my_hosts_threshold_flows = 53500 Изменено 9 июля, 2015 пользователем olegarhiy Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 9 июля, 2015 · Жалоба А этот хост явно прописан в networks_list или же нет? Его там нужно указать явно :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
olegarhiy Опубликовано 9 июля, 2015 (изменено) · Жалоба А этот хост явно прописан в networks_list или же нет? Его там нужно указать явно :) Павел, действительно! :) Прописал в networks_list и банить перестало по глобальным критериям. Но необходимость указания в networks_list исключает возможность анонсирования самой сети вместо хоста ;) Опять наступил на грабельки с "on" - "yes", "off" - "no". Я пока до сих пор не могу уловить логику в каких параметрах какой указывать. Т.е. вышестоящий код не заработал в плане бана, т.е. вообще перестало банить, т.к. требовалось указать "on" вместо "yes". По-умолчанию все выставлено в "no" :) Т.е. рабочий конфиг: # We could create group of hosts with non standard thresholds # You should create this groups before (in configuration file) specifying any limits #hostgroup = my_hosts:10.10.10.221/32,10.10.10.222/32 hostgroup = my_hosts:10.11.12.13/32 # Configure this group my_hosts_enable_ban = yes my_hosts_ban_for_pps = on my_hosts_ban_for_bandwidth = on my_hosts_ban_for_flows = on my_hosts_threshold_pps = 50000 my_hosts_threshold_mbps = 1000 my_hosts_threshold_flows = 53500 Лимит сообщений на сегодня у меня закончился. Найти ошибку в конфигурации между "on" и "no" тяжеловато ;) А учитывая, что ещё возможны варианты с off и yes, траблшутинг может затянуться надолго :) Фичи могут просто "потеряться", т.к. вводят в эксплуатацию одни специалисты, а непосредственно эксплуатацией могут заниматься уже другие. Изменено 9 июля, 2015 пользователем olegarhiy Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 9 июля, 2015 · Жалоба Да, увы эта фича теряется. Только on/no, иного не дано :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 9 июля, 2015 · Жалоба Можно сделать хитрый воркэраунд. Сделать флажок, который будет вынуждать анонсировать не конкретную сетку (/32 для /32), а сеть минимальной длины для глобального роутинга - /24. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
olegarhiy Опубликовано 10 июля, 2015 · Жалоба Можно сделать хитрый воркэраунд. Сделать флажок, который будет вынуждать анонсировать не конкретную сетку (/32 для /32), а сеть минимальной длины для глобального роутинга - /24. Ух, как сложно то все :) Еще бы неплохо научиться мониторить оба типа трафика (входящий/исходящий), но при этом оставлять возможность выбора по какому из них банить. Т.е. я не вижу практического смысла банить на основании показателей исходящего трафика, но для анализа каких-либо проблем знать их очень полезно. Настроил graphite - я в восторге! Работать с данными по трафику так легко ещё не было никогда :) Спасибо большое! Хороших выходных :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 14 июля, 2015 · Жалоба Рад что нравится=) Друзья, а что думаете про mongodb под хранение конфигов и инфы об атаках? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Megas Опубликовано 15 июля, 2015 · Жалоба А чем обусловлена именно монга? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 15 июля, 2015 · Жалоба Детали тут: https://github.com/FastVPSEestiOu/fastnetmon/issues/328 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
olegarhiy Опубликовано 16 июля, 2015 · Жалоба Павел, странный баг. Вместо того, чтобы "разбанить" нужную сеть после "атаки" вижу следующее в логах exabgp: Thu, 16 Jul 2015 16:00:18 INFO 164775 processes Command from process service-dynamic : withdraw route 0.0.0.0/0 Thu, 16 Jul 2015 16:00:18 INFO 164775 supervisor Command could not parse route in : withdraw route 0.0.0.0/0 В логе fastnetmon увидел следующее: 2015-07-16 16:00:18,166 [iNFO] We will unban banned IP: 10.11.12.13 because it ban time 1900 seconds is ended 2015-07-16 16:00:18,166 [iNFO] Call script for unban client: 10.11.12.13 2015-07-16 16:00:18,166 [iNFO] Script for unban client is finished: 10.11.12.13 2015-07-16 16:00:18,167 [iNFO] Call ExaBGP for unban client started: 10.11.12.13 2015-07-16 16:00:18,167 [iNFO] Call to ExaBGP for unban client is finished: 10.11.12.13 2015-07-16 16:00:18,177 [iNFO] ExaBGP announce message: withdraw route 0.0.0.0/0 В бан fastnetmon передал exabgp маршрут правильный, а вот удалить его не смог корректно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 16 июля, 2015 · Жалоба А версия с Git? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
olegarhiy Опубликовано 16 июля, 2015 (изменено) · Жалоба А версия с Git? Обновился до последней, т.к. исходники прежние удалил. Проблема осталась. git show HEAD commit 3bd8477c024f235e29324c4e109c667dada235b1 Author: Pavel Odintsov... Date: Wed Jul 15 13:55:10 2015 +0200 Изменено 16 июля, 2015 пользователем olegarhiy Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
olegarhiy Опубликовано 16 июля, 2015 (изменено) · Жалоба Совсем беда: 2015-07-16 18:41:06,898 [iNFO] We will unban banned IP: 10.10.16.68 because it ban time 1900 seconds is ended 2015-07-16 18:41:06,898 [iNFO] Call script for unban client: 10.10.16.68 2015-07-16 18:41:06,898 [iNFO] Script for unban client is finished: 10.10.16.68 2015-07-16 18:41:06,898 [iNFO] Call ExaBGP for unban client started: 10.10.16.68 2015-07-16 18:41:06,900 [iNFO] Call to ExaBGP for unban client is finished: 10.10.16.68 2015-07-16 18:41:06,900 [iNFO] ExaBGP announce message: withdraw route 0.0.0.0/0 2015-07-16 18:42:06,900 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:43:06,900 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:44:06,900 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:45:06,901 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:46:06,901 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:47:06,901 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:48:06,901 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:49:06,901 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:50:06,902 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:51:06,902 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:52:06,902 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:53:06,902 [iNFO] We will unban banned IP: 10.10.18.14 because it ban time 1900 seconds is ended 2015-07-16 18:53:06,902 [iNFO] Call script for unban client: 10.10.18.14 2015-07-16 18:53:06,902 [iNFO] Script for unban client is finished: 10.10.18.14 2015-07-16 18:53:06,904 [iNFO] Call ExaBGP for unban client started: 10.10.18.14 2015-07-16 18:53:06,904 [iNFO] Call to ExaBGP for unban client is finished: 10.10.18.14 2015-07-16 18:53:06,904 [ERROR] Attack to IP 10.10.17.40 still going! We should not unblock this host 2015-07-16 18:53:06,904 [iNFO] ExaBGP announce message: withdraw route 10.10.17.0/24 В networks_list прописаны сети /24. Еще важное замечание: fastnetmon передает неправильный "withdraw"! Т.е. без next-hop и community! Exabgp версии 2.0.7 ругается, т.к. ей до этого передали "announce" маршрут с next-hop и community! НЕ надо использовать exabgp из системных пакетов на Debian (устаревшая версия, которая требует next-hop и community). Правильно: pip install exabgp (версия 3.4.11 не требует next-hop и community для операции "withdraw"). Изменено 17 июля, 2015 пользователем olegarhiy Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 17 июля, 2015 · Жалоба Полностью переписал этот код, теперь его по крайне мере можно понимать что он делает, возможно, изначальный баг тоже починился :) Rolex, я помню про Вас - JSON есть в родмэпе, но скорее всего будет засунут в MongoDB вместо Redis :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...