39
1. Identificação Giovane César Moreira Moura Escola de Engenharia Elétrica e de Computação, UFG. 4º Ano de Engenharia de Computação Matrícula: 012826 Professor Orientador: Prof. Msc. Marcelo Stehling de Castro Local de estágio: Ponto de Presença da Rede Nacional de Ensino e Pesquisa em Goiás (PoP-GO RNP), sediado no prédio da UFGNET no Campus 1, Escola de Engenharia. Data do estágio: 01 de março de 2004 até 28 de fevereiro de 2005. Total de horas semanais: 30 horas. Total de Horas em todo o período: 1560 horas. 2. Introdução 2.1 Sobre a RNP e o PoP-GO A RNP foi criada em setembro 1989 pelo Ministério da Ciência e Tecnologia (MCT) com o objetivo de construir uma infra-estrutura de rede Internet nacional de âmbito acadêmico. A Rede Nacional de Pesquisa, como era chamada em seu início, tinha também a função de disseminar o uso de redes no país. Em paralelo à implantação de sua estrutura, a RNP dedicou- se a tarefas diversas, tais como divulgar os serviços Internet à comunidade acadêmica através de seminários, montagem de repositórios temáticos e treinamentos, estimulando a formação de uma consciência acerca de sua importância estratégica para o país e tornando-se referência em aplicação de tecnologias Internet. Em maio de 1995, teve início a abertura da Internet comercial no país. Neste período, a RNP passou por uma redefinição de seu papel, estendendo seus serviços de acesso a todos os setores da sociedade. Com essa reorientação de foco, a RNP ofereceu um importante apoio à consolidação da Internet comercial no Brasil. Foi criado o Centro de Informações Internet/BR para dar suporte no surgimento de provedores e usuários da rede. Mais de 3.000 questões relativas à Internet foram respondidas em seu primeiro ano de funcionamento. Inúmeras empresas fabricantes de bens de informática, tais como Compaq, Equitel, IBM, Philips etc., passaram a oferecer apoio concreto à RNP, fornecendo equipamentos, software e, mesmo, financiando atividades diretas do projeto. Em outubro de 1999, dez anos depois de ser criado o projeto RNP, os ministérios da Ciência e Tecnologia e da Educação (MEC) assinaram um 1

1.Identificação - PoP-GO | Ponto de Presença da RNP em ... · Escola de Engenharia Elétrica e de Computação, UFG. 4º Ano de Engenharia de Computação ... quanto de tráfego

Embed Size (px)

Citation preview

1. Identificação

Giovane César Moreira MouraEscola de Engenharia Elétrica e de Computação, UFG.4º Ano de Engenharia de ComputaçãoMatrícula: 012826

Professor Orientador: Prof. Msc. Marcelo Stehling de Castro

Local de estágio: Ponto de Presença da Rede Nacional de Ensino ePesquisa em Goiás (PoP-GO RNP), sediado no prédio da UFGNET no Campus1, Escola de Engenharia.

Data do estágio: 01 de março de 2004 até 28 de fevereiro de 2005.

Total de horas semanais: 30 horas.

Total de Horas em todo o período: 1560 horas.

2. Introdução

2.1 Sobre a RNP e o PoP-GO

A RNP foi criada em setembro 1989 pelo Ministério da Ciência eTecnologia (MCT) com o objetivo de construir uma infra-estrutura de redeInternet nacional de âmbito acadêmico. A Rede Nacional de Pesquisa, comoera chamada em seu início, tinha também a função de disseminar o uso deredes no país. Em paralelo à implantação de sua estrutura, a RNP dedicou-se a tarefas diversas, tais como divulgar os serviços Internet à comunidadeacadêmica através de seminários, montagem de repositórios temáticos etreinamentos, estimulando a formação de uma consciência acerca de suaimportância estratégica para o país e tornando-se referência em aplicaçãode tecnologias Internet.

Em maio de 1995, teve início a abertura da Internet comercial no país.Neste período, a RNP passou por uma redefinição de seu papel, estendendoseus serviços de acesso a todos os setores da sociedade. Com essareorientação de foco, a RNP ofereceu um importante apoio à consolidaçãoda Internet comercial no Brasil. Foi criado o Centro de InformaçõesInternet/BR para dar suporte no surgimento de provedores e usuários darede. Mais de 3.000 questões relativas à Internet foram respondidas em seuprimeiro ano de funcionamento. Inúmeras empresas fabricantes de bens deinformática, tais como Compaq, Equitel, IBM, Philips etc., passaram aoferecer apoio concreto à RNP, fornecendo equipamentos, software e,mesmo, financiando atividades diretas do projeto.

Em outubro de 1999, dez anos depois de ser criado o projeto RNP, osministérios da Ciência e Tecnologia e da Educação (MEC) assinaram um

1

convênio, o Programa Interministerial de Implantação e Manutenção da RedeNacional para Ensino e Pesquisa (PI-MEC/MCT), com o objetivo de levar arede acadêmica a um novo patamar. Os dois ministérios investiriam R$ 215milhões na implantação e manutenção do backbone RNP2, uma infra-estrutura de rede avançada, capaz de atender às novas necessidades debanda e de serviços para ensino e pesquisa. A Associação Rede Nacional deEnsino e Pesquisa (AsRNP), criada neste mesmo ano pelos funcionários daRNP, conduziria o programa, sob orientação de um Comitê Gestor (CG-RNP)formado por representantes do MEC e do MCT. O backbone RNP2 foioficialmente inaugurado em maio de 2000.

Em janeiro de 2002, a AsRNP foi qualificada pelo governo federalcomo uma Organização Social. Com isso, ganhou maior autonomiaadministrativa para executar suas tarefas e o poder público ganhou meiosde controle mais eficazes para avaliar e cobrar o alcance dos objetivostraçados para a organização.

Em 26 de março de 2002, a Organização Social Rede Nacional deEnsino e Pesquisa (RNP/OS) firmou um contrato de gestão com o MCT. Nele,a RNP/OS se predispõe a atingir determinadas metas, visando ao fomentodas atividades de pesquisas tecnológicas em redes de desenvolvimento e àoperação de meios e serviços de redes avançadas que beneficiem a pesquisae o ensino nacionais.

Já o PoP-GO (Point of Presence) é o ponto de presença da RNP emGoiás. Nada mais é que uma extensão da RNP em Goiás que assegura ofuncionamento da estrutura da RNP em Goiás, garantindo a operação dequalidade da rede interligando as instituições participantes a internet.

2.2 Sobre este relatório

A parte técnica deste relatório foi feito nos moldes de um tutorial,para que posso ser utilizado por um muito mais pessoas que tiveremacesso.

3. Atividades realizadas

As atividades realizadas no PoP-GO durante o período que estagieipodem ser divididas em três categorias:

• Atividades rotineiras de hardware/software

• Projeto de Monitoramento

• Pesquisa em Multimídia sobre IP

Nas seções abaixo descreverei melhor cada uma das três categorias.

2

3.1 Atividades rotineiras de hardware/software

Essas atividades são caracterizadas por instalação/manutenção desoftware no maquinário do PoP-GO, manutenção de hardware e cabeamentoestruturado.

Vale salientar que sempre utilizei exclusivamente software livre emtodas as atividades e projetos que realizei no PoP.

Dentro os softwares instalados, inclui-se o sistema operacionalSlackware/Linux, servidor web Apache httpd e softwares de produção, comOpenOffice e softwares de usuário. Aqui não considero a instalação dossoftwares que foram usados exclusivamente no projeto de monitoramento,pois esses serão mais detalhados na seção 3.3.

Devido a experiência que eu já possuía nesta área, instalação desoftware em GNU/Linux não representou grande desafio, motivo pelo qual adescrição dessa atividade será bem resumida neste relatório(deixando parao projeto de monitoramento uma melhor documentação). Entre outrasatividades inclui o monitoramento do desempenho e resposta dasmáquinas, verificação de logs e tentativas de acesso não autorizado. Foinotado em logs do Slackware Linux várias tentativas de acesso via ssh ondediversas combinações de nomes e senhas provenientes de diversos paíseseram tentadas, sempre sem sucesso devido a política de senhas usada. ARNP tem uma rede bastante visada do ponto de vista de invasores, portantotrabalhar numa rede dessas oferece capacidade de aprender bastante comtantas tentativas.

Em relação a hardware, foi feito algumas manutenções no maquináriodo PoP, como por exemplo abrir uma máquina com problema na bios.

No que se refere a atividades rotineiras em redes, realizei atividadespara testar switches, acompanhei configuração de linhas SLDD parainterconexão do PoP-GO com o prédio da Caixa Econômica Federallocalizado na Avenida Anhangüera. Essa conexão foi necessária para atransmissão para internet de um evento realizado na Caixa. Mais atividadesforam realizadas no projeto de monitoramento. Também acompanhei oCoordenador Técnico do PoP, Cláudio Garcia, na configuração de switchesIBM e NEC. Outras vezes com o bolsista Frederico Rodrigues acompanheitais configurações.

Também fui algumas vezes ao prédio da Brasil Telecom onde o PoP-GO tem uma sala técnica onde ficam equipamentos de rede conectando a osdois campus da UFG e a REMAV.

3.2 Projeto de Monitoramento

A origem deste projeto foi a necessidade de um relatório. Umaexperiência que mostrou que apenas um relatório pode exigir um projetointeiro. E a partir da entrega deste relatório, continuei o projeto estendendo

3

para um uso diversificado.

