Анализируем трафик с Nulog2::Журнал СА 1.2009
www.samag.ru
Льготная подписка для студентов      
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

Jobsora

ЭКСПЕРТНАЯ СЕССИЯ 2019


  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
28.05.2019г.
Просмотров: 1826
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 1887
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 1446
Комментарии: 0
Django 2 в примерах

 Читать далее...

28.05.2019г.
Просмотров: 1066
Комментарии: 0
Введение в анализ алгоритмов

 Читать далее...

27.03.2019г.
Просмотров: 1636
Комментарии: 1
Arduino Uno и Raspberry Pi 3: от схемотехники к интернету вещей

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

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

Архив номеров / 2009 / Выпуск №1 (74) / Анализируем трафик с Nulog2

Рубрика: Веб /  Веб-технологии

Сергей Яремчук СЕРГЕЙ ЯРЕМЧУК

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

Рассмотрим настройку веб-интерфейса NuLog2, позволяющего администратору в удобном виде просматривать информацию о соединениях, проходящих через Netfilter и uFW.

Проект NuLog2

В GNU/Linux все сетевые пакеты проходят через Netfilter, в силу чего он и обладает самой достоверной информацией о количестве переданных и принятых данных. В 2000 году Гаральдом Велте (Harald Welte) был написан патч к ядру – ULOG (Userspace Logging), позволяющий получать эту информацию в пространстве пользовательских процессов (user space) в удобном виде. Несмотря на то что «добраться» до нужных данных теперь стало на порядок проще, администраторам приходилось самостоятельно решать проблему их съема, обработки и выдачи в нужном виде. Как результат появилось несколько проектов, решающих эти проблемы. Некоторые обеспечивали понятный интерфейс к получению данных с ULOG, например, демон ulogd [1], написанный самим Гаральдом Велте, specter [2], построенный на базе ulogd 1.02, и ulog-acctd [3]. Стоит заметить, что основные разработки представленных проектов датированы 2005 годом, правда, это не мешает их полноценно использовать и до сих пор. И только ulogd, о возможностях которого будем говорить по ходу статьи, недавно начал опять активно развиваться. Другие проекты нацелены на выдачу информации, полученной при помощи программ первой группы в удобной форме – scanulog, ulog-monitor, Webfwlog и Nulog2. Возможностям последнего и посвящена статья.

Проект NuLog2 [4] является дальнейшим развитием PHP-интерфейса к ulogd и NuFW [5]– 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 [6], который выполнен в формате 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. Последняя имеет несколько больше встроенных модулей, кроме этого, в ней реализована система фильтров (подробнее во врезке «Сборка ulogd2 в Ubuntu»). Для работы 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, модули для работы с которой как раз и находятся во втором пакете.

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

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

Конфигурационный файл по умолчанию находится в /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=0x00

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 предлагают свой файл, который и необходимо использовать. Работа с NuFW ранних версий описана в [5], поэтому останавливаться на этом вопросе не буду. Тем более что NuFW для NuLog2 идет как опциональный компонент. Теперь все готово к установке 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.

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

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

Скачиваем и распаковываем обычным образом. Создаем базу данных и учетную запись.

$ mysql -uroot -prootpassword

> CREATE DATABASE ulogd;

> GRANT ALL PRIVILEGES ON ulogd.* TO 'user'@'localhost' IDENTIFIED BY 'pass';

$ 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 легко видоизменить

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

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 содержит настройки, актуальные для веб-интерфейса (их скорее всего трогать не придется).

# 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/ и попадаем на главную страницу.

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

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

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

Итог

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

Приложение

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

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

Для веб-сервера Apache записываем в конфигурационный файл /etc/apache2/apache2.conf следующие директивы (см. листинг).

<VirtualHost *>

            ServerName nulog

            ProxyPreserveHost Off

            ProxyPassReverse /nulog http://localhost:8080/nulog

            <Location /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

            </Location>

</VirtualHost>

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

Сборка 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

  1. Сайты проекта ulogd – http://www.gnumonks.org/projects, http://www.netfilter.org/projects/ulogd.
  2. Сайт проекта specter – http://joker.linuxstuff.pl/specter.
  3. Сайт проекта ulog-acctd – http://alioth.debian.org/projects/pkg-ulog-acctd.
  4. Сайт проекта NuLog2 – http://software.inl.fr/trac/wiki/EdenWall/NuLog.
  5. Яремчук С. Шлюз аутентификации пользователей NuFW. //Системный администратор, №3, 2006 г. – С. 46-50.
  6. LiveCD, демонстрирующий возможности NuFW – http://live.nufw.org.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru