LINUX.ORG.RU
решено ФорумAdmin

Подсчет трафика


1

1

Есть роутер (выполняющий также роль MTA) под дебианом, на котором поднято 20+ подсетей (структура организации большая, наследие одного из бывших провайдеров, планируем переход на более простую схему). Знаю что софта, умеющего считать трафик вагон, но хотелось бы обойтись чем-то легким и изящным - вроде связки iptables + mysql + скрипт, который пишет в базу + простенький скрипт на пыхе, который красиво все показывает. Пытаюсь сделать что-то наподобие вот такого, только вот выхлоп iptables -Lvnx показывает трафик по подсетям, нужна конкретизация по ip (и желательно еще по mac).

P.S. Если из легкого - стоит может использовать ulogd + ulogd-mysql?

Собственно вся прелесть подсети:

# route -n | grep vlan
10.0.0.0        10.0.0.1        255.255.0.0     UG    0      0        0 vlan10
10.0.0.0        0.0.0.0         255.255.0.0     U     0      0        0 vlan10
10.1.0.0        10.1.0.1        255.255.0.0     UG    0      0        0 vlan11
10.1.0.0        0.0.0.0         255.255.0.0     U     0      0        0 vlan11
10.2.0.0        10.2.0.1        255.255.0.0     UG    0      0        0 vlan12
10.2.0.0        0.0.0.0         255.255.0.0     U     0      0        0 vlan12
10.14.124.0     10.14.127.254   255.255.252.0   UG    0      0        0 vlan1160
10.14.124.0     0.0.0.0         255.255.252.0   U     0      0        0 vlan1160
10.106.0.0      10.106.0.1      255.255.255.0   UG    0      0        0 vlan374
10.106.0.0      0.0.0.0         255.255.255.0   U     0      0        0 vlan374
10.106.1.0      10.106.1.1      255.255.255.224 UG    0      0        0 vlan354
10.106.1.0      0.0.0.0         255.255.255.224 U     0      0        0 vlan354
10.106.1.64     10.106.1.65     255.255.255.192 UG    0      0        0 vlan368
10.106.1.64     0.0.0.0         255.255.255.192 U     0      0        0 vlan368
10.106.1.128    10.106.1.129    255.255.255.192 UG    0      0        0 vlan365
10.106.1.128    0.0.0.0         255.255.255.192 U     0      0        0 vlan365
10.106.2.64     10.106.2.65     255.255.255.224 UG    0      0        0 vlan358
10.106.2.64     0.0.0.0         255.255.255.224 U     0      0        0 vlan358
10.106.2.128    10.106.2.129    255.255.255.128 UG    0      0        0 vlan363
10.106.2.128    0.0.0.0         255.255.255.128 U     0      0        0 vlan363
10.106.3.0      10.106.3.1      255.255.255.0   UG    0      0        0 vlan359
10.106.3.0      0.0.0.0         255.255.255.0   U     0      0        0 vlan359
10.106.5.64     10.106.5.65     255.255.255.224 UG    0      0        0 vlan373
10.106.5.64     0.0.0.0         255.255.255.224 U     0      0        0 vlan373
10.106.5.96     10.106.5.97     255.255.255.224 UG    0      0        0 vlan361
10.106.5.96     0.0.0.0         255.255.255.224 U     0      0        0 vlan361
10.106.7.0      10.106.7.1      255.255.255.128 UG    0      0        0 vlan369
10.106.7.0      0.0.0.0         255.255.255.128 U     0      0        0 vlan369
10.106.7.128    10.106.7.129    255.255.255.128 UG    0      0        0 vlan367
10.106.7.128    0.0.0.0         255.255.255.128 U     0      0        0 vlan367
10.106.8.0      10.106.8.1      255.255.255.128 UG    0      0        0 vlan352
10.106.8.0      0.0.0.0         255.255.255.128 U     0      0        0 vlan352
10.106.8.128    10.106.8.129    255.255.255.128 UG    0      0        0 vlan353
10.106.8.128    0.0.0.0         255.255.255.128 U     0      0        0 vlan353
10.106.9.0      10.106.9.1      255.255.255.128 UG    0      0        0 vlan356
10.106.9.0      0.0.0.0         255.255.255.128 U     0      0        0 vlan356
10.106.9.128    10.106.9.129    255.255.255.128 UG    0      0        0 vlan357
10.106.9.128    0.0.0.0         255.255.255.128 U     0      0        0 vlan357
10.106.13.0     10.106.13.1     255.255.255.128 UG    0      0        0 vlan362
10.106.13.0     0.0.0.0         255.255.255.128 U     0      0        0 vlan362
10.106.13.128   10.106.13.129   255.255.255.128 UG    0      0        0 vlan366
10.106.13.128   0.0.0.0         255.255.255.128 U     0      0        0 vlan366
10.106.14.0     10.106.14.1     255.255.255.128 UG    0      0        0 vlan360
10.106.14.0     0.0.0.0         255.255.255.128 U     0      0        0 vlan360
10.106.14.128   10.106.14.129   255.255.255.192 UG    0      0        0 vlan350
10.106.14.128   0.0.0.0         255.255.255.192 U     0      0        0 vlan350
192.168.1.0     192.168.1.1     255.255.255.0   UG    0      0        0 vlan802
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 vlan802

