Вот так выглядит дефалтовый конфиг: /etc/ulogd.conf
# Example configuration for ulogd
# $Id: ulogd.conf.in 714 2005-02-19 21:33:43Z laforge $
# Adapted to Debian by Achilleas Kotsis
[global]
######################################################################
# GLOBAL OPTIONS
######################################################################
# netlink multicast group (the same as the iptables --ulog-nlgroup param)
nlgroup=1
# logfile for status messages
logfile="/var/log/ulog/ulogd.log"
# loglevel: debug(1), info(3), notice(5), error(7) or fatal(8)
loglevel=5
# socket receive buffer size (should be at least the size of the
# in-kernel buffer (ipt_ULOG.o 'nlbufsiz' parameter)
rmem=131071
# libipulog/ulogd receive buffer size, should be > rmem
bufsize=150000
######################################################################
# PLUGIN OPTIONS
######################################################################
# We have to configure and load all the plugins we want to use
# general rules:
# 1. load the plugins _first_ from the global section
# 2. options for each plugin in seperate section below
#
# ulogd_BASE.so - interpreter plugin for basic IPv4 header fields
# you will always need this
plugin="/usr/lib/ulogd/ulogd_BASE.so"
# output plugins.
plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"
#plugin="/usr/lib/ulogd/ulogd_OPRINT.so"
#plugin="/usr/lib/ulogd/ulogd_MYSQL.so"
#plugin="/usr/lib/ulogd/ulogd_PGSQL.so"
#plugin="/usr/lib/ulogd/ulogd_SQLITE3.so"
#plugin="/usr/lib/ulogd/ulogd_PCAP.so"
[LOGEMU]
file="/var/log/ulog/syslogemu.log"
sync=1
[OPRINT]
file="/var/log/ulog/pktlog.log"
[MYSQL]
table="ulog"
pass="changeme"
user="laforge"
db="ulogd"
host="localhost"
[PGSQL]
table="ulog"
schema="public"
pass="changeme"
user="postgres"
db="ulogd"
host="localhost"
[SQLITE3]
table="ulog"
db="/path/to/sqlite/db"
buffer=200
[PCAP]
file="/var/log/ulog/pcap.log"
sync=1
Вот так выглядит конфиг iptables, где пакеты отправляются в ULOG:
#!/bin/sh
INET="eth0" # internet iface
INETIP="192.168.155.51"
# сбрасываем все правила
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
# политика по умолчанию
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
# это правило и отправляет пакеты на анализ ULOG
iptables -A FORWARD -i $INET -j ULOG --ulog-prefix "FORWARD" --ulog-cprange 0 --ulog-qthreshold 50
iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP
echo "1" > /proc/sys/net/ipv4/ip_forward
Делаем sudo /etc/init.d/ulogd start, перезапускаем фаерволл и смотрим лог проходящих пакетов:
tail -f /var/log/ulog/syslogemu.log там должны замелькать записи :)
Теперь надо переключиться на MySQL для приёма логов, т.к. в таком виде их парсить... нет уж.
sudo apt-get install mysql-server
Потом запускаем mysql_secure_installation и выбираем новый пароль на root, пусть это будет: phahde4I
Теперь идём в /usr/share/doc/ulogd-mysql и там ищем файлик: mysql.table
Создаём БД для хранения трафика: mysqladmin -uroot -pphahde4I create traffic
Создаём таблицу во вновь созданной базе: mysql -uroot -pphahde4I -Dtraffic -e 'source mysql.table;'
Идём в настройки ulogd.conf и делаем следующее:
# output plugins.
#plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"
#plugin="/usr/lib/ulogd/ulogd_OPRINT.so"
plugin="/usr/lib/ulogd/ulogd_MYSQL.so"
#plugin="/usr/lib/ulogd/ulogd_PGSQL.so"
#plugin="/usr/lib/ulogd/ulogd_SQLITE3.so"
#plugin="/usr/lib/ulogd/ulogd_PCAP.so"
и ещё правим блок:
[MYSQL]
table="ulog"
pass="phahde4I"
user="root"
db="traffic"
host="localhost"
Далее ребутаем ulogd: sudo /etc/init.d/ulogd restart и топаем в базу:
mysql -uroot -pphahde4I -Dtraffic
А там следим за ростом числа: select count(*) from ulog; -- это число перехваченных и записаных пакетов.
Итого ulogd конфиг принимает вид:
# Example configuration for ulogd
# $Id: ulogd.conf.in 714 2005-02-19 21:33:43Z laforge $
# Adapted to Debian by Achilleas Kotsis
[global]
######################################################################
# GLOBAL OPTIONS
######################################################################
# netlink multicast group (the same as the iptables --ulog-nlgroup param)
nlgroup=1
# logfile for status messages
logfile="/var/log/ulog/ulogd.log"
# loglevel: debug(1), info(3), notice(5), error(7) or fatal(8)
loglevel=5
# socket receive buffer size (should be at least the size of the
# in-kernel buffer (ipt_ULOG.o 'nlbufsiz' parameter)
rmem=131071
# libipulog/ulogd receive buffer size, should be > rmem
bufsize=150000
######################################################################
# PLUGIN OPTIONS
######################################################################
# We have to configure and load all the plugins we want to use
# general rules:
# 1. load the plugins _first_ from the global section
# 2. options for each plugin in seperate section below
#
# ulogd_BASE.so - interpreter plugin for basic IPv4 header fields
# you will always need this
plugin="/usr/lib/ulogd/ulogd_BASE.so"
# output plugins.
#plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"
#plugin="/usr/lib/ulogd/ulogd_OPRINT.so"
plugin="/usr/lib/ulogd/ulogd_MYSQL.so"
#plugin="/usr/lib/ulogd/ulogd_PGSQL.so"
#plugin="/usr/lib/ulogd/ulogd_SQLITE3.so"
#plugin="/usr/lib/ulogd/ulogd_PCAP.so"
[LOGEMU]
file="/var/log/ulog/syslogemu.log"
sync=1
[OPRINT]
file="/var/log/ulog/pktlog.log"
[MYSQL]
table="ulog"
pass="phahde4I"
user="root"
db="traffic"
host="localhost"
[PGSQL]
table="ulog"
schema="public"
pass="changeme"
user="postgres"
db="ulogd"
host="localhost"
[SQLITE3]
table="ulog"
db="/path/to/sqlite/db"
buffer=200
[PCAP]
file="/var/log/ulog/pcap.log"
sync=1
Собственно, настройка системы подсчета трафика закончена, далее вопрос за её анализом и красивым отображением, но это в следующих статьях :)
ulogd в связке с субд для подсчета траффика не годится в принципе. Ибо на каждый чих ulogd'шные плагины делают INSERT(а операция дорогая).
ReplyDeleteДаже парсенье лога ulog-acctd обходится сильно(очень сильно) дешевле рассмотренной схемы.
На мой взгляд наиболее продуктивным вариантом будет ipcad + пара скриптов.
Не подскажете, куда копать?
ReplyDeleteПоставил ulogd2 ver 2.0.0.beta3, но не получается подключить модуль mysql.
Включил дебаг и в ulogd.log нашел, кажется, причину:
================
Wed Dec 2 15:44:05 2009 <1> ulogd.c:662 connecting input/output keys of stack:
Wed Dec 2 15:44:05 2009 <1> ulogd.c:670 traversing plugin `MYSQL'
......
Wed Dec 2 15:44:05 2009 <7> ulogd.c:727 cannot find key `label' in stack
Wed Dec 2 15:44:05 2009 <1> ulogd.c:863 destroying stack
================
В результате в БД ни одной записи не создаётся.
Но в стеке, судя по описанию, никакие ключи и не должны указываться... Как это лечить, я что-то делаю не так?
А файл схемы точно переливали после апдейта:
ReplyDeleteТеперь идём в /usr/share/doc/ulogd-mysql и там ищем файлик: mysql.table
Похоже, там просто добавили какие-то дополнительные поля в таблице.