Mikrotik find

Всем привет! В сегодняшней статье расскажем о том, как настроить отправку статистики о пакетах, проходящих через наш роутер Mikrotik на коллектор для дальнейшего анализа. Все мы знаем про такой протокол как Netflow, предназначенный для учёта сетевого трафика, разработанный компанией Cisco, так вот у Mikrotik есть своя реализация данного решения, которая полностью совместима со стандартом Cisco Netflow — Mikrotik Traffic Flow.

Помимо мониторинга и анализа трафика, с помощью Traffic Flow, администратор может выявлять различные проблемы, которые могут появляться в сети, а также анализировать и оптимизировать общие сетевые характеристики.

Поскольку Traffic Flow полностью совместим с Cisco Netflow, то он может использоваться различными утилитами, которые разработаны для Netflow.

Traffic Flow поддерживает следующие версии Netflow:

  1. version 1 — Самая первая версия формата данных Netflow. Рекомендуется использовать только если нет альтернатив
  2. version 5 — Дополнение первой версии, которой появилась возможность добавления номеров автономных систем (AS) BGP и порядковых номеров потоков
  3. version 9 — новая версия, позволяющая добавлять новые поля и типы записей благодаря шаблонному исполнению

Настройка

Итак, для того, чтобы начать собирать статистическую информацию о трафике, необходимо сначала включить Traffic Flow и определиться с каких интерфейсов осуществлять сбор. Делается это при помощи комбинации следующих команд:

/ip traffic-flow set enabled=yes interfaces=ether1

В нашем случае, указан лишь один интерфейс ether1, однако, если вы хотите собирать статистику с нескольких интерфейсов, просто укажите их через запятую. Если со всех — интерфейсов введите interfaces=all.

Вы также можете настроить количество потоков, которые могут одновременно находиться в памяти роутера командой cache-entries и указав нужное значение — (128k | 16k | 1k | 256k | 2k / 4k — по умолчанию)

Командой active-flow-timeout — можно настроить максимальное время жизни потока, по умолчанию это 30 минут.

Некоторые потоки, могут стать неактивными через какое-то время, то есть, в них не будет происходить обмен пакетами, этот тайм-аут настраивается командой inactive-flow-timeout. Если пакетов в потоке нет и данное время истекло, то в следующий раз traffic flow создаст новый поток, если обмен возобновится. По умолчанию это 15 секунд, но если сделать данное время слишком коротким, то это может привести к созданию большого количества отдельных поток и переполнению буфера.

После того как мы включили Traffic Flow и определились с интерфейсами, с которых хотим получать информацию о потоках, необходимо настроить хост назначения, который будет получать данную информацию (в терминологии Netflow такой хост называется коллектором). Делается это при помощи следующей команды

ip traffic-flow target

Затем указывается IP адрес и UDP порт хоста назначения -add dst-address=(IP address) port=(UDP port). Если вы хотите использовать конкретную версию протокола, то укажите ее командой version= (1,5,9)

Пример

Рассмотрим пример конфигурации Traffic Flow на роутере Mikrotik

Допустим мы хотим собирать статическую информацию о трафике, который проходит через интерфейс ether3 нашего роутера и отправлять её на коллектор по адресу 192.168.2.123 используя 5 версию протокола. В этом случае конфигурация может выглядеть следующим образом:

Сначала включаем Traffic Flow и указываем интерфейс

/ip traffic-flow set enabled=yes interfaces=ether3

Затем указываем адрес коллектора, стандартный порт и версию протокола 5:

/ip traffic-flow target add dst-address=192.168.2.123 port=2055 version=5

Если Вы предпочитаете консоли утилиту WinBox, то для настройки Traffic Flow левом меню откройте пункт IP и выберите Traffic Flow, перед Вами откроется следующее окно:

Необходимо включить Traffic Flow, поставив галочку напротив Enabled и выбрать желаемый интерфейс для сбора информации.

После этого переходим на вкладку Targets и добавляем параметры коллектора, достаточно внести IP адрес, порт и версию. После этого нажимаем на кнопку Apply

После этого наш роутер начнет отправлять информацию на коллектор. Если вы хотите указать несколько коллекторов, то это можно сделать, используя разные версии протокола и номера UDP портов.

Почему?

😪Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.

😍Полезные IT – статьи от экспертов раз в неделю у вас в почте. Укажите свою дату рождения и мы не забудем поздравить вас.

Подборка для вас

Предисловие

Когда-то давно, в далекой далекой галактике… Хотя если подумать, это было всего то 15 лет назад.
В общем были времена, когда в качестве центрального шлюза в сеть Интернет использовались решения на базе FreeBSD и Linux. И были эти решения любовно настроены, и обвешивались они всеми возможными и невозможными функциями (от межсетевого экрана и VPN серверов до TFTP+PXE-сервисов бездисковой загрузки)… и не было беды, и все было хорошо…
Но времена меняются, появляются новые решения, появляются компании, которые «дешево и сердито» готовят ядро Linux, обвешивают необходимым функционалом и продают это за весьма скромные деньги (сопоставимые со стоимостью аппаратной части).
Примером таких решения является компания Mikrotik и ее одноименные решения.

Текущие реалии

Итого текущая ситуация – купить и поставить Mikrotik в организацию, в которой от 10 до 5000 компьютеров, быстрее и экономичнее, чем брать «очередной системник» и собирать шлюз по частям (сетевухи, софт, сервисы и т.д.).
При этом задачи учета трафика как были, так и остаются. И тут на помощь приходит рядом стоящий сервер (обычно это NAS на базе Linux или FreeBSD).
Учет WEB-трафика прост и понятен – связка Squid + LightSquid позволяет просто и быстро собирать и агрегировать информации о том, кто какие сайты посещает, какие файлы качает и сколько в Youtube-е зависает. При необходимости можно и ограничить сайты, время и т.д. Простое, удобное решение, проверенное годами. В Mikrotik делается одно правило, выпускающее IP прокси-сервера в интернет. И все счастливы.
Но вот проблема – не все успешно проходит через Squid. Есть банк-клиенты, написанные без поддержки HTTP и Socks прокси. Есть сложные программы, которые для разных типов трафика используют разные соединения – итог – либо плохо работают через Proxy, либо вообще не работают. А есть отдельная категория так называемых VIP-персон… которым проще дать «Full NAT», чем обострять отношения, когда «что-то у них не открывается».
Таким образом, в Mikrotik рано или поздно, но будут появляться отдельные правила, выпускающие «особенных» напрямую через NAT, минуя прокси-сервер. И их трафик мы в статистике уже не видим.
Решение по учету такого трафика напрашивается следующее:

  • Включить на внешнем интерфейсе Mikrotik захват NetFlow статистики;
  • Отправка этой статистики в NAS (например, в службу flow-tools, через flow-capture)

Для удобного анализа получаемых на NAS-сервере файлов, данное решение предлагается улучшить с помощью пары самописных скриптов:

  • Perl-скрипт, который будет обрабатывать ft-файлы, и загружать информацию в СУБД MySQL;
  • PHP-скрипт, который будет выполнять роль преднастроенного UI, для удобного анализа NetFlow-данных.

Настройка Mikrotik

Все просто и по документации:
/ip traffic-flow set enabled=yes interfaces=WAN /ip traffic-flow target add dst-address=<NAS IP Address> port=8787 v9-template-timeout=1m version=5

Настройка Flow-Tools на примере FreeBSD

# Установка NetFlow сенсора: pkg install flow-tools # Настройка запуска: echo ‘flow_capture_enable=»YES»‘ >> /etc/rc.conf.local echo ‘flow_capture_flags=»-N-2″‘ >> /etc/rc.conf.local # Запуск: service flow_capture start

Установка и подготовка СУБД MySQL для импорта NetFlow данных

# Установим, запустим и настроим MySQL сервер: pkg install mysql56-server # Запуск службы echo ‘mysql_enable=»YES»‘ >> /etc/rc.conf service mysql start # Начальная настройка СУБД: mysql_secure_installation # Установим Perl-модули для работы скрипта с СУБД: pkg install p5-DBI p5-DBD-mysql # Входим в СУБД и создаем базу и пользователя для работы с ней: mysql -u root -p
# Создаем СУБД и пользователя:
mysql> create database netflow; mysql> grant insert,create,update,select,delete on netflow.* to nfuser@’localhost’ identified by ‘987654321’; mysql> flush privileges; mysql> exit;

Perl-скрипт для анализа ft-* файлов статистики NetFlow и загрузки данных в MySQL

