GERENCIA DE REDES E SOFTWARE LIVRE: USO DO NAGIOS Lianna Mara Castro Duarte Faculdade Santo Agostinho Coordenação de Pós-Graduação Curso de Pós-Graduação em Redes de Computadores [email protected] Resumo: Gerenciar redes nos dias de hoje é uma tarefa muito complexa, e, devido a esta complexidade, várias soluções são criadas para auxiliar o profissional de gerencia em suas atividades. Levando em consideração que inúmeras destas soluções são proprietárias, e de como sai caro utilizar e manter as licenças para tais softwares percebe-se o enorme potencial dos softwares livres na área de gerenciamento, sem deixar a desejar em relação à qualidade. Como exemplo disto existe o Nagios, um software para gerência remota de recursos. Palavras-Chave: Gerenciamento de redes, software livre, Nagios, padrões abertos. Abstract: Nowadays the Network Management is a hard task, and because of the complexity of this task, a large number of solutions are created to hel the professionals, Considering that most of that solutions are “private”, and how expensive is to use private softwares, we can see the enormous potenctial of the open source softwares. An example is Nagios, a great service and network monitoring program. Keywords: Network Management, free software, Nagios, open source. 1- Introdução O tráfego de informações dentro das redes vem crescendo continuamente, principalmente devido ao surgimento de novas aplicações. Concorrentemente, novas tecnologias e padrões proporcionam uma grande proliferação de dispositivos heterogêneos conectados à rede. E tornou-se um grande desafio manter o controle de um ambiente cada vez mais complexo e heterogêneo. A necessidade de gerenciamento de redes vem fazendo com que, cada vez 1 mais, sejam pesquisadas e desenvolvidas novas técnicas e abordagens para este tipo de problema. Como tudo que evolui o gerenciamento de redes, também está evoluindo e muitas coisas que alguns anos atrás eram "verdades" hoje já não são mais. Pontos que eram considerados importantes e de relevância já não possuem a mesma importância de antes. Assim, antigos conceitos estão sendo revistos, e novos estão surgindo, levando todos a reavaliar a forma que está sendo feito gerenciamento de redes hoje, e levantando perspectivas para o futuro. 2- Um pouco da historia do gerenciamento Até o início da década de 1980, redes de computadores eram baseadas em arquiteturas e protocolos patenteados, a exemplo de System Network Architecture (SNA) da IBM e DECNET da Digital Equipment Corporation. Já no final da década de 1980, redes interconectadas baseadas na arquitetura e protocolos TCP/IP estavam em franca ascensão. Porém, do ponto de vista da gerência de tais redes, a situação ainda favorecia arquiteturas proprietárias, devido à inexistência de soluções de gerência de redes TCP/IP. O crescimento de redes TCP/IP ao longo da década de 80 aumentou consideravelmente as dificuldades de gerência. Devido à diversidade de equipamentos das modernas redes de dados, tornou-se necessário unificar e padronizar as informações de gerência e o protocolo da administração dessas redes. Para atender essa necessidade, dois protocolos principais surgiram: o SNMP (Simple Network Management Protocol) e o CSMIE/CMP (Common Management Information Service Element/Common Management Information). A simplicidade do SNMP facilitou sua inclusão em equipamentos de interconexão. No final da década de 1990, a solução SNMP já era tão difundida que se estabelecera como padrão de gerência de redes de computadores. Hoje, praticamente todos os equipamentos de interconexão dão suporte a SNMP, bem como muitos outros dispositivos (nobreaks, modems etc.), e sistemas de software (servidores Web, sistemas de bancos de dados etc.). SNMP, além da parte mais importante para o gerente de rede: a informação de gerência, presente na forma de Management Information Bases (MIBs). Apenas durante o ano de 1993, foram publicadas 11 RFCs definindo revisões para o SNMP e dando início ao padrão SNMPv2, sendo o primeiro, o RFC 1441 [Case et al 1993]. Esta série de revisões trouxe consigo grandes avanços que foram 2 incorporados ao protocolo original. Tais avanços podem ser classificados de acordo com as seguintes categorias: • Estrutura de informação; • Primitivas de comunicação (PDUs); • Comunicação gerente-gerente e gerenciamento hierárquico; • Segurança. A estrutura de informação de gerenciamento (SMIv2) para o SNMPv2 é mais elaborada, e eliminou ambigüidades nas definições dos objetos encontrados nas especificações anteriores. Apesar do SNMP em si ser relativamente "simples", há um certo trabalho para dar suporte a uma MIB no agente. Há ainda mais trabalho para construir o suporte de gerenciamento para utilizar os dados da MIB, e ainda um pouco mais quando se fala em desenvolver o gerenciamento nas várias plataformas existentes para gerenciamento de redes. Na eterna batalha de se tentar manter estáveis as redes, surgem diversas pesquisas, modelagens e implementações de soluções rebuscadas para a automatização de processos gerenciais e, obviamente caríssimos softwares proprietários. No entanto, existem alternativas à essas soluções, que são os softwares livres. 3-O Uso de Software Livre “Software livre" se refere à liberdade dos usuários executarem, copiarem, distribuírem, estudarem, modificarem e aperfeiçoarem o software. Mais precisamente, ele se refere a quatro tipos de liberdade, para os usuários do software: • A liberdade de executar o programa, para qualquer propósito (liberdade nº. 0) • A liberdade de estudar como o programa funciona, e adaptá-lo para as suas necessidades (liberdade no. 1). Acesso ao código-fonte é um pré-requisito para esta liberdade. • A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo (liberdade no. 2). 3 • A liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie (liberdade no. 3). Acesso ao código-fonte é um pré-requisito para esta liberdade. Um programa é software livre se os usuários tem todas essas liberdades. Portanto, você deve ser livre para redistribuir cópias, seja com ou sem modificações, seja de graça ou cobrando uma taxa pela distribuição, para qualquer um em qualquer lugar. Ser livre para fazer essas coisas significa (entre outras coisas) que você não tem que pedir ou pagar pela permissão. Você deve também ter a liberdade de fazer modificações e usá-las privativamente no seu trabalho ou lazer, sem nem mesmo mencionar que elas existem. Se você publicar as modificações, você não deve ser obrigado a avisar a ninguém em particular, ou de nenhum modo em especial. A liberdade de utilizar um programa significa a liberdade para qualquer tipo de pessoa física ou jurídica utilizar o software em qualquer tipo de sistema computacional, para qualquer tipo de trabalho ou atividade, sem que seja necessário comunicar ao desenvolvedor ou a qualquer outra entidade em especial. A liberdade de redistribuir cópias deve incluir formas binárias ou executáveis do programa, assim como o código-fonte, tanto para as versões originais quanto para as modificadas. Está ok se não for possível produzir uma forma binária ou executável (pois algumas linguagens de programação não suportam este recurso), mas deve ser concedida a liberdade de redistribuir essas formas caso seja desenvolvido um meio de cria-las. De modo que a liberdade de fazer modificações, e de publicar versões aperfeiçoadas, tenha algum significado, deve-se ter acesso ao código-fonte do programa. Portanto, acesso ao código-fonte é uma condição necessária ao software livre. Para que essas liberdades sejam reais, elas têm que ser irrevogáveis desde que você não faça nada errado; caso o desenvolvedor do software tenha o poder de revogar a licença, mesmo que você não tenha dado motivo, o software não é livre. Muitas vezes esquecemos os princípios básicos que determinam a estabilidade de uma rede e nos entregamos às falsas necessidades impostas pela indústria de softwares. Algumas características se mostram importantes para a 4 manutenção de uma rede de computadores. Podemos citar: • Independência de fornecedor Empresas não duram pra sempre. Algumas soluções tornam-se obsoletas e não encontram sustentabilidade por dependerem de um só fornecedor. Aquele apliance que faz a análise de tráfego de sua rede hoje, e que roda um sistema proprietário numa caixa preta, pode se transformar em lixo no dia em que seu fabricante fechar as portas. É interessante obter um hardware que siga padrões estabelecidos, e que seja suportado por diferentes sistemas operacionais. • Utilização de padrões abertos Alguém montaria sua rede corporativa implementando uma solução não compatível com o TCP/IP? Este é o caso mais absurdo, mas podemos usá-lo para fazer analogia a outras implementações, a exemplo do SNMP (Simple Network Management Protocol), que é um protocolo para gerência de redes bastante popular, com especificação aberta e em constante evolução. Mesmo assim alguns fabricantes empurram seus protocolos de gerência, e algumas pessoas pagam caro (nos dois sentidos) por isso. Alguns fabricantes fazem pior. Empacotam protocolos estabelecidos num rótulo com sua assinatura. • Baixo custo de implementação Montar uma rede não é barato. A infraestrutura custa caro, a implantação custa caro e o suporte custa caro. O software pode custar caro também, mas essa é uma escolha sua. Existem excelentes softwares livres para monitorar e gerenciar recursos de uma rede. Com sua adoção, dois aspectos referentes ao custo são atacados: custo de suporte, que agora é descentralizado e custo com licença, que é zero. • Bons softwares Bons softwares de gerência e monitoramento devem prever situações indesejáveis na rede, e quando possível tomar as ações preventivas pelo administrador. Uma interface clara e a centralização das informações são também características importantíssimas para a gerência da rede. A independência de plataforma é essencial. É muito difícil encontrar uma rede homogênea nos quesitos software e hardware. Aí que geralmente somos ludibriados com programas que se dizem multi-plataformas. É muito raro um 5 software proprietário atender a esse requisito. Geralmente encontramos uma solução “multi-plataforma” porque que roda em Windows{XP,2000,NT,etc.} e no máximo num redhat7.2 ou FreeBSD4.3. Para um bom gerenciamento existem três preocupações básicas que um administrador de redes deve ter: 1- Gerência de Falhas Aqui temos as tarefas de (1) Identificar a falha, (2) Isolar a falha e (3) Corrigir a falha. É uma das tarefas mais importantes para deixar uma rede com um bom nível de confiabilidade. É também uma tarefa complexa, necessita de ferramentas bastante escaláveis e de preferência que automatizem ao máximo o processo, desde a identificação até a correção de uma falha. 2- Gerência de Desempenho Muito importante para (1) evitar o mau uso da rede e (2) prover uma capacidade de planejamento. Gerenciar o desempenho dos recursos de uma rede é muito importante para identificar quais deles devem ser revisto a propósito de upgrades, ou mesmo de diminuição de custos (largura de banda desnecessária, por exemplo). Essencial também para detectar atividades ilícitas na rede, como por exemplo a detecção de utilização dos recursos durante períodos em que não deveria existir (nas madrugadas, por exemplo). 3 - Configuração Centralizada A centralização das informações, tal como seu correlacionamento é uma característica muito importante para a administração de uma rede. Uma interface simples de se manipular é essencial quando se trata de dados complexos e provenientes de variadas localidades. Após a consolidação da WEB ficou muito mais fácil produzir ambientes de gerência (NMS) remotos multi-plataforma e amigáveis. Criou-se então uma forte independência de GUIs proprietários, possibilitando a gerência remota em qualquer sistema conectado à rede. Frente a essas preocupações, o software livre tornou-se nos últimos anos uma alternativa econômica e financeiramente viável ao modelo atual de licenciamento de software e a sua política abusiva de renovação constante de 6 licença e atualização de hardware. O software livre passa a ser uma solução para as milhões de cópias de software piratas que existem espalhados pelo Brasil e pelo mundo. Dentro deste contexto, mostraremos uma ferramenta especificamente, o NAGIOS, um software livre usado no gerenciamento de redes. 4- Nagios, software livre para gerência remota de recursos O NAGIOS é um software para gerência de recursos, um poderoso monitor de rede. Com ele, é possível monitorar e gerenciar os recursos de hosts, tai como sua carga de processamento, utilização de memória, tempo de resposta, utilização de banda, etc., atestar o funcionamento adequado dos equipamentos e serviços. Também possui um ambiente WEB capaz de gerar mapas da rede, relatórios e gráficos online e é possível criar grupos de usuários para receber relatórios e alertas do sistema e executar ações sobre os problemas da rede ou hosts monitorados. Algumas características do Nagios: • Monitora serviços de rede • Monitora recursos de hosts • Define hierarquia da rede • Sistema inteligente de notificações • Alertas para pagers, email, celular, etc; •Possibilidade de implementação de servidores de monitoramento distribuídos e redundantes. • Interface WEB capaz de informar sobre status de redes, hosts, serviços, logs, notificações. mapas da rede 2D e 3D • Relatórios, integração com BDs, etc O requisitos para rodar o Nagios são: uma maquina rodando um sistema operacional Linux (ou qualquer variação UNIX); um compilador C; e provavelmente ter TCP/IP configurado, um servidor web e uma biblioteca GD, atualizada, para a geração de gráficos. 7 4.1- Obtendo e instalando o Nagios O software está disponível no site : http://www.nagios.org/download, e antes de começar a usa-lo é interessante que seja lida a documentação, para que os conceitos que são utilizados na configuração do sistema fiquem bem claros. Os passos para instalação do Nagios serão os seguintes: 1- Instalar o Nagios 2- Instalar o Nagios-plugins 3- Configurar o servidor WEB 4- Configurar o Nagios 4.2 – Instalação do Nagios 1- Descompacte o arquivo com o código fonte, use o comando: tar xzvpf nagios-1.1.tar.gz 2- Crie o diretório de instalaçao mkdir -p /usr/local/nagios 3 -Adicione o usuário e grupo nagios: groupadd nagios useradd -g nagios -d /usr/local/nagios -s /bin/false nagios 4-A compilação será básica, sem suporte a banco de dados, para isso são necessários os comandos: ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios—with- nagios-grp=nagios--with-cgiurl=/nagios/cgi-bin--ithhtmurl=/nagios( parâmetros para compilação ) make all -s ( criação de binários ) make install -s ( instalação de binários ) make install-init -s ( instalação de script de inicialização ) make install-config -s ( instalação de exemplos de configuração no diretório /usr/local/nagios/etc ) Após a instalação serão criados os diretórios abaixo: – /usr/local/nagios – bin/ ( Arquivos binários do Nagios ) – etc/ ( Diretório de Configuração ) 8 – sbin/ ( CGI's ) – share/ ( Arquivos HTML ) – var/ ( Diretório de logs ) 4.2 – Instalação do Nagios-plugins Descompacte o arquivo com o código fonte, use o comando: tar xzvpf nagios-plugins-1.3.1.tar.gz Antes de iniciar a instalação é ALTAMENTE recomendável ler o arquivo REQUIREMENTS para verificar quais os requisitos dos plugins. Para compilar use o seguinte parâmetro: ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-grp=nagios Verifique se não está faltando algum componente para os plugins. Caso esteja faltando algum irá aparecer uma mensagem com o link para download e instalação. make all -s ( criação de binários ) make install -s ( instalação de binários ) Após a instalação será criado o diretório abaixo: - /usr/local/nagios – libexec/ ( Arquivos de Plugins do Nagios ) 4.2 – Configurando o servidor web Para acessar o Nagios via web, é necessário adicionar a seguinte configuração no httpd.conf do apache: ScriptAlias /nagios/cgi-bin/ /usr/local/nagios/sbin/ < Directory "/usr/local/nagios/sbin/" > AllowOverride AuthConfig Options ExecCGI Order allow,deny Allow from all < /Directory > Alias /nagios/ /usr/local/nagios/share/ < Directory "/usr/local/nagios/share" > 11 Options None AllowOverride AuthConfig Order allow,deny Allow from all < /Directory > Depois é necessário criar o arquivo com usuário e senha, para isso use o comando abaixo: htpasswd -c /usr/local/nagios/etc/htpasswd.users usuario chown apache:apache /usr/local/nagios/etc/htpasswd.users (verifique qual o usuário e grupo do apache) 4.2 – Configurando o Nagios Não há complexidade alguma nesse processo, porém deve-se estar atento que os arquivos de configuração do Nagios devem estar em sintonia. A primeira boa prática agora é gerar os arquivos-exemplo de configuração do Nagios, entrando no diretório que contém os fontes (aquele que você executou o “make”) e executar o seguinte comando: make install-config Antes de iniciar a configuração iremos fazer uma cópia dos arquivos originais): cd /usr/local/nagios/etc mkdir original mv *.cfg-sample original for i in *cfg-sample; do mv $i `echo $i|sed -e s/cfg-sample/cfg/`; done; Depois iremos copiar somente os arquivos necessários: cd /usr/local/nagios/etc/original cp cgi.cfg checkcommands.cfg misccommands.cfg nagios.cfg resource.cfg timeperiods.cfg ../ Arquivos de configuração: 1. CGI.CFG Nele ficam as configurações de utilização de arquivos cgi pelo Nagios. Devem ser configurados os parâmetros de autorização de utilização da 12 interface Web. Altere os campos para o nome do usuário cadastros no arquivo /usr/local/nagios/etc/htpasswd.users e assim terão acesso ao sistema, os parâmetros são: authorized_for_system_information=usuario1, usuario2 authorized_for_configuration_information=usuario1, usuario2 authorized_for_system_commands= usuario1, usuario2 authorized_for_all_services=usuario1, usuario2 authorized_for_all_hosts=usuario1, usuario2 authorized_for_all_service_commands=usuario1, usuario2 authorized_for_all_host_commands=usuario1, usuario2 2. CHECKCOMMANDS.CFG Configuração dos plugins que estão no diretório /usr/local/nagios/libexec. Basta adicionar o plugin e seus parâmetros. 3. MISCCOMMANDS.CFG Definição de algums comandos, tais como envio de e-mail, envio de pager, etc ... 4. NAGIOS.CFG Arquivo com as configurações principais. O padrão é bem completo, somente altere os parâmetros: check_external_commands=0 -> check_external_commands=1 date_format=us -> date_format=euro 5. RESOURCE.CFG Configuração de parâmetros de recursos. Por padrão vem definido qual o caminho dos plugins. Pode ser setadas variáveis para serem utilizadas nos arquivos CHECKCOMMANDS.CFG e MISCCOMMANDS.CFG. 6. TIMEPERIODS.CFG Arquivo com os horários pré-definidos para checagem de serviços e/ou servidores. É muito útil para avisos para diferentes grupos. 13 Configurando usuários e grupos de usuários Existem dois arquivos que se referem a essa tópico. São eles: contactgroups.cfg e contacts.cfg. Abaixo cada um deles explicados. contacts.cfg define contact{ contact_name login alias Nome do Usuario service_notification_period Periodos definidos em TIMEPERIODS.CFG host_notification_period Periodos definidos em TIMEPERIODS.CFG service_notification_options w,u,c,r ( w=warning / u=unknown / c=critical / r=recoveries / n=none) host_notification_options d,u,r ( d=down / u=notify / r=recoveries / n=none ) service_notification_commands notify-by-email host_notification_commands host-notify-by-email email [email protected] } contactgroups.cfg define contactgroup{ contactgroup_name grupo alias Nome do Grupo members Logins definidos no arquivo contacts.cfg } Configurando hosts e grupos de hosts Existem dois arquivos que se referem a essa tópico. São eles: hostgroups.cfg e hosts.cfg. hosts.cfg define host{ event_handler_enabled 1 flap_detection_enabled 1 max_check_attempts 5 name generic-host 14 notification_interval 20 notification_options d,u,r notification_period 24x7 notifications_enabled 1 process_perf_data 1 retain_status_information 1 retain_nonstatus_information 1 register 0 } # Definicao do 'servidor1' define host{ use generic-host address IP do Servidor alias Nome do Servidor check_command Comando a ser efetuado ( funcao do services.cfg) host_name Host_Name_do_servidor } hostgroups.cfg define hostgroup{ hostgroup_name nome_do_grupo alias Descricao do Grupo contact_groups grupos_que_fazem_parte members membros_que_fazem_parte } Criando os arquivos dependencies.cfg e escalations.cfg Utilize o comando abaixo para criar os dois arquivos pelo primeira vez. É necessário para iniciar o Nagios: touch /usr/local/nagios/etc/dependencies.cfg touch /usr/local/nagios/etc/escalations.cfg Também é necessário criar o diretório abaixo: mkdir -p /usr/local/nagios/var/rw chown nagios:nagios -R /usr/local/nagios/var/rw Iniciando o Nagios 15 Após as configurações é necessário iniciar o Nagios. Utilize o comando abaixo para verificar se está correto os arquivos: /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg Se tudo estiver certo, inicie o Nagios com o comando: /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg Assim será iniciado como daemon. Não esqueça que foi criado o arquivo de inicialização no diretório /etc/rc.d/init.d/nagios. 5- Considerações Finais Podemos sentir hoje o grande potencial do software livre nas diversas áreas, e não seria diferente na gerência e segurança de redes/sistemas. A evolução dos equipamentos empregados e a maior dependência dos negócios na agilidade e confiabilidade deste meio de comunicação faz com que a área de gerenciamento cresça e ofereça um enorme potencial futuro. Assim como o Nagios, que oferece muitos recursos de monitoramento,existem, e estão surgindo a cada dia, várias outras soluções livres para auxiliar a complexa tarefa de gerenciar uma rede, como o CACT( monitoramento de recursos), o NTOP (analisador de tráfego), e vários outros que estão disponíveis para a comunidade que deseja utilizar softwares livres. Toda esta evolução juntamente com a “popularização” dos softwares livres ajuda a auxiliar o profissional de gerencia e aumenta o leque de opções na hora da escolha dos softwares para gerenciamento das redes. 16 Referência Bibliográfica TANEMBAUM, Andrews S.: tradução Vandenberg D. de Souza. Redes de Computadores. 4. ed.. Rio de Janeiro: Elsevier, 2003. COMER, Douglas E., STEVENS, David L. Interligação em Rede com TCP/IP. 3.ed.. Rio de Janeiro: Campus, 1999. Monitoramento Inteligente com o Nagios. Disponível em: <http://www.opencode.com.br/modules.php?name=News&file=article&sid=376>. Acesso em 27 maio 2005. Simple Network Management Protocol (SNMP). Disponível em: <http://www.teleco.com.br/tutoriais/tutorialsnmp/pagina_1.asp> Acesso em 25 maio 2005. Gerenciamento de Redes TCP/IP. Disponível em: <http://www.rnp.br/newsgen/9712/gerencia.html> Acesso em 24 maio 2005. Sistemas TTS: Uma abordagem voltada para Sistemas de Gerenciamento de Redes. Disponível em: <http://www.rnp.br/_arquivo/wrnp2/2003/oscfa04a.pdf> Acesso 23 maio 2005. Tutorial SNMP. Disponível em: <http://www.teleco.com.br/tutoriais/tutorialsnmp/pagina_1.asp> Instalação e configuração do Nagios. Disponível em: <http://web.onda.com.br/humberto/arquivo/nagios.pdf> Acesso 03 maio 2005. 17