Мониторинг трафика Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:мониторинг_трафика [2011/03/20 20:46]
[Утилиты Vnstat и Vnstati]
wiki:мониторинг_трафика [2013/07/10 10:18] (текущий)
[Коллектор Nfdump и визуализатор данных Nfsen]
Строка 7: Строка 7:
 Для мониторинга трафика в реальном времени можно использовать утилиту ''​jnettop'':​ Для мониторинга трафика в реальном времени можно использовать утилиту ''​jnettop'':​
  
-  ​sudo jnettop+<code bash> 
 +sudo jnettop 
 +</​code>​
  
-Или, как вариант,​ ''​vnstat''​ с ключём ''​--live'':​+Или, как вариант,​ ''​vnstat''​ с ключом ''​--live'':​
  
-  ​sudo vnstat --live+<code bash> 
 +sudo vnstat --live 
 +</​code>​
  
-Можно также воспользоваться достаточной удобной утилитой с псевдографическим интерфейсом,​ которая называется ''​iptraf'':​+Можно также воспользоваться достаточно удобной утилитой с псевдографическим интерфейсом,​ которая называется ''​iptraf'':​
  
-  ​sudo iptraf+<code bash> 
 +sudo iptraf 
 +</​code>​
  
 ===== Журналирование активности средствами iptables ===== ===== Журналирование активности средствами iptables =====
Строка 27: Строка 33:
 К счастью,​ в Ubuntu существует простой способ рассортировать данные по нужным журналам средствами используемой системы журналирования ''​rsyslog''​. Достаточно при записи в журнал добавлять некий уникальный префикс. Например,​ вот так: К счастью,​ в Ubuntu существует простой способ рассортировать данные по нужным журналам средствами используемой системы журналирования ''​rsyslog''​. Достаточно при записи в журнал добавлять некий уникальный префикс. Например,​ вот так:
  
-  ​sudo iptables -t filter -A FORWARD -s 192.168.0.0/​16 -m tcp -p tcp --dport 25 -j LOG --log-prefix "​iptables:​ "+<code bash> 
 +sudo iptables -t filter -A FORWARD -s 192.168.0.0/​16 -m tcp -p tcp --dport 25 -j LOG --log-prefix "​iptables:​ " 
 +</​code>​
  
 Теперь все записи в журнале,​ соответствующие этому критерию,​ будут начинаться с "​iptables:​ ". Осталось добавить правило сортировки в систему журналирования. Для этого можно создать файл ''/​etc/​rsyslog.d/​10-iptables.conf''​ со следующим содержанием:​ Теперь все записи в журнале,​ соответствующие этому критерию,​ будут начинаться с "​iptables:​ ". Осталось добавить правило сортировки в систему журналирования. Для этого можно создать файл ''/​etc/​rsyslog.d/​10-iptables.conf''​ со следующим содержанием:​
Строка 40: Строка 48:
 После создания нового файла конфигурации не забудьте переконфигурировать ''​rsyslog'':​ После создания нового файла конфигурации не забудьте переконфигурировать ''​rsyslog'':​
  
-  ​sudo /​etc/​init.d/​rsyslog reload+<code bash> 
 +sudo /​etc/​init.d/​rsyslog reload 
 +</​code>​
  
 Теперь вся активность,​ соответствующая добавленному правилу iptables, будет записываться в файл ''/​var/​log/​iptables.log''​. Если вы хотите надолго оставить журналирование,​ то не забудьте добавить этот файл в систему ротации логов ''​logrotate'',​ а то в какой-то момент у вас может закончиться место на диске. ​ Теперь вся активность,​ соответствующая добавленному правилу iptables, будет записываться в файл ''/​var/​log/​iptables.log''​. Если вы хотите надолго оставить журналирование,​ то не забудьте добавить этот файл в систему ротации логов ''​logrotate'',​ а то в какой-то момент у вас может закончиться место на диске. ​
Строка 52: Строка 62:
 Чтобы начать подсчёт трафика надо выполнить команду,​ которая создаст базу данных для указанного интерфейса:​ Чтобы начать подсчёт трафика надо выполнить команду,​ которая создаст базу данных для указанного интерфейса:​
  
-  ​sudo vnstat -u -i eth0+<code bash> 
 +sudo vnstat -u -i eth0 
 +</​code>​
  
 Подсчёт трафика происходит автоматически,​ база данных обновляется при выключении сетевого устройства. Но есть возможность обновить базу вручную:​ Подсчёт трафика происходит автоматически,​ база данных обновляется при выключении сетевого устройства. Но есть возможность обновить базу вручную:​
  