O relatório exigido surgiu a partir de um problema detectado. O PoP-GO é fisicamente ligado ao PoP-DF (Ponto de Presença de RNP no DF) viauma conexão ATM alugada de uma operadora de telefonia(contrato anual,onde todo ano Brasil Telecom e Embratel concorrem pelo link). No ano de2004 a empresa que fornecia o link era então a Brasil Telecom. Detectamosque quando um usuário de dentro da rede do PoP-GO tentava acessar umsite hospedado em Goiás (exemplo: Detran-GO – www.detran.go.gov.br ) ospacotes deste usuário saiam do PoP-GO e iam até Curitiba-PR para entãovoltarem para Goiânia. Era dada uma volta muito grande dos pacotes pelopaís, ocasionando um pior desempenho para o usuário final e umasobrecarga desnecessária aos demais enlaces da RNP (DF,RJ e PR) pararotear pacotes que poderiam ter ficado dentro do estado de GO mesmo.Para solucionar este problema, foi pensado um projeto de Ponto de Troca deTráfego (considera-se como Ponto de Troca de Tráfego Internet - PTT, umarede eletrônica de alta velocidade ou estrutura equivalente, onde diversasredes se conectam por meio de roteadores IP com o propósito de troca detráfego) para solucionar este problema. E este PTT seria entre o PoP-GO e aconcessionária Brasil Telecom. Como um PTT é um conceito implementadoem roteadores de borda(no nosso caso um CISCO 7500), e isso exigiria doroteador um maior uso de memória, por nosso lado fez-se a necessidade desaber quanto de tráfego da nossa rede (PoP-GO) se destinava a rede daBrasil Telecom (entenda-se todos os clientes da Brasil Telecom , incluindo-se usuários de ADSL,empresas que contratam link da concessionária, ogoverno, e etc..) e quanto do tráfego que entrava em nossa rede vinha darede da Brasil Telecom (precisa-se de haver uma demanda paraimplementar um projeto destes).

Como obter esses dados? Para explicar melhor, é necessário mostrara topologia do PoP-GO na figura 1:

Figura 1: Topologia Lógica do PoP-GO

4

Esta figura representa a topologia lógica em alto nível do PoP-GO(sem considerar a REMAV Goiânia, a qual seu tráfego fica apenas dentro darede do PoP-GO, não passando para a internet). Percebe-se que o PoP-GOconecta UFG, Embrapa,CEFET,Sectec e a secretaria municipal de Educação ainternet. E para o tal, todo o tráfego destes clientes vai para um conjunto deswitches (representado pelo switch maior) e então todo tráfego passa peloroteador de borda Cisco 7500. Ou seja, basta apenas monitorar todo otráfego por um ponto da rede, o roteador de borda. Se um aluno da UFG dedentro da UFG tenta acessar, por exemplo, o site www.detran.go.gov.br (quepertence a rede Brasil Telecom) , esses dados passam pela rede da UFGinteira até culminar no Cisco 7500. E lá conseguimos também monitorar oquanto de tráfego de entrada da Brasil Telecom acessa nossa rede. Umaanalogia seria como se o Cisco 7500 fosse uma ponte que liga uma ilha(rede do PoP-GO) a um continente(Internet).

Já detectamos onde monitorar, porém ficou em aberto a questão:como? Daniel Chaffe Stone, responsável por toda Rede da UFG,juntamentecom o coordenador técnico do PoP-GO,Cláudio Garcia, sugeriram o uso datecnologia Cisco IOS Netflow.

Cisco IOS Netflow é um software que roda no roteador Cisco 7500 doPoP-GO que provê um conjunto chave de serviços para aplicaçõesIP,incluindo contagem de tráfico de rede, billing baseado no uso da rede(por exemplo, monitorar quanto de download um determinado IP realizou –como as operadoras que provem serviço ADSL monitoram quanto casausuário usa), permitem um maior planejamento da rede, maior segurança,monitoramento de DoS e monitoramento da rede em questão. Podemosextrair diversas informações, sobre os usuários da rede e quais aplicativosestão usando, horário de pico, roteamento.

O funcionamento do Netflow é basicamente o seguinte: o roteador(ou switch, porém no nosso caso é o Cisco 7500 da figura 1) coleta os fluxosde dados (que são “logs” dos pacotes que entram e saem do roteador) quepassam por suas interfaces e prepara os dados para serem exportados.Desses fluxos ele acumula dados com características únicas,como endereçoIP, aplicação, CoS. Então esses dados condensados são exportados para umcoletor que os recebe,armazena e então analisa (no nosso caso, utilizamosuma estação IBM Netfinity PIII 550Mhz para coleta de dados utilizandoSlackware Linux. O software de coleta chama-se flow-tools, que é umconjunto de ferramentas livres). A título de ilustração, no PoP-GOcoletávamos cerca de 350MB/dia. É um volume expressivo de dados, que naverdade são “brutos” e precisam ser tratados por softwares para se extrair ainformação desejada.

Como o Netflow coleta os fluxos e sumariza usando IP, poderíamosaplicar regras na análise dos dados coletados e dizer: “queremos saber quala porcentagem dos dados que passam pelo nosso roteador vão para a rededa Brasil Telecom e qual a porcentagem dos dados de entrada que vem delá”, apenas informando ao nossa ferramenta de análise (flow-tools) quaisfaixas de endereços IPs pertenciam a rede Brasil Telecom.

5

A partir deste momento bastava apenas implementação do projeto.Essa parte trabalhei bastante lendo documentação em sites na web econsegui obter os resultados esperados.

Para obter o relatório em questão, deixaríamos coletando dados 37dias (para termos uma melhor espaço amostral) e nossas estatísticas maisrealistas. O que fizemos basicamente para coletar os dados foi o seguinte:

1. Pedir para o pessoal da administração da RNP no Rio de Janeiroconfigurar remotamente o Cisco 7500 para exportar os dadoscoletados pelo Netflow para nossa estação coletora (IBM PIII550Mhz).

2. Configurar a estação para coletar os dados. Para isso, utilizamos oseguinte comando:

#flow-capture -w /netflow -E20G <ip_estação_coletora>/0/9800

Este comando diz para o flow-capture(software integrante do flow-tools) para coletar os dados do netflow e os armazenar na pasta /netflow, num total de 20G (-E20G – quando este limite é atingido, osdados mais antigos são sobrepostos) , na porta 9800.

3. Esperar o tempo de coleta

4. Analisar e entregar o relatório.

Esse relatório foi entregue dia 23/09/2004. Ele está disponível noAnexo 1.

Descobrimos então que a Brasil Telecom respondeu por 17,64% dosuploads e 11,65% dos downloads. Foi encaminhado o relatório aosresponsáveis, e até o momento que eu estive na RNP não houve outrareunião com a Brasil Telecom.

Uma vez que a máquina a qual eu administrava (a máquina coletora)ainda continuava a receber os dados do Netflow, decidi então ampliar o usoda ferramenta para obter outras análises, uma extensão do projeto.

Essa extensão se basearia em:

a) Analisar os dados diariamente e extrair informações: Queria terinformações diárias sobre o volume total de upload e download diário, etambém o tráfego de entrada e saídas nas portas 80(http), 20(ftp), 25(snmp).

b) Que essa análise fosse automática, e gerasse gráficos todos osdias.

c) Esses gráficos fossem disponibilizados no site do PoP-GO.

6

Para executar tal projeto, precisaria deixar a máquina coletorasempre online recebendo fluxos de netflow, 24horas por dia, 7 dias porsemana, e então analisar e armazenar. Na verdade eu precisaria de umconjunto de ferramentas livres para realizar tal tarefa. Já havia no mesmoestágio instalado um software de monitoramento de rede chamado JFFNMS( Just For Fun NMS), que na verdade era um site em PHP que coletava dadosvia SNMP (simple network management protocol) , gerava gráficos e osarmazenava. Este mesmo software utilizada um conjunto de ferramentaschamadas RRDTool para armazenar os dados e então gerar os gráficos, deacordo com suas especificações. Então eu já sabia qual software utilizarpara gerar os gráficos, mas ainda não tinha extraído do flow-tools quaisdados seriam utilizados.

O que eu utilizei pode ser resumido na figura abaixo:

Figura 2: Hardware e software envolvido no projeto

No roteador não mexi em nada; apenas pedi ao pessoal do RJ paraprogramar o roteador para enviar dados do Netflow para minha estação IBM.E era nela na verdade que o trabalho todo é executado. Depois de analisaros dados e gerar os gráficos, é tudo transmitido via ssh com chave para oservidor web do PoP-GO.

Nas próxima seção descreverei os aspectos técnicos envolvendo aestação coletora.

3.3.1 Configuração da estação coletora

Para configurar a estação coletora, a primeira coisa é instalar opacote flow-tools. O tradicional configure, make e make install instalam osoftware tranquilamente.

7

Feito a instalação como manda o desenvolvedor, execute o flow-capture para fazer sua máquina armazenar os dados vindos do roteador(como foi dito anteriormente).

#flow-capture -w /netflow -E20G <ip_estação_coletora>/0/9800

Com esta linha é criado automaticamente uma estrutura de diretóriosdentro de /netflow separados por ano, mês e dia. E dentro do dia emquestão é que os arquivos dos fluxos são propriamente armazenados.

Veja como ficou nossa árvore de diretórios:

