Pitombera’s Weblog

Just another weblog

[Dica] Nagios + SMS

Publicado por pitombera em Junho 9, 2009

Nagios_banner

Introdução

Esse assunto já foi meio que mencionando em Perl + GSM + Imaginação = Coisas Legais , porém o leitor Alexander reportou alguns problemas ao utilizar a solução em Perl, após alguns e-mails trocados e nenhuma resposta positiva no cenário do Alexander, fiz a sugestão de usar a gsmlib( também mencionada no post anterior) e assim solucionando o problema do amigo leitor.

Meu ambiente de teste desta vez foi um NetBSD5.0 e o celular testado foi o mesmo Motorola V3 Black via cabo USB.

O ambiente do Alexander foi um CentOS release 5.3 e o celular um Motorola V3 re.

Preparando o Ambiente

Instalando o gsmlib

Netbsd

pkg_add -vv ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0/All/gsmlib-1.10nb2.tgz

FreeBSD

pkg_add  -v ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/All/gsmlib-1.10_4.tbz

CentOS

yum install libstdc++

wget -c ‘http://www.pxh.de/fs/gsmlib/download/gsmlib-1.10-1.i386.rpm’

rpm -ivh gsmlib-1.10-1.i386.rpm

Configurando comunicação com o Celular

NetBSD

Não foi necessário absolutamente nada, espetou o celular, detectou e reconheceu usando o umodem.

Mensagem do dmesg

"umodem0: Motorola Inc. Motorola Phone (V3), rev 1.10/0.01, addr 2, iclass 2/2"

ln -s /dev/ttyU0 /dev/mobilephone

FreeBSD*

São necessários os módulos umodem e ucom, adiciona-se então ao ‘/boot/loader.conf’:

ucom_load=”YES”
umodem_load=”YES”

Após reinicio( sim, reinicio, quando tentei carregar o módulo com o kldload deu panic ) do sistema, quando plugado o celular à USB veremos uma mensagem semelhante a essa na saída do comando ‘dmesg’.

ucom0: <Motorola Inc. Motorola Phone (V3), class 2/0, rev 1.10/0.01, addr 2> on uhub1

ln -s /dev/ttyU0 /dev/mobilephone

*instruções copiadas do post sobre Perl, estes passos não foram refeitos.

CentOS*

Já vem com suporte ao módulo cdc_acm que é necessário.

ln -s /dev/ttyACM0 /dev/mobilephone

chmod 666 /dev/ttyACM0

chmod 666 /dev/mobilephone

*Passo-a-passo descrito pelo colega Alexander

Configuração Nagios

Adicionar ao arquivo commands.cfg


define command{

 command_name    notify-host-by-sms

 command_line /usr/bin/gsmsendsms $CONTACTPAGER$ "Host:$HOSTNAME$ - State:$HOSTSTATE$"    

 }
define command{

 command_name    notify-service-by-sms

 command_line /usr/bin/gsmsendsms $CONTACTPAGER$ "Host:$HOSTNAME$ - Serv: $SERVICEDESC$ - State: $SERVICESTATE$"

 }

Pronto, agora é só adicionar o número do celular na definição de contatos e o tipo de notificação ao host/serviço.


pager			123456789

* DDD com 2 dígitos
* número do celular

Conclusão e Agradecimentos

Como tinha citado no post anterior, o envio de sms pode ser uma opção em caso de queda de internet. Há claro, que se tomar os devidos cuidados ao configurar o nagios, tanto para não extrapolar no envio desnecessários de mensagens, como receber um sms em horário inapropriado para um alerta básico, resumindo: Tenha bom senso.

Gostaria de agradecer ao Alexander, que contribuiu com as informações necessárias no ambiente CentOS, configuração do nagios, que testou e está usando em produção a solução descrita nesse post.

A todos um grande abraço, espero que tenham gostado e possam utilizar dessa solução no ambiente de vocês.

Diego Pitombeira dos Prazeres

Enviado em Dica, Rede | Deixar um comentário »

Atualizando IP no e-domínios

Publicado por pitombera em Janeiro 29, 2009

O Dilema

Num certo canal da Freenode, o underguiz reclamava que por ter ip dinâmico, tinha que manualmente logar e atualizar os dados do seu domínio. O http://www.e-dominios.com.br/ não possui um client como no-ip,dydns entre outros, que faz o trabalho sujo por você.

Solução

Então, iniciamos um pequeno shell-script para automatizar essa função e deixar o precioso tempo do amigo underguiz mais livre.

Após alguns minutos tivemos resultados positivos para o problema do underguiz, agora vou compartilhar a mini solução que criamos.

http://pastebin.com/f3b094d54