Скрипт был написан не с нуля – когда то давно, в 2005-м году на сайте OpenNET была выложена статья () о подсчете трафика на шлюзе FreeBSD с использованием NetGraph модуля ng_ipacct.
Скрипт загрузки был взят за основу и переписан на использование с NetFlow и flow-tools. Работает как на FreeBSD, так и на Linux (только пути переписать до программ flow-cat и flow-print).
Особенности скрипта – данный вариант предназначен для анализа всех ft-* файлов за прошедшие сутки и их загрузки в базу (построчно). При этом реализовано исключение строк по нескольким шаблонам, чтобы не грузить в MySQL избыточную информацию (например, исключить широковещательный трафик, трафик DNS-запросов, трафик с HTTP/Socks прокси (благо статистика по прокси есть в другом месте). По моим замерам, исключение позволяет сократить количество загружаемых в СУБД строк в 10, а то и в 20-30 раз.
Таблицы в СУБД создаются автоматически с началом нового месяца. К стандартному NetFlow v5 формату добавляется день, время записи (используется время создаваемых ft-файлов – например, каждые 15 минут), также указывается имя источника NetFlow и имя сетевого интерфейса.

PHP UI для упрощенного построения SQL-запросов

В далеком 2005-м, когда использовались Perl-скрипты автора, для анализа данных в MySQL мы использовали SQL команды… и все всех устраивало.
Но рано или поздно настал момент, когда вводить запросы надоело. И, собравшись с мыслями, был написал небольшой PHP-код, который позволял проводить построение SQL-запросов более быстрым и простым способом.
Внешний вид:

Что позволяет сделать скрипт:

  1. Производить SQL-запросы, видеть сам итоговый запрос и его результат в табличной форме;
  2. Видеть сумму трафика NetFlow за любой месяц;
  3. Группировать трафик по одному показателю (SourceIP, SourcePort, DestIP, DestPort, Proto, Date);
  4. Видеть количество строк вместо суммы (как за месяц так и с группировкой по одному признаку);
  5. Фильтровать по объему трафика;
  6. Видеть сами записи вместо суммы трафика;
  7. Запрашивать указанное количество записей из базы (например, для дальнейшего copy/paste в Excel).

PS: Владелец файла netflow.php должен быть пользователь Web-сервера (например, Apache).
PSS: Доступ к СУБД указан в файле netflow.php явно – так что измените под себя.

Обслуживание MySQL таблиц

Если таблицы получаются довольно большие (хотя никто Вам не мешает грузить в СУБД только то, что Вам нужно, исключая «шлак» и уменьшая размер), то есть интересный прием, позволяющий существенно уменьшить размер СУБД. Речь идет об использовании компрессии БД в формате MyISAM, а также об оптимизации индекса.
Для автоматического выполнения этих процедур был написан еще один Perl-скрипт, который первого числа каждого нового месяца запускается через Cron:

  • Ремонтирует таблицу на всякий случай (вдруг были некорректные отключения службы и MyISAM содержит ошибки);
  • Переименовывает таблицу, добавляя в конце символ c (от слова compressed);
  • Выполняет программы myisamchk и myisampack, которые сжимают БД и строят новый и отсортированный индекс для сжатой таблицы.

Итого после выполнения скрипта данная таблица станет ReadOnly, будет сжата (размер уменьшиться раза в 3), и будет построен новый отсортированный и оптимизированный индекс. Запросы в такую таблицу будут выполняться быстрее.

Резюме

Все скрипты можно скачать по .
Update1: Доработал скрипт netflow.php — для работы с PHP версии 7.x:

В этой статье рассмотрим возможность получения данных о трафике клиентов подключенных к Mikrotik, данные о трафике будут получаться по NetFlow протоколу.
В статье использовалось устройство Mikrotik mAP lite. Также необходимо скачать следующие файлы.
Список файлов:
1. snakeFlow.py — это NetFlow коллектор написанный на языке программирования python, то есть программа которая принимает и обрабатывает данные о трафике клиентов;
2. configure.txt — файл конфигурации;
3. log.txt — файл, куда могут писаться данные о трафике.

Рис. 1. Получение конфигурационных данных.

На рисунке 1 отображена часть кода, отвечающая за получение конфигурационных данных. Первым делом отредактируем строку file = open(‘configure.txt’, ‘r’) указав верный путь к конфигурационному файлу. Далее нас интересуют параметры вывода данных

Для демонстрации работы, был выбран способ write:terminal

В итоге мой конфигурационный фай выглядит
write:terminal — способ вывода данных;
ip=192.168.88.254,port=1234, — IP адрес и порт на котором будет запущен NetFlow коллектор;
host=localhost user=root passwd=pass db=test — подключение к базе данных (не используется).

Рис. 2. Включаем NetFlow в Mikrotik.

Для того чтобы данные передавались NetFlow коллектору, переходим в пункт меню IP / Traffic Flow и устанавливаем в Enabled. При необходимости можно выбрать для каких интерфейсов собирать статистику (Interfaces).

Рис. 3. Параметры трафика.

Можно выбрать, какие данные о трафике необходимо собирать.

Рис. 4. Кнопка «Targets”.

Кликнув по кнопке «Targets” можно добавлять NetFlow коллекторы, на которые будут отправляться данные.

В поле Dst. Address указываем адрес хоста на котором запущен коллектор. Port указываем порт на котором принимаются данные. Version версия протокола.

Рис. 5. Отображение данных о трафике.

Запускаем коллектор командой sudo python snakeFlow.py: в зависимости от интенсивности пользования интернетом клиентами, в терминале будут отображаться данные о том, от кого и куда передаются пакеты данных.

Вас может заинтересовать

714 грн 25 у.е. Купить

Если Вы нашли ошибку в тексте, то выделите ее мышкой и нажмите Ctrl + Enter или .

Большое спасибо за Вашу помощь! Мы скоро исправим ошибку!

Сообщение не было отправлено. Пожалуйста, попробуйте еще раз.

Сообщение об ошибке

Ошибка: