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

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

Поставил threshold_pps = 50000 и получилась опять странная картина. Я подумал, может мне попробовать поставить версию из git, а не из портов?

attack.txt

Edited by roma33rus

Share this post


Link to post
Share on other sites

Ой, а у вас портовая? Она очень старая, поставьте, пожалуйста, инсталлером актуальную:

 

wget --no-check-certificate https://raw.githubusercontent.com/FastVPSEestiOu/fastnetmon/master/src/fastnetmon_install.pl -Ofastnetmon_install.pl 
sudo perl fastnetmon_install.pl --use-git-master

Share this post


Link to post
Share on other sites

Ой, а у вас портовая? Она очень старая, поставьте, пожалуйста, инсталлером актуальную:

 

wget --no-check-certificate https://raw.githubusercontent.com/FastVPSEestiOu/fastnetmon/master/src/fastnetmon_install.pl -Ofastnetmon_install.pl 
sudo perl fastnetmon_install.pl --use-git-master

 

Поставил из гит. Вот версия: "Version: 1.1.3 master git-41d36228775f05dad5f7594f5a204d25b3d793ac"

И лог. Все равно как-то странно

attack.txt

Edited by roma33rus

Share this post


Link to post
Share on other sites

Мда, предельно странно со счетчиками мегабит:

 

 

Total incoming traffic: 347 mbpsAverage incoming traffic: 347 mbpsIncoming tcp traffic: 10607 mbps

 

 

Total incoming pps: 30388 packets per second

Average incoming pps: 30388 packets per second

 

Хотя и счетчики пакетов для TCP сумасшедшие:

 

Incoming tcp pps: 926942 packets per secondOutgoing tcp pps: 620447 packets per second

 

 

Пошел курить код :)

Share this post


Link to post
Share on other sites

А можно выдачу fastnetmon_client относительно цифр, что там отображаются?

 

Интересуют:

Screen updated in:		0 sec 33023 microseconds
Traffic calculated in:		0 sec 21 microseconds

 

+ просьба подключить Graphite / InfluxDB, чтобы баг стал нагляднее и можно было поймать происходящее на графиках.

Share this post


Link to post
Share on other sites

Причина проблем с очень странными показаниям по tcp/udp найдена. Там используются ежесекундные счетчики вместо усредненных силами moving average, а при использовании netflow они крайне не точны. Нужен помощник для тестов, патч могу сделать в течение дня.

 

Можно писать мне по скайпу или лс на форуме, я сделаю патч и нужно будет проверить его :)

Share this post


Link to post
Share on other sites

Причина проблем с очень странными показаниям по tcp/udp найдена. Там используются ежесекундные счетчики вместо усредненных силами moving average, а при использовании netflow они крайне не точны. Нужен помощник для тестов, патч могу сделать в течение дня.

 

Можно писать мне по скайпу или лс на форуме, я сделаю патч и нужно будет проверить его :)

Впринципе я готов побыть тестером. Только думаю уже в понедельник

Share this post


Link to post
Share on other sites

Приниимаем IPFIX с Juniper MX. C cемплингом "rate 1" и такими настройками:

flow-active-timeout 300;
flow-inactive-timeout 10;
template-refresh-rate {
   seconds 60;
}
option-refresh-rate {
   seconds 60;
}

получается до 300Mbps ipfix трафика.

 

Когда ставил "average_calculation_time = 30" из-за template-refresh-rate в 1 минуту при старте fastnetmon получался лог файл на ~500Mb. Из-за этого сразу несколько вопросов:

1. можно ли сделать какой-то рейтлимит для этих стартовых сообщений "We don't have a template..."?

2. как правильно логротейтить fastnetmon.log? "kill -HUP" и как обычно?

3. может кто поделится опытом - какой average_calculation_time лучше ставить на таких объёмах netflow трафика?

Share this post


Link to post
Share on other sites

У Вас очень большой таймаут "flow-active-timeout 300; flow-inactive-timeout 10;".

 

Суть average_calculation_time в том, что он должен быть больше, чем большее из значений flow-active-timeout и flow-inactive-timeout. Для случая 300 и 10 - average_calculation_time должен быть 300, а это очень долго. Поэтому чисто логически правильнее flow-active-timeout выставить в 30, вместе с inactive.

 

Ротировать лог умеем только полным перезапуском =(

 

"We don't have a template" - можно победить простым удалением этой строки из исходников, в будущем я планирую кэш шаблонов и эта ошибка станет фатальной, но будет решительно реже.

Share this post


Link to post
Share on other sites

Павел, я правильно понял, что если мы заменим netmap на jflow, то функционал по FS мы потеряем?

Ога, именно так.

 

Это всё ещё актуально? При использовании IPFIX c "sampling rate = 1" BGP FlowSpec использовать не получится, только blackhole?

Share this post


Link to post
Share on other sites

Да, это актуально, в netflow просто нет информации о том, что и почему блокировкать, он скуден донельзя. sFLOW решительно лучше, в будущем под него появится возможность работы с FS.

Share this post


Link to post
Share on other sites

notify_script_pass_details - чертовски удобная штука.

 

А можно попросить о небольшом изменении формата? Было бы удобно, если б была возможность добавлять в письмо URL (с проблемным ip) на биллинг/внутреннюю систему мониторинга. К примеру, если banned ip - 10.10.50.13, то в нашем случае такая ссылка выглядела б как https://company.net/hosts.php?hts_ip_filter=10.10.50.13&hmenu_selected=zx

Share this post


Link to post
Share on other sites

День добрый

имеем Orion D48

отправляем статистику по sflow

Core10G(config)#show sflow

Sflow version 1.2

Agent address have not configured

Collector address have not configured

Collector port is 6343

Sampler priority is 0

Sflow DataSource: type 2, index 3(Ethernet1/0/3)

Collector address is 172.16.1.43

Collector port is 6343

Counter interval is 50

Sample rate is input 10000, output 10000

Sample packet max len is 1400

Sample header max len is 128

Sample version is 4

 

в fastnetmon client - тишина.

 

по tcpdump вот такое

 

root@test111:/opt/fastnetmon# tcpdump -vv udp port 6343

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

11:58:34.034255 IP (tos 0x0, ttl 64, id 4801, offset 0, flags [DF], proto UDP (17), length 1420)

172.16.1.15.3072 > test111.6343: [udp sum ok] sFlow version 4 packet not supported

11:58:34.254149 IP (tos 0x0, ttl 64, id 4802, offset 0, flags [DF], proto UDP (17), length 484)

172.16.1.15.3072 > test111.6343: [udp sum ok] sFlow version 4 packet not supported

11:58:35.276143 IP (tos 0x0, ttl 64, id 4803, offset 0, flags [DF], proto UDP (17), length 1420)

172.16.1.15.3072 > test111.6343: [udp sum ok] sFlow version 4 packet not supported

11:58:36.317492 IP (tos 0x0, ttl 64, id 4804, offset 0, flags [DF], proto UDP (17), length 1292)

172.16.1.15.3072 > test111.6343: [udp sum ok] sFlow version 4 packet not supported

11:58:37.340926 IP (tos 0x0, ttl 64, id 4805, offset 0, flags [DF], proto UDP (17), length 1348)

172.16.1.15.3072 > test111.6343: [udp sum ok] sFlow version 4 packet not supported

 

 

 

косяк с сесором или fastnetmon ? или что где крутануть

 

FastNetMon 1.1.3 master git-fd3ddc7ca60c530318a735ebf10d731ed3660dc9

Edited by banec

Share this post


Link to post
Share on other sites

notify_script_pass_details - чертовски удобная штука.

 

А можно попросить о небольшом изменении формата? Было бы удобно, если б была возможность добавлять в письмо URL (с проблемным ip) на биллинг/внутреннюю систему мониторинга. К примеру, если banned ip - 10.10.50.13, то в нашем случае такая ссылка выглядела б как https://company.net/hosts.php?hts_ip_filter=10.10.50.13&hmenu_selected=zx

 

А что мешает исправить скрипт нотификации и добавить то, что нужно ? :)

Share this post


Link to post
Share on other sites

Точно, торможу.

Спасибо )

Share this post


Link to post
Share on other sites

переключил на sFlow v5

tcpdump - не ругается

 