Automatizando

$ wget ‘http://pastebin.com/pastebin.php?dl=f3b094d54′ -O edominio.sh

$ dos2unix edominio.sh # http://hany.sk/~hany/software/hd2u/

$ chmod +x edominio.sh

Agora, falta apenas colocar o script no cron e deixá-lo rodando de hora em hora.

$ crontabe -e

#minute (0-59)
#| hour (0-23)
#| | day of the month (1-31)
#| | | month of the year (1-12 or Jan-Dec)
#| | | | day of the week (0-6 with 0=Sun or Sun-Sat)
#| | | | | commands
#| | | | | |
#### atualizando
0 */1 * * * /scripts_dir/edominio.sh >> /dev/null 2>&1

*Diretório onde o script está contido.

Espero que o script funcione para você, como funcionou para o undrgz.

Observação

O script é bem simples,  não checa o retorno ou possivéis erros nas etapas de autenticação/atualização ( quem sabe em uma nova versão).

É necessário ter o  cURL instalado e setar as variavéis à seu gosto.

Só testamos com o underguiz, mas com certeza não será difícil adaptar o uso para qualquer outra conta que utilize o serviço da e-domínios.

Sem dúvidas a parte mais traumática é a quantidade de campos/values que são passados na hora de atualizar o  ip, e a mais suscetível a erros.

Enviado em script | Tagged: | 1 Comentário »

Anti-Ad com SquiD

Publicado por pitombera em Setembro 2, 2008

Introdução

O squid proxy pode pegar uma lista de ips vinda de um arquivo texto e bloquear estes ips para os clientes usando o proxy. Isto é perfeito para o bloqueio de servidores “ad”. Seus clientes não serão mais importunados com ads, diminuirá o consumo de banda e você não terá que se preocupar se seus clientes vão clicar em qualquer coisa animada que apareça. Este script funciona de forma semelhante ao SafeSquid, mas te dá total controle sobre a lista de ips.

Iniciando

As seguintes linhas precisam ser adicionadas ao seu squid.conf. Vamos considerar que seu squid.conf esteja em ‘/etc/squid/’ e você irá colocará sua lista de servidores ad( ad_block.txt) no mesmo diretório.

A primeira linha abaixo é apenas um comentário para você lembrar de onde está pegando a lista de ips. A segunda linha é uma expressão regular que lê o arquivo “/etc/squid/ad_block.txt” quando o daemon do squid é carregado ou quando você reconfigura o squid com “squid -k reconfigure”. A última linha é uma instrução para que o squid bloqueie o acesso aos ips dos servidores ads.

## disable ads ( http://pgl.yoyo.org/adservers/ )
acl ads dstdom_regex “/etc/squid/ad_block.txt”
http_access deny ads

Baixando a lista de servidores Ad

Agora nós precisamos baixar a lista com os ips dos servidores ad e adaptar para o formato suportado pelo squid. O seguinte script irá fazer isso por nós. Primeiro o script faz o download da lista em pgl.yoyo.org com o wget e salva em /tmp/tmp_ad_file, depois as linhas que não queremos( html e outras coisas) são removidas com o grep e o resultado salvo em ‘/etc/squid/ad_block.txt’. Por último, o script recarrega o squid com um ’squid -k reconfigure’ para que a lista seja atualizada e remove o arquivo temporário.

link1

link2

Criando um erro personalizado

Vá ao diretório de erros, é o valor de ‘error_directory’ que é setado no seu squid.conf, no meu caso foi “/usr/local/etc/squid/errors/Portuguese”; eu optei por copiar o ‘ERR_ACCESS_DENIED’ para ERR_AD_DENIED e editar à meu gosto.

Adicione ao squid.conf :
deny_info ERR_AD_DENIED ads

mais info em: http://www.squid-cache.org/Versions/v2/2.7/cfgman/deny_info.html

Automatizando com o cron

O ideal é que você tenha uma lista atualizada sempre, o site de onde pegamos a lista(pgl.yoyo.org) atualiza-a em média cada três(3) dias. Abaixo segue a regra para ter um job no cron a cada 3 dias ás 5:35 da manhã. Use o ‘crontab -e’ como root e adicione:

#minute (0-59)
#| hour (0-23)
#| | day of the month (1-31)
#| | | month of the year (1-12 or Jan-Dec)
#| | | | day of the week (0-6 with 0=Sun or Sun-Sat)
#| | | | | commands
#| | | | | |
#### refresh squid’s anti-ad server list
35 5 * * */3 /scripts_dir/ad_servers_newlist.sh >> /dev/null 2>&1

*Diretório onde o script está contido.

Exemplo

Exemplo

Exemplo

Links