|-- 2004| |-- 2004-10| | |-- 2004-10-01| | |-- 2004-10-02| | |-- 2004-10-03| | |-- 2004-10-04| | |-- 2004-10-05| | |-- 2004-10-06| | |-- 2004-10-07| | |-- 2004-10-08| | |-- 2004-10-09| | |-- 2004-10-10| | |-- 2004-10-11| | |-- 2004-10-12| | |-- 2004-10-13| | |-- 2004-10-14| | |-- 2004-10-15| | |-- 2004-10-16| | |-- 2004-10-17| | |-- 2004-10-18| | |-- 2004-10-19| | |-- 2004-10-20| | |-- 2004-10-21| | |-- 2004-10-22| | |-- 2004-10-23| | |-- 2004-10-24| | |-- 2004-10-25| | |-- 2004-10-26| | |-- 2004-10-27| | |-- 2004-10-28| | |-- 2004-10-29| | |-- 2004-10-30| | `-- 2004-10-31| |-- 2004-11| | |-- 2004-11-01| | |-- 2004-11-02

Dentro de cada diretório é que ficam os arquivos de flows, que sãocomo abaixo:

1.3M ft-v05.2005-08-09.000000-03001.3M ft-v05.2005-08-09.001500-03001.2M ft-v05.2005-08-09.003000-0300

8

1.2M ft-v05.2005-08-09.004500-0300

Os arquivos criados começam o nome por ft. Vamos destricinhar oprimeiro arquivos pelo nome. FT de flow tools, v05 é a versão 5 do Netflow(vide Cisco para mais informações de outras versões), 2005-08-09 é a data,e 0000000 é a hora referente ao arquivo, que registra da 00:00 até 00:15 osfluxos, com zona geográfica de -3 horas em relação a GMT. O tamanho doarquivo é 1.3MB.

Flow-tools é um conjunto composto pelos seguintes softwares:

flow-capture – Coleta, comprime, armazena e gerencia o espaço emdisco para flows vindos do roteador.

flow-cat – Concatena os arquivos de flow. Tipicamente os arquivosde flows são referentes a 5 ou 15 minutos de exports. Use flow cat paraconcatená-los e aumentar suas análises para perídos de tempo maiores.

flow-report – Gera relatórios. Relatório incluem IP de origem edestino, AS de origem e destino. Mais de 50 tipos de relatórios sãosuportados.

flow-tag - Serve para marcar os flows baseados em IP ou AS. Essestags podem ser usadas depois com flow-report para gerar relatórios sobredeterminada faixa IP. Utilizamos para filtrar dados da AS Brasil Telecom.

flow-filter – Filtra o tráfego baseado em campos como porta. Porexemplo, podemos querer saber quanto tráfego da AS Brasil telecomcorresponde a porta 80. Então marcamos os flows com flow-tag e passamospara o flow-filter..

flow-import - Importa data de ASCII ou cflowd.

flow-export - Export data para ASCII ou cflowd .

flow-send – Envia dados na rede utilizando o protocolo netflow.

flow-receive – Recebe exports usando o protocolo Netflow porémsem armazenar em disco,como o flow-capture.

flow-gen – Gera dados para teste.

flow-dscan – ferramenta simples para detectar scanners na rede etentativas de ataques de negação de serviços (DDoS e DoS.

flow-merge – une arquivos em ordem cronológica.

flow-xlate – faz tradução de alguns campos.

flow-expire -Expiras fluxos utilizando a mesma política do flow-

9

capture.

flow-header – Exibe metadados do flow.

flow-split – divide arquivos em tamanho menores.

Bom, visto agora o que flow-tools possui, para usarmos bastaencadear com pipes (“|”) os comandos para obtermos os relatórios, com osdevidos parâmetros.

Vou demonstrar um exemplo de flow-tools:

flow-cat /netflow | flow-filter -p25 |flow-stat -f0

Este código concatena os arquivos do Netflow que estão abaixo daárvore /netflow, então passa para a flow-filter que filtra os que tém a porta25 e o flow-stat gera relatório a partir dos dados vindos da cadeia decomandos anteriores.

# --- ---- ---- Report Information --- --- ---## Fields: Total# Symbols: Disabled# Sorting: None# Name: Overall Summary## Args: /usr/local/netflow/bin/flow-stat -f0 #Total Flows : 161145Total Octets : 203357738Total Packets : 3360762Total Time (1/1000 secs) (flows): 1288065068Duration of data (realtime) : 86400Duration of data (1/1000 secs) : 86470120Average flow time (1/1000 secs) : 7993.0000Average packet size (octets) : 60.0000Average flow size (octets) : 1261.0000Average packets per flow : 20.0000Average flows / second (flow) : 1.8636Average flows / second (real) : 1.8651Average Kbits / second (flow) : 18.8142Average Kbits / second (real) : 18.8294

IP packet size distribution: 1-32 64 96 128 160 192 224 256 288 320 352 384 416448 480 .000 .419 .459 .110 .007 .002 .001 .000 .000 .000 .000 .000 .000 .000 .000

512 544 576 1024 1536 2048 2560 3072 3584 4096 4608 .000 .001 .000 .000 .000 .000 .000 .000 .000 .000 .000

10

Packets per flow distribution: 1 2 4 8 12 16 20 24 28 32 36 40 4448 52 .180 .042 .070 .216 .181 .132 .060 .022 .013 .008 .006 .005 .006 .004 .003

60 100 200 300 400 500 600 700 800 900 >900 .004 .010 .024 .005 .004 .002 .001 .001 .000 .000 .001

Octets per flow distribution: 32 64 128 256 512 1280 2048 2816 3584 4352 5120 5888 66567424 8192 .000 .141 .066 .074 .087 .451 .106 .019 .008 .005 .007 .007 .006 .003 .002

8960 9728 10496 11264 12032 12800 13568 14336 15104 15872 >15872 .001 .002 .001 .001 .001 .001 .001 .000 .001 .001 .011

Flow time distribution: 10 50 100 200 500 1000 2000 3000 4000 5000 6000 7000 80009000 10000 .205 .002 .005 .014 .030 .045 .093 .099 .062 .055 .047 .037 .030 .043 .029

12000 14000 16000 18000 20000 22000 24000 26000 28000 30000 >30000 .040 .028 .023 .017 .013 .014 .011 .007 .006 .005 .040

Visto um exemplo básico, passamos agora ao ambiente de produção,como realizo o monitoramento.

Todo processo é resumido em scripts agendadados no crond aexecução a partir de 00:01 horas.

#!/bin/bash#scrip daily – a ser executado diariamente pelo crond#Giovane Moreira [email protected] /root/scripts/n_generate/root/scripts/n_ripdata/root/scripts/NGRAPHSscp -r -i /home/grafico/.ssh/id_rsa /root/scripts/graphs/login@servidorweb:/var/www/popgo/dir_destino/

Um fluxograma de execução da solução seria:

Figura 3: Fluxograma de execução do projeto

11

Como se pode ver, ele chama na verdade 3 scripts e realiza um scppara o servidor web. Eis a função de cada um:

Script n_generate: gerar os relatórios do flow-tools a partir do quefoi armazenado no disco. Sempre se analisa os dados do dia anterior, porisso date recebe 1 day ago. Como produto gera uma série de arquivos .txt,que contém os relatórios.

#!/bin/bash

#n_generate: script para acessar os diretórios gerados pelo flow-capture e então gerar os dados necessários para gerar os gráficos viarrdtool.

#date recebe data no formato 2005/2005-07/2005-07-08, que é a#estrutura de diretórios do flow-capture que contem os flows.

data=`date --date '1 days ago' +%Y/%Y-%m/%Y-%m-%d` netflow_dir=/usr/local/netflow/bin dir=/netflow/$data/#acessa o diretório dos fluxos do dia.cd $dir echo $dir

#Gera upload.txt que contém o Upload Total do roteador$netflow_dir/flow-cat $dir |$netflow_dir/flow-stat -f18>/netflow/${data}/upload.txt

#Download Total$netflow_dir/flow-cat $dir |$netflow_dir/flow-stat -f17>/netflow/${data}/download.txt

#Upload na Porta 80$netflow_dir/flow-cat $dir |$netflow_dir/flow-filter -P80 |$netflow_dir/flow-stat -f0 > /netflow/${data}/p80u.txt

#Download na Porta 80$netflow_dir/flow-cat $dir |$netflow_dir/flow-filter -p80 |$netflow_dir/flow-stat -f0 > /netflow/${data}/p80d.txt

#Upload na Porta 20$netflow_dir/flow-cat $dir |$netflow_dir/flow-filter -P20 |$netflow_dir/flow-stat -f0 >/netflow/${data}/p20u.txt

#Download na Porta 20 $netflow_dir/flow-cat $dir |$netflow_dir/flow-filter -p20 |$netflow_dir/flow-stat -f0 >/netflow/${data}/p20d.txt

#Upload na Porta 25$netflow_dir/flow-cat $dir |$netflow_dir/flow-filter -P25 |$netflow_dir/flow-stat -f0 >/netflow/${data}/p25u.txt

#Download na Porta 25 $netflow_dir/flow-cat $dir |$netflow_dir/flow-filter -p25 |$netflow_dir/flow-stat -f0 >/netflow/${data}/p25d.txt

12

Script n_ripdata: precisamos extrair do relatório bruto (os .txtgerados acima) os dados que serão passados ao RRDTOOL para gerarem osgráficos. Por exemplo, queremos saber quantos bytes passaram de uploadna porta 25, e armazenar isso em um arquivo para que possa ser lido,apenas o número total. E então esse valor é armazenado nos arquivos doRRDTOOL.

#!/bin/bash

#n_ripdata: script para extrair dados dos relatórios do flow-tools,para então usar no RRDTTOOL#como converter data em timestamp: date -d040914 +%snetflow_dir=/usr/local/netflow/bin/data=`date --date '1 days ago' +%Y/%Y-%m/%Y-%m-%d `datastamp=`date --date '1 days ago' +%s`

cd /netflow/${data}#abaixo são expressões regulares que extraem os campos que serão#armazenados em arquivos _rrd.txt para leitura do RRDTool, apenas o #dado que interessa. É feito uma execução para cada txt.

#upload total head -13 upload.txt|tail -1 | sed "s/\W* \W* \(\W\)/\1/g " | awk -F"" '{print $3}' > upload_rrd.txt

#download totalhead -13 download.txt|tail -1 | sed "s/\W* \W* \(\W\)/\1/g " | awk-F" " '{print $3}' >download_rrd.txt

#download na porta 80 head -11 p80d.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g " | awk -F"" '{print $3}' >p80d_rrd.txt

#download na porta 20head -11 p20d.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g " | awk -F"" '{print $3}' >p20d_rrd.txt

#download na porta 25head -11 p25d.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g " | awk -F"" '{print $3}' >p25d_rrd.txt

#upload na porta 80 head -11 p80u.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g " | awk -F"" '{print $3}' >p80u_rrd.txt

#upload na porta 20 head -11 p20u.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g " | awk -F"" '{print $3}' > p20u_rrd.txt

#upload na porta 25 head -11 p25u.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g " | awk -F"" '{print $3}' >p25u_rrd.txt

#esses dados são gerados em bytes, queremos convertê-los para #gigabytes, por isso chamamos o programa a.out (feito em c) para #executar isso. E grava no mesmo arquivo. Apenas converte de bytes

13

#para gbytes.

temp=$(cat upload_rrd.txt)/root/scripts/a.out $temp > upload_rrd.txttemp=$(cat download_rrd.txt)/root/scripts/a.out $temp > download_rrd.txt

temp=$(cat p20d_rrd.txt)/root/scripts/a.out $temp > p20d_rrd.txt temp=$(cat p20u_rrd.txt)/root/scripts/a.out $temp > p20u_rrd.txt

temp=$(cat p25d_rrd.txt)/root/scripts/a.out $temp > p25d_rrd.txttemp=$(cat p25u_rrd.txt)/root/scripts/a.out $temp > p25u_rrd.txt

temp=$(cat p80d_rrd.txt)/root/scripts/a.out $temp > p80d_rrd.txttemp=$(cat p80u_rrd.txt)/root/scripts/a.out $temp > p80u_rrd.txt

#agora é que precisamos colocar os arquivos na forma que o RRDTOOL#consegue armazenar. A saída será algo na forma: 40:30:20:20.30 #na documentação do rrdtool será explicado o porque desta forma.

#arquivo que o netflow lê e armazena. Versão dos downloads.temp=`cat download_rrd.txt``echo :``cat p80d_rrd.txt``echo :``catp20d_rrd.txt``echo :``cat p25d_rrd.txt`echo $temp > update_d

#arquivo que o netflow lê e armazena. Versão dos uploads.temp=`cat upload_rrd.txt``echo :``cat p80u_rrd.txt``echo :``catp20u_rrd.txt``echo :``cat p25u_rrd.txt`echo $temp >update_u

#comando que faz o rrdtool atualizar sua base com os arquivos#coletados do dia. Apenas atualiza./usr/bin/rrdtool update /root/scripts/download.rrd $datastamp:`catupdate_d`/usr/bin/rrdtool update /root/scripts/upload.rrd $datastamp:`catupdate_u`

Script NGRAPHS: script responsável por gerar os gráficos edisponibilizar automaticamente nos diretórios. Cria os gráficos, geradiretórios de acordo com a data.

#!/bin/bash

#NGRAPHS: script de criação de gráficos, árvore de diretórios dedisponibilização no apache. por Giovane Moreira [email protected]

#primeiramente devemos testar se há realmente os diretórios paraguardar os gráficos. A estrutura de diretórios segue o padrã

#graphs/ANO/MES <DENTRO DE MES TEM AS PASTAS#mensal,1st,2nd,3rd,last,cada qual com 6 gráficos distintos.

14

#após atualizar os rrd , é preciso gerar os gráficos novamente e#disponibilizar. cd /root/scriptsano=`date +%y`mes=`date +%m` temp=`date +%d`ano_mes=`echo graphs/$ano/$mes`ano_dir=`echo graphs/$ano`rrdtool=/usr/bin/rrdtool

#determina qual semana estamos, se é 1, 2 3 ou 4if [ $temp -lt 8 ]; then semana=1 elif [ $temp -ge 7 ] && [ $temp -lt 15 ]; then semana=2 elif [ $temp -ge 15 ] && [ $temp -lt 22 ]; then semana=3else semana=4fi

#testa se os diretórios existem. Os gráfico são organizados numa#árvore como: <ano><mes><semana>

if [ -d $ano_mes ]; then echo "os dir estão ok"elif [ -d $ano_dir ]; then #cria dir do mes novo mkdir /root/scripts/graphs/$ano/$mes mkdir /root/scripts/graphs/$ano/$mes/mensal mkdir /root/scripts/graphs/$ano/$mes/1st mkdir /root/scripts/graphs/$ano/$mes/2nd mkdir /root/scripts/graphs/$ano/$mes/3rd mkdir /root/scripts/graphs/$ano/$mes/last

else mkdir /root/scripts/graphs/$ano mkdir /root/scripts/graphs/$ano/$mes mkdir /root/scripts/graphs/$ano/$mes/mensal mkdir /root/scripts/graphs/$ano/$mes/1st mkdir /root/scripts/graphs/$ano/$mes/2nd mkdir /root/scripts/graphs/$ano/$mes/3rd mkdir /root/scripts/graphs/$ano/$mes/lastfi #funções que geram os gráficos.. serão invocadas logoabaixo...

#Geral_updown: gera gráfico de upload e download total, sem#dividir por portas.

Geral_updown() {

15

#gráfico down e upload total syear=$1 #syear = start year – ano de início smonth=$2 sday=$3 eano=$4 #eano = end ano – ano de fim emes=$5 eday=$6

#essa variáveis valem para todas as funções de gráficos desse #script. Delimitam o intervalo de início e fim da geração dos #gráficos.

$rrdtool graph Geral_updown.gif --start `date -d ${syear}${smonth}${sday} +%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoP-GO: Cisco - Downloads e Uploads Volume Total - Ano:$syearMês:$smonth" --vertical-label "gigabytes"DEF:download=download.rrd:download:LASTDEF:upload=upload.rrd:upload:LAST LINE1:download#ff0000:"Downloads"LINE2:upload#0400ff:"Uploads" 'GPRINT:download:LAST:ÚltimoDownload\:%2.1lf GB' 'GPRINT:upload:LAST:Último Upload\:%2.1lf GB''GPRINT:download:MAX:Download Max\:%2.1lf GB''GPRINT:upload:MAX:Upload Max\:%2.1lf GB' 'GPRINT:download:MIN:Download Mín\:%2.1lf GB' 'GPRINT:upload:MIN:Upload Mín\:%2.1lfGB' -w 509 }

