LINUX.ORG.RU

Протоколирование сетевых соединений


0

0

Здравствуйте. Сейчас пищу программку регистрации действий пользователя, задача одного из модулей - протоколирование сетевых соединений. Сразу скажу - лезть глубоко внутрь пакетов или записывать дамп трафика смысла нет. В принципе нужна следующая инфрмация: локальный адрес, локальный порт, удаленный адрес, удаленный порт, протокол, pid процесса, время установления соед-я, длительность соединения. Залезть в ядро можно, но хочется выкрутиться юзерспейсом. Скажите, можно ли это реализовать, напр, с помощью lib[nf]netfilter? Также буду благодарен за ссылки на любую полезную инфу.



Последнее исправление: NoOneInBOX (всего исправлений: 1)
Ответ на: комментарий от alex_custov

В том то и дело, что сторонняя утилита не пойдет. Хотя... в исходниках netstat поковыряюсь.
Насчет нетфильтра. Гипотетически, неплохо было бы (если вообще реально), получать события установки-завершения соединения, и если они удовлетворяют условию (uid==наш_юзер) записывать.

NoOneInBOX
() автор топика

Правильно мыслишь. Копай в сторону libnetfilter_conntrack.
Неплохой пример ее использования — прога conntrack из набора conntrack-tools. В частности, в ней реализован механизм реакции на события (conntrack -E). Ставь обработчик на событие DELETE и будет тебе щастье :)

Единственный минус — придется поплясать с привязкой к пользователю. conntrack ее не делает (емнип).

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

Привязку conntrack к юзерам можно реализовать, например, так: вешаешь обработчки на события NEW и DESTROY. По событию NEW лезешь в базовую сетевую систему ядра и уточняешь, локальное ли это соединение и нужному ли юзеру оно принадлежит. Если все Ok — записываешь его в своей памяти. По событию DESTROY ищешь его в памяти и добавляешь туда полную статистику по переданным данным.

Имхо, это наименее кривой путь.

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

>посмотри man iptables на предмет LOG/ULOG таргетов.

Если человек знает про libnetfiler, вряд ли он найдет в man iptables что-то новое для себя :)

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

Вдруг допер до еще одного варианта :)

Через iptables маркируешь все соединения нужно юзверя

iptables -t mangle -A OUTPUT -m owner --uid-owner vasya -j CONNMARK --set-mark 41

Ну а затем просто отфильтровываешь события по маркировке.

nnz ★★★★
()

Все это можно сделать с помошью патчей RSBAC. И даже больше.
Только замучаетесь настраивать, так как докоментации вменяемой нет :)

Cosmicman ★★
()

Огромное всем спасибо за советы!!!

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