LINUX.ORG.RU
ФорумAdmin

Помогите запустить ulogd

 


1

2

Всем доброго времени суток!

Помогите запустить ulogd. При запуска пишет:

# ulogd -v
Thu Jan  2 23:25:12 2014 <5> ulogd.c:843 building new pluginstance stack: 'ulog1:ULOG,ip2bin:IP2BIN,mysql1:MYSQL'
Thu Jan  2 23:25:12 2014 <5> ../../util/db.c:151 (re)configuring
Thu Jan  2 23:25:12 2014 <7> ulogd.c:750 cannot find key `ip.protocol' in stack
Thu Jan  2 23:25:12 2014 <8> ulogd.c:1429 not even a single working plugin stack
Fatal error
Никак не пойму, чего ему не зватает. Конфиг такой:
[global]

logfile="/var/log/ulogd.log"

plugin="/usr/lib/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib/ulogd/ulogd_inppkt_ULOG.so"
plugin="/usr/lib/ulogd/ulogd_filter_IFINDEX.so"
plugin="/usr/lib/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib/ulogd/ulogd_filter_IP2BIN.so"
plugin="/usr/lib/ulogd/ulogd_filter_PRINTPKT.so"
plugin="/usr/lib/ulogd/ulogd_filter_HWHDR.so"
plugin="/usr/lib/ulogd/ulogd_filter_PRINTFLOW.so"
plugin="/usr/lib/ulogd/ulogd_output_LOGEMU.so"
plugin="/usr/lib/ulogd/ulogd_output_SYSLOG.so"
plugin="/usr/lib/ulogd/ulogd_output_XML.so"
plugin="/usr/lib/ulogd/ulogd_output_GPRINT.so"
plugin="/usr/lib/ulogd/ulogd_output_MYSQL.so"
plugin="/usr/lib/ulogd/ulogd_raw2packet_BASE.so"
plugin="/usr/lib/ulogd/ulogd_inpflow_NFACCT.so"
plugin="/usr/lib/ulogd/ulogd_output_GRAPHITE.so"

stack=ulog1:ULOG,ip2bin:IP2BIN,mysql1:MYSQL

[ulog1]
nlgroup=1

[mysql1]
db="ulog"
host="localhost"
user="uloguser"
table="ulog"
pass="pass"
procedure="INSERT_PACKET_FULL"

★★★★★

Мне кажется, что если вы укажите свою ОС и версию ulog, а также куда вы хотите писать лог (MySQL, файл ...), будет проще отвечать.

anonymous
()
Ответ на: комментарий от anonymous

Slackware 14.1

ulogd2-2.0.3

Писать логи хочу в MySQL, что несложно увидеть в конфиге.

cannot find key `ip.protocol' in stack

Очень хочется знать, чего ему не нравиться в строке из его собственной документации...

fractaler ★★★★★
()

Так, я начинаю понимать... Дело в базе MySQL. Там и есть поле ip.protocol. Структуру базы я брал не глядя из документации. Честно говоря, там _очень_ много лишнего для меня.

Мне нужно только IP, MAC и количество входящего/исходящего/общего трафика. Максимум, ещё и на какие адреса это уходило, но это уже не обязательно.

Можно под это дело свою базу создать? Как? В смысле, какой должна быть структура этой базы?

fractaler ★★★★★
()
Ответ на: комментарий от truf

структуру базы для установленной версии ulogd поищи тут /usr/share/doc/ulogd*

Это я видел. Написал же

Структуру базы я брал не глядя из документации.

Мне как раз нужно, чтобы база была поменьше.

Прыгая с бубном вокруг, да около, я как-то запустил ulogd, используя

stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL

Это гораздо больше, чем мне надо. И, честно говоря, я пока не понимаю, работает ли оно на самом деле.
Размер базы не растёт, как правильно сделать select оттуда я пока не понимаю.

fractaler ★★★★★
()
Ответ на: комментарий от fractaler

если для тебя там слишком много всего, напиши свою процедуру, поковыряй INSERT_PACKET_FULL

truf
()
Ответ на: комментарий от truf

тут что-то есть?

# iptables -vnL | grep NFLOG
   0     0 NFLOG      all  --  *      *       0.0.0.0/0            0.0.0.0/0            nflog-prefix  ALLOWED nflog-group 1 nflog-threshold 30

если для тебя там слишком много всего, напиши свою процедуру, поковыряй INSERT_PACKET_FULL

Да, такого ответа я втихую боялся. Придётся осваивать SQL основательнее :)

# grep fw_allow /etc/rc.d/rc.firewall 
$IPTABLES -N fw_allow
$IPTABLES -A fw_allow -j ACCEPT
$IPTABLES -A fw_allow -j NFLOG --nflog-threshold 30 --nflog-group 1 --nflog-prefix "ALLOWED"
$IPTABLES -A FORWARD -p ALL -i $LAN_IFACE -m set --match-set whitelist src,src -j fw_allow
$IPTABLES -A FORWARD -p ALL -i $LAN_IFACE -m set --match-set whitelistd src,src -j fw_allow
$IPTABLES -A FORWARD -p ALL -i $LAN_IFACE -m set --match-set ipwhite src -j fw_allow
fractaler ★★★★★
()
Последнее исправление: fractaler (всего исправлений: 3)
Ответ на: комментарий от truf

Отложил пока MySQL, пробую в текст. Вот конфиг. Лог пуст.

[global]
logfile="/var/log/ulogd.log"

plugin="/usr/lib/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib/ulogd/ulogd_inppkt_ULOG.so"
plugin="/usr/lib/ulogd/ulogd_filter_IFINDEX.so"
plugin="/usr/lib/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib/ulogd/ulogd_filter_IP2BIN.so"
plugin="/usr/lib/ulogd/ulogd_filter_PRINTPKT.so"
plugin="/usr/lib/ulogd/ulogd_filter_HWHDR.so"
plugin="/usr/lib/ulogd/ulogd_filter_PRINTFLOW.so"
plugin="/usr/lib/ulogd/ulogd_output_LOGEMU.so"
plugin="/usr/lib/ulogd/ulogd_output_MYSQL.so"
plugin="/usr/lib/ulogd/ulogd_raw2packet_BASE.so"

stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU

[log2]
group=1

[emu1]
file="/home/log/ulog-traf.log"
sync=0

fractaler ★★★★★
()
Ответ на: комментарий от truf

а в fw_allow пакеты поподают?

Попадают, иначе я бы сюда не попал. Кусок конфига файрвола выше.

покажи статистику. а то что-то не понятно

Эээ... Какую статистику? Как?

Эту?

# iptables -vnL | grep fw_allow
25904 1688K fw_allow   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0            match-set whitelist src,src
    0     0 fw_allow   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0            match-set whitelistd src,src
    0     0 fw_allow   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0            match-set ipwhite src
Chain fw_allow (3 references)

fractaler ★★★★★
()
Последнее исправление: fractaler (всего исправлений: 1)

Может будет полезно... У меня развернут ulogd. CentOS 6.4, ulogd-2.0.2-2.el6.i686. Пишу в файл.

/etc/ulogd.conf

[global]
############################################################
# GLOBAL OPTIONS
############################################################

logfile="/var/log/ulogd/ulogd.log"

############################################################
# PLUGIN OPTIONS
############################################################

plugin="/usr/lib/ulogd/ulogd_inppkt_ULOG.so"
plugin="/usr/lib/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib/ulogd/ulogd_filter_PRINTPKT.so"
plugin="/usr/lib/ulogd/ulogd_output_LOGEMU.so"
plugin="/usr/lib/ulogd/ulogd_raw2packet_BASE.so"

stack=ulog1:ULOG,base1:BASE,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU

[emu1]
file="/var/log/ulogd/ulogd_syslogemu.log"
sync=1

Для iptables:

-A INPUT -i eth1 -p all  -j ULOG --ulog-nlgroup 1 --ulog-prefix "GET"
-A OUTPUT -o eth1 -p all  -j ULOG --ulog-nlgroup 1 --ulog-prefix "SEND"

-A FORWARD -s 192.168.0.0/24 -o eth1 -p all -j ULOG --ulog-nlgroup 1 --ulog-prefix "SEND"
-A FORWARD -d 192.168.0.0/24 -i eth1 -p all -j ULOG --ulog-nlgroup 1 --ulog-prefix "GET"

