Статья обновлена 14.11.11. Задача: собрать сервер для анализа IP трафика в сети. Иметь возможность вылавливать и анализировать NetFlow v5/v7/v9 статистику с Cisco-маршрутизатора/маршрутизирующего коммутатора внутри LAN.
Необходимость возникла из-за незнания "предпочтений" пользователей, и невозможности регулировать аппетиты "топперов" без диаграмм загрузки сети определёнными хостами. До этого была настроена flow-tools+flowscan+cflowd статистика, которая ловила mirror (SPAN-порт) с главного маршрутизатора и превращала всё в NetFlow анализируемые пакеты, но захотелось опробовать стандарт-де-факто для IP - Cisco NetFlow.
Ожидаемый результат: с помощью данного решения есть возможность без особых трудностей и напряжения серого вещества, да ещё и доступными средствами, собирать и анализировать статистику сети на простейшем оборудовании (любой свитч с mirroring'ом всех портов на один), и строить наглядные графики и таблички "кто-откуда, когда и сколько" и главное БЕСПЛАТНО, доступными инструментами. Однако, это решение не позволит вам без доп.знаний СОХРАНЯТЬ статистику. Если вам нужно импортировать данные, нужно будет написать скрипты (поддерживается импорт в perl,php и прочее) либо использовать другое решение. Данная система отображает текущее состояние нагрузки сети, а история в таблицах будет жить только до первого перезапуска. Сохраняются только графики RRD-tool. Мне больше от неё и не надо было, т.к. остальное делает вышеуказанная связка flow-tools+flowscan (где посмотреть:1 и 2).
Решение не абсолютное, и использованию подлежит лишь в тех случаях, когда сетевой отдел либо единица управления сетью (в виде ленивого админа) не располагает средствами для покупки как дорогих программных, так и аппаратных решений для анализа трафика и ему нужны графические красивые отчёты для шефа. Структура реализации: Cisco коммутатор/маршрутизатор ядра, посылающий NetFlow трафик трафик сети на выделенный сервер с предустановленной ОС FreeBSD и утилитой ntop.
О ntop и его модулях далее пойдёт речь. Данная статья рассчитана на начинающих администраторов. Принимаются конструктивы и замечания по ошибкам. Описания настройки Ntop под FreeBSD в сети до сих пор на русском я не видел. То, что здесь описано, у меня работает. _________________________________________ Оф. сайт программы - http://www.ntop.org/ ntop - это мощный и детально конфигурируемый инструмент для мониторинга сетей и выявления неполадок, а так же превышений использования канала, перегрузок. Распространяется свободно по лицензии GPL, v2 (и поздние). Возможно управление из командной строки, а так же использование встроенного веб-сервера (умеет ssl). ntop использует libcap (т.е. сильно грузит CPU для обработки трафика), так что заранее выбирайте сервер помощнее (мой был P4 D 3GHz, 3200MB RAM).
* Сортировка трафика по протоколам (IP: TCP, UDP, ICMP; GRE, IPSEC и др.) * Возможность сортировки данных о трафике по множеству критериев * Отображение сетевой статистики (данные о трафике) * Хранение данных в формате RRD (Round Robin Tool) - это единственный встроенный способ _сохранять_ данные ntop * Распознавание особенностей (напр. почтовые адреса) пользователей * Пассивное (т.е. без посылки пакетов-запросов) распознавание типов ОС компьютеров * Отображение распределения IP трафика по протоколам * Анализ IP трафика и сортировка по источнику/месту назначения * Отображение структуры (сеть/маска) и направления IP трафика в виде схем (кто с кем обменивается?) * Возможность работы в режиме NetFlow/sFlow коллектора для приёма потоков, генерируемых роутерами (Cisco, Juniper) или коммутаторами (Foundry Networks) * Генерация статистики обмена сетевым трафиком в RMON-подобном формате.
Установку будем производить из портов, как все лентяи. Символ \ по ходу лирики - переход на следующую строку (для самых внимательных), объединяйте весь текст в одну при копировании.
Если не обновляли давно порты:
portsnap fetch update
далее, после муторного ожидания ищем пакет ntop:
whereis ntop
ntop: /usr/ports/net/ntop
Идём в директорию и собираем пакет, но не делайте make clean! Нам кое-что понадобится из исходников.
cd /usr/ports/net/ntop && make install
[X] LOCALE Enable locale (i18n) support. (поддержка интернациализации)
[X] PCAP_PORT Use libpcap from ports. (используем libcap из портов)
[ ] XMLDUMP Enable XML Dump support. (не собирается :( )
[ ] ASDATA Install AS data. (show traffic by Autonomous System Number,
# жрёт доп. память для обработки заголовков об AS,
# если вы не провайдер и у вас одна локальная сеть - не отмечайте)
[X] TCPWRAPPER Enable TCP wrapper support
После установки, идём в /usr/ports/net/ntop/work/ntop-4.10/packages/FreeBSD-ports/net/ntop/files и достаём оттуда sample-config (ntop.conf.sample):
И меняем права на файл, а то он какой-то исполняемый, что не есть правильно:
chmod -x /usr/local/etc/ntop/ntop.conf
Теперь необходимо проделать операцию создания каталога для хранения данных ntop. Для этого необходимо создать пользователя (используйте интерактивный # adduser) с ограниченными правами и доступом к выбранной вами папки. У меня он такой:
Правим конфигурационный файл ntop на своё усмотрение, приведу свой конфиг:
cat /usr/local/etc/ntop/ntop.conf
--user ntop # под кем запускать демон
--db-file-path /data/netflow/ntop_db # путь к БД
# на каком сетевом интерфейсе слушать (сюда приходит весь NetFlow-трафик)
--interface rl0
#если интерфейсов больше, перечисление через запятую: --interface rl0,rl1,rl2
# патч для FreeBSD в 4.10 не работает, выдаёт ошибку, отключаем - комментируем.
# отключить "доверие" MAC-адресам, в случае >
# когда у нас данные идут с mirror (SPAN) интерфейса активного оборудования
--no-mac
# логи идут не на экран терминала (stdout, по умолчанию), а в syslog
# в версии 4.10 логгирование идёт сразу в /var/log/messages без этой настройки
# --use-syslog=local3
# на каком порту слушает встроенный веб-сервер >
# (можно ещё --https-3001 вместе с http,
# сертификат здесь - /usr/local/etc/ntop/ntop-cert.pem )
--http-server 3000
# в версии 4.10 при наличии двух и более интерфейсов ntop не захотел поднимать
# сервер без точного указания IP, для этого пропишите (пример):
# --http-server 192.168.1.1:3000
# помогаем программе определить что считать локальным
# трафиком (внутренняя сеть будет обособлена для удобства)
--local-subnets 192.168.0.0/16,172.16.192.0/24
# можно указать домен для сети, либо программа определит >
# его самостоятельно
--domain vasya.ru
--daemon # запускать в виде демона, что под freebsd всегда верно
Полный список команд и вариантов можно посмотреть так:
/usr/local/bin/ntop -h
Если вы используете по каким-то причинам старый ntop 3 версии, для того, чтобы логи шли в определённый файл (расскоментированная секция --use-syslog=local3), необходимо добавить в syslog.conf следующее:
Для версии 4 этого проделывать не нужно, см.пояснения в конфиге выше.
Перед запуском всей системы необходимо создать базу и задать пароль администратора:
/usr/local/bin/ntop -P /data/netflow/ntop_db -u 2001 -A
где указана папка, которой владеет ntop пользователь с порядковым номером 2001 (мы его таким создали). Вывод будет примерно таким:
Thu May 3 23:31:52 2007 NOTE: Interface merge enabled by default Thu May 3 23:31:53 2007 Initializing gdbm databases
ntop startup - waiting for user response!
Please enter the password for the admin user: Please enter the password again: Thu May 3 23:32:06 2007 Admin user password has been set
Готово, всё настроено и ждёт запуска - для начала сбора статистики и зарисовки диаграмм с графиками для начальника, чтобы учёл старания. Если у Вас есть сетевой фильтр (firewall), откройте 3000ый tcp порт наружу, а если захотите snmp статистики, то и 161ый udp тоже в режиме keep-state (+163 udp на всякий случай). Для IPFW это выглядит примерно так (вместе с другими правилами в скрипте):
ipfw add allow tcp from me 3000 to 192.168.1.1 via em0
где 192.168.1.1 - IP вашего админского компа, а em0 - управляющая сетевая на текущем сервере, где стоит ntop. Если будете использовать родной скрипт - /usr/local/etc/rc.d/ntop, то не забудьте:
И если у вас папка БД программы отличается (как и у меня) от /var/db/, то исправьте проверку на наличие ntop_pw.db файла в /usr/local/etc/rc.d/ntop скрипте с указанием вашей папки (сами найдёте). После этого запускаем демона:
/usr/local/etc/rc.d/ntop start
и идём в любимый браузер по ссылке http://адресвашегосервераntop:3000 Смотрим и любуемся на потёкшую статистику, а модули в админке подключаем через логин admin и пароль тот, который вводили при создании БД. Вся дальнейшая настройка модулей происходит через веб-морду.
Модуль NetFlow. add netflow device - появляется таблица, где необходимо указать параметры поступающего потока. Создаётся виртуальный интерфейс, прикреплённый к физическому адаптеру. При этом, физ.адаптер должен иметь статический адрес - т.к. Cisco посылает пакеты netflow на определённый его порт. Настройка Cisco маршрутизатора будет выглядеть примерно так:
Виртуальный интерфейс ntop должен слушать при этом на udp-порту 9995, в сабнете 192.168.23.0/24. ntop покажет, какую версию он принимает, с каких портов вашего cisco устройства, сколько пакетов обработано, сколько потеряно (на моей сетке в примерно 200 активных хостов было 0% потерь), поддерживаются все netflow вплоть до v9. Вы можете настроить агрегацию по host / ip protocol и др. значениям.
Модуль SPAN-sniffer. В случае, если вы не счастливый обладатель Cisco маршрутизаторf/маршрутизирующего коммутатора, тогда вы можете получать практически аналогичную статистику со SPAN-порта любого умного коммутатора 2 или 3 уровня. Для этого настройте дублирование всех потоков со всех портов на нём на один выделенный и направьте трафик с него на ntop интерфейс на сервере FreeBSD. В настройках ifconfig при старте системы в /etc/rc.conf вы можете прописать так: ifconfig_rlo="up promisc" не задавая адреса для сетевой, т.к.в данном случае он вообще не нужен (stealth режим сниффера). Настройки самих коммутаторов всегда разные, см.документацию. В ntop просто включите модуль анализатора пакетов, без netflow вирт.интерфейса - в качестве сенсора нужно указать физическую сетевую (без адресов).
TODO Модуль icmp. патч для FreeBSD скрины.
Так же в админке можно имзенять кучу настроек, тюнинговать существующие и добавлять новые правила фильтрации, дополнять параметрами опции сервера и создавать пользователей для доступа к своей статистике с разными привилегиями.
Но помните, что при перезагрузке системы, вся суммарна статистика, за исключением графиков, обнуляется. В этом весь минус решения.
Если нужно сделать так, чтобы сервер был доступен из-под apache (http://vasya.ru/ntop к примеру), необходимо сделать следующее: запустить ntop на 3000ом порту (значение можно поменять, конечно же), с параметрами: -w127.0.0.1:3000 -W0 #слушать на http//localhost:3000 и не слушать на https вообще. Apache должен быть собран с модулями (не все могут быть необходимы, но всё-таки) mod_cgid mod_headers mod_security mod_proxy mod_proxy-http mod_proxy-html proxy_connect.load proxy_html.load mod_rewrite mod_ssl mod_userdir и поддерживать работу на 443ем порту (ssl). Секция вирт.хоста в конфиге апача (либо,если версия 2.x,то файла путьдоapache/extra/httpd-vhosts.conf)
NameVirtualHost *:443
<VirtualHost *:443>
###### Весь трафик на 443ем порту ( HTTPS )
# поменяйте на свою почту
ServerAdmin webmaster@localhost
SSLEngine On
# поменяйте на путь к вашему сертификату
SSLCertificateFile /etc/apache2/ssl/apache.pem
# измените пути к логам
ErrorLog /var/log/apache2/error.log
# выберите уровень логирования из предложенных:
# debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
### PATCH SUGGESTED BY NESSUS ABOUT TRACE ATTACKS
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
#### NTOP (PROXY проброс) ########
ProxyHTMLLogVerbose On
LogLevel warn
ProxyHTMLExtended On
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /ntop/ http://localhost:3000/
ProxyPassReverse /ntop/ http://localhost:3000/
<Location /ntop/>
SetOutputFilter proxy-html
ProxyHTMLURLMap / /ntop/
ProxyHTMLURLMap /ntop/plugins/ntop/ /ntop/plugins/
RequestHeader unset Accept-Encoding
</Location>
</VirtualHost>
И перезапустите apache (в моём случае поставлен из портов, версия 2.2.4):