Главная
 
npofopr.ucoz.ruЧетверг, 2025-07-17, 14:48:49



Приветствую Вас Гость | RSS
Главная
Меню сайта

Форма входа

Категории раздела
postfix [3]
console [2]
ssh [1]
jabber [1]
DHCP [2]
apache [4]
vhcs [1]
pptp [2]
server [7]
ftp [1]
trafic [1]
ip [1]
LDAP [1]
squid [1]
squid

Главная » Статьи » linux » trafic

Анализ трафика с Nulog2

Проект NuLog2

В GNU/Linux все сетевые пакеты проходят через Netfilter в силу чего он и обладает самой достоверной информацией о количестве переданных и принятых данных. В 2000 году Гаральдом Велте (Harald Welte) был написан патч к ядру - ULOG (Userspace Logging) позволяющий получать эту информацию в пространстве пользовательских процессов (user space) в удобном виде. Не смотря на то, что “добраться” теперь до нужных данных стало на порядок проще, администраторам приходилось самостоятельно решать проблему их съема, обработки и выдачи в нужном виде. Как результат появилось нескольких проектов, решающих эти проблемы. Одни обеспечивали понятный интерфейс к получению данных с ULOG. Это демон ulogd написанный самим Harald Welte, specter построенный на базе ulogd 1.02 и ulog-acctd. Стоит заметить, что основные разработки представленных проектов датированы 2005 годом, правда это не мешает их полноценно использовать и до сих пор» вероятно. И только ulogd, о возможностях которого будем говорить по ходу статьи, недавно начал опять активно развиваться. Другие проекты нацелены на выдачу информации полученной при помощи программ первой группы в удобной форме - scanulog, ulog-monitor, Webfwlog и Nulog2. Возможностями последнего и посвящена статья.
Проект NuLog2 является дальнейшим развитием PHP интерфейса к ulogd и NuFW – NuLog (в Интернет встречаются и другие его названия NuLog1 или ulogd-php). Разработка последнего приостановлена в июле 2007 года, но уже через месяц начата работа над его второй версией - NuLog2, которая позиционируется уже как анализатор журналов Netfilter и NuFW.
В отличие от предшественника написанного на PHP, код NuLog2 полностью переписан на Python с использованием среды разработки Twisted. Но не смотря на все отличия NuLog2 использует ту же модель данных, поэтому очень просто можно перейти с NuLog на NuLog2 без потери информации. Кроме среды разработки изменена и лицензия с GPL v2 на GPL v3.
В настоящее время интерфейс обеспечивает: просмотр информации о разрешенных, заблокированных пакетах по IP-адресам и пользователям (только NuFW), TCP и UDP портам, а также приложениям задействованным в процессе соединения (только NuFW). Поддерживаются обе версии протокола IPv4 и IPv6, возможен детальный просмотр каждого пакета, вывод истории запросов. Все данные сведены в таблицы и графики, предлагающие просмотр в удобном виде. Возможен экспорт данных в CVS файл. Реализованы функции поиска, интерфейс написанный с использованием технологии AJAX полностью настраиваемый. В настоящее время NuLog2 не локализован, но все параметры понятны и без перевода, так как соответствуют устоявшимся терминам. Предвидя вопросы скажу, что к большому сожалению такой востребованной функции как учет трафика в NuLog2 нет.

Установка и настройка ulogd

Познакомиться с возможностями Nulog2 (а также NuFW и интерфейса для его настройки Nuface) можно в дистрибутиве NuFW.live , который выполнен в формате LiveCD основанном на KNOPPIX. Мы же рассмотрим установку его на рабочую систему на примере Ubuntu 8.04 LTS, хотя много из сказанного применимо и для других дистрибутивов.
Для регистрации событий необходим модуль ядра ipt_ULOG.o, который появился в ядре начиная с версии 2.4.18-pre8. Кто использует более ранний релиз ядра, следует его обновить или установить патч ulog-patch с netfilter patch-o-matic. Ядро используемое в Ubuntu 8.04 по умолчанию:

$ uname -r
2.6.24-16-generic

