Mostrando postagens com marcador Software Livre. Mostrar todas as postagens
Mostrando postagens com marcador Software Livre. Mostrar todas as postagens

terça-feira, 3 de abril de 2018

Instalação do SNMP Builder no Zabbix 3.4.6

Introdução

O SNMP Builder é um projeto do giapnguyen, que sofreu um fork pelo mickvav, que o atualizou para a versão 3.2. Esse projeto também já fez parte, e tenho esperanças que um dia volte a fazer, do EveryZ.

Eu resolvi testar ele no Zabbix 3.4.6, e obtive sucesso, sendo necessário apenas uma alteração à mais do que o tutorial inicial.

Como muitas pessoas perguntam sobre esse projeto, mas tem dificuldades com o inglês, eu resolvi fazer um tutorial em Português sobre o assunto.

Instalação

Por questão de organização eu sempre crio um diretório /install na máquina, e deixo todas as instalações lá. No meu caso o Zabbix está instalado no /var/www/html/zabbix/. Então faça as adaptações necessárias ao seu cenário.

# cd /install

# wget https://github.com/mickvav/snmpbuilder/archive/master.zip

# cd /var/www/html/zabbix/

# unzip /install/master.zip

# mv snmpbuilder-master/snmp_builder* .

# rm -rf snmpbuilder-master


Ajustes

O importante nesse arquivo é definir o path das MIBs:

# vi snmp_builder.php
define('MIBS_ALL_PATH', '/var/www/html/zabbix/snmp_builder/mibs:/usr/share/snmp/mibs');


No arquivo menu.inc.php, iremos criar a entrada do SNMP Builder no Zabbix:
# vi include/menu.inc.php
Na linha 220:

[
        'url' => 'snmp_builder.php',
        'label' => 'SNMP Builder'
],

Seu Código vai ficar assim:


                'popup_httpstep.php'
        ]
],
[        'url' => 'snmp_builder.php', 
        'label' => 'SNMP Builder'
],
[        'url' => 'maintenance.php',
        'label' => _('Maintenance')
],  

# vi jsLoader.php

Na linha 51:
        // snmp_builder
        '../snmp_builder/Tree.js' => '',
        '../snmp_builder/snmp_builder.js' => '',
        '../snmp_builder/DynTable.js' => '',
        // /snmp_builder


Ao acessar o menu Configuração, você vai ver o menu SNMP Builder. Ao tentar gravar o item no template surge o erro referente ao valor do campo history.
Erro ao adicionar item ao template

Para solucionar o problema, vamos editar o arquivo snmp_builder.php, essa foi a única alteração adicional que eu precisei fazer. Nesse caso eu configurei retenção de um dia (86400 segundos).

# vi snmp_builder.php
Na linha 240:

'history'               => 86400,


E agora é possível criar o item normalmente.
Item adicionado ao template

segunda-feira, 10 de julho de 2017

Redes de Sensores Sem Fio com Protocolo Radiuino Emulada no Arduino

Introdução

O Radiuino pode ser definido como um protocolo de comunicação para Redes de Sensores Sem Fio, que implementa um pacote de comunicação de 52 bytes. Ele é estruturado em uma pilha de protocolos com 5 camadas: Física, MAC, Rede, Transporte e Aplicação, esta estrutura é conceitualmente equivalente à pilha TCP/IP.

Existem duas bibliotecas para serem utilizadas no Arduino, a primeira é a biblioteca Radiuino, que apresenta os Firmwares de maneira transparente, permitindo ao usuário entender todo o processo de comunicação dos protocolos em cada camada. Isso permite que o usuário construa redes de comunicação sem fio customizadas para cada situação e ambiente, além de permitir aos estudantes alterar parâmetros diversos no ambiente e acompanhar o comportamento da rede, comparando os conhecimentos teóricos, com a prática.

A segunda biblioteca é o Radiuino4App, cujo objetivo é facilitar a utilização de aplicações em redes de sensores sem fio, para os usuários que não tem interesse em entender como a rede funciona, ou precisam de um ambiente de demonstração de conceito, por exemplo, onde a uma rede básica atende a demanda. Nessa biblioteca os Firmwares apresentam apenas configurações básica, ocultando o restante das opções. Nesse cenário, é criada automaticamente uma rede estrela, onde um computador envia um pacote de 52 bytes e o nó sensor devolve um pacote de 52 bytes. É possível colocar até 255 sensores nessa rede. Permitindo aos usuários focaram na aplicação sem se aprofundarem nas questões de rede.

O que é RSSI?

A sigla RSSI significa Received Signal Strength Indicator, se traduzirmos seria algo como a indicação de força/intensidade do sinal recebido, esse valor é muito importante para quem está olhando para a rede de sensores sem fio, pois a intensidade do sinal vai interferir diretamente na perda ou não de pacotes, o que dependendo do cenário e da aplicação, pode ser um problema a curto, médio ou longo prazo. A taxa de perda de pacotes - PER (Packet Error Rate) é o primeiro parâmetro que o responsável por uma rede de sensores sem fio irá consultar.

Objetivo

O objetivo é possuir uma rede de sensor sem fio emulada, utilizando o protocolo de comunicação Radiuino.

O Conceito de Repetidor

Quando possuímos necessidades como alcançar distâncias maiores, locais sem visada direta, ou mesmo criar uma extensão da rede, e não desejamos ou não temos condições de realizar a troca de equipamentos de rádio, podemos utilizar um repetidor. A base envia o sinal ao repetidor, que recebe e processa o sinal, e, em seguida, envia os pacotes ao seu destino final.

Porque Utilizar uma Rede Emulada?

Montar e calibrar uma rede de sensores sem fio real, realizar os testes e desmontá-la, a cada nova rodada de testes pode ser uma tarefa árdua. Para muitos assuntos que estudamos em redes de comunicação de dados como, por exemplo, técnicas de roteamento, softwares de monitoramento, e etc; Não é preciso montar uma rede real, uma rede emulada atende perfeitamente a fase de desenvolvimento e testes. Uma vez validado o cenário no ambiente emulado, partimos para os testes em ambiente real.

Material Necessário

O Ambiente Emulado

Como pode ser observado na figura 01, teremos uma base que se comunica com um repetidor, que repassa os dados para o sensor de destino, o número de sensores é definido no Script Python. Em cada sensor coletaremos os dados: Temperatura, Umidade e Luminosidade. Além da RSSI de UpLink e DownLink de cada enlace.
Figura 01
A figura 02 detalha o fluxo de dados em cada etapa do processo.
Figura 02
Exemplo de Coleta dos dados no terminal
Coleta de Dados no Terminal
Exemplo de Coleta dos dados na ferramenta de Gerencia de Redes Zabbix
Mapa da Rede de Sensores sem Fio Representada no Zabbix

Arquivos Fonte

Todos os arquivos, incluindo a parte do Zabbix, estão disponíveis aqui.

Agradecimentos


Queria agradecer ao meu Orientador Prof. Dr. Omar C. Branquinho por todo o conhecimento que vem compartilhando comigo desde a nossa primeira conversa, quando eu não entendia absolutamente nada de redes de sensores sem fio.
Ao meus amigos Eng. Raphael Montali da Assumpção e Eng. Guilherme Lopes por todas as dicas, conversas e troca de idéias, e nesse post específico ao Guilherme por ter revisado o conteúdo.
Não posso esquece também do meu amigo Douglas Esteves, que me ajudou a entrar no "universo das plaquinhas", como eu sempre brinco, aprendi muita coisa com ele, as dicas dele foram essenciais no começo dessa caminhada.
E finalmente, mas não menos importante, ao meu amigo Matheus Bernardes, meu oráculo do Python, eu copio código dos projetos dele, peço ajuda, etc. E ele sempre me ajuda com a maior boa vontade!

sexta-feira, 30 de dezembro de 2016

Modelo de Script com uso de getopts para passagem de parametros

Introdução

Para fazer scripts profissionais e voltados a usuários iniciantes, temos que tomar uma série de cuidados, como por exemplo, exibir um help sobre o funcionamento do script, permitir passagem de parâmetros, checar se os parâmetros informados são válidos, se solicitarmos o uso de arquivos, verificar se o usuário possui o privilégio mínimo requerido naquele arquivo, se o script tem alguma dependência checar se essa dependência foi suprida no ambiente do usuário, e caso negativo informar como ele pode supri-la.

Junto com meu grande amigo Aécio Pires, desenvolvemos esse script base que demonstra todos os conceitos listados acima, esperamos que seja útil a todos.

Observação: Se você não conhece o getopts conheça-o aqui e sua vida será outra ;-)

segunda-feira, 19 de dezembro de 2016

Zabbix e Grafana: Disponibilizando um Dashboard por Cliente

Introdução

Uma das perguntas mais frequentes que temos nos canais de Zabbix é: "Como eu faço para disponibilizar um gráfico/tela por cliente?"
Quando essas pessoas passam a usar os gráficos do Grafana alimentados pelos dados do Zabbix, o cenário não muda, o objetivo deste post é descrever como suprir essa demanda.

Pré-Requisitos

Eu parto do princípio que você já possui o Zabbix e o Grafana integrados e funcionando perfeitamente. Não abordarei esse tema, se ainda não domina essa parte, por favor visite esse post.

Configurações no Zabbix Server

Usuários no Zabbix Server
A única configuração que precisa ser feita no Zabbix Server é a criação dos usuários, nesse caso foram criadas duas contas: "Cliente 01" e "Cliente 02", ambos do tipo "Zabbix User" e membros do grupo "Clientes". Mas isso para demonstrar o conceito, o que você precisa ter em mente é que cada cliente tem que possuir um usuário no Zabbix Server com acesso aos hosts que lhe interessa.

Configuração no Grafana

A primeira coisa que vamos fazer é desativar a opção de usuários comuns de criarem Organizações. Para ficar bem simples, entenda cada organização como um cliente, logo, não queremos nossos clientes criando novas organizações.

# vi /etc/grafana/grafana.ini

# Allow non admin users to create organizations
;allow_org_create = true
allow_org_create = false


Reinicie o serviço

# service grafana-server restart (CentOS 6.x)
# systemctl restart grafana-server (CentOS 7.x)
# sudo service grafana-server restart (Debian/Ubuntu)


Criar os usuários

Clique no logo do Grafana // Admin // Global Users
Criação de usuários

Clique no botão Add new user

Adicionar novos usuários
Preencha os dados e clique no botão Create
Propriedades do usuário
Observação: O Grafana não aceita o mesmo e-mail para usuários diferentes.

Repita o processo para o Cliente 02

Criar as organizações

Clique no logo do Grafana // Admin // New organization
Criação de Organizações

Preencha o nome da organização e clique no botão Create

Adicionar novas organizações
Você pode cadastrar informações adicionais para a organização.

Propriedades da organização
Repita o processo para o Cliente 02

Clique no logo do Grafana // Admin // Global Users

Gerenciamento de usuários
Na linha do Cliente 01, clique no botão Edit

Edição de usuários
Na seção Organizations, preencha o nome da Organização e o nível de privilégio (Role), nesse momento vamos deixar como Admin e clique no botão Add

Alterando privilégio de usuário em organização
Na linha da organização Main.org, altere o nível de privilégio (Role) para Admin

Alterando privilégio de usuário em organização

Repita o processo para o Cliente 02

Entendendo um pouco mais sobre as organizações

No começo do post foi dito para vocês entenderem cada organização como um cliente, pois naquele momento essa informação era suficiente, mas agora precisamos detalhar um pouco mais esse tópico, na realidade cada organização é uma instância do Grafana. Cada organização possui suas dashboards, data sources e configurações, e, esses dado não são compartilhados entre elas. Desse modo o que foi dito antes, não está incorreto, mas essa explicação é importante para as próximas etapas.

Outro detalhe importante é a questão da amarração das permissões, se você estiver logado como admin, e usar a opção Switch to Cliente 01 (Organização), por exemplo, e criar uma dashboard nessa organização, ela não estará disponível para o usuário cliente 01 (Proprietário da organização Cliente 01), pois ela está amarrada ao perfil do usuário admin. O usuário admin está alterando a organização Cliente 01, dentro do universo dele, que é totalmente isolado do universo do usuário Cliente 01.

Configurações para cada cliente

Clique no logo do Grafana // Admin // Sign out

Logoff de usuário

Realize o Login como Cliente 01

Login de usuário

Clique no logo do Grafana // Cliente 01 // Switch to Cliente 01
 
Alterando o perfil de organização

  • Habilite o plugin do Zabbix para essa organização;
  • Configure o Data Source para essa organização, utilizando as credenciais do Cliente 01 cadastrado no Zabbix Server;
  • Crie a Dashboard para essa organização.
Repita o processo para o Cliente 02

Configurando as permissões definitivas

Realize o Login como Admin

Clique no logo do Grafana e certifique-se que o admin está no perfil da organização Main.org, se não estiver altere para esse perfil.

Clique no logo do Grafana // Admin // Global Users

Gerenciamento de usuários
Altere o perfil da Organização Cliente 01 para Viewer e remova a organização Main.org, basta clicar no botão "X" na linha da organização.

Permissões de usuários
Repita o processo para o Cliente 02

Visualizando as Dashboards

Execute o login como Cliente 01

Clique no nome da Dashboard, nesse caso Cliente 01

Seleção da dashboard
Visualize os gráficos

Gráficos do Cliente 01

Repita o processo para o Cliente 02
Gráficos do Cliente 01

Você pode copiar o endereço do dashboard e passar para o seu cliente, nesse tutorial:
http://IP-SERVIDOR:3000/dashboard/db/cliente-01
http://IP-SERVIDOR:3000/dashboard/db/cliente-02

