Medindo estatísticas de rede cumulativas por usuário ou por processo

6

Estou pesquisando há horas - No Linux, eu quero saber os bytes cumulativos enviados e recebidos pelo usuário ou pelo processo em todos os protocolos IP. O melhor que encontrei nas minhas pesquisas é que é possível usar o iptables para marcar pacotes para um usuário, por exemplo:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

Parece que "tc" pode moldar o tráfego com isso, mas eu só quero a estatística - não quero moldar o tráfego. Eu quero algo como: "o usuário U transmitiu o XMB usado desde o tempo Y". Não consigo descobrir como obter estatísticas desses pacotes marcados. Além disso, eu olhei para nethogs mas eles parecem estar medindo o fluxo instantâneo e eu preciso de contagens cumulativas. Alguém tem idéias?

    
por zsimpson 29.02.2012 / 22:23

5 respostas

2

O truque iptables -m owner só pode rastrear pacotes contra um usuário que é enviado para fora (por definição). Não pode ser usado para rastrear pacotes recebidos para esse usuário.

Eu admito, em cima da minha cabeça, eu não vejo nenhuma maneira legal de fazer isso. A um ponto no escuro, vai envolver a aplicação de um patch no nível do kernel para, por exemplo, permitir que apenas usuários específicos se liguem a intervalos de portas específicos na pilha de rede (semelhante à ideia de que apenas o root pode se ligar a soquetes de rede na porta 1024 e inferior). Em seguida, você pode aplicar o log de tráfego do iptables nesses intervalos de portas e ter certeza de que o tráfego é para, e somente para, o usuário correspondente que tem permissão para ligar a essas portas. A desvantagem é que isso causará estragos em aplicativos de usuários que não estão cientes dessas limitações, quando eles decidem tentar ligar-se a uma porta e o kernel diz não.

Também pode ser possível fazer isso com o SE Linux, mas eu suspeito que tenha o potencial de se tornar um pesadelo de manutenção entre administradores: link

    
por 16.03.2012 / 11:12
2

Se você usar -j CONNMARK na cadeia OUTPUT e depois combinar com -m connmark na cadeia INPUT, poderá recuperar essas informações.

Aqui está um exemplo para rastrear o tráfego de entrada / saída do usuário nobody (id 65534):

# iptables -I OUTPUT -m owner --uid-owner 65534 \
                     -m comment --comment 'out - user nobody - uid 65534' \
                     -j CONNMARK --set-mark 65534
# iptables -I INPUT -m connmark --mark 65534 \
                    -m comment --comment 'in - user nobody - uid 65534'


Como resultado, você pode buscar os valores do contador (primeiro na linha) executando iptables-save -c:

# iptables-save -c | grep 'uid 65534'
[2585:3797434] -A INPUT -m connmark --mark 0xfffe -m comment --comment "in - user nobody - uid 65534"
[1166:63139] -A OUTPUT -m owner --uid-owner 65534 -m comment --comment "out - user nobody - uid 65534" -j CONNMARK --set-xmark 0xfffe/0xffffffff
    
por 29.04.2014 / 19:44
1

Para a contabilidade: você pode deixar de fora completamente -j e não fornecer um alvo. Como a manpage diz:

-j, --jump target ... If this option is omitted in a rule (and -g  is
    not used), then matching the rule will have no effect on the
    packet's fate, but the counters on the rule will be incremented.
    
por 06.12.2012 / 23:12
0

Talvez a maneira mais fácil de fazer, dependendo de quanto tempo você deseja manter esses dados, é apenas ver as contagens combinadas de pacotes / bytes para as regras de marcação com iptables -t mangle -L OUTPUT -v . Você verá duas colunas à esquerda da saída, indicando essas métricas.

Se você quiser uma contagem diária, sempre poderá programar um iptables -t mangle -Z OUTPUT para limpar as contagens à meia-noite.

    
por 01.03.2012 / 06:00
0

Se você puder marcá-lo, isso significa que você pode registrá-lo. Verifique a extensão alvo do LOG nas páginas do manual do iptables. Aqui, uma introdução simples: link

Eu acho que você pode adicionar uma entrada de rotação de log para isso e usá-lo para acionar um script que resume as entradas de log e remove o arquivo. talvez de hora em hora?

    
por 28.03.2012 / 13:30