Правила для iptables просты:

iptables -I INPUT 1 -i vlanX -j ACCEPT
iptables -A FORWARD -i vlanX -s NET/NETMASK -j ACCEPT
iptables -A FORWARD -i eth0 -d NET/NETMASK -j ACCEPT

И в конце маскарадинг.

Решение: т.к. трафик идет немаленький, прикручиваем ipt_netflow вот таким способом, почитав также это

Затем:

mkdir /var/log/netflow
nfcapd -l /var/log/netflow/ -t <время в секундах> -D -p <порт>

Читаем логи:

nfdump -r /var/log/netflow/<имя_файла> | less

Отдельное спасибо AS

P.S. Если запилю скрипт для записи в БД и чтения с нее - выложу сюда.

★★★★★

Последнее исправление: leg0las (всего исправлений: 3)

Ответ на: комментарий от leg0las

с ipt_netflow просто всё. в мане доходчиво. модуль грузится с параметрами, в том числе, где коллертор. В iptables на forward правило iptables -I FORWARD -j NETFLOW.

Дальше коллектор. nfdump, на самом деле, не единственный, просто мне понравился. Описание у него тоже своё понятное.

nfsen - мне картинки понравились, но использовать я его не стал, мне nfdump без nfsen достаточно пока. Так, запомнил, что он есть. Документация на сайте, с картинками.

AS ★★★★★
()
Ответ на: комментарий от Pinkbyte

А в чем проблема то? Распарсить выхлоп и сделать соответствующий sql запрос, делов то:-)

leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las

Проблема в том, что в netflow много ненужной информации для задачи подсчета трафика. И сырой netflow никто в базу не кладет, но агрегируют как необходимо, а необходимо всем по разному.

hizel ★★★★★
()
Ответ на: комментарий от AS

Читаю про nfsen. Красиво, жаль в репе дебиана нет, поставил в /opt рядом с igmpproxy.