anonymous
()
Ответ на: комментарий от fractaler

$IPTABLES -A fw_allow -j ACCEPT
$IPTABLES -A fw_allow -j NFLOG --nflog-threshold 30 --nflog-group 1 --nflog-prefix «ALLOWED»

Посмотрите по выводу ″iptables -L fw_allow -n -v ″, там что, действительно вначале ACCEPT, а потом ″-j NFLOG″, до которого ни один пакет не доходит?

Придётся осваивать SQL основательнее

А как вы хотели то? Ведь с базой то ещё нужно работать — удалять старые записи, иначе она быстро займёт весь диск.

mky ★★★★★
()
Ответ на: комментарий от fractaler

в общем, твоё правило ACCEPT в fw_allow, съедает все пакетики, ничего не оставляя NFLOGу

truf
()

А, может, пойти другим путём ?
ipt_NETFLOW и, скажем, nfdump...

AS ★★★★★
()
Ответ на: комментарий от anonymous

Может будет полезно...

Спасибо. Наверняка пригодится. Не очень понятно про iptables — где правила, разрешающие прохождение пакетов?

А как вы хотели то? Ведь с базой то ещё нужно работать

mky, делать запросы и составлять SQL-функции — это разные весовые категории :)

Посмотрите по выводу ″iptables -L fw_allow -n -v ″, там что, действительно вначале ACCEPT, а потом ″-j NFLOG″, до которого ни один пакет не доходит?

Вот меня тоже это смущает. Потому что -j LOG работает именно в таком порядке. Может, поменять их местами?

truf, поменять правила местами? АААА!! Точно. Мне же нужно то, что проходит, а не то, что не попало. Сейчас буду пробовать!

AS, можно и другим, только с этим путём я тоже не знаком. Буду признателен за ссылку на хорошую документацию или статью.

fractaler ★★★★★
()
Ответ на: комментарий от fractaler

AS, можно и другим, только с этим путём я тоже не знаком.

ipt_NETFLOW делает netflow-поток на коллектор. Как ulog, но быстрее просто. А, дальше, просто надо чем-то поймать этот стандартный поток netflow. flow-tools, nfdump (nfsen глянь), NetAMS...

AS ★★★★★
()

truf, AS, mky, Большое спасибо за помощь! Всё запустилось.

Принцип понятен, теперь дело за малым — научиться обрабатывать весь этот выхлоп. Ну да это уже другая история :)

Ещё раз большое спасибо!

fractaler ★★★★★
()

И всё-таки позволю себе маленький офтоп:

Мои правила ловят только исходящий трафик:

Jan 10 13:10:17 gw44 ALLOWED IN=eth0 OUT=eth1 MAC=00:1e:8c:56:4e:9b:a0:f3:c1:00:1a:c2:08:00 SRC=192.168.1.180 DST=91.198.174.208 LEN=40 TOS=00 PREC=0x00 TTL=127 ID=5437 DF PROTO=TCP SPT=60089 DPT=80 SEQ=3799253258 ACK=2907594840 WINDOW=0 ACK RST URGP=0 MARK=0
Когда я попробовал точно так же логировать NAT, то получил вот что:
Jan 10 13:36:27 gw44 NAT IN= OUT=eth1 MAC= SRC=192.168.1.180 DST=88.212.196.77 LEN=52 TOS=00 PREC=0x00 TTL=127 ID=16439 DF PROTO=TCP SPT=62016 DPT=80 SEQ=4090419513 ACK=0 WINDOW=8192 SYN URGP=0 MARK=0
Как поймать ещё и входящий трафик?

fractaler ★★★★★
()
Ответ на: комментарий от fractaler

Мои правила ловят только исходящий трафик

точно так же логировать NAT

Замечательно. Осталось дело за малым — показать какие именно правила в iptables или скастовать телепатов.

P.S. Похоже, что в ваших правилах в FORWARD указано "-i eth0".

mky ★★★★★
()
Ответ на: комментарий от mky

Осталось дело за малым — показать какие именно правила в iptables или скастовать телепатов.

