LINUX.ORG.RU

помощь по iptables, owner у вх. пакетов


0

0
Хочу написать простенькую считалку трафика с использованием iptables. Домашняя машина, два пользователя.

Надо чтобы трафик считался отдельно для каждого пользователя. Считать нужно только входящий трафик.

Сначала было подумал на iptables -m owner, но он работает только для исходящих пакетов =(

Как же мне узнать uid процесса который получит пакет?

★★★★★
UID у всех входящих пакетов - 0 ;-)

Есть дополнительные модули для iptables (ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot) - в них есть нужный для сверки трафика в INPUT chain - только не уверен - живой он ещё или его выкинули. Название не спрашивайте - не помню.

birdie ★★★★★
()
Гуглил и случайно наткнулся на то, что в BSD это можно сделать средствами ipfw

Типа ipfw add count ip from 192.168.1.0/24 to me uid 1001

Хочу такое же в линуксе =) Перейти на BSD не предлагать.

Nao ★★★★★
() автор топика
Два IP на сетевуху, один юзер ходит с одного адреса (iproute/iptables), втророй с другого, трафик по адресам считаем,
sdio ★★★★★
()
Ответ на: комментарий от sdio
>Два IP на сетевуху, один юзер ходит с одного адреса (iproute/iptables), втророй с другого, трафик по адресам считаем,

проблематично. интернет по адслю, через лан-мопед. айпи у ppp интерфейса я не поменяю

Nao ★★★★★
() автор топика
Ответ на: комментарий от Nao
если пользователи сидят поочереди,
то можно просто ещё учитывать last - 
то есть раскидать по времени.

для tcp можно попробовать
маркировать соединения по исходящим пакетам..

можно пускать http/ftp трафик через squid и поднять identd - ident строки кладутся в лог-файл, их можно пересчитывать

MKuznetsov ★★★★★
()
Вобщем сделал пока так:

Исходящие соединения маркируются соответсвенно уидам пользователей
-A OUTPUT .... -m state --state NEW -m owner --uid-owner 1000 -j CONNMARK --set-mark 0x1
-A OUTPUT .... -m state --state NEW -m owner --uid-owner 1001 -j CONNMARK --set-mark 0x2
......

входящие же соединения маркируются отдельно
-A INPUT .... -m state --state NEW -j CONNMARK --set-mark 0x8

затем ответные пакеты (когда уже можно определить UID юзера) с пометкой 0x8 маркируем уже соответсвенно UIDам
-A OUTPUT .... -m connmark --mark 0x8 -m owner --uid-owner 1000 -j CONNMARK --set-mark 0x1
-A OUTPUT .... -m connmark --mark 0x8 -m owner --uid-owner 1001 -j CONNMARK --set-mark 0x2
.......

Теперь осталось только добавить правила для собственно считания траффика
-A INPUT .... -m connmark --mark 0x1
.......
-A OUTPUT .... -m connmark --mark 0x1
.......


Единственный минус - не считается первый входящий SYN пакет.
Но лично у меня их мизер, так что в моём случае не критично.
Nao ★★★★★
() автор топика
Ответ на: комментарий от Nao
Жесть. Бежит пакетик-бежит, добегает до провайдера, а там - бац и шейпер. Бальшая беда начнётся. Но за идею, безусловно пять.
Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian
Про шейпер что то не догоняю. Можно поподробнее?
Nao ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.