Кто прикручивал nfsen - как задать пароль для мыла? гугл выдает только команду perl -e, только не совсем понятно, куда ее тулить:-(

leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las
iptables -I INPUT 1 -i vlanX -j ACCEPT
iptables -A FORWARD -i vlanX -s NET/NETMASK -j ACCEPT
iptables -A FORWARD -i eth0 -d NET/NETMASK -j ACCEPT

Странные правила кстати. rp_filter просто нужно включить на нужных интерфейсах, это по процессору дешевле будет гораздо.

ventilator ★★★
()
Ответ на: комментарий от ventilator

Да собственно это взято из собственного скрипта NAT для одной подсети, поэтому я не особо заморачивался. Все равно планируется, что вланы 3xx уйдут в небытие (за исключением может двух-трех), и останутся только 10-й 11-й и 12-й.

leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las

Запилил я pmacct - оно за 20 минут назаписывало в базу 6к строк и база разбухла до полутора метров. И это с учетом того, что NAT еще формально не запущен. Как я понимаю sql_history задает время «жизни» истории в БД, но все равно как-то жирно.

leg0las ★★★★★
() автор топика

Сейчас ковыряю ipt_netflow - его в дебиане официально нет, либо компиляй, либо ставь пакет со сторонней репы. Печалька.

leg0las ★★★★★
() автор топика

Еще почитал - при приличном трафике всякие ulogd и ipcad ложатся. Совсем. Единственный выход - использовать таки ipt_netflow, он позволяет справляться с большими нагрузками.

leg0las ★★★★★
() автор топика
Ответ на: комментарий от leg0las

Там есть batch режим, когда он льет в базу с помощью COPY (применительно к постгрес) - все очень быстро. Ну а по поводу разбухания - это вы аггрегирование настройте, чтобы не вышло что вы каждый поток пишете.

ventilator ★★★
()
Ответ на: комментарий от ventilator

Он походу каждый поток писал, да. Забил по вышеназваной причине (нагрузка), ковыряю nfdump, модуль собрал вот по этому мануалу, модуль завелся, правило поднялось. Пока не хочу привязывать к nfsen, хочу разобраться с самим nfdump, может сам что-то наваяю для записи в базу.

leg0las ★★★★★
() автор топика
Последнее исправление: leg0las (всего исправлений: 1)
Ответ на: комментарий от ventilator

1. Много записей в базу, скорее всего накосячил с конфигом.

2. Возможные затыки, т. к. достаточно высокая нагрузка.

leg0las ★★★★★
() автор топика
Ответ на: комментарий от ventilator

У нас гигабитный канал, и трафика там >100M.

Да, кстати, прикрутил я таки nfdump+nfcapd. Пришлось ручками передать параметр ядру с портом, благодаря вот этому ману понял, почему в логах пусто.

Теперь nfdump -r /var/log/netflow/nfcapd.201304261058 | less:

Date flow start          Duration Proto      Src IP Addr:Port          Dst IP Addr:Port   Packets    Bytes Flows
2013-04-26 10:57:47.804     0.000 TCP       192.168.7.41:43018 ->    93.186.236.89:80           1       52     1
2013-04-26 10:57:44.648     3.156 TCP       192.168.7.54:52088 ->   91.106.201.100:80          17     1418     1
2013-04-26 10:57:44.832     2.976 TCP       192.168.7.54:52092 ->   91.106.201.100:80           8     1327     1
2013-04-26 10:57:47.812     0.000 UDP    178.151.166.211:53    ->    192.168.6.167:65190        1      232     1
2013-04-26 10:57:44.644     3.168 TCP       192.168.7.54:52087 ->   91.106.201.100:80          13     1181     1
2013-04-26 10:57:47.588     0.232 TCP    213.180.204.215:80    ->    192.168.6.167:54347        6     3700     1
2013-04-26 10:57:47.580     0.240 TCP      192.168.6.167:54347 ->  213.180.204.215:80           6      738     1
2013-04-26 10:57:47.712     0.116 TCP      192.168.6.167:54351 ->     77.234.43.82:80           5      848     1
2013-04-26 10:57:47.708     0.120 TCP      192.168.6.167:54350 ->     77.234.43.82:80           5      782     1
2013-04-26 10:57:44.852     2.976 TCP       192.168.7.54:52098 ->   91.106.201.100:80          16     1455     1
...

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

leg0las ★★★★★
() автор топика
Последнее исправление: leg0las (всего исправлений: 1)

Знатокам awk/sed/cut и прочим любителям регулярок:

# cat nfdump.log | awk '{print $7, $9}' | grep 192.168.7.181: | awk '{print $2}'
104
52
5.1
1500
156
52
1540
308
300
300
240
60
60
60
1312

Сейчас ковыряю как умножить вот эти 5.1 на 1048576? Т.е. отдетктить, что есть точка, и преобразовать?

leg0las ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.