http://www.squid-cache.org/

https://calomel.org/

Créditos

“A César o que é de César.”

Essa é uma tradução/adaptação do artigo publicado em https://calomel.org/squid_adservers.html

“That’s all folks”

Enviado em Rede | Tagged: , , | 1 Comentário »

Perl + GSM + Imaginação = Coisas Legais

Publicado por pitombera em Junho 22, 2008

Introdução

Estava procurando por algo para intermediar a comunicação entre meu Celular( Motorola v3 ) e o Linux/FreeBSD, quando por acaso encontrei um módulo em perl que não era bem o que eu queria mas achei bastante interessante. Vi a possibilidade de manipular os sms recebidos e formatar o envio de sms, que pode ser bastante útil em um cenário em que a internet não está disponível ou a demanda de sms é baixa.

Instalação

No FreeBSD é necessário os módulos umodem e ucom, adicionamos então ao ‘/boot/loader.conf’:

ucom_load=”YES”
umodem_load=”YES”

Após reinicio( sim, reinicio, quando tentei carregar o módulo com o kldload deu panic ) do sistema, quando plugado o celular à USB veremos uma mensagem semelhante a essa na saída do comando ‘dmesg’.

ucom0: <Motorola Inc. Motorola Phone (V3), class 2/0, rev 1.10/0.01, addr 2> on uhub1

No Linux será necessário o modulo cdc_acm, dê uma olhada.

Pronto, tudo ‘ok’ para os próximos passos.

Perl:

Iremos instalar o módulo Device::Gsm que irá intermediar o processo, temos duas formas para isso.

  1. CPAN
  2. Instalação manual do módulo

1 – # cpan -i “Device::Gsm”

2 – # wget -c ‘http://search.cpan.org/CPAN/authors/id/C/CO/COSIMO/Device-Gsm-1.48.tar.gz’ && tar -zxvf Device-Gsm-1.48.tar.gz && cd Device-Gsm-1.48 && perl Makefile.PL && make && make install

Não irei me aprofundar na instalação do módulo perl, há bastante material na internet sobre o assunto, aqui ou aqui

Utilizando

Agora é o momento de soltar a criatividade, no source tem um diretório de exemplos com alguns scripts. A documentação dos métodos pode ser vista aqui.

Exemplo Nagios

A primeira coisa que pensei foi em usar junto com o nagios, quando pesquisei na documentação sobre notificações é sugerido o sms_client que parece ser interessante mas um pouco mais complicado.
Na área de desenvolvimente há também a gsmlib para o pessoal mais low-level.

O script que eu adaptei funcionou 100% com o v3 e o v550 da Motorola.

Script de exemplo adaptado.

O script em sim é auto-explicativo mas vamos lá.

# echo “Mensagem de exemplo” | perl script.pl numero*

*O numero é composto pelo DDD( 2 dígitos ) + número do celular( 8 dígitos ).

Conclusão

Quando me deparei com o módulo em Perl e não achei nenhuma informação sobre o mesmo em Português, senti-me motivado para escrever sobre o mesmo, achei o módulo bastante interessante e com diversas possibilidades de uso. Eu citei apenas um exemplo( Imaginei várias formas de uso mas optei por postar a mais coerente com a realidade) mas a medida que o pessoal for usando e criando seus próprios scripts, irei atualizando o artigo. Espero ter sido claro e objetivo, estou no aguardo por dúvidas, críticas e exemplos.

Gostaria de agradecer ao Redpill do #archlinux.br@irc.freenode.net que não quis testar o script.

Enviado em Rede, perl | Tagged: , , , , | 9 Comentários »

Msn-proxy no FreeBSD e Linux

Publicado por pitombera em Dezembro 4, 2007

Introdução

O msn-proxy é um proxy transparente leve para clientes do msn messenger. Suporta todos os protocolos ativos ( todos clientes ). Controla quem e como o msn messenger é usado em sua rede. Cheio de recursos.

O texto acima é uma tradução da descrição escrita pelo autor no site do projeto.

O msn-proxy possui recursos como: Bloqueio de usuário, controle da lista de amigos dos usuários, log de conversação, aviso em chat sobre o monitoramento, bloqueio de transferência de arquivos, entre outros.

Ambiente Testado

Freebsd 7.0 Beta 3:

  • gcc version 4.2.1 20070719
  • MySQL version 5.0.45
  • libevent version 1.3d
  • Apache version 2.0.61
  • PHP version 4.4.7

Slackware 11:

  • gcc version 3.4.6
  • MySql version 5.0.24a
  • libevent version 1.3d/1.3b
  • Apache version 1.3.37
  • PHP version 5.2.5

Instalação

LibEvent:

FreeBSD:

# cd /usr/ports/devel/libevent/

# make install clean

Linux:

# wget -c ‘http://monkey.org/~provos/libevent-1.3d.tar.gz

# tar -zxvf libevent-1.3d.tar.gz

# cd libevent-1.3d/

# ./configure && make && make install

ou

# wget -c ‘http://lp.slackwaresupport.com/Slackware-11.0/martijn/libevent-1.3b-i486-1McD.tgz

# installpkg libevent-1.3b-i486-1McD.tgz

msn-proxy:

Linux/FreeBSD:

# wget -c ‘http://internap.dl.sourceforge.net/sourceforge/msn-proxy/msn-proxy-0.5.tar.gz

# tar -zxvf msn-proxy-0.5.tar.gz

# cd msn-proxy

# make¹

# make install

¹ O FreeBSD por usar o gcc4 foi necessário editar o arquivo Makefile e mudar a CCFLAGS, o processo é simples, apenas comentar( adicionar o # do inicio da linha) o CCFLAGS do gcc3 na linha 13 e descomentar( retirar o # do inicio da linha) o CCFLAGS do gcc4 na linha 17.

Configurando

Primeiro arquivo a ser configurado é o /usr/local/etc/msn-proxy/mysql/conf, é nesse arquivo que ficam os dados para a conexão entre o msn-proxy e o banco mysql.

Sintaxe:

(Host ou Socket)|(Port)|(usuario)|(senha)|(bando de dados)

Padrão:

/tmp/mysql.sock|0|msn-proxy|secret|msn-proxy

Após isso iremos criar o banco do dados e criar o usuário para o msn-proxy.

MySQL:

> create database `msn-proxy¹`;
> grant all privileges on `msn-proxy¹`.* to `msn-proxy²`@localhost identified by ’secret³‘;
> flush privileges;

¹ Banco de dados
² Usuário
³ Senha

Após ter feito os passos anteriores, iremos rodar pela primeira vez o msn-proxy que irá criar as tabelas no banco.

# /usr/local/bin/msn-proxy

Se tudo ocorrer bem terá a seguinte mensagem:

PUBLIC ACCESS on /usr/local/etc/msn-proxy/mysql/conf should be removed !!!¹
fail to read mysql config (check defaults table)²

¹Avisa que o arquivo está com acessos demais.
² Não há host default configurado na tabela.

Retirar acesso público do arquivo de configuração:

# chmod 600 /usr/local/etc/msn-proxy/mysql/conf

Inserindo ip real do servidor proxy na tabela do mysql:

MySQL:

> insert into defaults (internal_host) values (’192.168.0.1¹‘);

¹192.168.0.1 deve ser o ip real.

Feita as alterações o seu msn-proxy está configurado e pronto para receber conexões.

# /usr/local/bin/msn-proxy &

Interface Web

Junto ao source do msn-proxy acompanha o diretório ‘php’ que é um utilário web para a configuração e gerenciamento do seu msn-proxy.

Edite o arquivo mysql.inc.php e edite as variavéis $host,$user,$pass,$db,$port de acordo com os dados usados no servidor mysql, após a edição, copie o diretório php para sua pasta web e sete as restrições de acesso necessárias, saiba como aqui.

Port Forwarding

É necessário fazer um redirecionamento das conexões vindas de sua rede, para que o proxy funcione de forma transparente.

Linux:

# iptables -t nat -I PREROUTING -i eth0¹ -p tcp –dport 1863 -j REDIRECT –to-port 1863

FreeBSD:

ipfw

ipfw add X¹ fwd 127.0.0.1,1863 ip from any to any dst-port 1863 src-ip 192.168.0.0/24²

¹Número da rega no ipfw

²Faixa de Rede Local

pf.conf

rdr on vr0¹ inet proto tcp from any to any port 1863 -> 127.0.0.1 port 1863

¹Interface de rede local.

Conclusão

Chegamos ao fim do artigo, espero ter conseguido transmitir de forma mais clara possivél os passos usados por mim para a instalação desse exceletente software.

Se mesmo após instalado e configurado seu msn-proxy não inciar, teste rodar com a opção ‘-d’(debug) para maiores informações do seu problema.

Em caso de dúvida não temam em perguntar.

Links

http://sourceforge.net/projects/msn-proxy/

http://www.mysql.com/

http://httpd.apache.org/

http://monkey.org/~provos/libevent/

http://www.linuxpackages.net/

http://focalinux.cipsga.org.br/

http://get.live.com/messenger/overview

Autor

Diego Pitombeira dos Prazeres a.k.a pitombera

Enviado em Rede | Tagged: , , , | 70 Comentários »