В параметрах сборки ULOG активирован:

$ grep -i ulog /usr/src/linux/.config
CONFIG_BRIDGE_EBT_ULOG=m
CONFIG_IP_NF_TARGET_ULOG=m

Забегая чуть вперед, скажу, что после загрузки демона ulogd в списке “lsmod” должен появиться нужный модуль:

$ lsmod | grep –i ulog
ipt_ULOG 10116 2

В репозитарии Ubuntu нужные пакеты для установки ulogd имеются. Но следует знать, что сегодня существует две ветки: стабильная 1.2x и находящаяся пока в стадии разработки ulogd-2.x. Последний имеет несколько больше встроенных модулей, кроме этого в нем реализована система фильтров (подробнее). Для работы NuLog2 достаточно и релиза 1.23 (апрель 2005), который и доступен в репозитарии Ubuntu.

$ sudo apt-cache showpkg ulogd | grep -i versions
Versions: 1.23

Устанавливается стандартно:

$ sudo aptitude install ulogd ulogd-mysql

По умолчанию ulogd сохраняет данные в файл текстового формата, подключив плагины можно добавить поддержку записи в базы данных MySQL, PostgreSQL, SQLLite3, файл формата PCAP/Tcpdump или syslog. Для работы NuLog2 необходима поддержка MySQL, модули для работы с которой как раз и находятся во втором пакете.
Конфигурационный файл по умолчанию находится в /etc/ulogd.conf, если он расположен в другом месте, на него можно указать при помощи параметра “-c”. В отличие от ulogd2 в котором на порядок больше настроек, файл ulogd.conf гораздо проще, значение основной части понятны:

[global]
# файл журнала и уровень журналирования
logfile=”/var/log/ulog/ulogd.log”
# debug(1), info(3), notice(5), error(7) or fatal(8)
# вначале лучше поставить 1, а затем после полного прогона переключить на 5
loglevel=1
# Плагины вывода
# текстовый формат
plugin=”/usr/lib/ulogd/ulogd_LOGEMU.so”
# для вывода в MySQL, пока отключаем
#plugin=”/usr/lib/ulogd/ulogd_MYSQL.so”
# Параметры вывода для разных плагинов
# текстовый
[LOGEMU]
file=”/var/log/ulog/syslogemu.log”

# подключение к MySQL
[MYSQL]
table=”ulog”
pass=”pass”
user=”user”
db=”ulogd”
host=”localhost”

Далее нужно в правилах iptables указать, чтобы он использовал ULOG вместо LOG. В общем случае идея очень проста, нужно в правилах заменить строки вида:

iptables -A FORWARD $FILTER -j LOG
На
iptables -A FORWARD $FILTER -j ULOG

Но в Ubuntu начиная с версии 8.04, для управления правилами Netfilter используется - UFW (Uncomplicated firewall). Поэтому весь процесс здесь выглядит несколько иначе, чем в других дистрибутивах.
Все настройки UFW находятся в каталоге /etc/ufw, синтаксис команд несколько напоминает iptables, но чуть проще и понятнее. По умолчанию UFW отключен, и перед запуском демона необходимо в файле /etc/ufw/ufw.conf разрешить его запуск заменив строку

# set to yes to start on boot
ENABLED=no
На
ENABLED=yes

Правила регистрации находятся в файле /etc/ufw/after.rules и по умолчанию выглядят так:

$ cat /etc/ufw/after.rules

# catchall for logging
-A ufw-after-input -m limit –limit 3/min –limit-burst 10 -j LOG –log-prefix “[UFW BLOCK INPUT]: ”
-A ufw-after-forward -m limit –limit 3/min –limit-burst 10 -j LOG –log-prefix “[UFW BLOCK FORWARD]: “

Чтобы переключить их на ULOG достаточно заменить LOG на ULOG (параметры с limit можно убрать):
-A ufw-after-input -m limit –limit 3/min –limit-burst 10 -j ULOG –ulog-prefix “[UFW BLOCK INPUT]: ”
-A ufw-after-forward -m limit –limit 3/min –limit-burst 10 -j ULOG –ulog-prefix “[UFW BLOCK FORWARD]: “