#gera o gráfico de upload e download nas portas específicas.

Portas_updown() {#gráfico down e upload nas portas específicas syear=$1 smonth=$2 sday=$3 eano=$4 emes=$5 eday=$6 porta=$7 $rrdtool graph P${porta}_updown.gif --start `date -d ${syear}${smonth}${sday} +%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoP-GO: Cisco - Downloads e Uploads Volume Total - Porta$porta Ano:$syear Mês:$smonth" --vertical-label "gigabytes"DEF:download=download.rrd:p${porta}d:LAST DEF:upload=upload.rrd:p${porta}u:LAST LINE1:download#ff0000:"Downloads Porta $porta"LINE2:upload#0400ff:"Uploads Porta $porta"'GPRINT:download:LAST:Último Download\:%2.1lf GB''GPRINT:upload:LAST:Último Upload\:%2.1lf GB''GPRINT:download:MAX:Download Max\:%2.1lf GB' 'GPRINT:upload:MAX:Upload Max\:%2.1lf GB' 'GPRINT:download:MIN:Download Mín\:%2.1lf GB' 'GPRINT:upload:MIN:Upload Mín\:%2.1lf GB' -w 509}

All_down() {#gráfico download geral e na P80,P20 e P25 syear=$1 smonth=$2 sday=$3 eano=$4 emes=$5 eday=$6

16

$rrdtool graph All_down.gif --start `date -d ${syear}${smonth}${sday}+%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoP-GO:Cisco - Downloads - Volume Total - Total,Portas 80,20,25 Ano:$syearMês:$smonth" --vertical-label "gigabytes"DEF:download=download.rrd:download:LAST DEF:p80d=download.rrd:p80d:LAST DEF:p20d=download.rrd:p20d:LASTDEF:p25d=download.rrd:p25d:LAST LINE1:download#ff0000:"DownloadTotal" LINE2:p80d#0400:"Download Porta 80"LINE3:p20d#00FF00:"Download Porta 20" 'GPRINT:download:LAST:ÚltimoDownload\:%2.1lf GB' 'GPRINT:p80d:LAST:Último Download80\:%2.1lf GB' 'GPRINT:p20d:LAST:Último Download P20\:%2.1lf GB''GPRINT:p25d:LAST:Último Download P25\:%2.1lf GB''GPRINT:download:MAX:Download Max\:%2.1lf GB''GPRINT:p80d:MAX:Download Max P80 \:%2.1lf GB''GPRINT:p20d:MAX:Download Max P20 \:%2.1lf GB''GPRINT:p25d:MAX:Download Max P25:%2.1lf GB''GPRINT:download:MIN:Download Mín\:%2.1lf GB''GPRINT:p80d:MIN:Download Mín P80\:%2.1lf GB''GPRINT:p20d:MIN:Download Mín P20\:%2.1lGB' 'GPRINT:p25d:MIN:Download Mín P25\:%2.1lf GB' -w 509 }

All_up() {#gráfic upload geral e na P80,P20 e P25 $rrdtool graph All_up.gif --start `date -d ${syear}${smonth}${sday}+%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoP-GO:Cisco -Uploads - Volume Total - Total,Portas 80,20,25 Ano:$syearMês:$smonth" --vertical-label "gigabytes"DEF:upload=upload.rrd:upload:LAST DEF:p80u=uploadrd:p80u:LAST DEF:p20u=upload.rrd:p20u:LASTDEF:p25u=upload.rrd:p25u:LAST LINE1:upload#ff0000:"Upload Total"LINE2:p80u#0400ff:"Upload Porta 80" INE3:p20u#00FF00:"Upload Porta 20" 'GPRINT:upload:LAST:ÚltimoUpload\:%2.1lf GB' 'GPRINT:p80u:LAST:Último Upload P80\:%2.1lf GB''GPRINT:p20u:LAST:Último Upload P20\:%2.1lf GB''GPRINT:p25u:LAST:Último Upload P25\:%2.1lf GB''GPRINT:upload:MAX:Upload Max\:%2.1lf GB' 'GPRINT:p80u:MAX:Upload MaxP80 \:%2.1lf GB' 'GPRINT:p20u:MAX:Upload Max P20 \:%2.1lf GB''GPRINT:p25u:MAX:Upload Max P25 \:%2.1lf GB''GPRINT:upload:MIN:Upload Mín\:%1lf GB' 'GPRINT:p80u:MIN:Upload MínP80\:%2.1lf GB' 'GPRINT:p20u:MIN:Upload Mín P20\:%2.1lf GB''GPRINT:p25u:MIN:Upload Mín P25\:%2.1lf GB' -w 509

}

#funções agora que setam variáveis e então invocam as funçoes#geradoras de gráficos...#Mensal gera gráficos para o mês inteiro,invocando funções anteriores: Mensal () { #seta syear, smonth e sday, eyear,emonth e eday e invoca

syear=$ano smonth=$mes sday=01 eyear=$ano emonth=$mes eday=07

17

Geral_updown $syear $smonth $sday $eyear $emonth $eday ; Portas_updown $syear $smonth $sday $eyear $emonth $eday 80; Portas_updown $syear $smonth $sday $eyear $emonth $eday 20; Portas_updown $syear $smonth $sday $eyear $emonth $eday 25; All_down $syear $smonth $sday $eyear $emonth $eday ; All_up $syear $smonth $sday $eyear $emonth $eday;

#move paras as devidas pastas mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/1st/ mv P80_updown.gif /root/scripts/graphs/$ano/$mes/1st/ mv P25_updown.gif /root/scripts/graphs/$ano/$mes/1st/ mv P20_updown.gif /root/scripts/graphs/$ano/$mes/1st/ mv All_down.gif /root/scripts/graphs/$ano/$mes/1st/ mv All_up.gif /root/scripts/graphs/$ano/$mes/1st/

}

