Monitorando o servidor Jabber 2 com o Bandersnatch

Na empresa que trabalho utilizamos o servidor de mensagens Jabber 2, logo percebi os funcionários estavam conversando todo tipo de futilidades menos trabalho. Comecei a pesquisar de que forma poderia reverter este quadro e achei um aplicativo chamado Bandersnatch, que monitora os o servidor Jabber e loga os chats. Neste artigo vou explicar como instalar utilizar o Bandersnatch.

[ Hits: 95.094 ]

Por: Bruno Cesar Brito SantAnna em 12/04/2005


Introdução



Para quem conhece o Jabber, sabe que é um servidor de mensagens instantâneas open source e de ótima qualidade, tem suporte a group chatting, envio de arquivos, salva a lista de usuários no servidor, enfim, uma série de utilidades.

Para uma listagem de projetos consulte o site http://www.jabber.org e o site http://www.jabberstudio.org/project/.

Meus problemas começaram a aparecer quando percebi que alguns funcionários estavam conversando coisas oriundas ao trabalho. Definitivamente não estava bom, o que eu poderia fazer? A solução de logs oferecida pelos programas-clientes não era confiável, os funcionários poderiam simplesmente clicar em "Limpar histórico".

Pesquisando no Google, achei um programa chamado Bandersnatch, um programa escrito em Perl que monitora o daemon jabberd diretamente e grava em banco de dados os logs dos chats. Como se fosse um sniffer específico, mas a grande sacada é o relatório que o programa gera, lembra o SARG do Squid, ajuda bastante.

Enfim, atendia 100% às minhas necessidades, porém sua implementação foi chata, por falta de documentação ou até mesmo um arquivo errado no .tar.gz, penei dois dias inteiros para o bicho funcionar, consultei outras pessoas e todos tiveram dificuldades. Bom, consegui afinal e vou passar as instruções detalhadamente de como fazer isto funcionar e logar as conversas que ocorrem na sua empresa.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Questão de privacidade
   3. Ambiente de testes
   4. Instalando os módulos do Perl
   5. Instalando os módulos do Pear
   6. Configurando o Bandersnatch no MySQL
   7. Configurando o Bandersnatch no Jabber 2
   8. Configurando o Bandersnatch
   9. Configurando o frontend PHP
Outros artigos deste autor

Rede wireless: autenticação em uma rede WPA

Ferramenta samba-vscan: antivírus nos compartilhamentos do Samba

Utilizando certificados e-CNPJ e e-CPF no Linux

Leitura recomendada

Prompt Bash avançado

Turbine o seu SUSE instalando o apt-get com um repositório de mais de 5.000 pacotes

Conhecendo o Slpkg (gerenciador de pacotes para Slackware)

ALSA

Crie um espelho (mirror) Debian em sua máquina

  
Comentários
[1] Comentário enviado por removido em 12/04/2005 - 16:37h

OPa!,

Fala ae mano.. até que em fim!! rs....

vou dar uma lida ai.. mais de prima já foi para os favoritos..

Abraços...


[2] Comentário enviado por wilbil em 13/04/2005 - 02:06h

cara adorei su solucao
mas eu estou atraz de uma saida para msn

poderia me passar como eu poderia munitorar o msn dos funcionarios
pois o rendimento principalmente do setor de suporte especializado esta caindo devido ao msn

como posso pesquisar sobre em ingles e portugues? tanto faz

att
william

[3] Comentário enviado por D3v1L em 13/04/2005 - 08:21h

William,

Você vai ter que tomar uma rota totalmente diferente da que eu adotei aqui, no caso do Jabber foi possível pois temos acesso ao servidor, já no msn não temos. Você vai ter que instalar um programa client Side, em cada estação que utiliza o msn, que loga isso. ou então criar umas regras de firewall que loguem mensagens vindas do msn.

Enfim, fica mais difícil e complicado.

Não seria uma boa hora p/ mudar p/ jabber?

[]'s

[4] Comentário enviado por shocker em 13/04/2005 - 13:13h

William,

porque não bloquear o MSN no firewall então?
Acho que é uma solução menos complicada do que monitorá-lo, e resolve a curto prazo. Crie grupos de estações que não podem acessar o MSN, e as que podem, ou bloqueie para todos e libere apenas para um seleto grupo, etc.

O jeito de monitorar isso em tempo real, é utilizando o NTop (www.ntop.org). Ele te dará uma noção de quem está utilizando o que, em tempo real. Isso se seu firewall/gateway de internet for um Linux.

Atc,
Alan Cota.

