Логи нужно хранить за последние три года… анализировать трафик тоже приходится… Словом, без статистики не обойтись.
Вот, пытаемся сделать учет IPv6-трафика с использованием NetFlow. Стандартная схема: сенсоры — это роутеры Cisco, коллекторы работают под BSD или Debian.
В соответствии с «фирменной» документацией, поддержка Netflow для IPv6 появилась в версиях Cisco IOS, начиная с 12.2(33), правда в некоторых источниках упоминается, что на самом деле это началось с 12.4(20). То есть лучше всего заранее проверить, есть ли такая возможность в установлнных IOS-ах.
Итак, начинаем с 7206, версия 12.4(24). Вообще-то там была 12.4(15), но по совету друзей мы сделали апгрейд.
Набор команд, которыми нужно пользоваться, не так уж и велик:
ipv6 cef # (без этого не работает NetFlow)
ipv6 flow-export version 9 # в 5й версии нет IPv6
ipv6 flow-export destination 192.168.123.45 9876 # (аналогично 4й версии протокола)
Вся прелесть — в последней команде: можно отправлять v4 и v6 трафик на один коллектор, но на разные порты, чтобы складывать его в разные файлы — это очень удобно для анализа, особенно в начале работы. А также можно отправлять коллектору статистику раздельно: используя NetFlow5 для IPv4 и NetFlow9 для IPv6, что мы и сделали. А еще прикольно то, что отправка статистики по IPv6 осуществляется только на IPv4-адрес коллектора. Без вариантов!
Кстати, команда ipv6 flow-export version 9
в конфигурационном файле не появилась, так как 9 версия используется по-умолчанию.
Ну, и на нужных интерфейсах следует дать команды
ipv6 flow ingress
ipv6 flow egress
или одну, или обе — вопрос вашей схемы учета.
Затем можно наблюдать за результатами: для начала убеждаемся, что статистика по IPv4 продолжает отправляться, а затем смотрим, идет ли процесс сбора статистики по IPv6.
gw-0#sh ipv6 flow export
(Показать результат) Судя по всему, процесс идет. Смотрим дальше:
gw-0#sh ipv6 flow cache
…и много-много строк…
Ура! Процесс пошел! Можно переходить к коллектору!
Сейчас (2012г.) сбор данных IPv4-NetFlow5 идет на машине под ОС FreeBSD при помощи пакета flow-tools. Пакет хороший, стабильно работающий, но очень старый, и разработчики давным-давно перестали обновлять его. Начинаем искать замену.
Наибольшее число положительных отзывов приходится на пакет flowd. С нашей точки зрения, у него есть несомненные плюсы:
Устанавливаем его. В конфигурационном файле достаточно прописать два вида параметров:
Путь к файлу должен существовать, так как пакет не умеет его создавать. И, естественно, flowd должен иметь право записи в этом месте.
Перед запуском при помощи tcpdump убеждаемся, что пакеты со статистикой поступают на машину:
tcpdump -n -i em0 port 9876
Вроде работает, пакеты прилетают. Запускаем flowd:
/usr/local/sbin/flowd -f <path_to_config_file>
Для отладки есть два ключа: -d (генерировать вспомогательную информацию) и -g (не переходить в фоновый режим).
ОК, файл со статистикой появился и начал расти.
В отличие от flow-tools здесь нет «естественного» механизма ротации файлов, но в мануале сказано, что при получении сигнала SIGUSR1 происходит закрытие файла с логом и открытие его заново. Это свойство позволяет написать несложный скрипт, который осуществляет ротацию файлов. Вообще-то, достаточно трех строк:
DATE=date +%Y%m%d%-H%M%S
mv /opt/netflow6/gw-core/ipv6-flow /opt/netflow6/gw-core/$DATE-ipv6-flow
kill -SIGUSR1 cat /var/run/flowd.pid
Осталось только сделать вызов такого скрипта из cron с заданным интервалом. По аналогии с flow-tools делаем интервал равным 15 мин.
Просматриваем файлы, очень любопытно, что в них. Оказалось, что практически весь трафик — это ICMP-пакеты и DNS запросы и ответы. Интересно, когда появится первое обращение к www-серверу?
Обьединить файлы со статистикой за одни сутки очень просто. Поскольку они имеют вид filename-yyyymmddhhmmss, то достаточно такой команды:
flowd-reader -q -o ./daily/daily-yyyymmdd filename-yyyymmdd*
(ключ -о задает результирующий файл)
после чего исходные файлы можно удалить
rm filename-yyyymmdd*
Поработаем с суточным файлом, для чего переходим в ./daily и для начала экспортируем в ascii-вид:
flowd-reader daily-yyyymmdd > daily-yyyymmdd.txt
Разумеется, комбинацию yyyymmdd следует заменить на реальные данные.
Для начала — самое любопытное: смотрим, были ли (вообще) обращения к веб-серверам:
grep «]:80 » daily-yyyymmdd.txt
Увы, пока не было. А вот
grep «]:25 » daily-yyyymmdd.txt
показывает, что почтовый обмен (точнее — его попытки) были, и не одна. При рассмотрении почтовых логов выяснилось, что нас пытались посетить несколько спамеров (и были отсеяны еще на сетевом уровне), а пара нормальных почтовых сессий была отвергнута по причине отсутствия реверсных записей IPv6 у почтовиков. То есть кто-то настроил почтовик (и ОС, под которой он работает) для работы с IPv6, а созданием реверсной записи не удосужился. Вот, почта и не пошла..
Итоги: 18 апреля 2011 года нас навестил первый IPv6-спамер.
Второй коллектор был собран с использованием nfdump. Весь пакет состоит из шести утилит для сбора, фильтрации, ретрансляции и чтения-конвертации данных.
Утилита-коллектор называется nfcapd и запускается с такими параметрами:
-p
-n
-S
-t
-T сохранять расширеннй набор данных в файлах (или наоборот сократить его)
-w закрывать файлы по границе 5 минут (то есть 30-минутные файлы будут сохраняться в 00 и 30 минут каждого часа)
-D работать в фоновом режиме
-x запускать скрипт по событию закрытия файла
Есть много других ключей, см.официальную документацию. Коллектор по умолчанию слушает данные по IPv4 (именно слушает, а сохраняет ВСЕ, что приходят от сенсора, независимо от протокола)
Пример:
nfcapd -p 5432 -n ROUTER1 192.168.123.45 /opt/flow/v6/ROUTER1
-n ROUTER2 172.16.213.245 /opt/flow/v6/ROUTER2
-S 1 -t 900 -T -1,-2 -w -D
-x "/scripts/convert_data.sh %d %f"
Здесь коллектор принимает данные по UDP:5432 от двух сенсоров ROUTER1 ROUTER2 с указанными адресами и складывает файлы в соответствующие ПОДДИРЕКТОРИИ приведенных директорий. Код формата -S 1
- это %Y/%m/%d year/month/day
, то есть иерархия поддиректорий будет год-месяц-день, файлы формируются каждые 15 минут (-t 900), в файлы не будут сохраняться данные об интерфейсах коллектора и номера AS (-T -1, -2), файлы будут формироваться в 00 15 30 и 45 минут каждого часа, всё будет работать в фоновом режиме, а по закрытию очередного файла будет запускаться скрипт convert_data.sh, которому передадутся параметры - директория где этот файл и имя файла. Данный скрипт может использоваться, например, для отправки письма о нормальной работе коллектора, или для поиска аномалий в свежем файле, или для сбора текущей статистики.
Вторая полезная утилита в этом пакете - это nfdump, которая преобразует двоичные файлы в текстовый вид и имеет очень богатый выбор настроек для фильтрации, построения статистики и форматирования вывода. Но на этом экране слишком мало места, чтобы описать её возможности.
(впервые написано в 2012 году, изменено и дополнено в 2024)
А как обстоит дело сейчас, в 2024 году?
Ну, в новых версиях всё стало немного по-другому