#segunda no caso se for a segunda semana do mês Segunda () { #seta syear, smonth e sday, eyear,emonth e eday e invoca

syear=$ano smonth=$mes sday=08 eyear=$ano eday=15 emonth=$mes

Geral_updown $syear $smonth $sday $eyear $emonth $eday ; Portas_updown $syear $smonth $sday $eyear $emonth $eday 80; Portas_updown $syear $smonth $sday $eyear $emonth $eday 20; Portas_updown $syear $smonth $sday $eyear $emonth $eday 25;

All_down $syear $smonth $sday $eyear $emonth $eday ; All_down $syear $smonth $sday $eyear $emonth $eday ;

All_up $syear $smonth $sday $eyear $emonth $eday;

#move paras as devidas pastas mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/2nd/ mv P80_updown.gif /root/scripts/graphs/$ano/$mes/2nd/ mv P25_updown.gif /root/scripts/graphs/$ano/$mes/2nd/ mv P20_updown.gif /root/scripts/graphs/$ano/$mes/2nd/ mv All_down.gif /root/scripts/graphs/$ano/$mes/2nd/ mv All_up.gif /root/scripts/graphs/$ano/$mes/2nd/

} #para terceira semana do mês

Terceira () { #seta syear, smonth e sday, eyear,emonth e eday e invoca syear=$ano smonth=$mes sday=16 eyear=$ano emonth=$mes eday=21

18

Geral_updown $syear $smonth $sday $eyear $emonth $eday ; Portas_updown $syear $smonth $sday $eyear $emonth $eday 80; Portas_updown $syear $smonth $sday $eyear $emonth $eday 20; Portas_updown $syear $smonth $sday $eyear $emonth $eday 25;

All_down $syear $smonth $sday $eyear $emonth $eday ; All_up $syear $smonth $sday $eyear $emonth $eday ;

#move as pastas pros devidos locaiss pastas mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/3rd/ mv P80_updown.gif /root/scripts/graphs/$ano/$mes/3rd/ mv P25_updown.gif /root/scripts/graphs/$ano/$mes/3rd/ mv P20_updown.gif /root/scripts/graphs/$ano/$mes/3rd/ mv All_down.gif /root/scripts/graphs/$ano/$mes/3rd/ mv All_up.gif /root/scripts/graphs/$ano/$mes/3rd/

}#para última semana do mês

Last () { #seta syear, smonth e sday, eyear,emonth e eday e invoca

syear=$ano smonth=$mes sday=22 eyear=$ano emonth=$mes #informa se o mês tem 30 ou 31 ou 28 dias. case $mes in O1) eday=31 ;; 02) eday=28 ;; 03) eday=31 ;; 04) eday=30 ;; 05) eday=31 ;; 06) eday=30 ;; 07) eday=31 ;; 08) eday=31 ;; 09) eday=30 ;; 10) eday=31 ;; 11) eday=30 ;; 12) eday=31 ;; esac

Geral_updown $syear $smonth $sday $eyear $emonth $eday ; Portas_updown $syear $smonth $sday $eyear $emonth $eday 80; Portas_updown $syear $smonth $sday $eyear $emonth $eday 20; Portas_updown $syear $smonth $sday $eyear $emonth $eday 25; All_down $syear $smonth $sday $eyear $emonth $eday ; All_up $syear $smonth $sday $eyear $emonth $eday;

#move paras as devidas pastas mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/last/ mv P80_updown.gif /root/scripts/graphs/$ano/$mes/last/ mv P25_updown.gif /root/scripts/graphs/$ano/$mes/last/ mv P20_updown.gif /root/scripts/graphs/$ano/$mes/last/ mv All_down.gif /root/scripts/graphs/$ano/$mes/last/ mv All_up.gif /root/scripts/graphs/$ano/$mes/last/}

19

All_down $syear $smonth $sday $eyear $emonth $eday ; All_up $syear $smonth $sday $eyear $emonth $eday;

#move paras as devidas pastas mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/last/ mv P80_updown.gif /root/scripts/graphs/$ano/$mes/last/ mv P25_updown.gif /root/scripts/graphs/$ano/$mes/last/ mv P20_updown.gif /root/scripts/graphs/$ano/$mes/last/ mv All_down.gif /root/scripts/graphs/$ano/$mes/last/ mv All_up.gif /root/scripts/graphs/$ano/$mes/last/}

#se for a 1ª semana, não há necessidade de gerar gráfico da 2ªsemana.

if [ $semana -eq 1 ]; then #gera graficos mensal apenas, e copias ele pra pasta 1st.. pq#sao iguasi! Mensal ; Primeira ;

elif [ $semana -eq 2 ]; then #gera grafico mensal, 1st e 2nd Mensal ; Primeira ; Segunda ;

elif [ $semana -eq 3 ]; then #gera grafico mensal, 1st, 2nd e 3rd Mensal ; Primeira ; Segunda ; Terceira ; elif [ $semana -eq 4 ]; then #gera todos os graficos Mensal ; Primeira ; Segunda ; Terceira ; Last ; fi

#copia os gráficos para o diretório correto.cp -r /root/scripts/graphs /var/www/htdocschown -R nobody /var/www/htdocs/graphs

3.2.2 Resultado e produtos obtidos

O produto deste final são os gráficos que são automaticamentecolocados na árvore de diretórios,algo com a figura abaixo:

20

Figura 4: árvore de diretórios gerada pelo script n_generate

A pasta acima na figura 04 indica o ano, 10 o mês, e 1st, 2nd,3rd ,lastindicam a semana do mês. Já mensal é a pasta para o mês inteiro. Cadapasta dessas recebe arquivos .gif que são os gráficos. Depois basta linkarisso a um site e estará pronto na internet.

Os gráficos obtidos serão como o abaixo:

Figura 5: Gráfico all_down.gif Primeira semana de abril. Downloadseparado por porta

Mais gráficos gerados pelos scripts podem ser vistos na seçãomonitoramento do site http://www.pop-go.rnp.br

Agora já temos o produto final, porém alguns itens ainda não foramexplicados em relação ao script n_generate.

Um deles é o programa a.out , que converte dados de bytes paragigabytes. Eis abaixo o código dele:

// a.c – softaware de conversão de valores de byte para gigabytes.

21

#include <stdlib.h># include <stdio.h>#include <math.h>int main(int argc, char *argv[]) { if(argc != 2) return(99);

printf("%.3f",((atof(argv[1])/1024)/1024)/1024); return(0);

}

Outra coisa que ainda não expliquie foi o uso da ferrramenta Rdtool,como ele opera e como gera os gráficos. Preferi deixar isso para agora paraevitar confusões.

3.2.3. Entendendo o RRDtool

RRDtool é uma ferramenta que cria arquivos na ordem round-robin eentão armazena os valores (como uma base de dados) e depois pode gerargráficos a partir desses valores. É uma evolução de outro projeto, o MRTG.Enquanto MRTG é focado em aplicações SNMP, o RRDTool pode ser usadopara monitorar qualquer tipo de dado, desde dados de rede decomputadores a crescimento de bactérias. Para gerar gráficos, ele requer abiblioteca gráfica GD.

Antes de usarmos o RRDtool no projeto, precisamos criar os arquivos.rrd , que serão a base de dados para os dados. É nele que serão inseridosos valores diários de upload na porta 80, upload total, download na porta20, etc... .

No uso no PoP-GO decidi criar 2 arquivos: um para dowloads e outropara uploads. Utilizei o comando:

#Arquivo RRD de downloads

rrdtool create download.rrd --start `date -d 040930 +%s` --step 86400DS:download:GAUGE:86400:0:200 DS:p80d:GAUGE:86400:0:200DS:p20d:GAUGE:86400:0:200 DS:p25d:GAUGE:86400:0:200 RRA:LAST:0.5:1:7 RRA:LAST:0.5:1:30 RRA:LAST:0.5:1:365

#Arquivo RRD de Uploadsrrdtool create upload.rrd --start `date -d 040930 +%s` --step 86400DS:upload:GAUGE:86400:0:200 DS:p80u:GAUGE:86400:0:200DS:p20u:GAUGE:86400:0:200 DS:p25u:GAUGE:86400:0:200 RRA:LAST:0.5:1:7 RRA:LAST:0.5:1:30 RRA:LAST:0.5:1:365