Теперь включаем регистрацию:

$ sudo ufw logging on
Logging enabled

И проверяем:

$ sudo iptables -L -n | grep ULOG
Logging enabled
ULOG all — 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 10 ULOG copy_range 0 nlgroup 1 prefix `[UFW BLOCK FORWARD]: ‘ queue_threshold 1
ULOG all — 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 10 ULOG copy_range 0 nlgroup 1 prefix `[UFW BLOCK INPUT]: ‘ queue_threshold 1

Перезапускаем демон ulogd:

$ sudo /etc/init.d/ulogd restart

Паралелльно проверяем записи в файле журнала:

$ tail -f /var/log/ulog/syslogemu.log
Dec 23 21:56:06 router FORWARD IN=eth0 OUT=eth1 MAC=00:e0:4d:07:c2:03:00:1d:60:9a:b8:8e:08:00 SRC=192.168.1.195 DST=192.168.0.1 LEN=48 TOS=00 PREC=0×00 TTL=127 ID=26261 DF PROTO=TCP SPT=1135 DPT=8080 SEQ=508149838 ACK=0 WINDOW=65535 SYN URGP=0

Если все нормально, можно снимать комментарий со строк, отвечающих за работу с MySQL. В пакете ulogd-mysql имеется файл /usr/share/doc/ulogd-mysql/mysql.table предназначенный для создания таблиц в MySQL. Но разработчики NuLog предлагают свой файл, который и необходимо использовать. Теперь все готово к установке NuLog2.

Установка NuLog2

Для установки и работы NuLog2 потребуется ряд пакетов. В Ubuntu установить их можно командой:

$ sudo apt-get install python2.4 python-twisted python-nevow python-matplotlib gettext python-soappy python-mysqldb python-cairo python-ipy python-numpy python-docutils

Разработчики в документации приводят вместо apt-get - aptitude, но в первом случае будет скачано всего 45 Мб архивов, вместо 154 Мб при использовании aptitude.
Актуальной версией на момент написания этих строк являлась 2.1.3, датирована декабрем 2008 года, которую и будем устанавливать. Архивы с исходными текстами доступны по адресу http://software.inl.fr/releases/Nulog2/. Скачиваем и распаковываем обычным образом. Создаем базу данных и учетную запись.

[AD]

$ mysql -uroot -prootpassword
> CREATE DATABASE ulogd;
> GRANT ALL PRIVILEGES ON ulogd.* TO ‘user’@'localhost’ IDENTIFIED BY ‘pass’;

В подкаталоге scripts архива находятся файлы для создания таблиц. Для IPv4 сети выбираем файл ipv4.sql:

$ mysql -uuser -ppass ulogd < ./scripts/ipv4.sql

Для улучшения производительности можно использовать триггеры, которые будут задействованы при вставке данных в некоторые таблицы (usersstats, offenders, tcp_ports, udp_ports):

$ mysql -uroot -ppass ulogd < ./scripts/triggers.py

В ранних версиях MySQL (< 5.0.32) перед запуском скрипта следует удалить строку:

DROP TRIGGER IF EXISTS update_cache;

Иначе получим ошибку.
Перезапускаем ulogd, чтобы он начал собирать данные в базу:
$ sudo /etc/init.d/ulogd restart
Чтобы установить Nulog2 достаточно выполнить скрипт setup.py, находящийся в дистрибутиве:
$ sudo ./setup.py install
И затем для сборки документации
$ make
Теперь можно приступать к настройкам. Конфигурационные файлы Nulog2 находятся в каталоге /etc/nulog, внутри имеется несколько файлов, три из которых основные: default.wrapper.conf, default.core.conf’ и default.nulog.conf. Чтобы их активировать, нужно убрать префикс default из имени - wrapper.conf, core.conf’ и nulog.conf.
NuLog2 для визуаплизации и вывода данных использует собственный веб-сервер, настройки которого указываются в wrapper.conf.

[server]
port=8080
vardir = /var/lib/nucentral/
address = 0.0.0.0