Referências

Grafana.org
Aécio Pires

quarta-feira, 4 de maio de 2016

Servidor Syslog-ng - Gerenciamento Centralizado de Logs

Instalação do servidor

A instalação é bastante simples e não demanda nenhum pré-requisito
# yum -y install syslog-ng

Vamos parar o serviço de log tradicional (rsyslog)
# systemctl stop rsyslog
# systemctl disable rsyslog

Iniciar e configurar para inicio automático o syslog-ng
# systemctl start syslog-ng
# systemctl enable syslog-ng

Manteremos uma cópia do arquivo original, até por questões de consulta de parâmetros.
# cd /etc/syslog-ng
# cp syslog-ng.conf syslog-ng.conf.orig

E gerar um novo arquivo com os parâmetros desejados. Em destaque os parâmetros que foram alterados.
# vi /etc/syslog-ng/syslog-ng.conf
@version:3.5
@include "scl.conf"

# syslog-ng configuration file.
#
# This should behave pretty much like the original syslog on RedHat. But
# it could be configured a lot smarter.
#
# See syslog-ng(8) and syslog-ng.conf(5) for more information.
#
# Note: it also sources additional configuration files (*.conf)
#       located in /etc/syslog-ng/conf.d/

# Define Global Options
options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (10000);
    chain_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

# Define input source
source s_sys {
    system();
    internal();
};

source s_net {
udp(ip(0.0.0.0) port(514));
tcp(ip(0.0.0.0) port(514));
};

# Define Destination for Local Logs
destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" flush_lines(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_kern { file("/var/log/kern"); };
destination d_mlal { usertty("*"); };

# Define Destination for Remote Log
destination netlogpile { file(
"/var/log/servers/$FULLHOST/$YEAR/$MONTH/$DAY/$FULLHOST-$YEAR-$MONTH-$DAY.log"
owner(root) group(root) perm (0600)
create_dirs ( yes ) dir_perm( 0700 ));
};

filter f_kernel     { facility(kern); };
filter f_default    { level(info..emerg) and
                        not (facility(mail)
                        or facility(authpriv)
                        or facility(cron)); };
filter f_auth       { facility(authpriv); };
filter f_mail       { facility(mail); };
filter f_emergency  { level(emerg); };
filter f_news       { facility(uucp) or
                        (facility(news)
                        and level(crit..emerg)); };
filter f_boot   { facility(local7); };
filter f_cron   { facility(cron); };

# Define local logging destination

#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };

# Define network logging destination
log { source(s_net); destination(netlogpile); };

# Source additional configuration files (.conf extension only)
@include "/etc/syslog-ng/conf.d/*.conf"

# vim:ft=syslog-ng:ai:si:ts=4:sw=4:et:

Basicamente o que fizemos foi aumentar o número de logs que ele gerencia na fila de entrada e criar uma estrutura para nossos logs:
“/var/log/servers/$FULLHOST/$YEAR/$MONTH/$DAY/$FULLHOST-$YEAR-$MONTH-$DAY.log”

Que vai se traduzir em:
“/var/log/servers/nome_do_servidor_de_origem_dos_logs/ano/mês/dia/ nome_do_servidor_de_origem_dos_logs-ano-mês-dia.log”

Reiniciar o serviço
# systemctl restart syslog-ng

Rotate dos Logs

Vamos manter o registro dos logs dos últimos 120 dias , faremos isso com o crontab e o comando find, conforme orientação da própria documentação oficial.

# contrab -e
# Todos os dias as 01:00 gera o gzip dos logs do dia anterior
0       1       *       *       *       /usr/bin/find /var/log/servers/ -daystart -mtime +0 ! -name "*.gz" -type f ! -path "*`/bin/date +%Y/%m/%d`*" -exec /usr/bin/gzip {} \;

# Todos os dias as 02:00 remove os logs do Syslog-ng com mais de 120 dias
0       2       *       *       *       /usr/bin/find /var/log/servers/ -daystart -mtime +120 -type f -exec rm {} \;

Referencias

ZF SHARE IS CARE Board
Peter@BalaBit
The syslog-ng Open Source Edition
Michael King

domingo, 24 de abril de 2016

1ª Zabbix Conference LatAM - Saiba como foi

Nos dia 15 e 16 tivemos a 1ª Zabbix Conference LatAM, eu gostaria de comentar um pouco sobre o que vi e vivenciei no evento.

O primeiro ponto que gostaria de destacar é o cuidado que a organização do evento teve com os participantes, translado do aeroporto para o hotel, translado para a churrascaria (Welcome Party), translado para Gramado, ou seja, tudo foi pensado para proporcionar conforto aos participantes.

O hotel era excelente, em um bairro de classe alta em Porto Alegre e muito bem localizado, próximo do centro, com parques e shopping a quadras de distância, acesso a transporte (Taxi, Uber e Ônibus) na mesma rua.

O evento seguiu os mesmos padrões da Conferencia Oficial em Riga, Letônia, essa foi a minha impressão, do Adail, do pessoal da Globo.com, que são pessoas que tiveram a oportunidade de ir para lá. Se não atingiu o mesmo nível, eu diria que atingiu mais de 90%, mas em minha opinião estava no mesmo nível.

O evento ocorreu em um auditório retangular, o que permite que todos fiquem próximo do palco principal, as pessoas estavam confortavelmente distribuídas em duplas ou trios, com mesa e cadeira, o que é excelente para quem queria levar o note, fazer anotações, etc. Três telões, filmagem, excelente sistema de som e de ar-condicionado completavam o ambiente.

Além do café da manhã servido pelo hotel, ocorreram os coffee breaks e almoço no mesmo espaço do evento, mesas que comportavam 8 a 10 pessoas permitiam conforto e interação entre os participantes.

A primeira festa foi em uma churrascaria tipicamente gaúcha, com shows tradicionais.

A segunda foi em um Pub em uma badalada rua do bairro, vale a pena destacar a quantidade de comida (inclusa na inscrição), simplesmente não paravam de abastecer a mesa.
 
E a última foi um café colonial em Gramado, pelo que vi das fotos, foi um exagero.

As palestras foram sensacionais, tivemos palestras técnicas, palestras voltadas à gestão e palestras para iniciantes, aliás, isso refletiu bem o público do evento, me surpreendi com a diversidade de participantes, tivemos vários participantes que estão começando com a ferramenta e estavam presentes no evento, o que tornou o evento ainda mais interessante.

Todos os mais de 100 participantes presentes, tiveram oportunidade de interagir entre sí, a própria maneira como o evento é realizado incentiva esse tipo de interação e, esse é um dos principais motivos da limitação do número de inscrições.

O Alexei é uma atração a parte, acho que todos que tiveram a oportunidade de conhecê-lo pessoalmente pela primeira vez sentiram aquele friozinho na barriga, aquela sensação de "CARA É O ALEXEI" *risos*, mas ele é um cara simpático, super simples, eu visitei a Zabbix SIA, interagi um pouco com ele em 2013 (Na conferencia e no Latinoware) e agora novamente no evento, ele anda a pé, come o que você oferecer, ama guaraná, conversa, tira foto, aperta a mão e recebe abraços sem frescura, e o evento reflete isso.

Temos muito que agradecer o Luciano Alves, CIO da Unirede, pelo empenho, foram mais de 4 anos tentando convencer o Alexei de que era viável realizar uma conferencia na América Latina, e claro, a primeira seria no Brasil.

Demorou mas aconteceu e o Alexei foi embora de queixo caido, nós realmente causamos um excelente impressão, uma das últimas perguntas do evento foi se teríamos uma próxima e a resposta foi "Sure". E depois quando chegou a Riga fez um post no Facebook dizendo que era tempo de iniciar uma nova tradição, a conferencial LatAm.

O último ponto que gostaria de destacar são os frutos do evento, a questão do módulo da Unirede para monitoramento de Xen sempre foi algo complicado de se entender, o módulo estava disponível, mas o código fonte não, eles não falavam mais nada sobre isso, e na conferencia o Luciano Alves e o Thiago Melo esclareceram o por que: O módulo foi criado por administradores de rede e não por desenvolvedores, apenas como uma prova de conceito, eles queriam que as pessoas conhecessem mais sobre o uso de módulos e criaram esse módulo para isso, mas eles não tem braço para tocar o desenvolvimento e realizar as alterações necessárias a cada nova versão do Zabbix e/ou Xen, e acharam que as pessoas não tinham na realidade interesse no módulo, a conferencia demonstrou o contrário que as pessoas tinham sim interesse e estavam dispostas a tocar o projeto se o código fosse disponibilizado, então no segundo dia, o módulo foi disponibilizado no Github e hoje todos podem contribuir com seu desenvolvimento, o mesmo ocorreu com os scripts do pessoal da Globo.com, com o projeto Zabbix Security Insights do Alessandro Silva, só para citar os principais, o pessoal realmente teve um gás novo na conferencia, no sentido de usar mais o Share, compartilhar suas soluções e ajudar o produto e a comunidade a se tornarem ainda mais conhecidos.

Espero que quem não conseguiu ir esse ano, não importa o motivo, tenha a oportunidade de ir no próximo ano e vivenciar o que é participar de uma conferencia Zabbix.

Abraços a todos,
André Déo

sexta-feira, 24 de julho de 2015

Instalação de Servidor TFTP em Ambiente CentOS

Introdução

Um servidor TFTP é útil em pelo menos duas situações:
  • Manipulação de arquivos em ativos de rede, como por exemplo, atualização de firmware, backup e restore de configuração;
  • Manter um backup de seus ativos de rede centralizados em um único diretório, que posteriormente vai para a unidade de fita, claro.
A primeira situação é bem comum, mas poucos se preocupam com a segunda situação, então fique com ela na mente, pense sobre isso enquanto toma banho (já resolvi tantos problemas pensando durante o banho),  eu voltarei nesse ponto em outro post.

Ponto de partida

Eu parto do princípio que você já possui um Servidor CentOS 7 Básico.

Instalação dos pacotes

# yum  -y install  tftp-server xinetd

Ativar o serviço

# systemctl enable tftp.socket

Configuração das permissões

# chown -R nobody:nobody /var/lib/tftpboot/
# chmod 777 /var/lib/tftpboot/

Personalização do arquivo de configuração

# vi /etc/xinetd.d/tftp

service tftp
{
        disable
                 = no 
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s -c /var/lib/tftpboot 

        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}


Observação: Sem o parâmetro -c você não será capaz de criar novos arquivos, apenas de atualizar os já existentes.

Iniciar o serviço

# systemctl start xinetd
# netstat -ntulp | grep 69
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               1329/xinetd

Testar a comunicação com o serviço

Cliente TFTP para Linux

De preferência teste o envio a partir de outro servidor para ter certeza que tudo está funcionando.
# yum install -y tftp

# cd /etc/
# tftp -v 192.168.0.181 -c put passwd
Connected to 192.168.0.181 (192.168.0.181), port 69
putting passwd to IP:passwd [netascii]
Sent 28437 bytes in 0.2 seconds [1228778 bit/s]


Observação: 192.168.0.181 é o IP do meu servidor de TFTP, não esqueça de alterar o endereço.

De volta ao servidor de TFTP:
# ls -l /var/lib/tftpboot/
total 28
-rw-rw-rw- 1 nobody nobody 28111 Jul 23 16:41 passwd


De volta ao servidor Cliente:
# cd ~
# tftp -v IP -c get passwd
Connected to 192.168.0.181 (192.168.0.181), port 69
getting from 192.168.0.181:passwd to passwd [netascii]
Received 28437 bytes in 0.0 seconds [82130090 bit/s]

# ls -l passwd
-rw-r--r-- 1 root root 28111 Jul 23 16:50 passwd


Observe que o arquivo tem exatamente o mesmo tamanho.

Cliente TFTP para Windows

Podemos baixar um cliente linha de comando para Windows em TFTP Client for Windows

Download de um arquivo do TFTP Server
C:\>tftp.exe -i IP GET nome_arquivo_remoto nome_arquivo_local

Upload de um arquivo para o TFTP Server:
C:\>tftp.exe -i IP PUT nome_arquivo_local nome_arquivo_remoto

Download do arquivo passwd
C:\>tftp.exe -i 192.168.0.181 GET passwd passwd.txt
WinAgents TFTP Client version 2.0b Copyright (c) 2004-2011 by Tandem Systems, Ltd.
http://www.winagents.com - Software for network administrators

Transfering file passwd from server in octet mode...
Transferring data from 192.168.0.181...
Using blocksize = 512
Using TFTP timeout = 10s
Transfer size = 28111 bytes
File passwd was transferred successfully.
28111 bytes transfered for 1 seconds, 0 bytes/second

Referências

www.question-defense.com
Knowledge Addict
Fórum CentOS.org
Tournas Dimitrios
TFTP Server for Windows

quarta-feira, 22 de julho de 2015

Servidor CentOS 7 Básico

Introdução

Com o advento do Systemd e a mudança de MySQL para MariaDB, algumas pessoas se assustam ao migrar de CentOS 6.X para 7.X, o objetivo desse post é prover uma instalação básica, mostrar alguns comandos para que você se sinta mais confortável e sugerir algumas boas práticas.

Antes de continuarmos

Eu sou da época em que a ajuda e incentivo que a gente recebia era RTFM, fui criado no Slackware, então apesar de gostar de ensinar, algumas coisas permanecem, pois fazem parte da minha formação. Só para citar as principais:
Servidor não tem interface gráfica, a menos que seja uma necessidade da aplicação;
Instalações são feitas sempre partindo-se do Minimal;
Só instale o que for necessário;
Servidor é 64 bits;
Cada aplicação precisa pacotes e ajustes específicos, esse post trata do que você deve fazer em todos os seus servidores.

Ajustes Pós Instalação

Partindo do princípio que você fez uma instalação Minimal do CentOS 7, logou pela primeira vez como root, vamos fazer alguns ajustes.

Parar a execução do firewall:

# systemctl stop firewalld

Desabilitá-lo permanentemente:

# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'

Conferir se o mesmo está desabilitado:

# systemctl is-enabled firewalld
disabled


DICA: Você pode ver o status de todos os serviços com o comando abaixo:
# systemctl list-unit-files

Checar o estado do SELinux:

# getenforce
Enforcing

Torna-lo permissivo:

# setenforce 0

Checar o estado do SELinux:

# getenforce
Permissive


DICA: Para desabilitar definitivamente o SELinux edite o arquivo /etc/selinux/config e altere a opção "SELINUX=enforcing" para "SELINUX=disabled". Isso pode ser feito por meio do comando:
# sed -i 's/enforcing/disabled/g' /etc/selinux/config

Observação: Estou desabilitando o Firewall e o SELinux porque cada servidor tem uma finalidade específica e, exige ajustes específicos para essa finalidade, então por padrão desabilito os dois, e se houver necessidade, reabilito e faço os ajustes específicos.

O EPEL - Extra Packages for Enterprise Linux é um repositório oficial com pacotes extras e as últimas versões dos pacotes. Podemos instalá-lo através do comando abaixo:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

O REMI é um repositório com pacotes adicionais aos do EPEL e/ou versões mais atualizadas do mesmo, dependendo do caso. Ele não funciona se o EPEL não estiver instalado, é um pré-requisito. Para instalar o remi, use o comando abaixo:
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Além disso ele vem desabilitado, é preciso habilitá-lo:
# vi /etc/yum.repos.d/remi.repo
[remi]
name=Les RPM de remi pour Enterprise Linux 7 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/7/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/7/remi/mirror
#enabled=0
enabled=1

gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi


Feito isso atualize seu sistema:
# yum update -y

Este último comando vai atualizar todos os pacotes do seu sistema para as versões disponíveis no EPEL e REMI.

Dependencias Básicas

Esses são pacotes que precisamos para o dia-a-dia, independente da aplicação desse servidor. Lembre-se um Servidor Web tem necessidades diferentes de um Servidor de FTP.
# yum -y install rsync  bind-utils mlocate mailx wget net-tools make cmake automake man net-tools

Clamav

Todo servidor tem que ter antivírus? Mas não é Linux? Eu disse que ia lhe sugerir algumas boas práticas, mas são apenas sugestões, este é o meu setup de Servidor CentOS 7.
# yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

Precisamos comentar as linhas de exemplo:
# sed -i -e "s/^Example/#Example/" /etc/freshclam.conf
# sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf


E atualizar o clamav:
# freshclam

Precisamos comentar a linha abaixo:
# sed -i -e "s/^FRESHCLAM_DELAY/#FRESHCLAM_DELAY/" /etc/sysconfig/freshclam

Editar o arquivo scan.conf:
# vi /etc/clamd.d/scan.conf

E descomentar a linha:
#LocalSocket /var/run/clamd.scan/clamd.sock

Habilitar o Clamav, Inicia-lo e Checar se o processo está ativo:
# systemctl  enable clamd@scan
# systemctl  start clamd@scan
# systemctl  status clamd@scan


Testar a verificação de um arquivo:
# clamdscan -c /etc/clamd.d/scan.conf /etc/hosts

Cron

Deixar um cron padrão para que qualquer um possa editá-lo:
# crontab -e

# Exemplo de uso
# 0     4       *       *       *       <usuario>       who

# Campo         Funcao
# 1o.           Minuto
# 2o.           Hora
# 3o.           Dia do mes
# 4o.           Mes
# 5o.           Dia da semana

# 6o.           Usuario com o qual o comando sera executado <opcional>
# 7o.           Programa para execucao

# Campo                 Valores
# Minuto                 0-59
# Hora                     0-23
# Dia do mes           1-31
# Mes                      1-12
# Dia da semana      0-6 (o "0" eh o domingo), 1 eh a segunda, etc.

# -----------------------------------------------------------------------------------------------
# Roda o update do antivirus todos os dias as 23:00
0 23 * * * /usr/bin/freshclam


Reiniciar o servidor:
#reboot

Referências

ISMAILYENIGUL

quarta-feira, 21 de janeiro de 2015

Livro “De A a Zabbix” será publicado pela Novatec


Desde 2011 Eu, Adail Spínola e Aécio Pires estávamos escrevendo um livro sobre Zabbix. Graças a Deus, já temos uma previsão de que ele seja publicado no mês que vem. :-)

Saibam mais sobre o livro aqui: http://zabbixone.com/?p=68

O site da Novatec já está divulgando o livro no final da página inicial, na seção de próximos lançamentos. http://www.novatec.com.br/


O livro tem o apoio de Alexei Vladishev, criador do Zabbix, e Luciano Alves, proprietário e fundador da UNIREDE, empresa representante do Zabbix na América Latina e que aplica a certificação Zabbix no Brasil.

Ainda não é possível comprar o livro através da pré-venda e também não sei a estimativa de preço, mas logo logo você saberá. Aguarde e acompanhe as novidades no site do livro http://zabbixone.com.
 
Se você é aluno ou professor na área de Redes de Computadores, saiba que o livro pode ser utilizado na disciplina de gerenciamento e monitoramento de redes de computadores. O conteúdo do livro também vai de encontro ao assunto ensinado na certificação Zabbix.

quinta-feira, 3 de outubro de 2013

Monitoramento de VMs com Zabbix 2.2

Introdução:
Uma das grandes novidades da versão 2.2 é a possibilidade de monitoramento de máquinas virtuais de forma automatizada pelo recurso LLD (Low Level Discovery).

Advertencia:
Para esse tutorial estou usando a versão alpha do Zabbix, mais especificamente a 2.1.6 (sétimo alpha).

Apesar de funcional para demonstração do recurso essa versão não deve ser utilizada em produção.

Preparação do Ambiente:
Utilizei o Sistema Operacional CentOS 6.4 na opção de instalação minimal.

Após isso instalei os repositórios epel e remi:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

É preciso habilitar o remi depois de instalado:
# vi /etc/yum.repos.d/remi.repo
Altere a linha enabled=1

Atualizar o sistema:
# yum update -y

Desativar SeLinux e Firewall 

Instalação do Zabbix:
 Para realizar a instalação do Zabbix podemos seguir esse tutorial, modificando alguns detalhes.

Suprir as Dependências:
Na seção suprir as dependências, vamos acrescentar alguns pacotes, pelo fato de estar usando o CentOS Minimal, e o novo pré-requisito utilizado no monitoramento de VMs a libxml2.
# yum -y install ntsysv make wget bind-utils httpd php php-common php-mysql php-gd php-bcmath php-mbstring php-xml mysql mysql-server mysql-devel net-snmp net-snmp-devel net-snmp-utils net-snmp-libs gcc curl curl-devel libxml2-devel libxml2

Atenção na hora de realizar o download dos fontes para escolher a versão correta (Alpha Releases).

Configurar e Compilar os Códigos Fontes (Sources):
Na seção configurar e compilar os códigos fontes, precisamos adicionar o novo pré-requisito utilizado no monitoramento de VMs a libxml2.
./configure --enable-server --with-mysql --with-net-snmp --with-libcurl --enable-agent --with-libxml2

Observe na saída final a linha de Flags de Compilação:
Compiler flags:        -g -O2  -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -fasynchronous-unwind-tables -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC  -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1        -I/usr/include/rpm -I/usr/local/include -I/usr/lib/perl5/CORE -I. -I/usr/include   -I/usr/include/libxml2

Todo o resto do processo permanece inalterado.

Conhecendo os Templates Disponíveis:

Templates Disponíveis
Configurando o Host:
Faça a configuração normal do host, acrescente o template e as seguintes macros:
{$URL}: https://<IP-address>/sdk (URL do vCenter / ESX / ESXi)
{$USERNAME}: Usuário
{$PASSWORD}: Senha

Se estiver na dúvida sobre esses dados, acesse https://<IP-address> e clique em Browse datastores in this host's inventory, teste seu usuário e senha, se der certo é esse usuário e senha que você vai usar ;-)
Testando credencias
Exemplos de Dados Coletados:

Dados do servidor ESXi
VMs Descobertas Automaticamente
VM Windows
VM Linux

VMs descobertas automáticamente
 Considerações Finais:
Usei uma máquina ESXi 5.1 com o template Template Virt VMware vSphere.
Você pode ir no template em Discovery e baixar o intervalo default de 3600 segundos (1 hora) para 300 segundos (5 minutos), para agilizar os testes.

Fonte e Agradecimentos:
Agradeço ao 九龍真乙 @qryuu por ter disponibilizado essa apresentação, eu vinha realizando vários testes sem sucesso, pois não sabia o que colocar na variável {$URL}, mas graças a ele esse tutorial foi possível.