Você pode usar as regras do iptables para fazer isso. Aqui estão alguns comandos que controlam todo o tráfego para um usuário com UID = 1000
iptables -I OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
iptables -I INPUT -m mark --mark 1
iptables -I INPUT -j CONNMARK --restore-mark
Você pode visualizar os contadores com iptables -nvL
. O número de bytes é o segundo campo.
Para o tráfego de entrada, você vai querer olhar para a linha em INPUT que tem mark match 0x1
no final. Para o tráfego de saída, será a linha com CONNMARK set 0x1
no final.
Detalhes:
iptables -I OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
Isso diz ao iptables para definir a marca de firewall 1
em todo o tráfego de saída do usuário com uid = 1000.
iptables -I INPUT -j CONNMARK --restore-mark
Isso diz ao iptables para usar o rastreamento de conexão para descobrir quais pacotes de entrada estão associados aos pacotes de saída e restaurar quaisquer marcas de firewall para o fluxo (ou seja, aquelas que definimos a marca acima).
iptables -I INPUT -m mark --mark 1
Isto diz ao iptables para combinar qualquer pacote de entrada que tenha a marca de firewall 1
. Nós não fazemos nada com eles, apenas usamos para incrementar os contadores.