-  ​sudo vnstat -u+<code bash> 
 +sudo vnstat -u 
 +</​code>​
  
 Для просмотра статистики достаточно просто ввести:​ Для просмотра статистики достаточно просто ввести:​
  
-  ​vnstat+<code bash> 
 +vnstat 
 +</​code>​
   ​   ​
 Также можно использовать ключи: Также можно использовать ключи:
  
 <​file>​ <​file>​
-  -h,  --hours ​         по чясам+  -h,  --hours ​         по часам
   -d,  --days ​          за день   -d,  --days ​          за день
   -m,  --months ​        за месяц   -m,  --months ​        за месяц
Строка 76: Строка 92:
 Vnstati это утилита для визуализации статистики,​ с ней тоже все просто. Вот, например,​ короткий скрипт,​ который выводит на экран статистику в виде картинки:​ Vnstati это утилита для визуализации статистики,​ с ней тоже все просто. Вот, например,​ короткий скрипт,​ который выводит на экран статистику в виде картинки:​
  
-<file>+<code bash>
 #! /bin/bash #! /bin/bash
  
Строка 82: Строка 98:
 vnstati -vs -o ~/​vnstati.png vnstati -vs -o ~/​vnstati.png
 eog ~/​vnstati.png eog ~/​vnstati.png
-</file>+</code>
  
 Обе утилиты имеют еще некоторые возможности,​ не забывайте про ключ %%--help%% и утилиту man! Обе утилиты имеют еще некоторые возможности,​ не забывайте про ключ %%--help%% и утилиту man!
Строка 100: Строка 116:
 Для установки сенсора **fprobe** можно, например,​ выполнить такую команду:​ Для установки сенсора **fprobe** можно, например,​ выполнить такую команду:​
  
-  ​sudo apt-get install fprobe+<code bash> 
 +sudo apt-get install fprobe 
 +</​code>​
  
-Установщик спросит,​ на каком интерфейсе слушать трафик,​ и куда передавать собранную статистику - введите нужные вам параметры и ''​fprobe''​ начнёт работать.+Установщик спросит,​ на каком интерфейсе слушать трафик,​ и куда передавать собранную статистику - введите нужные вам параметры и ''​fprobe''​ начнёт работать. ​Например,​ для Nfsen в примере ниже нужно указать порт 9995. 
 + 
 +=== Автозапуск при перезапуске сети === 
 + 
 +Демон fprobe всегда аварийно завершается,​ когда интерфейс,​ к которому он привязан,​ выключается (переходит в состояние DOWN). И не запускается автоматически снова, когда интерфейс возобновляет работу. 
 + 
 +Если вам по каким-то причинам нужно периодически переключать интерфейсы,​ то чтобы обойти данную проблему fprobe можно в файл ''/​etc/​network/​interfaces''​ после описания интерфейса добавить строчки 
 + 
 +<code bash> 
 +        up service fprobe start 
 +        down service fprobe stop 
 +</​code>​ 
 + 
 +Например,​ могло бы получится нечто похожее на: 
 + 
 +<code bash> 
 +allow-hotplug eth0 
 +iface eth0 inet static 
 +        address 192.168.0.1 
 +        netmask 255.255.255.0 
 +        # fprobe 
 +        up service fprobe start 
 +        down service fprobe stop 
 +</​code>​ 
 + 
 +Теперь при использовании утилит,​ которые перечитывают этот файл (''​ifup''​ и ''​ifdown''​),​ fprobe будет корректно завершаться и автоматически запускаться при переключении состояния интерфейса. При этом при старте системы ''​fprobe''​ будет пытаться запуститься два раза (один раз стандартным способом,​ другой - через ''/​etc/​network/​interfaces''​),​ и хотя у него это не получится,​ но всё же для порядка лучше автозапуск системного демона ''​fprobe''​ убрать:​ 
 + 
 +<code bash> 
 +sudo update-rc.d -f fprobe remove 
 +</​code>​ 
 + 
 +=== Несколько демонов fprobe на одном компьютере ===
  
 Если вы хотите запустить на одном компьютере сразу несколько демонов ''​fprobe''​ (чтобы слушать несколько интерфейсов),​ то придётся немного изменить стартовые скрипты. Если вы хотите запустить на одном компьютере сразу несколько демонов ''​fprobe''​ (чтобы слушать несколько интерфейсов),​ то придётся немного изменить стартовые скрипты.
Строка 108: Строка 157:
 Для начала отредактируйте имеющийся стартовый скрипт ''/​etc/​init.d/​fprobe'',​ заменив в нём строчку Для начала отредактируйте имеющийся стартовый скрипт ''/​etc/​init.d/​fprobe'',​ заменив в нём строчку
  
-<file>+<code bash>
 NAME=fprobe NAME=fprobe
-</file>+</code>
  
 на строчку на строчку
  
-<file>+<code bash>
 NAME="​fprobe[0]"​ NAME="​fprobe[0]"​
-</file>+</code>
  
 И, кроме этого, строчку И, кроме этого, строчку
  
-<file>+<code bash>
 DAEMON_OPTS="​-i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"​ DAEMON_OPTS="​-i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"​
-</file>+</code>
  
 на строчку на строчку
  
-<file>+<code bash>
 DAEMON_OPTS="​-l 1:0 -i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"​ DAEMON_OPTS="​-l 1:0 -i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"​
-</file>+</code>
  
 Первое число добавленного параметра запуска ''​-l''​ ("​1"​) говорит ''​fprobe''​ использовать ''​syslog''​ для журналирования,​ а второе является идентификатором процесса. Именно второе число и нужно менять при запуске нескольких копий ''​fprobe'',​ и оно же должно стоять в квадратных скобочках в параметре ''​NAME''​ соответствующего стартового скрипта. Первое число добавленного параметра запуска ''​-l''​ ("​1"​) говорит ''​fprobe''​ использовать ''​syslog''​ для журналирования,​ а второе является идентификатором процесса. Именно второе число и нужно менять при запуске нескольких копий ''​fprobe'',​ и оно же должно стоять в квадратных скобочках в параметре ''​NAME''​ соответствующего стартового скрипта.
Строка 134: Строка 183:
 Теперь,​ чтобы создать все необходимые параметры и скрипты для запуска второй копии ''​fprobe'',​ скопируйте ''/​etc/​init.d/​fprobe''​ в ''/​etc/​init.d/​fprobe_1'':​ Теперь,​ чтобы создать все необходимые параметры и скрипты для запуска второй копии ''​fprobe'',​ скопируйте ''/​etc/​init.d/​fprobe''​ в ''/​etc/​init.d/​fprobe_1'':​
  
-  ​sudo cp /​etc/​init.d/​fprobe /​etc/​init.d/​fprobe_1+<code bash> 
 +sudo cp /​etc/​init.d/​fprobe /​etc/​init.d/​fprobe_1 
 +</​code>​
  
 И ''/​etc/​default/​fprobe''​ в ''/​etc/​default/​fprobe_1'':​ И ''/​etc/​default/​fprobe''​ в ''/​etc/​default/​fprobe_1'':​
  
-  ​sudo cp /​etc/​default/​fprobe /​etc/​default/​fprobe_1+<code bash> 
 +sudo cp /​etc/​default/​fprobe /​etc/​default/​fprobe_1 
 +</​code>​
  
 Отредактируйте ''/​etc/​default/​fprobe_1''​ для работы со вторым интерфейсом. Отредактируйте ''/​etc/​default/​fprobe_1''​ для работы со вторым интерфейсом.
Строка 144: Строка 197:
 Теперь надо отредактировать стартовый скрипт ''/​etc/​init.d/​fprobe_1''​ для второго процесса ''​fprobe''​. Замените числа в параметре ''​NAME''​ и ''​DAEMON_OPTS''​ на нужные:​ Теперь надо отредактировать стартовый скрипт ''/​etc/​init.d/​fprobe_1''​ для второго процесса ''​fprobe''​. Замените числа в параметре ''​NAME''​ и ''​DAEMON_OPTS''​ на нужные:​
  
-<file>+<code bash>
 NAME="​fprobe[1]"​ NAME="​fprobe[1]"​
 DAEMON_OPTS="​-l 1:1 -i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"​ DAEMON_OPTS="​-l 1:1 -i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"​
-</file>+</code>
  
 Кроме этого, измените код загрузки конфигурационного файла таким образом,​ чтобы он обращался к файлу fprobe_1. Вместо примерно следующего:​ Кроме этого, измените код загрузки конфигурационного файла таким образом,​ чтобы он обращался к файлу fprobe_1. Вместо примерно следующего:​
  