A sintaxe do arquivo de downloads quanto o de uploads ébasicamente a mesma, de forma que basta explicar apenas um deles. Oparâmetro create download.rrd passa ao RRDtool que criaremos umarquivo novo do zero, com data inicial em 30/09/04 , passado peloparâmetro --start . O parâmetro step informa que o passo em segundosque atualizaremos o arquivo, ou seja, o arquivo será atualizado a cada 24horas, ou 86400 segundos. É que nossa análise é feita após o fim do dia,onde extraímos tudo que aconteceu. Já o parâmetro DS:ds-name:DST:dst

22

arguments significa que estamos criando uma fonte de dados. DS é siglapara Data Source (fonte de dados). Temos várias fontes no script, e pegandocomo exemplo a DS:p80u:GAUGE:86400:0:200 temos que p80u é umnome para nossa data source (na verdade, armazena os uploads da porta80,sintaxe que eu uso, você pode usar a que quiser). GAUGE significa quedevemos armazenar nosso dado com ele chega. Outras opções no lugar deGAUGE seriam DERIVE, que armazena a derivada da reta valor que chegaem relação ao valor anterior. Existem outros tipos de fonte de dados (DST –data source types), consulte as páginas de manual do software para maisinformações. Como argumentos estamos usando 86400, que é o períodopara atualização do arquivo. E 0:200 no caso define a faixa máxima devalores que pode variar este dado, no caso nosso de 0 gigabytes a 200gigabytes. Qualquer valor fora deixa faixa será interpretado com UNKNOWN.Por exemplo, não é possível que tenhamos download abaixo de 0.

No que se refere ao comando RRA:LAST:0.5:1:7, RRA é a siglapara Round-Robin Archive. Um RRA consiste de dados estatísticos de DS(data sources). A sintaxe genérica para o RRA é RRA:AVERAGE | MIN | MAX| LAST:xff:steps:rows , que na verdade é parâmetro que diz o que deveser feito com os dados do DS.Pode ser uma média e armazenar de hora emhora, mas no nosso caso ele armazena o último valor recebido. É o arquivoque determina quantos slots tem para armazenar dados, evitando ocrescimento linear da base de dados. Ele armazena amostras parasemana,mês e ano no nosso caso.

Depois destes arquivos criados, o primeiro passo o armazenar osdados neles, feito da seguinte forma:

# esse comando diz para atualizar o arquivo dowload.rrd com a data #atual e o conteúdo extraído de update_d. Vide NGRAPHS.

rrdtool update /root/scripts/download.rrd $datastamp:`cat update_d`

Ou seja, inserimos um valor como por exemplo 20:40:40:32, queserão os valroes dos downloads geral, na porta 80, 20 e 25 para o dia(representado por $datastamp, vide NGRAPHS) em questão. No outro dia,quando rodarmos o script, o datastamp será outro e atualizaráautomaticamente o valor.

Com os dados “populados”, basta agora gerarmos os gráficos. ORRDtool fornece um parâmetro para criar gráficos. Vejamos o exemplo:

