0

mikrotik

Mikrotik – сбор и анализ NetFlow трафика

12.02.2021

Предисловие

Когда-то давно, в далекой далекой галактике… Хотя если подумать, это было всего то 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

# Создаем СУБД и пользователя:

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: ссылка

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

2 2.2K views

ПЕРЕХВАТ ПАКЕТОВ НА MIKROTIK

Привет, Мир! Сейчас расскажем об одном полезном методе траблшутинга и поиска проблем на роутерах MikroTik. Суть данного метода заключается в том, чтобы отлавливать
Previous Story

8 инструментов для успеха DevOps

mikrotik
Next Story

Как ловить широковещательный флуд на MikroTik устройствах

Latest from Blog

Настройка простого беспроводного репитера на устройстве MikroTik

При развертывании беспроводных сетей достаточно часто возникают ситуации, когда в некоторых местах квартиры или офиса мощность Wi-Fi сигнала недостаточна для уверенной работы. Конечно, наиболее действенным решением является создание централизованно управляемой сети и

Настройка и использование Redis

В этой статье мы расскажем что такое Redis, его преимущества и для каких целей он используется. Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа “ключ” — “значение” с открытым исходным кодом. По сути Redis представляет собой базу данных

Настройка и использование Memcached

В статье мы расскажем, что такое Memcache, зачем он нужен и как он влияет на работу некоторых популярных CMS. Кеширование данных – немаловажный момент в работе любого веб-проекта. С ростом посещаемости увеличиваются требования к

Как настроить логирование и ротацию логов Nginx

Вовремя настроенное журналирование позволяет в дальнейшем избежать неожиданных проблем с веб-сервером. Информация, хранящаяся в логах (или журналах) сервера, помогает быстро оценить ситуацию и устранить ошибки. В этой статье мы рассмотрим возможности логирования

Распределение выполнения запросов внутри приватной сети VPS через HAProxy

Приватную сеть можно использовать для распределения выполнения загрузки и балансировки запросов между несколькими серверами. Рассмотрим организацию такой балансировки на примере HAProxy – бесплатного ПО, предназначенного для распределения нагрузки и организации проксирования TCP-пакетов между несколькими обслуживающими
Go toTop

Don't Miss

mikrotik

Настраиваем Honeypot на роутерах Mikrotik

Современный интернет такое место, где вы сразу же становитесь предметом
mikrotik

Настройка черного и белого списков в роутерах Mikrotik

Ограничение доступа к тем или иным ресурсам сети интернет на