-<file>+<code bash>
 # Include fprobe defaults if available # Include fprobe defaults if available
 if [ -f /​etc/​default/​fprobe ] ; then if [ -f /​etc/​default/​fprobe ] ; then
         . /​etc/​default/​fprobe         . /​etc/​default/​fprobe
 fi fi
-</file>+</code>
  
 должно получится что-то вроде: должно получится что-то вроде:
  
-<file>+<code bash>
 # Include fprobe defaults if available # Include fprobe defaults if available
 if [ -f /​etc/​default/​fprobe_1 ] ; then if [ -f /​etc/​default/​fprobe_1 ] ; then
         . /​etc/​default/​fprobe_1         . /​etc/​default/​fprobe_1
 fi fi
-</file>+</code> 
 + 
 +Также в новых версиях Ubuntu в начале этого файла содержится специальный комментарий для системы загрузки. Он начинается со строчки 
 + 
 +<code bash> 
 +### BEGIN INIT INFO 
 +</​code>​ 
 + 
 +В этом комментарии также необходимо заменить строчку 
 + 
 +<code bash> 
 +# Provides: ​         fprobe 
 +</​code>​ 
 + 
 +на строчку 
 + 
 +<code bash> 
 +# Provides: ​         fprobe_1 
 +</code>
  
 Убедитесь,​ что всё работает,​ как надо. Для этого запустите оба ''​fprobe'',​ потом загляните в любой менеджер процессов (например,​ ''​htop''​) и найдите там оба демона. Убедитесь,​ что всё работает,​ как надо. Для этого запустите оба ''​fprobe'',​ потом загляните в любой менеджер процессов (например,​ ''​htop''​) и найдите там оба демона.
Строка 171: Строка 242:
 Если всё нормально,​ то добавьте второй демон ''​fprobe''​ в автозагрузку командой Если всё нормально,​ то добавьте второй демон ''​fprobe''​ в автозагрузку командой
  
-  ​sudo update-rc.d fprobe_1 defaults+<code bash> 
 +sudo update-rc.d fprobe_1 defaults 
 +</​code>​ 
 + 
 +Конечно,​ если вы пропишете запуск второго демона ''​fprobe''​ в ''/​etc/​network/​interfaces'',​ то добавлять его в автозагрузку не стоит.
  
 Таким образом можно запустить сколько угодно демонов ''​fprobe'',​ просто меняя идентификатор. Таким образом можно запустить сколько угодно демонов ''​fprobe'',​ просто меняя идентификатор.
Строка 183: Строка 258:
 Nfdump можно поставить через любой пакетный менеджер,​ например,​ командой Nfdump можно поставить через любой пакетный менеджер,​ например,​ командой
  
-  ​sudo apt-get install nfdump+<code bash> 
 +sudo apt-get install nfdump 
 +</​code>​
  
 Nfsen необходимо распаковать куда-нибудь на сервер из архива с исходными текстами и выполнить несколько несложных операций. Для начала необходимо поставить все нужные для работы пакеты:​ Nfsen необходимо распаковать куда-нибудь на сервер из архива с исходными текстами и выполнить несколько несложных операций. Для начала необходимо поставить все нужные для работы пакеты:​
  
-  ​sudo apt-get install apache2 libapache2-mod-php5 librrds-perl libmailtools-perl+<code bash> 
 +sudo apt-get install apache2 libapache2-mod-php5 librrds-perl libmailtools-perl 
 +</​code>​
  
 После этого зайти в папку ''​etc/''​ в директории,​ куда вы распаковали Nfsen, и переименовать находящийся там файл ''​nfsen-dist.conf''​ в ''​nfsen.conf''​. Это основной конфигурационный файл Nfsen. Его необходимо отредактировать под ваши нужды. Ниже приведены только опции, которые нужно изменить для базовой конфигурации Nfsen: После этого зайти в папку ''​etc/''​ в директории,​ куда вы распаковали Nfsen, и переименовать находящийся там файл ''​nfsen-dist.conf''​ в ''​nfsen.conf''​. Это основной конфигурационный файл Nfsen. Его необходимо отредактировать под ваши нужды. Ниже приведены только опции, которые нужно изменить для базовой конфигурации Nfsen:
  
-<file>+<code perl>
 # Директория,​ куда установится Nfsen. # Директория,​ куда установится Nfsen.
 $BASEDIR = "/​srv/​nfsen";​ $BASEDIR = "/​srv/​nfsen";​
 +# Если хотим веб-интерфейс поставить в ту же папочку,​ что и всё остальное
 +$HTMLDIR ​   = "​${BASEDIR}/​www";​
 +
 # Местоположение утилит Nfdump для Ubuntu и Debian # Местоположение утилит Nfdump для Ubuntu и Debian
 $PREFIX ​ = '/​usr/​bin';​ $PREFIX ​ = '/​usr/​bin';​
Строка 209: Строка 291:
   '​router2' ​   => { '​port'​ => '​9996',​ '​col'​ => '#​00ff00',​ '​type'​ => '​netflow'​ },   '​router2' ​   => { '​port'​ => '​9996',​ '​col'​ => '#​00ff00',​ '​type'​ => '​netflow'​ },
 ); );
-</file>+</code>
  
 Подробную документацию по доступным возможностям можно почитать на [[http://​nfsen.sourceforge.net/​|официальном сайте Nfsen]]. Подробную документацию по доступным возможностям можно почитать на [[http://​nfsen.sourceforge.net/​|официальном сайте Nfsen]].
 +
 +В Ubuntu 12.04 LTS с Perl 5.14 и nfsen 1.3.6p1 нет import Socket6.
 +В файлах "​libexec/​AbuseWhois.pm"​ и "​libexec/​Lookup.pm"​
 +заменить:​
 +<code perl>
 +use Socket6;
 +</​code>​
 +на
 +<code perl>
 +Socket6->​import(qw(pack_sockaddr_in6 unpack_sockaddr_in6 inet_pton getaddrinfo));​
 +</​code>​
  
 После редактирования конфига можно установить Nfsen. Для этого достаточно из директории,​ куда вы его распаковали,​ выполнить команду После редактирования конфига можно установить Nfsen. Для этого достаточно из директории,​ куда вы его распаковали,​ выполнить команду
  
-  ​./​install.pl etc/​nfsen.conf+<code bash> 
 +./​install.pl etc/​nfsen.conf 
 +</​code>​
  
 Всё, что осталось,​ это запустить Nfsen. В примере выше в качестве директории для установки Nfsen указан путь /​srv/​nfsen/​. В этом случае для запуска можно использовать команду Всё, что осталось,​ это запустить Nfsen. В примере выше в качестве директории для установки Nfsen указан путь /​srv/​nfsen/​. В этом случае для запуска можно использовать команду
  
-  ​/​srv/​nfsen/​bin/​nfsen start+<code bash> 
 +/​srv/​nfsen/​bin/​nfsen start 
 +</​code>​
  
 Чтобы интегрировать Nfsen в систему качестве автоматически запускаемого сервиса выполните две примерно такие команды:​ Чтобы интегрировать Nfsen в систему качестве автоматически запускаемого сервиса выполните две примерно такие команды:​
  
-  ​ln -s /​srv/​nfsen/​bin/​nfsen /​etc/​init.d/​nfsen +<code bash> 
-  update-rc.d nfsen defaults 20+ln -s /​srv/​nfsen/​bin/​nfsen /​etc/​init.d/​nfsen 
 +update-rc.d nfsen defaults 20 
 +</​code>​
  
 Теперь,​ если вы оставили настройки веб-сервера по умолчанию,​ веб-интерфейс должен быть доступен по адресу **%%http://​yourserver/​nfsen/​nfsen.php%%**. Теперь,​ если вы оставили настройки веб-сервера по умолчанию,​ веб-интерфейс должен быть доступен по адресу **%%http://​yourserver/​nfsen/​nfsen.php%%**.
Строка 230: Строка 329:
 <​note>​Учтите,​ информация начнёт собираться не сразу, так что необходимо некоторое время, перед тем, как на графиках что-то появится. Ну и конечно в сети должны быть сенсоры,​ посылающие информацию по указанным портам.</​note>​ <​note>​Учтите,​ информация начнёт собираться не сразу, так что необходимо некоторое время, перед тем, как на графиках что-то появится. Ну и конечно в сети должны быть сенсоры,​ посылающие информацию по указанным портам.</​note>​
  
 +Для мониторинга скорости соединения и трафика можно также использовать стандартный апплет панели cairo-dock - netspeed и популярное средство системного мониторинга conky. ​
 ===== Ссылки ===== ===== Ссылки =====