[FUG-BR] modulo do kernel - exemplo de pffil_hooks

Evandro Zampieri evandro em ecomp.com.br
Terça Julho 18 12:43:55 BRT 2006


Matheus,

Eu uso o modelo que o Diego disse e funciona legal... Pra economizar regras 
eu não utilizei o count propriamente dito, peguei o tráfego direto das 
regras do pipe do IP do usuário.

Fiz algumas alterações e ficou assim:
Você precisará de 2 arquivos, um pra ser o .conf do mrtg e o outro que será 
um script que esse .conf vai chamar.

Exemplo das regras do ipfw do usuário com o IP 192.168.1.185 sendo 64K 
Upload e 128K Download:
ipfw add 11185 pipe 64 ip from 192.168.1.185 to any in via vr1
ipfw add 11185 pipe 192 ip from any to 192.168.1.185 out via vr1

Essa regra após um "ipfw show 11185" gera a saída para os scripts 
trabalharem, a terceira coluna são os bytes trafegados, veja...
# ipfw show 11185
11185       60        5994 pipe 64 ip from 192.168.1.185 to any in via vr1
11185      137       47824 pipe 192 ip from any to 192.168.1.185 out via vr1


Aqui está o arquivo .conf que deve ser chamado pelo mrtg no cron...
#BOF
#GLOBAL OPTIONS
WorkDir: /usr/local/www/data/mrtg
Language: brazilian
WriteExpires: YES
Refresh: 600
Interval: 5
Options[_]: growright, bits
XSize[_]: 300
YSize[_]: 100
#TOTAL COUNTER
Target[IP185]: `/usr/local/script/ipfw-ip185.sh`
Title[IP185]: Trafego do IP 192.168.1.185
PageTop[IP185]: Trafego do IP 192.168.1.185
#EOF

Aqui está o script que pega os bytes da regra do ipfw do IP em questão...
# cat /usr/local/script/ipfw-ip185.sh
#!/bin/sh
out=`/sbin/ipfw show 11185 | grep in | /usr/bin/awk '{print $3}'`
in=`/sbin/ipfw show 11185 | grep out | /usr/bin/awk '{print $3}'`
echo $in
echo $out
echo 0
echo -n 0
#EOF


[]s
EVANDRO ZAMPIERI
E-COMP Provedor Internet
Afiliado à Rede Global Info
Rua Santos Dumont, 521
Birigüi - SP - 16200-095
FoneFax (18) 3644-6000

----- Original Message ----- 
From: "Diego Linke" <gamk at gamk.com.br>
To: ""Lista_Brasileira_de_Discussão_sobre_FreeBSD_(FUG-BR)"" 
<freebsd at fug.com.br>
Sent: Tuesday, July 18, 2006 11:31 AM
Subject: Re: [FUG-BR] modulo do kernel - exemplo de pffil_hooks


Nenhum de nos,

>
> estou tentando fazer um sistema para ver trafego nat ( contar bytes de
> e/s de cada cliente ) para mandar via snmp para cacti/mrtg e estou
> tendo problemas ( nao sou eximio programador C ) em tratar a estrutura
> **mbuf que recebo ( quase resolvida, via mtod virando struct ip ),
> probemas em acessar essa struct ip e por final com problemas em
> mostrar estes dados.
>

Você não precisa fazer um sistema para isso o FreeBSD já faz isso :-)

Crie regras de Count no IPFW  e depois com um patch no isc-snmpd (se não
me engano já está no ports este patch) você consegue pegar tráfego por
regras do IPFW via snmp.

Estas regras de count, apenas contariam o que está passando sem fazer
nenhum espécie de match (allow, deny, divert...), neste caso elas
deverão estar antes da regra divert.

Exemplo:
ipfw add 100 count ip from any to IP via INTERFACE
ipfw add 101 count ip from IP to any via INTERFACE

E depois monitorar via SNMP as regras 100 e 101.
Agora a imaginação pode ir longe pois com count você pode fazer
estatística do que for necessário.

Espero ter ajudado!

Abraços

-- 
Diego Linke
Public Key: http://www.gamk.com.br/gamk.asc


-------------------------
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd



Mais detalhes sobre a lista de discussão freebsd