[5] Comentário enviado por wilbil em 14/04/2005 - 14:14h

esta e uma exelente opcao travar pelo firewall

eu ja adotei esta estrategia no inicio mas como eles tinha que dar suporte as franquias foi necessario que liberessa do firewall o msn dai comecaram meus problemas de falta de desempenho vindo dos funcionarios e sei que nao e com conversas vindo da empresa


existem algum programa que conecte via windows ao Jabber?
assim eu ja poderia iniciar uma boa opcao mesmo que na central eu tenha estacoes linux nas filiais nao tenho esta vantagem

o que vcs acham de minha mudanca de estrategia?
obrigado
william

[6] Comentário enviado por D3v1L em 15/04/2005 - 08:19h

William, existem muitos programas de qualidade e com a vantagem de serem gratuitos. Dou mais evidência ao Exodus pois uso na minha rede interna aqui, funciona desde windows XP até em windows 95. Site oficial aqui: http://exodus.jabberstudio.org/

O legal de você implementar o Jabber é que existe um Plugin p/ o servidor que permite chat via browser, ou seja seus clientes acessam seu site, podem clicar lá no botão suporte e inicia uma conversa via jabber, seu funcionário com o Exodus e seu cliente com o browser dele.

Acho que essa mudança de estratégia seria muito mais útil p/ você.

[]'s

[7] Comentário enviado por wilbil em 15/04/2005 - 11:49h

obrigado pela dica e principalmente por este plugins

se puder me falar o nume do plugin?
se possuir algum artigo em inlges ou portugues que vc usou ajudaria muito!

[8] Comentário enviado por D3v1L em 15/04/2005 - 13:23h

Cliente p/ web: http://jabberstudio.org/projects/jwchat/project/view.php

Obs: Não implementei este serviço portanto não sei como funciona.

Cara, o único artigo que consultei p/ instalar e configurar o jabber foi o do guinet que listei na página 2 desse artigo. Fora isso dei uma olhada no readme.

boa sorte.

[9] Comentário enviado por wilbil em 15/04/2005 - 18:08h

valeu brigado deixa eu pesquisar agora

[10] Comentário enviado por alencar_junior em 22/04/2005 - 11:01h

Bom dia,Bruno.
Gostaria de instalar o jabber 2 onde trabalho,mas gostaria de saber se tem como bloquear usuarios,bloquear com quem os usuarios podem falar e se no red hat 9.0 roda bem.

[11] Comentário enviado por D3v1L em 22/04/2005 - 14:33h

Olá Alencar

O bloqueio de usuários pode ser feito atravéz da configuração do servidor para aceitar ou não novos pedidos de usuários. Caso o servidor não aceite novos usuários este só vai ler os contidos no banco de dados.

Quanto à restrição de quem os usuários podem conversar, no lado servidor não vi nada do gênero mas no lado cliente existe a possibilidade de bloquear usuários.

Já o servidor RedHat vai rodar perfeitamente, utilizamos aqui um Servidor Fedora.

[]'s

[12] Comentário enviado por alencar_junior em 22/04/2005 - 15:26h

Bruno,Valeu.
Agora estou instalando o jabber e quando vou compilar o jabber aparece dependencia do openssl 0.9b mas o pacote já está instalado,já tentei tarball e rpm mas não consegui fazer a compilação do jabber.
Obrigado

[13] Comentário enviado por D3v1L em 22/04/2005 - 16:13h

Alencar,

Acredito que se você compliar sem o suporte a ssl ele passará por isso, se precisar do suporte tente alterar a Makefile para localizar corretamente onde estão as bibliotecas ssl.

Qualquer dúvida pode entrar em contato pessoalmente ok?

[14] Comentário enviado por frikasoide em 23/11/2005 - 11:22h

Olá, muito bom esse monitoramento, mas... Estou com um problema... Todos os dias estou tendo que reiniciar o serviço bandersnatch para ele começar a logar novamente... Bom, eu recebo a seguinte mensagem no /var/log/messages:

DBD::mysql::st execute failed: MySQL server has gone away at /usr/local/jabber/bandersnatch/bandersnatch2.pl line 462.

O QUE PODE SER ISSO?

Obrigado.

[15] Comentário enviado por maniaku em 08/09/2006 - 11:50h

Olá D3v1L,

Por favor, me dê uma força..

Eu instalei o jabberd2 a algum tempo e não tinha controle (monitoramento) e então resolvi pesquisar. Achei seu artigo interessante, porém não consegui fazer funcionar (acredito que possa ser um módulo do Perl).