Выше по теме все правила, через которые проходят эти пакеты: Помогите запустить ulogd (комментарий)

Да, там указан интерфейс... Дай соображу, нужно добавить правило FORWARD, для входящего? Туда же всё равно пойдёт только то, что и через NAT? Или нет?

Вдобавок ещё только NAT:

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_IP_RANGE -j SNAT --to-source $STATIC_IP

fractaler ★★★★★
()
Ответ на: комментарий от fractaler

Выше по теме все правила, через которые проходят эти пакеты:

Ага, только потом было:

поменять правила местами? АААА!! Точно.

Вот и думай, что именно вы там решили поменять местами. Но, как бы пофиг.

нужно добавить правило FORWARD, для входящего?

Да

Туда же всё равно пойдёт только то, что и через NAT?

Не распарсил. Туда пойдут те пакеты, которые соответствуют условиям в правиле iptables. Если сервер SNAT'ит локалку, то пакеты, пришедшие на внешний интерфейс и попвшие в цепочку FORWARD, как правило, будут пакетами, идущими в ответ на SNAT'чиные соединения от компов локалки. Но так же туда могут попасть и все пакеты, прищедщие из интернета и направленные в адрес $LAN_IP_RANGE, если в FORWARD не стоит ″-i $INET_IFACE -m conntrack --ctstate NEW -j DROP″.

В целом мне не ясна решаемая вами задача, но ″-j NFLOG″ засовывать в ″-t nat POSTROUTING″ особого смысла нет, через эту цепочку проходит только первый пакет соединения.

mky ★★★★★
()
Ответ на: комментарий от mky

Вот и думай, что именно вы там решили поменять местами. Но, как бы пофиг.

Сорри. Писал ночью, почти уснувший, почти не думал.

Вот все правила файрвола: http://pastebin.com/fsb0HA3X

В целом мне не ясна решаемая вами задача

Задача: получить информацию об объёме интернет трафика каждого компьютера в локальной сети, выходящий в Интернет через NAT на сервере.

Провайдер тарифицирует и входящий, и исходящий трафик с определённым лимитом на сутки. Так что конечная цель — чтобы увлёкшийся пользователь автоматически отключался от доступа к Инету.

----

upd, исправил ссылку.

fractaler ★★★★★
()
Последнее исправление: fractaler (всего исправлений: 2)
Ответ на: комментарий от mky

Я так понимаю, мне нужно раскомментировать

#$IPTABLES -A FORWARD -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

Изменив на

$IPTABLES -A FORWARD -i $INET_IFACE -m conntrack --ctstate NEW -j DROP

Я правильно понимаю, что это отрежет все запросы снаружи внутрь локальной сети? Разве они и так не отрезаны правилом -P FORWARD DROP ?

Правило для водящего такое?

$IPTABLES -A FORWARD -p ALL -i $INET_IFACE -j NFLOG --nflog-threshold 30 --nflog-group 2 --nflog-prefix «INPUT_TRAF»

fractaler ★★★★★
()
Ответ на: комментарий от fractaler

Если правило для NFLOG именно такое:

$IPTABLES -A FORWARD -p ALL -i $INET_IFACE -j NFLOG --nflog-threshold 30 --nflog-group 2 --nflog-prefix «INPUT_TRAF»

то, да, ″-P FORWARD DROP″ обрежет запросы снаружи внутрь локальной сети. Просто я думал, что у вас для входящего трафика будет аналогично исходящему два правила, и -j NFLOG, и -j ACCEPT...

Только у вас практически в самом начале FORWARD стоит правило:

-A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

которое пропускает практически все пакеты, до -j NFLOG правил доходят только первые пакеты соединений.

Ну и ещё по поводу:

$IPTABLES -A FORWARD -i $INET_IFACE -m conntrack --ctstate NEW -j DROP

Если поставить это правило до -j NFLOG, то тогда в лог пакетов не будут попадать эти самые попытки установить соединение из интернета с компами локалки. Обычно таких пакетов нет, но если он появятся, лучше подумать заранее, логировать их или нет.

mky ★★★★★
()
Ответ на: комментарий от mky

Спасибо, вечером попробую и отпишусь о результатах.

fractaler ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.