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.
OBS: Funciona com o Jabber 1.4, porém não fiz a implementação em tal
ambiente, portanto não posso documentar neste artigo a implementação
nesta versão, caso seja o seu caso investigue o arquivo
/bandersnatch-0.3/doc/bandersnatch.html para explicações.
Perl 5.8.3: As distribuições geralmente já vem com o Perl instalado, mas caso precise instalar entre no site oficial.. Última versão (de quando esse artigo foi escrito).
Pear PHP: O Pear é uma framework para PHP, a versão 4.3 do PHP já vem com o Pear, mas caso precise instalar entre no site oficial.
OK, caso o ambiente já esteja completo podemos prosseguir. Nas duas
próximas páginas vou listar os módulos do Perl e do Pear que precisamos
instalar, respectivamente.
[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
[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.
[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.
[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ê.
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.
[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.
[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.
[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>
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.
[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?
[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