$rrdtool graph Geral_updown.gif --start `date -d ${syear}${smonth}${sday} +%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoP-GO: Cisco - Downloads e Uploads Volume Total - Ano:$syearMês:$smonth" --vertical-label "gigabytes"DEF:download=download.rrd:download:LASTDEF:upload=upload.rrd:upload:LAST LINE1:download#ff0000:"Downloads"LINE2:upload#0400ff:"Uploads" 'GPRINT:download:LAST:ÚltimoDownload\:%2.1lf GB' 'GPRINT:upload:LAST:Último Upload\:%2.1lf GB''GPRINT:download:MAX:Download Max\:%2.1lf GB''GPRINT:upload:MAX:Upload Max\:%2.1lf GB' 'GPRINT:download:

23

MIN:Download Mín\:%2.1lf GB' 'GPRINT:upload:MIN:Upload Mín\:%2.1lfGB' -w 509 }

O parâmetro graph diz ao rrdtool para criar um gráfico de nomeGeral_updown.gif, a partir da data depois de --start. Essa data é a do diaanterior, visto que geramos o gráfico e análises após a meia noite.Estabelecemos o fim do gráfico pela opção --end . O parâmetro --titleinforma qual será o título que aparecerá no gráfico, no cabeçalho, como nafigura acima foi PoP-GO ... . A linhaDEF:download=download.rrd:download:LAST serve para buscar dadosno arquivo rrd. Dentro de download.rrd, pegaremos o valor da DS downloadcom a função de consolidação LAST e armazenaremos num nome virtual(vname) também chamado download. Esse vname é o download após DEF:.Aí dentro deste comando quando quisermos nos refererir a este valor dedownload dentro de download.rrd, usaremos o nome download apenas. Oparâmetro LINE1:download#ff0000:"Downloads" cria uma linha da corff0000 que conterá o valor de download variando no no intervalo de tempoque escolhemos acima com --start --end . O parâmetro'GPRINT:download:MAX:Download Max\:%2.1lf GB' imprime uma linhaque diz Downlaod Max no gráfico e joga o conteúdo de download na frente.O parâmetro -w 509 informa a largura máxima da figura, que será 509pixels. Foi necessário para padronizar o tamanho do gráfico para o site doPoP-GO.

Pode parecer um pouco complicado, e recomendo leitura das páginasde manual e tutoriais do site oficial do RRDTool. Com isso fecha-se nossasferramentas desenvolvidas e obtivemos o resultado desejado.

Lembre-se que Netflow possibilita vários tipos de relatórios, juntocom flow-tools. Basta usar a criatividade e extair, monitorar e gerar gráficosde diversas situações. Uma delas seria o tráfego P2P.

Melhorias desse software seriam a integração com um banco dedados relacional livre e integração com alguma ferramenta demonitoramento,como o JFFNMS.

Essa seção se focou apenas em apresentar a ferramentas. Asconclusões e análise de resultados podem ser obtidas na seção 4 deconclusão.

3.3 Pesquisa em Multimídia sobre IP

Meu projeto final de curso se relaciona a multimídia sobre IP. Na RNPdediquei parte do tempo a pesquisa nessa área. Vários artigos eu li do sitedos Periódicos da Capes, principalmente artigos do IEEE Xplore.

Participei do 5º Fórum Internacional do Software Livre em PortoAlegre, junho de 2005. Lá vi os trabalhos na mesma área do PoP-BA.Estavam presentes o pessoal do VideoLan Project, projeto de um player de

24

vídeo e servidor livre. Realizei testes fazendo streaming com estaferramenta, e monitorei utilizando o protocolo SNMP com a ferramentaJFFNMS.

O teste que realizei com o VLC foi fazer um streaming de arquivo deáudio codificado com MPEG1 layer 3 (MP3) de qualidade fixa de 128kbpspara outra máquina em outra rede. Monitorando a saída da placa de rede,obtivemos o resultado que pode ser observado relatório incluído no anexo2.

Li muitos artigos que estão sendo de fundamental importância parameu projeto final. Os resultados dessa pesquisa poderá ser visto no artigo.

No que se refere ao JFFNMS, criei um guia de instalação para oSlackware/Linux que pode ser visto no anexo 3. Esse guia foi traduzido doinglês e adaptado ao Slackware por mim.

4. Conclusão

O desafio lançado pelo PoP-GO sobre mim a fim de obter osresultados do monitoramento foi muito empolgante. Tive a chance deaprofundar o estudo em redes de computadores,incluindo aí a pilha TCP/IP,monitoramento, tecnologias de ponta como Cisco Netflow, segurança,serviços e métricas de desempenho, aprender muito sobre redes de grandeporte com suas AS,roteamento de borda, uma infinidade inesgotável deassuntos. Desconheço em qualquer outro lugar do estado de Goiás que setenha a mesma estrutura disponível e que eu teria uma oportunidadesemelhante. Somente em estágio eu poderia ter aprendido tanto, foi o localonde fixei um objetivo e fiz pesquisa,baseado no conhecimento de sala deaula.

Outro ponto forte foi aprender bastante sobre integração deferramentas de software livre. Com o flow-tools se coleta os dados, e com orrdtool se armazena faz-se os gráficos (e por sua vez rrdtool utiliza outragrama de aplicativos livres, como a biblioteca gráfica GD para gerargráficos), então automatizar este processo com scripts em Shell e código emC e finalmente disponibilizar o conteúdo num servidor web (apache,livre) viassh. , e integrar uma gama de ferramentas de software livre para gerar umproduto pronto, os gráficos de monitoramento do site do PoP-GO.

Todas essas atividades exigiram muita pesquisa e dedicação. Muitosdias na internet, falando com os colegas de trabalho (que sem eles isso nãoteria sido possível),sempre focando na busca da melhor forma de fazer ascoisas.

Os resultados obtidos foram um sistema operante de monitoramentopara medição de tráfego para o PoP-GO devidamente documentado nesterelatório,utilizando apenas software livres.

Dificuldades sempre existiram durante todo o percurso. Agradeço a

25

todos os colegas de trabalho pela ajuda, a equipe do PoP-GO e da UFGNet.

Uma observação que gostaria de deixar é que este relatório foiinteiramente feito com software livre. OpenOffice.org como editor de texto,Dia como programa para gráficos e diagramas.

Antes desse projeto também estive usando outras ferramentas demonitoramento SNMP,tais como JFFNMS e Cacti. Percebi que em nenhumadelas existe o suporte de monitoramento com Netflow. Algo para continuçãodesse projeto seria a integração desses códigos que realizei com algumsoftware desse nível.

26

Anexo 1

Relatório de análise de tráfego entre redes do

PoP-GO/RNP e Brasil Telecom

Introdução

Este relatório visa estimar o tráfego trocado entre as redes do Pontode Presença em Goiás da Rede Nacional de Ensino e Pesquisa (PoP-GO) eBrasil Telecom. A necessidade de obter estes valores é verificar a viabilidadedo estabelecimento de um Ponto de Troca de Tráfego (PTT) entre as duasredes em Goías evitando assim todo o percurso até Curitiba que os pacotesatualmente passam, mesmo se o destino for um host em Goiás.

Para obter estes valores, coletamos por um período de 37 dias (de 22de Julho à 24 de agosto de 2004, e de 14 de setembro à 17 de setembro) osdados vindos do roteador Cisco do PoP-GO. (lembramos que julho é operíodo de férias acadêmicas da UFG, maior cliente do PoP-GO, e háredução substancial do tráfego). Os dados obtidos via Netflow foram entãodepois analisados com as ferramentas flow-tools, e assim conseguimos asestatísticas desejadas.

Análise dos dados e resultados

Além da meta primária de obter os valores trocados entre as duasredes (PoP-GO/RNP e Brasil Telecom), outra meta seria estabelecer quantorepresenta a troca de dados com a Brasil Telecom em relação a todo tráfegogerado. Obtivemos estes valores facilmente com flow-tools.

Começaremos primeiramente analisando toda saída do roteador.Segue abaixo o resultado:

#RELATÓRIO DE TODA ENTRADA (DOWNLOAD) DO CISCO ROUTER POP-GO/RNP.#Gerado em: 22/09/04 às 11:37 AM#Intervalo de coleta: 22/07-24/08 e 14/09-17/09##Sintaxe do comando(usando flow-tools para análise):#./flow-cat /flows/ /netflow |./flow-stat -f18 >SaidaTOTAL2.txt &#onde /flows e /netflow são diretórios dos flows capturados## --- ---- ---- Report Information --- --- ---## Fields: Total# Symbols: Disabled# Sorting: None# Name: Output interface#

27

# Args: ./flow-stat -f18### interface flows octets packets#7 215736716 1812267314100 31913494872 179471776 1291693851690 29480079811 75559134 360257865825 9256543150 50075433 29774437080 137316230

Dentre as três interfaces do roteador em questão, a número 7 é a querepresenta o link Goiânia-Rio de Janeiro (ATM, 12Mbps upload, 16Mbpsdownload). Estamos basicamente interessados nesta interface, visto que asoutras são de uso interno do PoP-GO. O output desta interface representatodo os dados que chegaram até o PoP-GO vindos de redes de fora, ouseja,downloads. O total de octetos roteados pela interface 7 é de1812267314100 , que dá um total de 1,648 Terabytes roteados pra dentrodo PoP- GO nesses 37dias.

O outro relatório é o que marca todas as entradas no roteador doPoP-GO (e devido ao sentido, representam os dados que saem da rede doPoP-GO para as demais redes, ou seja, upload). Segue ele abaixo:

#RELATÓRIO DE TODA SAÍDA (UPLOAD) DO CISCO ROUTER POP-GO/RNP.#Gerado em: 22/09/04 às 11:39 AM#Intervalo de coleta: 22/07-24/08 e 14/09-17/09##sintaxe do comando:#./flow-cat /flows/ /netflow |./flow-stat -f17 >EntradaTOTAL2.txt &#onde /flows e /netflow são diretórios dos flows capturados## --- ---- ---- Report Information --- --- ---## Fields: Total# Symbols: Disabled# Sorting: None# Name: Input interface## Args: ./flow-stat -f17### interface flows octets packets#7 244924205 1623219546750 30829722412 187627046 1558709347852 31516034031 88291808 312064574093 967752369

Como o que nos interessa é a interface 7, notamos que ela roteou1623219546750 octetos. Isso nos dá um valor total de 1,476 Terabytes nosmesmos 37 dias.

Agora que temos um valor total da saída e entrada na rede do PoP-GO. Analisaremos o quanto disso vem da rede da Brasil Telecom. Geramosdois relatório filtrando as faixas de endereço IP da Brasil Telecom (AS 8167)

28

O primeiro relatório abaixo lista todos os dados vindos da rede BrasilTelecom.

#RELATÓRIO DE ENTRADA DE DADOS NO POP-GO VINDOS DA BRT#Gerado em: 22/09/04 às 17:09#Intervalo de coleta: 22/07-24/08 e 14/09-17/09##Sintaxe do comando:# ./flow-cat /flows/ /netflow/ | ./flow-filter -f acl_new -SBrT | ./flow-stat#-f0 > OrigemBRT2.txt &#onde /flows e /netflow são diretórios dos flows capturados## --- ---- ---- Report Information --- --- ---## Fields: Total# Symbols: Disabled# Sorting: None# Name: Overall Summary## Args: ./flow-stat -f0#Total Flows : 18938016Total Octets : 211142339124Total Packets : 394304150Total Time (1/1000 secs) (flows): 136671796704Duration of data (realtime) : 4991368Duration of data (1/1000 secs) : 4294967076Average flow time (1/1000 secs) : 7216.0000Average packet size (octets) : 535.0000Average flow size (octets) : 11149.0000Average packets per flow : 20.0000Average flows / second (flow) : 4.4094Average flows / second (real) : 3.7942Average Kbits / second (flow) : 393.2833Average Kbits / second (real) : 338.4120

Analisando este relatório, temos que entraram no nosso roteador211142339124 octetos oriundo das Brasil Telecom, o que significaaproximadamente 196,64 Gigabytes nos 37 dias de coleta. Em relação aosdownloads de todo o PoP-GO, a Brasil Telecom responde sozinha por11,65%.

Figura 1: Porcentagem dos downloads no roteador

29

Outro relatório é o que marca os dados saem do PoP-GO para arede da Brasil Telecom:

#RELATÓRIO DE SAÍDA DE DADOS NO POP-GO COM DESTINO BRT#Gerado em: 22/09/04 às 17:10#Intervalo de coleta: 22/07-24/08 e 14/09-17/09##Sintaxe do comando:#./flow-cat /flows/ /netflow/ | ./flow-filter -f acl_new -DBrT| ./flow-stat#-f0 > SaidaBRT2.txt & exit#onde /flows e /netflow são diretórios dos flows capturados## --- ---- ---- Report Information --- --- ---## Fields: Total# Symbols: Disabled# Sorting: None# Name: Overall Summary## Args: ./flow-stat -f0#Total Flows : 17499828Total Octets : 286351956238Total Packets : 398041084Total Time (1/1000 secs) (flows): 132781952608Duration of data (realtime) : 4991370Duration of data (1/1000 secs) : 4294966948Average flow time (1/1000 secs) : 7587.0000

30

Figura 2: Porcentagem dos uploads no roteador

Analisando este relatório, notamos que sairam do roteador do PoP-GO 286351956238 octetos para a rede da Brasil Telecom, o que significaaproximadamente 266,68 Gigabytes nos 37 dias de coleta. Em relação aosuploads todos do PoP-GO, a Brasil Telecom responde sozinha por 17,64%.

Conclusões

Agora com estes valores obtidos, poderemos decidir a viabilidadedo Ponto de Troca de Tráfego. Os dados foram obtidos como desejado.Quaisquer dúvidas técnicas e/ou comentários favor entrar em contato noendereço abaixo.

Giovane Moreira

PoP-GO/RNP

[email protected]@gmail.com

Goiânia, 23 de setembro de 2004.

31

Anexo 2: Streaming com VideoLan Client

Relatório de consumo de largura de banda em transmissão deconteúdo multimídia utilizando VideoLan Client (VLC)

Giovane Moreira ([email protected])

PoP-GO RNP

6 de Julho de 2004

1. Introdução

Este relatório mostra a experiência do PoP-GO no streaming dearquivos de áudio e vídeo respectivo consumo de largura de banda (e teruma idéia do overhead gerado na transmissão).

O enfoque do artigo é o uso da rede na atividade, e não como realizaro streaming (visto que a documentação no site do VLC é bastante completae simples).

2. Equipamentos,software e rede

Servidor: A máquina utilizada como servidor de streaming foi um IBMNetvista 6349-KCP. Sistema operacional: Slackware GNU/Linux 9.1 (kernel2.6.6). VideoLan versão 0.7.1 Bond. Rede: Pertencente a rede A.

Cliente: PC com processador Pentium 4 e 256MB de Memória DDR.Sistema operacional: Slackware GNU/Linux 9.1 (kernel 2.4.22). VideoLanversão 0.7.1 Bond.Pertencente a rede B.

No que se refere ao monitoramento, o software JFFNMS(Just For FunNMS) foi instalado na máquina servidora e o monitoramento foi feitoobservando a saída da sua placa de rede.

As redes A e B redes ethernet de 10Mbps, distantes 2 hops. Ambasestão nas dependências da Universidade Federal de Goiás.

3. Transmissão e resultados

Seguindo as instruções simples de streaming do VLC, conseguimosrealizar uma transmissão tranqüila com qualidade total (visto que tínhamoslargura de banda a vontade – 10Mbps).

Cenário : Transmissão de arquivo Mpeg 1 Layer 3 (MP3) de 128kpbsde qualidade fixa. redes distitas.

Hardware: Servidor e Cliente (especificado acima)

32

Rede: Servidor e Cliente em redes diferentes, distantes de 2 hops entre si.

Arquivos: Lista de MP3s 128Kbits/s.Duração: 30 minutosTransmissão: Unicast

Para este caso, segue abaixo o gráfico gerado pelo JFFNMS.

Percebe-se que neste intervalo tivemos uma saída média de186,31kbps (para MP3s de 128Kbps). Deste modo, temos um overheadaproximado de 58,31kbps, ou seja, 45,5 % dos 186,31kbps. Este primeirorelatório mostra a experiência com VideoLan client numa rede interna, como cenário descrito acima. Outros cenários serão descritos e testados para oprojeto final de curso de Engenharia de Computação.

33

Anexo 3: Guia de instalação do JFFNMS no Slackware Linux

Guia de Instalação do JFFNMS para Slackware GNU/Linux (testado emversões 10.0 e 9.1)Giovane Moreira- [email protected] - RNP

Este guia é uma versão baseada no guia de instalação oficial do JFFNMSdisponível em http://www.jffnms.org. Esta versão é adaptada ao Slackware(evita passos desnecessários e alguns bugs! ). Se você estiver fazendo upgradede uma versão anterior do JFFNMS, leia o arquivo UPGRADE. Agradecimentos aJavier Szyszlican pela esta excelente ferramenta e pela documentação, além detodo suporte.

Requerimentos:

-Sistema Operacional: Slackware GNU/Linux (testado com versões 9.1 e 10.0) -JFFNMS roda em Solaris,*BSD e Window$ também.-Apache - servidor web - o da instalação default serve-Mysql - o da instalação default serve-RRDTool - os fontes - Disponível em www.rrdtool.org para gerar os gráficos.-PHP (>=4.1.2) -NET-SNMP (4.2.5 ou 4.2.6) - Não incluso no Slackware - disponível em www.net-snmp.org-GD - incluso na instalação full do Slackware-GNU Diff - incluso na instalação full do Slackware-TFTP Server (opicional)-JFF NMS Integration Packages (TACACS+ & Syslog) (opcional, útil em roteadores)-Graphviz & WebFonts (http://www.graphviz.org) (opcional)-NMAP PortScanner > 2.54B (http://www.insecure.org/nmap/) para busca de portasTCP (opcional)-Fping (http://www.fping.com)

Instalando:

-Caso o seu Slackware não tenha o MySQL,compile e/ou instale ele. (tive problemascom o da versão 9.1 - ele não estava startando threads * e matava a máquina -vejamais sobre isto no final, porém o da 10.0 está normal).

-Caso o seu Slackware não tenha o Apache,compile e/ou instale ele. O .tgz defaultdo Slackware funciona muito bem :)

-Compile e/ou instale Graphviz and WebFonts (optional)

- Caso o seu Slackware não tenha o Nmap, compile-o e instale. (o default funciona100%). O Nmap precisa ser set-uid root se você quiser monitoramento de portas UDPe discovery funcionando Execute:

# chmod +s /usr/bin/nmap # chmod a+x /usr/bin/nmap

34

-Compile e/ou instale o Fping.

-Verifique se o Cron está rodando (#ps aux |grep crond)

Execute: # chmod +s /usr/local/sbin/fping # chmod a+x /usr/local/sbin/fping

-Compile e instale RRDTool (com o ./configure --enable-shared --prefix=/usr) . JFFNMS irá usar estes binários.

-Compile e/ou instale o PHP (ATENÇÃO: O DEFAULT NÃO SERVE!). Voce terá duasopções: puxar os sources e compilar com os parâmetros abaixo.

Os parâmetros são: ./configure --prefix=/usr --disable-static--with-apxs=/usr/sbin/apxs --sysconfdir=/etc --enable-discard-path --with-config-file-path=/etc/apache --enable-safe-mode --with-openssl--enable-bcmath --with-bz2 --with-pic --enable-calendar --enable-ctype --with-gdbm --with-db3 --enable-dbase --enable-ftp --with-iconv--with-gd --enable-gd-native-ttf --with-jpeg-dir=/usr --with-png --with-gmp --with-mysql=shared,/usr --with-xml=shared,/usr --with-gettext=shared,/usr --with-mm=/usr --enable-trans-sid --enable-shmop--enable-sockets --with-regex=php --enable-sysvsem --enable-sysvshm--enable-yp --enable-memory-limit --with-tsrm-pthreads --enable-shared --disable-debug --with-zlib=/usr --with-snmp --with-gd --enable-wddx

IMPORTANTE! Módulos do PHP necessários: sockets, snmp,gd (pgslq e/ou mysql), wddx(para satélites), pcre(syslog parsing).Lembre-se de verifcar se seus módulos estão carregados da tela desetup do JFFNMS (mais adiante mostra como)Descomente a seguinte linha no /etc/apache/httpd.conf Include /etc/apache/mod_php.conf

-Mude as seguintes opções no arquivo /etc/apache/php.ini

Register_Globals = On error_reporting = E_ALL & ~E_NOTICE allow_url_fopen = On include_path = .:/usr/share/pear

- Reinicie o apache (qualquer mudança no php.ini requer reiniciar oapache)

- Opcional: instale os pacotes de integração tac_plus e msyslog (leiao README e o INSTALL de cada um deles) - particularmente quandoinstalei não funcionou e deixei de lado.

- Descompacte a versão do JFFNMS tar xvzf jffnms-0.7.x.tar.gz

Você então terá um diretório de nome jffnms-0.7.x.

35

-Mova-o para /opt/jffnms (mv jffnms-0.7.x. /opt/jffnms )

-Mude as permissões para o usuário nobody (do apache) poder acessar:

chown -R nobody.nogroup /opt/jffnms/

-Agora vamos adicionar ao cron os jobs a serem executados

su nobodycrontab -e#adicione tudo abaixo

*/1 * * * * cd /opt/jffnms/engine && php -q consolidate.php >/dev/null 2>&1*/5 * * * * cd /opt/jffnms/engine && php -q poller.php >/dev/null 2>&1*/30 * * * * cd /opt/jffnms/engine && php -q rrd_analizer.php >/dev/null 2>&1*/30 * * * * cd /opt/jffnms/engine && php -q autodiscovery_interfaces.php > /dev/null 2>&102 4 * * * cd /opt/jffnms/engine && php -q tftp_get_host_config.php >/dev/null 2>&102 5 * * * cd /opt/jffnms/engine && php -q cleanup_raw_tables.php >/dev/null 2>&120 5 * * * cd /opt/jffnms/engine && sh tmpwatch.sh /opt/jffnms/engine >/dev/null 2>&1

- Se você quiser saber o que significa cada linha, leia o guia oficial do site :)

- Criando a base de dados: (usei o MySql, porém pode ser o postgree. Se vocêinstalou o Slackware do zero, você deve executar mysql_install_db como root e mudar as permissões do /var/lib/mysql para mysql.mysql) .

MySQL: ====== # mysql -u <mysql admin username> -p<password> mysql> CREATE DATABASE jffnms; mysql> GRANT ALL PRIVILEGES ON jffnms.* TO jffnms@localhostIDENTIFIED BY 'jffnms'; mysql> FLUSH PRIVILEGES; mysql> quit # mysql -u jffnms -pjffnms jffnms < docs/jffnms-0.7.x.mysql PostgreSQL: =========== # psql template1 postgres template1=# create user jffnms password 'jffnms' createdb; template1=# \connect template1 jffnms template1=# create database jffnms; template1=# \q # psql jffnms jffnms < docs/jffnms-0.7.x.pgsql

-Configurando o Apache. Você tem dois modos de configurar:

1. Como um Virtual Host (se você controla um servidor DNS)

<VirtualHost *> ServerAdmin [email protected] DocumentRoot /opt/jffnms/htdocs

36

ServerName nms.yournet.com </VirtualHost>

2. Com um link simbólico

ln -s /opt/jffnms/htdocs /var/www/htdocs/jffnms (ou o diretório de páginas do seu apache)

O JFFNMS precisa estar ou em um desses modos ou também no mainDocument Root (O Javier viu funcionado com ScriptAlias)

- Quase acabando.. restarte o apache, MySQL ou PgSQL, inetd.

- Abra o navegador em http://www.yourserver.com/jffnms/admin/setup.php (ou seudomínio) ou http://localhost/jffnms/admin/setup.php Este script mostrará se está tudo ok suas configurações, verifique todas as opçõesantes de prosseguir.

- Depois de checar as opções, você está apto a acessar o JFFNMS . Acesse http://www.yourserver.com/jffnms/ ou http://localhost/jffnms/ login: admin password: admin

Agora você está no sistema. Agora vem a parte de configuração

- Esta é a ordem de criação dos registros:

Necessários: Zones (vá em Admin/Hosts/Zones) - descreve as zonas geográficas Customers(vá em Admin/Users/Customers) controlam diferentes interfaces Hosts (vá em Admin/Hosts/Hosts) residem em Zonas Interfaces (vá em Admin/Hosts/Interfaces) correspodem a um Host e um Customer

Opcional: Users (vá em Admin/Users/Users) podem acessar o NMS. Você pode definir seu submapa em Admin/Hosts/Submap) E Fazer uma relação entre Interface e submap em View.

Tente não usar registros UNKNOWN (Uknown Host, Unknown Zone, UnknownCustomer,etc).

Créditos do Desenvolvedor:=========================================================================

Se você precisar de algo, nos contate via: [email protected]

Obrigado por usar o 'Just For Fun' Network Management System

Não se esqueça do doar ao projeto se você o achar útil para seu trablalho.

=========================================================================Javier Szyszlican aka SzYsZBuenos Aires, [email protected] (please try the mailing list first)

37

ICQ #397319

Tradução e adaptação ao Slackware:Giovane MoreiraGoiânia,Goiás, [email protected]@gmail.com

38

Bibliografia resumida

Andrew S. Tanembaum, Redes de Computadores, Editora Campus,2003.

Daniel A. Menascé e Virgílio A. F. Almeida, Planejamento deCapacidade para Serviços na Web , Editora Campus, 2002.

Adolfo Rodriguez, John Gatrell, John Karas e Roland Peschke, TCP/IPTutorial and Techincal Overview, IBM Corporation, 2001.

JFFNMS - Just For Fun Network Management System, www.jffnms.org

Flow-tools, http://www.splintered.net/sw/flow-tools/

Cisco IOS Software Netflow,http://www.cisco.com/warp/ public/732/Tech/nmp/netflow/index.shtml

Net-SNMP, http://net-snmp.sourceforge.net/

The Slackware Linux Project, http://www.slackware.com/

Progamando em Shell Script,http://www.devin.com.br/eitch/shell_script/

Daniel P. Bovet, Marco Cesati, Understanding the Linux Kernel,O'Reilly, 2002.

RRDTool, http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/

39