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 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.