Статья обновлена 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).Описание возможностей 4.10 версии ( http://www.ntop.org/overview.html ): * Сортировка трафика по протоколам (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):
cp /usr/ports/net/ntop/work/ntop-4.10/packages/\ FreeBSD-ports/net/ntop/files/ntop.conf.sample \ usr/local/etc/ntop/ntop.conf
И меняем права на файл, а то он какой-то исполняемый, что не есть правильно:
chmod -x /usr/local/etc/ntop/ntop.conf
Теперь необходимо проделать операцию создания каталога для хранения данных ntop.Для этого необходимо создать пользователя (используйте интерактивный # adduser) с ограниченными правами и доступом к выбранной вами папки.У меня он такой:
cat /etc/passwd | grep ntop ntop:*:2001:2001:ntop manager:/data/netflow/ntop_db:/usr/sbin/nologin
Изменим владельца каталога:
chown -R ntop:ntop /data/netflow/ntop_db
Правим конфигурационный файл 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 следующее:
echo '!ntop' >> /etc/syslog.conf \ echo 'local3.* /var/log/ntop.log' >> /etc/syslog.conf
и создать этот файл с минимальными правами (чтобы вражище не подсмотрел):
touch /var/log/ntop.log && chmod 600 /var/log/ntop.log
Для версии 4 этого проделывать не нужно, см.пояснения в конфиге выше.Перед запуском всей системы необходимо создать базу и задать пароль администратора:
/usr/local/bin/ntop -P /data/netflow/ntop_db -u 2001 -A
где указана папка, которой владеет ntop пользователь с порядковым номером 2001 (мы его таким создали).Вывод будет примерно таким:
Готово, всё настроено и ждёт запуска - для начала сбора статистики и зарисовки диаграмм с графиками для начальника, чтобы учёл старания.Если у Вас есть сетевой фильтр (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, то не забудьте:
echo 'ntop_enable="YES"' >> /etc/rc.conf echo 'ntop_flags="@/usr/local/etc/ntop/ntop.conf"' >> /etc/rc.conf
И если у вас папка БД программы отличается (как и у меня) от /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 маршрутизатора будет выглядеть примерно так:
router-2621(config)#ip flow-export destination 192.168.23.5 9995 router-2621(config)#ip flow-export source FastEthernet 0/1 router-2621(config)#ip flow-export version 5 router-2621(config)#ip flow-cache timeout active 1 router-2621(config)#ip flow-cache timeout inactive 15
Виртуальный интерфейс 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.loadproxy_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):
/usr/local/etc/rc.d/apache22 restart
и зайти по адресу https://vasya.ru/ntop/ .Либо, как другой вариант (редирект с помощью apache-модуля proxy), вкратце:
ProxyPass /ntop/ http://localhost:3000/
а в вирт.хостах:
RewriteEngine On RewriteCond %{HTTP_REFERER} vasya.ru/ntop RewriteCond %{REQUEST_URI} !^/ntop RewriteRule ^/(.*)$ http://vasya.ru/ntop/$1 [L,P]
По идее, всё должно работать, секцию с апачем я честно своровал и не пробовал.На заметку: Ntop 2.1.3 was the last version with the mySQL stuff and is completely unsupported.