Netfilter (iptables) имеет модуль владельца
(а также сокет
, если вы хотите его использовать). С его помощью вы можете применить стандартные правила брандмауэра, если идентификатор пользователя или идентификатор группы совпадает, и, при необходимости, совпадать, если пакет связан с сокетом.
iptables -t mangle -A PREROUTING -m owner -u some_user --socket-exists -j MARK --set-mark 100
Затем просто используйте tc таким образом, чтобы он улавливал метку 100
:
tc filter add dev eth0 parent ffff: protocol ip prio 10 u32 match mark 100 ...
Это был просто мой образ мыслей, и я понятия не имею, работает ли это, но попробуйте. :)