Конфигурирование NetFlow для IPv6

Логи нужно хранить за последние три года… анализировать трафик тоже приходится... Словом, без статистики не обойтись.

Вот, пытаемся сделать учет **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

(Показать результат) ...и много-много строк...

Ура! Процесс пошел! Можно переходить к коллектору!

Настройка второго сенсора.

А тут подстерегала неудача — несмотря на IOS 12.4(24), команд для конфигурирования NetFlow для IPv6 там не оказалось. Будем разбираться..

Настройка первого коллектора.

Сейчас сбор данных IPv4-NetFlow5 идет на машине под ОС FreeBSD при помощи пакета flow-tools. Пакет хороший, стабильно работающий, но очень старый, и разработчики давным-давно перестали обновлять его. Начинаем искать замену.

Наибольшее число положительных отзывов приходится на пакет flowd. С нашей точки зрения, у него есть несомненные плюсы:

Устанавливаем его. В конфигурационном файле нужно прописать ip-адреса и порты, с которых будет приниматься трафик, а также путь к файлу, куда будет записываться статистика. Кстати, директории на пути к файлу должны существовать, так как пакет не умеет создавать их. И, естественно, 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-спамер.

Для удобства написали несложный скрипт (фактически состоящий из нескольких совсем простых скриптов), чтобы автоматически обьединять мелкие дневные flow-файлы в один большой, вычислять суммарный входящий и исходящий IPv6-трафик и отправлять результат по почте. Скрипт вызывается из cron после часа ночи, а утром мы видим результат.

Первая часть: нужно только скорректировать пути к директориям с файлами в первых строках. И — обрабатываются файлы за предыдущий день! После успешной обработки исходные файлы удаляются, а в директории с исходными файлами в поддиректории summ появитсся файл вида 20110423-summ, то есть файл с данными за 23 апреля 2011г.

Следующий фрагмент служит для вычисления суммарного входящего и исходящего IPv6-трафика (предполагается, что файл с дневной статистикой уже сформирован).

Для этого нужно добавить еще один файл с названием stat.awk с таким содержимым (всего три строчки):

$13 ~ /[2001:0db8/ {totalout+=$19}
$15 ~ /[2001:0db8/ {totalin+=$19}
END { print "Total bytes in: ", totalin; print "Total bytes out: ", totalout; }

Нужно заменить 2001:0db8 на фактический префикс, любой (!) длины, но только по 4-битной границе.

Затем нужно выполнить вот этот скрипт:

(Показать файл)

Тут все очевидно. Берется файл-результат работы предыдущего скрипта, экспортируется в текстовый формат, затем применяется awk-скрипт. Результат отправляется по почте.

Обе части Perl-скриптов легко обьединяются. Полагаю, что добавить файл на awk, состоящий из 3 строчек, также не составит труда.

И вот результат — сейчас у нас за сутки (апрель 2011г.) проходит 50Мбайт входящего IPv6-трафика, и 15Мбайт исходящего. И это на фоне террабайтного IPv4….

Дополнение от 12.02.2012

Вот небольшой скрипт, который парсит логи веб-сервера и выдает статистику по посещаемости с IPv6-адресов.

Написан на Великом и Могучем AWK (помещается в файл v6log.awk):

BEGIN {i=0}
$0 ~ /^[23][a-h0-9]*:/ {
v6[$1]++ }
END { for (word in v6)
print ++ii,v6[word],word «\n» }

А вызывается он так:

awk -f v6log.awk access

Скрипт выдает кол-во IPv6-адресов, попавших в логи, кол-во обращений с каждого адреса и сам адрес. Проверено, работает. Скрипт должен иметь право читать логи веб-сервера, считаем, что файл с логом называется access.

У нас сейчас (апрель 2011г.) наблюдается посещение с 1-2 уникальных IPv6-адресов в день.

Еще проще посмотреть то же самое в логах почтовой машины, у нас это Postfix. Например так:

grep -E ‘[[23][a-h0-9]*:’ maillog | grep disconnect

а если хочется посчитать число таких обращений, то нужно добавить wc -l в конце строки:

grep -E ‘[[23][a-h0-9]*:’ maillog | grep disconnect| wc -l

Опять-таки скрипт должен иметь право читать файл с логом «почтовика», и предполагаем, что этот файл называется maillog. Проверено, работает.

Ваш IP

Этот адрес отвечает на пинги

ASN в России