12:26:23.305189 IP (tos 0x0, ttl 64, id 6879, offset 0, flags [DF], proto UDP (17), length 980)

172.16.1.15.3072 > test111.6343: sFlowv5, IPv4 agent 0.0.0.0, agent-id 0, seqnum 6880, uptime 1120378408, samples 11, length 952

flow sample (1), length 76, seqnum 86247, type 2, idx 3, rate 10000, pool 577065000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 1500, type 50096

flow sample (1), length 76, seqnum 86248, type 2, idx 3, rate 10000, pool 577075000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 1444, type 45807

flow sample (1), length 76, seqnum 86249, type 2, idx 3, rate 10000, pool 577085000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 503, type 55518

flow sample (1), length 76, seqnum 86250, type 2, idx 3, rate 10000, pool 577095000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 1460, type 61252

flow sample (1), length 76, seqnum 86251, type 2, idx 3, rate 10000, pool 577105000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 1400, type 50354

flow sample (1), length 76, seqnum 86252, type 2, idx 3, rate 10000, pool 577115000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 1444, type 50304

flow sample (1), length 76, seqnum 86253, type 2, idx 3, rate 10000, pool 577125000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 51, type 53399

flow sample (1), length 76, seqnum 86254, type 2, idx 3, rate 10000, pool 577135000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 143, type 59535

flow sample (1), length 76, seqnum 86255, type 2, idx 3, rate 10000, pool 577145000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 1444, type 50304

flow sample (1), length 76, seqnum 86256, type 2, idx 3, rate 10000, pool 577155000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 212, type 49933

flow sample (1), length 76, seqnum 86257, type 2, idx 3, rate 10000, pool 577165000, drops 0, input 3 output 1073741823 records 1

enterprise 0 Ethernet frame (2) length 32

frame len 1453, type 14296

 

 

а вот в логах коллектора

015-12-10 12:25:29,052 [ERROR] sflow: flow_sample length error: expected 76 found 72

2015-12-10 12:25:29,052 [ERROR] sflow: we failed in SFLFLOW_SAMPLE handler

2015-12-10 12:25:29,878 [ERROR] sflow: flow_sample length error: expected 76 found 72

2015-12-10 12:25:29,878 [ERROR] sflow: we failed in SFLFLOW_SAMPLE handler

2015-12-10 12:25:30,127 [ERROR] sflow: flow_sample length error: expected 76 found 72

2015-12-10 12:25:30,127 [ERROR] sflow: we failed in SFLFLOW_SAMPLE handler

Edited by banec

Share this post


Link to post
Share on other sites

Обратился в суппорт НАГа - оказывается есть проблема с sFlow на Orion D48

выложили прошивку в которой исправленно http://data.nag.ru/Orion%20Networks/Firmwares/D48E/

проверить пока не могу - т.к. центральная железка.

Edited by banec

Share this post


Link to post
Share on other sites

sflow4 поддерживается в текущей гит версии:

 

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

 

Да, подобная выдача скорее всего говорит о баге в sflow реализации :)

Share this post


Link to post
Share on other sites

Доброго дня. Спасибо за интересную разработку. Пытаюсь внедрить у себя.

При выставлении

enable_ban = on

вываливается segfault

Debian 8 x64, гостем в KVM, сборщик трафика - netflow

полный конфиг

 

enable_ban = on

 

process_incoming_traffic = on

process_outgoing_traffic = on

 

ban_details_records_count = 500

 

ban_time = 300

 

enable_subnet_counters = off

 

networks_list_path = /etc/networks_list

 

white_list_path = /etc/networks_whitelist

 

check_period = 1

 

enable_connection_tracking = off

 

ban_for_pps = on

ban_for_bandwidth = on

ban_for_flows = on

 

threshold_pps = 2000

threshold_mbps = 100

threshold_flows = 1000

 

 

mirror = off

 

mirror_netmap = off

 

pcap = off

netflow = on

sflow = off

 

enable_pf_ring_zc_mode = off

 

interfaces = eth0

 

average_calculation_time = 5

 

average_calculation_time_for_subnets = 20

 

netflow_port = 2055

netflow_host = 0.0.0.0

 

 

netflow_sampling_ratio = 1

 

sflow_port = 6343

sflow_host = 0.0.0.0

 

 

 

notify_script_path = /usr/local/bin/notify_about_attack.sh

 

redis_enabled = no

 

redis_port = 6379

redis_host = 127.0.0.1

 

exabgp = off

exabgp_command_pipe = /var/run/exabgp.cmd

exabgp_community = 65001:666

exabgp_next_hop = 10.0.3.114

 

exabgp_announce_whole_subnet = no

 

graphite = off

graphite_host = 127.0.0.1

graphite_port = 2003

 

monitor_local_ip_addresses = off

 

 

sort_parameter = packets

max_ips_in_list = 10

 

 

наличие/отсутствие в конфиге

notify_script_path = /usr/local/bin/notify_about_attack.sh

, а также самого файла ситуацию не меняет

При

enable_ban = off

все нормально, в логи пишет

2015-12-11 11:39:48,013 [iNFO] We do not ban: xxx.xxx.164.4 because ban disabled completely

До этого запускал на физическом Debian 6 в режиме сбора pcap - работало без нареканий

Share this post


Link to post
Share on other sites

А версия из git или стабильная?

git

Share this post


Link to post
Share on other sites

Очень странно. Можно выдачу gdb /opt/fastnetmon/fasnetmon CoreX и потом bt?

 

(gdb) run

Starting program: /opt/fastnetmon/fastnetmon

[Thread debugging using libthread_db enabled]

Using host libthread_db library "/lib/i386-linux-gnu/i686/cmov/libthread_db.so.1".

[New Thread 0xb5ffdb40 (LWP 3669)]

[New Thread 0xb57fcb40 (LWP 3670)]

[New Thread 0xb4ffbb40 (LWP 3671)]

[New Thread 0xb47fab40 (LWP 3672)]

 

Program received signal SIGSEGV, Segmentation fault.

[switching to Thread 0xb57fcb40 (LWP 3670)]

0xb7aec488 in _IO_vfprintf_internal (s=s@entry=0xb57fbac0, format=<optimized out>,

format@entry=0x80c0048 "We run execute_ip_ban code with following params in_pps: %d out_pps: %d in_bps: %d out_bps: %d and we decide it's %s attack",

ap=0xb57fbc8c "", ap@entry=0xb57fbc78 "\230\033") at vfprintf.c:1642

1642 vfprintf.c: Нет такого файла или каталога.

(gdb) bt

#0 0xb7aec488 in _IO_vfprintf_internal (s=s@entry=0xb57fbac0, format=<optimized out>,

format@entry=0x80c0048 "We run execute_ip_ban code with following params in_pps: %d out_pps: %d in_bps: %d out_bps: %d and we decide it's %s attack",

ap=0xb57fbc8c "", ap@entry=0xb57fbc78 "\230\033") at vfprintf.c:1642

#1 0xb7b12733 in _IO_vsnprintf (

string=0xb3d82c88 "We run execute_ip_ban code with following params in_pps: 7064 out_pps: 0 in_bps: 984 out_bps: 0 and we decide it's ",

maxlen=<optimized out>,

format=0x80c0048 "We run execute_ip_ban code with following params in_pps: %d out_pps: %d in_bps: %d out_bps: %d and we decide it's %s attack",

args=0xb57fbc78 "\230\033") at vsnprintf.c:119

#2 0xb7e83ef2 in log4cpp::StringUtil::vform(char const*, char*) () from /usr/lib/liblog4cpp.so.5

#3 0xb7e7543b in log4cpp::Category::_logUnconditionally(int, char const*, char*) () from /usr/lib/liblog4cpp.so.5

#4 0xb7e74a1f in log4cpp::Category::info(char const*, ...) () from /usr/lib/liblog4cpp.so.5

#5 0x08073437 in execute_ip_ban(unsigned int, map_element, map_element, std::string, std::pair<unsigned int, unsigned int>) ()

#6 0x08075781 in recalculate_speed() ()

#7 0x08076721 in recalculate_speed_thread_handler() ()

#8 0xb7fbff16 in ?? () from /usr/lib/i386-linux-gnu/libboost_thread.so.1.55.0

#9 0xb7e96efb in start_thread (arg=0xb57fcb40) at pthread_create.c:309

#10 0xb7b9062e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now