# список модулей
[modules]
nulog-core=yes
nulog-web=yes
auth=yes

Далее для создания рабочего окружения запускаем скрипт install_defconf.sh.

$ ./script/install_defconf.sh

Скрипт задаст несколько вопросов по размещению рабочего каталога и конфигурационных файлов NuLog и NuFW. В большинстве случаев можно использовать настройки, предлагаемые по умолчанию.
Параметры подключения к MySQL описываются в файле core.conf:

# Database configuration
[DB]
host=localhost
db=ulog
user=user
password=pass

# Тип БД mysql/pgsql
dbtype=mysql
# Тип sql scheme ulog/triggers
type=triggers
ip=4
table=ulog

Файл nulog.conf содержит настройки актуальные для веб-интерфейса (их скорее всего трогать не придется).
[Links]

# URL для доступа к основной странице
url=/nulog/

# Заголовок веб-страницы
maintitle=Log ULOG
# Использование Nuface2 ACLs
# nuface_acl=https://localhost/nuface/%%s.php?acl=%%s

[Sessions]
# разрешение на анонимное подключение
anonymous=yes
[Misc]
# формат даты
datetime=%%y-%%m-%%d %%H:%%M:%%S
# Интеграция с панелью дистрибутива Edenwall (http://www.edenwall.com), можно просмотреть в NuFW.Live
edenwall_integration=0

Разработчики приготовили стартовый скрипт для более удобного запуска NuLog2. Копируем его в нужное место и создаем необходимые ссылки для автоматической загрузки.

$ sudo cp –v ./debian/init.d /etc/init.d/nulog
$ sudo ln –s /etc/init.d/nulog /etc/rcS.d/nulog

И запускаем:

$ sudo /etc/init.d/nulog restart

Или чтобы получить больше отладочной информации:

$ sudo twistd -noy /usr/sbin/nulog.tac

Набираем в веб-браузере http://localhost:8080/nulog/ и попадаем на главную страницу.

Интерфейс NuLog2 сразу после установки

Чтобы разобраться с возможностями Nulog2 потребуется от силы 5 минут. Все достаточно просто и понятно.

В NuLog2 реализованы функции поиска по нескольким параметрам

В итоге мы получили систему, которая позволяет отслеживать сетевые события. Конечно чтобы полностью оценить возможности NuLog2 потребуется установить и настройить NuFW, что позволит не только разрешать выход в Интернет по учетным записям, а не IP-адресам, но и привязать события к конкретному пользователю или приложению.

Интерфейс NuLog2 легко видоизменить

Аутентификация пользователя в NuLog2

В настоящий момент NuLog2 не имеет никаких средств аутентификации пользователей. Доступ к статистике можно ограничить несколькими способами: параметром address в файле wrapper.conf, который будет указывать на внутренний интерфейс, правилами iptables/NuFW разрешающими доступ к нужному порту только с определенных адресов или пользователей. Разработчики предлагают для этих целей использовать веб-сервер, который будет отсылать HTTP заголовок “Nulog_User” включающий имя пользователя.
Для Apache можно записываем в конфигурационный файл /etc/apache2/apache2.conf следующие директивы.

ServerName nulog

ProxyPreserveHost Off
ProxyPassReverse /nulog http://localhost:8080/nulog
Allow from all
AuthType Basic
AuthName nulog
AuthUserFile /etc/apache2/users
AuthBasicProvider file
Require valid-user

RewriteEngine on
RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule /nulog(.*) http://localhost:8080/nulog$1 [P,E=RU:%1]
RewriteRule /nulog(.*) http://localhost:8080/nulog$1 [P]
RequestHeader set Nulog_User %{RU}e
RequestHeader unset Authorization

Далее создаем учетные записи при помощи htpasswd.

Использование NuFW расширяет возможности NuLog2

Сборка ulogd2 в Ubuntu

Тем же, кто решил установить самую последнюю версию ulogd, приведу краткую инструкцию по компиляции. Возможности во второй версии несколько шире. Так уже реализовано три типа плагинов: источник, фильтр и вывод. Плагины комбинируются в стэк (stack), которые собственно и указывают, что нужно делать демону. То есть теперь чтобы захватить и вывести данные в файл необходимо явно задавать:
stack=log1:NFLOG,op1: LOGEMU
Иначе получим ошибку вроде:
Mon Dec 29 21:53:14 2008 <8> ulogd.c:1102 not even a single working plugin stack
Означающую, что ulogd попросту не знает, что ему делать.
В стек может входить только по одному плагину источника и вывода. Количество фильтров неограничено. Конфигурация может содержать несколько стеков, поэтому отбор нужной информации можно настроить действительно тонко.
Кроме этого в ulogd2 используются несколько измененная схема SQL, в которой данные разделены на несколько таблиц (вместо одной в ulogd), что дает возможность легко добавить дополнительную информацию создав новую таблицу. В отличие от ulogd1 вторая версия построена таким образом, что изменение схемы SQL никак не повлияет на его работу. Кроме ULOG поддерживается и NFLOG.
Для сборки кроме самого архива с исходными кодами потребуются самые последние версии библиотек – libnfnetlink, libnetfilter_log (захват пакетов) и libnetfilter_conntrack (захват потока conntrack), которые можно скачать по ссылкам на странице http://www.netfilter.org/projects. Некоторые из этих библиотек есть в репозитарии, но их версия существенно отстает от требуемой. В случае возникновения проблем конфигурационный скрипт самостоятельно укажет, что ему не хватает.
checking for LIBNETFILTER_CONNTRACK… no
configure: error: Cannot find libnetfilter_conntrack >= 0.0.95

Компилляция библиотек стандартна:
$ ./configure
$ make
$ sudo make install

Для удобства можно собрать deb-пакет, воспользовавшись инструкцией The Ubuntu Packaging Guide (https://help.ubuntu.com/6.10/ubuntu/packagingguide/C/).
Если в процессе конфигурирования ulogd будут получены сообещния вроде:
configure: WARNING: mysql.h not found
checking for mysql_close in -lmysqlclient… no
configure: WARNING: libmysqlclient.so not found

Это означает, что нет заголовочных файлов для активации поддержки MySQL. Так как для работы NuLog2 такой модуль необходим, доустанавливаем пакет в котором находятся нужные файлы.
$ sudo aptitude install libmysqlclient15-dev
На момент написания этих строк была актуальной версия ulogd-2.0.0beta2, при использовани которой могут появляться разного рода ошибки. Поэтому лучше использовать более “свежую” svn/git версию. В этом случае для сборки кроме собственно “build-essential” и “ subversion” в Ubuntu потребуются установить еще ряд пакетов:
$ sudo apt-get install autoconf automake1.9 libtool
Далее как обычно.
$ svn co https://svn.netfilter.org/netfilter/branches/ulog/ulogd2
$ cd ulogd2
~/ulogd2$ ./autogen.sh; ./configure; make; sudo make install

Так как по умолчанию установка производится в /usr/local, следует указать путь к /usr/local/lib/ulogd в файле /etc/ld.so.conf, чтобы динамические библиотеки были видны.
Кроме этого необходимо вручную перенести конфигурационные файлы и создать ссылки для запуска:
$ sudo cp -v ulogd.conf /usr/local/etc/ulogd.conf
$ sudo cp -v ulogd.logrotate /etc/logrotate.d/ulogd
$ sudo cp -v ulogd.init /etc/init.d/ulogd
$ sudo ln –s /etc/init.d/ulogd /etc/rcS.d/S99ulogd

После настроек советую в первый раз запустить демон в консоли, чтобы просмотреть возможные ошибки.
$ sudo /usr/local/sbin/ulogd

Категория: trafic | Добавил: npofopr (2009-07-20)
Просмотров: 1425 | Комментарии: 1 | Теги: linux | Рейтинг: 1.0/1 |
Всего комментариев: 1
1 paytightihos  
0
hi

Имя *:
Email *:
Код *:
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Поиск


Copyright MyCorp © 2025
Сделать бесплатный сайт с uCoz