Olha só:

bandersnatch config.xml
#############################################
<config>
<server>
<connectiontype>tcpip</connectiontype>
<hostname>192.168.1.39</hostname> // se eu coloco o hostname como o ip ou nome do servidor que roda o jabber, ele resulta o erro 2 que listei lá embaixo... e se eu coloco o ip ou o nome do servidor que roda o mysql então ele apresenta o erro 1 que mostrei lá embaixo também
<port>5347</port>
<secret>bandersnatch</secret>
</server>
<component>
<name>bandersnatch</name>
</component>
<mysql>
<server>192.168.1.39</server>
<dbname>bandersnatch</dbname>
<username>bandersnatch</username>
<password>bandersnatch</password>
</mysql>
<debug>
<level>0</level>
<file>stdout</file>
</debug>
<site>
<local_server>interno</local_server>
<admin_jids>admin@interno</admin_jids>
<confidential_jids>theboss@interno</confidential_jids>
<ignore_jids>chatbot@interno</ignore_jids>
<ignore_jids>bandersnatch@interno</ignore_jids>
<ignore_jids>headlines.interno</ignore_jids>
<local_domains>interno</local_domains>
<local_server>interno</local_server>
<admin_jids>admin@interno</admin_jids>
<confidential_jids>theboss@interno</confidential_jids>
<ignore_jids>chatbot@interno</ignore_jids>
<privacy>1</privacy>
<aggressive_presence>0</aggressive_presence>
</site>
</config>
################################################## ##

jabberd2 router.xml
################################################## ##
<!-- Router configuration -->
<router>
<!-- ID of the router on the network (default: router) -->
<id>router</id>

<!-- The process ID file. comment this out if you don't need to know
to know the process ID from outside the process (eg for control
scripts) -->
<pidfile>/var/run/jabberd2/router.pid</pidfile>

<!-- Log configuration - type is "syslog", "file" or "stdout" -->
<log type='file'>
<!-- If logging to syslog, this is the log ident -->
<ident>jabberd/router</ident>

<!-- If logging to syslog, this is the log facility
(local0 - local7) [default: local3] -->
<facility>local3</facility>

<!-- If logging to file, this is the filename of the logfile -->
<file>/var/log/jabberd2/router.log</file>

</log>

<!-- Local network configuration -->
<local>
<!-- IP address to bind to (default: 0.0.0.0) -->
<ip>192.168.1.33</ip>

<!-- Port to bind to (default: 5347) -->
<port>5347</port>

<!-- File containing the user table. This is where the router gets
its component and secret information from for component
authentication.-->
<users>/etc/jabberd2/router-users.xml</users>

<!-- Shared secret used to identify legacy components (that is,
"jabber:component:accept" components that authenticate using
the "handshake" method). If this is commented out, support for
legacy components will be disabled. -->
<secret>secret</secret>

<!-- File containing a SSL certificate and private key for client
connections. If this is commented out, connecting components
will not be able to request a SSL-encrypted channel. -->
<!--
<pemfile>/etc/jabberd/server.pem</pemfile>
-->
</local>

<!-- Timed checks -->
<check>
<!-- Interval between checks.

Checks will be run every n seconds.

0 disables all checks. (default: 60) -->
<interval>60</interval>

<!-- Keepalives.
Connections that have not been used for longer than
this many seconds will have a single whitespace character sent
to them. This will force the TCP connection to be closed if
they have disconnected without us knowing about it.
0 disables keepalives. (default: 0) -->
<keepalive>0</keepalive>

</check>

<!-- input/output settings -->
<io>
<!-- Maximum number of file descriptors. Note that the number of
possible connections will be slightly less than this, because
the router itself can use up four on its own. If the supply of
file descriptors is exhausted, new incoming connections will be
denied (default: 1024) -->
<max_fds>1024</max_fds>

<!-- Rate limiting -->
<limits>
<!-- Maximum bytes per second - if more than X bytes are sent in Y
seconds, connection is throttled for Z seconds. The format
is:

<bytes seconds='Y' throttle='Z'>X</bytes>

Default Y is 1, default Z is 5. set X to 0 to disable. -->
<bytes>0</bytes>

<!-- Maximum connects per second - if more than X connects are
attempted from a single IP in Y seconds, that IP is throttled
for Z seconds. The format is:

<connects seconds='Y' throttle='Z'>X</connects>

Default Y is 5, default Z is 5. set X to 0 to disable. -->
<connects>0</connects>
</limits>

