Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:мониторинг_трафика [2011/02/23 20:47] [Сенсор fprobe] |
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'', а то в какой-то момент у вас может закончиться место на диске. | ||
Подробней про управление записью журнала можно почитать в документации по rsyslog. | Подробней про управление записью журнала можно почитать в документации по rsyslog. | ||
+ | |||
+ | ===== Утилиты Vnstat и Vnstati ===== | ||
+ | |||
+ | Vnstat это очень простой инструмент для учёта трафика. Он есть в репозиториях Ubuntu, так что установка не вызывает сложностей. Vnstat не требует тонкой настройки, просто считает трафик и позволяет просматривать статистику. Для обычного пользователя этого чаще всего более чем достаточно. | ||
+ | |||
+ | Чтобы начать подсчёт трафика надо выполнить команду, которая создаст базу данных для указанного интерфейса: | ||
+ | |||
+ | <code bash> | ||
+ | sudo vnstat -u -i eth0 | ||
+ | </code> | ||
+ | |||
+ | Подсчёт трафика происходит автоматически, база данных обновляется при выключении сетевого устройства. Но есть возможность обновить базу вручную: | ||
+ | |||
+ | <code bash> | ||
+ | sudo vnstat -u | ||
+ | </code> | ||
+ | |||
+ | Для просмотра статистики достаточно просто ввести: | ||
+ | |||
+ | <code bash> | ||
+ | vnstat | ||
+ | </code> | ||
+ | | ||
+ | Также можно использовать ключи: | ||
+ | |||
+ | <file> | ||
+ | -h, --hours по часам | ||
+ | -d, --days за день | ||
+ | -m, --months за месяц | ||
+ | -w, --weeks за неделю | ||
+ | -t, --top10 top10 | ||
+ | -s, --short короткий вывод | ||
+ | -l, --live мониторинг в реальном времени | ||
+ | </file> | ||
+ | | ||
+ | Vnstati это утилита для визуализации статистики, с ней тоже все просто. Вот, например, короткий скрипт, который выводит на экран статистику в виде картинки: | ||
+ | |||
+ | <code bash> | ||
+ | #! /bin/bash | ||
+ | |||
+ | vnstat -u | ||
+ | vnstati -vs -o ~/vnstati.png | ||
+ | eog ~/vnstati.png | ||
+ | </code> | ||
+ | |||
+ | Обе утилиты имеют еще некоторые возможности, не забывайте про ключ %%--help%% и утилиту man! | ||
===== Netflow - мониторинг с ведением статистики ===== | ===== Netflow - мониторинг с ведением статистики ===== | ||
Строка 60: | Строка 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'' (чтобы слушать несколько интерфейсов), то придётся немного изменить стартовые скрипты. | ||
Строка 68: | Строка 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'' соответствующего стартового скрипта. | ||
Строка 94: | Строка 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'' для работы со вторым интерфейсом. | ||
Строка 104: | Строка 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'') и найдите там оба демона. | ||
Строка 131: | Строка 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'', просто меняя идентификатор. | ||
Строка 143: | Строка 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'; | ||
Строка 169: | Строка 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%%**. | ||
Строка 190: | Строка 329: | ||
<note>Учтите, информация начнёт собираться не сразу, так что необходимо некоторое время, перед тем, как на графиках что-то появится. Ну и конечно в сети должны быть сенсоры, посылающие информацию по указанным портам.</note> | <note>Учтите, информация начнёт собираться не сразу, так что необходимо некоторое время, перед тем, как на графиках что-то появится. Ну и конечно в сети должны быть сенсоры, посылающие информацию по указанным портам.</note> | ||
+ | Для мониторинга скорости соединения и трафика можно также использовать стандартный апплет панели cairo-dock - netspeed и популярное средство системного мониторинга conky. | ||
===== Ссылки ===== | ===== Ссылки ===== | ||