Pesquisar neste blog

quinta-feira, 30 de outubro de 2008

Monitoramento de MSN com msn-proxy

Distro: CentOS 4 ou 5



O msn-proxy é um serviço de proxy transparente para clientes do msn messenger, ele suporta todos os protocolos ativos ( todos clientes ), controla quem e como o msn messenger é usado em sua rede.

O texto acima é uma tradução da descrição escrita pelo autor no site do projeto.
O msn-proxy possui vários recursos tais como : Bloqueio de usuários, bloqueio de contatos, 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.

Pacotes de compilação
Para instalar os pacotes necessários para a compilação do msn-proxy execute o comando abaixo:
#yum install gcc gcc-c++ autoconf automake



Requisitos :
http://monkey.org/~provos/libevent/
https://sourceforge.net/projects/msn-proxy
PHP 4 ou 5
Apache 2
MySQL server 4 ou 5

Libevent
- esse pacote deve ser baixado pelo link acima

# yum install httpd php php-mysql mysql-devel mysql-server -y

Tendo todos os pacotes vamos por a mão na massa.
Primeiramente vamos descompactar o pacote libevent

# tar -xvzf libevent-1.4.5-stable.tar.gz
# cd libevent-1.4.5-stable
# ./configure && make
# make install

Depois que você tiver compilado e instalado, entre no arquivo
# vim /etc/ld.so.conf
e adicione as seguintes linhas:
/usr/local/lib
/usr/lib

salve o arquivo e saia.

Depois execute o comando:
# ldconfig

Feito, depois de compilado e instalado vamos agora ao msn-proxy.
Como estamos usando o mysql como base de dados, baixei o pacote com suporte ao mysql;
Vamos agora descompactar o pacote abaixo:
# tar -xvzf msn-proxy-0.6.3-mysql.tar.gz
# cd msn-proxy

Antes de começarmos a compilar o msn-proxy altere o caminho das libs do mysql, segue abaixo os caminhos corretos no centos:
# vim Makefile

MYSQLINC=/usr/local/include
MYSQLLIB=/usr/lib/mysql

Feche e salve o arquivo.
# make
# make install

Os arquivos de configuração do msn-proxy estão localizados em /usr/local/etc/msn-proxy

Confira se seu mysql esta rodando, caso não, execute o comando abaixo:
# service mysqld start

Vamos agora criar a base do msn-proxy executando o comando abaixo, se seu usuário root estiver sem senha ele vai logar normal no banco, senão use

root com senha
# mysql -uroot -psenha

root sem senha
# mysql
> create database `msn-proxy`;
> grant all privileges on `msn-proxy`.* to `msn-proxy`@localhost identified by 'secret';
> flush privileges;
>quit

Ok, base de dados criada!.


Agora vamos entrar na pasta mysql para editar os dados de conexão com o banco:
# cd /usr/local/etc/msn-proxy/mysql
# vim conf

O arquivo deverá ter o seguinte conteúdo

# "host or socketport (zero for socket)userpassdatabase name"

localhost|0|msn-proxy|secret|msn-proxy

Salve o arquivo e feche.


Agora vamos a página de monitoramento das conexões e dialogos feitos pelo daemon do msn-proxy. Mova a pasta php para o diretório raiz do seu apache

# mv php /var/www/html/msn-proxy

Vamos editar o arquivo msn-proxy/php/mysql.inc.php

# vim msn-proxy/php/mysql.inc.php

e altere os dados de conexão

$host = "localhost";
$user = "msn-proxy";
$pass = "secret";
$db = "msn-proxy";
$port = 3306;

Salve e feche o arquivo.


Agora vamos executar o daemon pela primeira vez para fazer a criação das tabelas e inserções iniciais na base;

# msn-proxy

Entre novamente no mysql e insira o ip do servidor
# mysql
# use msn-proxy;
> insert into defaults (internal_host) values ('192.168.0.1');
> quit

Pronto agora vamos colocar o msn-proxy para rodar em background
# msn-proxy -b


Agora vamos criar o pulo do gato, o cara que redireciona todas as conexões do msn para seu firewall
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1863 -j REDIRECT --to-port 1863


Nota: A interface informada na regra acima (eth0) é a interna da rede local.

# MSN
iptables -a INPUT -s 192.168.0.0/24 -p tcp --dport 1863 -j ACCEPT
iptables -a INPUT -s 192.168.0.0/24 -p tcp --dport 25000:30000 -j ACCEPT


Agora basta entrar via web e visualizar as conexões do msn:
http://ip-do-seu-servidor/msn-proxy


Para quem quiser baixar a última versão em desenvolvimento, é só usar o repositório cvs pelo comando abaixo:
# cvs -z3 -d:pserver:anonymous@msn-proxy.cvs.sourceforge.net:/cvsroot/msn-proxy co -P msn-proxy

ou

# svn co https://msn-proxy.svn.sourceforge.net/svnroot/msn-proxy msn-proxy

Para quem quiser saber mais informações sobre o msn proxy leia o artigo abaixo
Marcelo Torres Abaixo:
http://mundoopensource.blogspot.com/2008/08/controlando-o-uso-do-msn-com-o-msn.html

28 comentários:

Douglas disse...

Marcos, estou acompanhando o seu tutorial sobre msn-proxy mas não estou conseguindo colocar pra funcionar. Não está criando as tabelas. Tem como dar uma força???

Marcos Abadi disse...

Claro Douglas,
seguinte, as tabelas só são criadas quando você configura o arquivo /usr/local/etc/msn-proxy/mysql/conf

Verifique se voce criou o usuário do banco, se os dados do arquivo conf estão de acordo com o usuário que você criou para a base msn-proxy.

Fabio disse...

Marcos,

Valeu pelo script, mas acredito que estou com problema no php, pois tenho não consigo conectar com mysql pelo brower??? fail to connect to mysql\n...

Pode me ajudar...

Fabio

Nilson Brito disse...

Abadi, seu post tá 80% completo, durante o processo de criação de banco, as informações não batem, não é possivel criar um banco com instruções "minusculas", a conexão com o banco num tá completa também, pode revisar pra nós?

Nilson

Marcos Abadi disse...

Olá Nilson tudo bem?
Obrigado pelo comentário.
Realmente existe um problema na sql de criação do banco mas não tem nada a ver com instruções "minusculas" e sim com o tipo de aspas usados para palavras separadas por hífem como msn-proxy. Já fiz a correção. No blog estava postado com aspas simples 'msn-proxy', mas o correto é `msn-proxy`. Quanto aos passos, se puder me dizer onde mais está errado. Acredito esse seja o único problema, pois já instalei em vários servidores usando esses mesmos passos do meu blog e não tive dificuldade alguma.

Abraço Nilson.

Nilson Brito disse...

Ola Abadi, obrigado pela atenção, tenho pouco conhecimento com banco de dados, a correção das 'aspas', deu certo pra criação do banco, porem veja o erro que é apresentado quando tento dar privilégio:

grant all privileges on `msn-proxy`.* to `msn-proxy`@localhost identified by `secret`;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your M ySQL server version for the right syntax to use near '`secret`' at line 1

Em seguida, na execução do msn-proxy, a mensagem : msn-proxy
msn-proxy: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: N o such file or directory
, ou seja, não encontra essa LIB, mas ela está Lá, poderia nos ajudar?

A propósito, estou usando CentOS!

Abraços

Marcos Abadi disse...

Olá Nilson,
peço que me mande seu email para que eu possa ajudá-lo. Meu email está no perfil.

Abraço.

Nilson Brito disse...

Boa Tarde,,, Marcos Abadi, enviei um email pra você, minha duvida continua a mesma, se puder ajudar...

Abraços

Nilson Brito

Breno Ap. Cervi Padovan disse...

Boa tarde Marcos,
fiz toda a configuração e está funcionando tudo certinho.
O programa grava todas as conversas dos usuários.
Quando vou acessar alguma conversa gravada ele abre normalmente, quando tento acessar outra conversa de outro contato por exemplo, ele fica lento e não mostra, para voltar ao normal tenho que reiniciar o serviço do apache.
O que pode estar acontecendo?
Alguém já passoou por isso?

Marcos Abadi disse...

Olá Breno,
realmente já tive esse problema, mas bastou fechar o browser e abrir novamente que voltou a funcionar, acho que deve ser algum problema na hora de fazer a consulta sql para trazer as conversações. Você está usando qual versão do msn-proxy?

Breno Ap. Cervi Padovan disse...

Olá Marcos, estou usando a versão 0.7a.
Na primeira ele abre as conversas salvas, depois se vou abrir a segunda vez fica uma eternidade...

Breno.

Caio Norder disse...

[root@servidor msn-proxy-0.7]# make
cc -o msn-proxy msn-proxy.o server.o sb.o command.o config.o net-io.o client.o syslog.o ns.o mysql.o sql.o protocol.o check-cmd.o contacts.o msg.o p2p.o user.o string.o io.o sig.o fmt.o xml.o ctl.o -L/usr/local/lib -levent -L/usr/lib/mysql/ -lmysqlclient
server.o: In function `server_sched_write':
/root/msnproxy/msn-proxy-0.7/server.c:122: undefined reference to `event_get_fd'
server.o: In function `server_sched_read':
/root/msnproxy/msn-proxy-0.7/server.c:116: undefined reference to `event_get_fd'
server.o: In function `server_close':
/root/msnproxy/msn-proxy-0.7/server.c:57: undefined reference to `event_get_fd'
/root/msnproxy/msn-proxy-0.7/server.c:61: undefined reference to `event_get_fd'
sb.o: In function `sb_disconnect':
/root/msnproxy/msn-proxy-0.7/sb.c:174: undefined reference to `event_get_fd'
sb.o:/root/msnproxy/msn-proxy-0.7/sb.c:145: more undefined references to `event_get_fd' follow
collect2: ld returned 1 exit status
make: *** [msn-proxy] Error 1

alguem pode me dar um help

caio@caionorder.com

Marcos Abadi disse...

Olá Caio,
pelas mensagens na compilação creio que possa estar faltando instalar o pacote libevent ou ele não está achando os arquivos deste pacote. Qual seu SO?

Sandro disse...

Ótimo tuto...

me ajudou bastante.

Parabéns, continue assim, contribuindo com a comunidade livre.

Berdam disse...

Vc falou proxy, é preciso que o servidor faça o controle da rede ??
OU seja todo o tráfego passe por ele para sair da rede interna ??

Marcos Abadi disse...

Olá Berdan, não entendi muito bem sua pergunta, aqui neste tópico estou abordando a instalação do msn-proxy e não de proxy. Qualquer dúvida estou a disposição meu amigo.
Grande abraço.

Berdam disse...

Marcos, a respeito da página de administração, é possível colocar alguma senha nela para que apenas o administrador de rede consiga fmanipular ???

Marcos Abadi disse...

Olá Berdam,
sim é possível,
faça os seguintes passos abaixo:

obs: esses passos são para quem usa centOS e apache httpd.

# vim /etc/httpd/conf/httpd.conf

encontre no arquivo e adicione o seguinte parametro AllowOverride AuthConfig ficando desta maneira:

Essa diretiva no apache permite você usar autenticação por meio do arquivo .htaccess.


Options FllowSymLinks
AllowOverride AuthConfig


Agora feche o arquivo e saia, vamos ao próximo passo que é criar o arquivo .htaccess, esse arquivo deve ser criado dentro da pasta /var/www/html/msn-proxy.

Agora vamos editá-lo:
# vim /var/www/html/msn-proxy/.htaccess

Adicione o seguinte conteúdo neste arquivo:

AuthType Basic
AuthName "Msn-Proxy"
AuthUserFile /var/www/html/msn-proxy/usuarios.txt
Require valid-user

Salve e feche o arquivo.
Feito isso agora vamos criar um usuário que poderá se autenticar para acessar a página do msn-proxy usando o seguinte comando abaixo:

# htpasswd -c /var/www/html/msn-proxy/usuarios.txt login_do_usuario

Logo será solicitado uma senha, e repita a mesma e pronto, agora é só reiniciar o apache e testar a autenticação tentando abrir a página do msn-proxy.

Abraço.

Berdam disse...

Blz consegui fazer,muito obrigado, se não fosse pedi muito
A respeito dos comandos iptables no artigo a placa de rede eth0, se refere a placa de rede interna ou externa ??

Marcos Abadi disse...

Olá Berdam, não é pedir muito não, até é uma informação que eu vou colocar, a interface ali especificada no iptables é a interna.

Abraço.

Berdam disse...

MArcos, configurei aqui e ficou show de bola, a única coisa que está acontecendo é o seguinte, eu coloquei o msn-proxy num script. Quando eu rodo o script pela primeira vez, o msn-proxy funciona normal, na segunda vez ela já n funciona tão bem e não bloqueia os contatos. Existe talvez algum comando para retirar o msn-proxy do background e startar novamente ???

Marcos Abadi disse...

Olá Berdan, no próprio blog tem um exemplo de script de stat/stop, segue link abaixo:

http://marcosabadi.blogspot.com/2008/11/criando-e-colocando-um-scripts-para.html

Sandro disse...

Olá Marcos, ja utlizo o msn-proxy a algum tempo (implantado com a ajuda do seu tutorial) agora estou com problemas com o msn 2011. Não acessa se passando pelomsn-proxy.

Tem alguma dica??

Obrigado.

Sandro

Marcos Abadi disse...

Olá Sandro,
no site do projeto msn-proxy tem um forum dos desenvolvedores, o msn-proxy trabalha com a assinatura de cada versão de msn para tratar as mensagens, creio que essa nova ainda não esteja incluída na versão do msn-proxy. Mas te aconselho a entrar no forum e tirar suas dúvidas lá.

Grande Abraço.

¤ max ¤ disse...

Amigo, seu tuto salvou minha vida, obrigado!

Rubens disse...

Grande mestre, consigo liberar os contatos de apenas um dominio por exemplo? Assim, nao quero que os funcionarios utilizem os dominios padroes, @hotmail.com, @msn.com. Quero que aceite conexoes apenas com o dominio da minha empresa. Fazendo com que eles nao utilizem o msn particular..

Grato.

uda disse...

Marcos tudo bom? Me chamo Eduardo e sou bem novato com mysql. Bom, estou com uma dificuldade quando vou executar o comando msn-proxy pela primeira vez... Dá esta mensagem "fail to read mysql config (check defaults table)
" O que pode ser?

Obrigado!
Eduardo Uda
dudusat@hotmail.com

Marcos Abadi disse...

Olá Eduardo,
você tem que criar a tabela defaults, conforme consta no tutorial.

Abração.