<!-- IP-based access controls. If a connection IP matches an allow
rule, the connection will be accepted. If a connecting IP
matches a deny rule, the connection will be refused. If the
connecting IP does not match any rules, or it matches both an
allow and a deny rule, the contents of the <order/> option
determines what happens. -->
<access>
<!-- Rule check order (default: allow,deny)

allow,deny - Check allow rules, then check deny rules.
Allow by default.
deny,allow - Check deny rules, then check allow rules.
Deny by default. -->
<order>allow,deny</order>

<!-- Allow a network. If the mask isn't specified, it defaults to
255.255.255.255 (ie allow onle the specified IP) -->
<!--
<allow ip='127.0.0.0' mask='255.0.0.0'/>
-->

<!-- Allow a single host -->
<!--
<allow ip='12.34.56.78'/>
-->

<!-- Deny a network or a host -->
<!--
<deny ip='192.168.1.33' mask='255.0.0.0'/>
<deny ip='87.65.43.21'/>
-->
</access>
</io>

<!-- Name aliases.

Packets destined for the domain specified in the "name" attribute
will be routed to the component that has currently bound the name
in the "target" attribute (assuming it is online).

This is usually only required for some kinds of legacy
components (particularly jabberd 1.4 "uplink" components) -->
<aliases>
<!-- Example for a MUC component running from a jabberd 1.4 uplink -->
<!--
<alias name='conference.domain.com' target='muclinker'/>
-->
</aliases>

<!-- Access control information -->
<aci>
<!-- The usernames listed here will get access to all restricted
functions, regardless of restrictions further down -->
<acl type='all'>
<user>jabberd</user>
</acl>

<!-- These users can bind names other than their username -->
<!--
<acl type='bind'>
</acl>
-->

<!-- These users can bind a name as a default route -->
<!--
<acl type='default-route'>
<user>s2s</user>
</acl>
-->

<!-- These users can elect to receive all packets that pass through the router -->
<acl type='log'>
<user>bandersnatch</user>
</acl>
</aci>

</router>
##################################################

jabberd2 router-users.xml
##################################################
<!-- This is the list of known router users, and their authentication
secrets. Access control is done via the settings in router.xml -->
<users>
<user>
<name>jabberd</name>
<secret>secret</secret>
</user>
<user>
<name>bandersnatch</name>
<secret>bandersnatch</secret>
</user>
</users>
##################################################

Erro 1: Usando como 192.168.1.39
################################################## ##
interno:/var/www/bandersnatch# perl bandersnatch2.pl
Connect Error: connect: 111 -> Connection refused
Connected to MySQL database (bandersnatch@192.168.1.39) ...
interno:/var/www/bandersnatch#
################################################## ##
Erro 2: Usando como interno ou 192.168.1.33
################################################## ##
interno:/var/www/bandersnatch# perl bandersnatch2.pl
SASL Negotiation Failed at /usr/local/share/perl/5.8.4/POE/Component/Jabber/Client/J2.pm line 374.
Connected to MySQL database (bandersnatch@192.168.1.39) ...Failed to authenticate
We got disconneted
interno:/var/www/bandersnatch#
################################################## ##

O que pode ser isso cara? É mesmo o módulo do Perl (POE)? Não sei o que pode ser.

Abraços

[16] Comentário enviado por Leticianq em 05/10/2006 - 13:10h


olá, estamos iniciando o uso do jabber aki na empresa e eu estou pesquisando uma maneira de importar a lista de usuario ja que todos devem conter todos em sua lista. O software de mensagem é o gaim so que ele não disponibiliza esta funcionalidade. Descobri que posso fazer isso com o protocolo do jabber, so que a pergunta é como?

Obrigada

[17] Comentário enviado por MR. RG em 29/10/2006 - 17:58h

Este monitor serve para qual um tipo de servidor de bate-papo?

[18] Comentário enviado por sepjcarlos em 16/01/2007 - 16:23h

Cara,

quando vou compilar o Bandersnatch aparece o seguinte erro;

perl bandersnatch2.pl
Can't locate XML/Stream.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/i486-linux /usr/lib/perl5/5.8.8 /usr/lib/perl5/site_perl/5.8.8/i486-linux /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl .) at bandersnatch2.pl line 83.
BEGIN failed--compilation aborted at bandersnatch2.pl line 83.

Como devo proceder. Estou usando o Slack 11 Kernel 2.4.6.3.3

[19] Comentário enviado por abelardo em 17/04/2007 - 17:03h

me diga uma coisa, to usando o jabber 1.4.4 , vai funcionar nele?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts