sábado, 16 de maio de 2009

Artigo - Imspector um proxy de IM

Neste artigo nós vamos aprender a administrar o MSN messenger através do proxy de mensagens instantâneas IMSPECTOR que até o presente momento se encontra na versão 0.8. Como essa ferramenta podemos especificar exatamente as Live IDS que poderam "conversar" no Messenger e também com quais LIVE IDS nossa rede poderá se comunicar, bloquear tranferencia de arquivos ou chat por webcam. Além disso iremos visualisar os relatórios de conversas das "vitimas" numa interface web amigável, e colocar o pequeno script para administrar o IMSPECTOR(apenas contatos).

Distribuição Usada:

Ubuntu Server 8.04 (mas deve funcionar em qualquer uma)

Pacotes necessários:

imspector-0.8.tar.gz
openssl
libssl-dev
apache2

Considerações:

O nosso imspector está rodando no gateway da rede.

Instale os pacotes

# apt-get update
# apt-get install openssl libssl-dev dialog apache2

# cd /usr/src
# wget http://www.imspector.org/downloads/imspector-0.8.tar.gz
# tar zxvf imspector-0.8.tar.gz
# cd imspector-0.8
# make
# make install

Agora vamos configurar o imspector.conf

# vim /usr/etc/imspector/imspector.conf

Vamos desativar os plugins que não usaremos. Procure as linhas a seguir:

icq_protocol=on
irc_protocol=on
msn_protocol=on
yahoo_protocol=on
gg_protocol=on
jabber_protocol=on

e modifique para:(ou a seu gosto)

icq_protocol=off
irc_protocol=off
msn_protocol=on
yahoo_protocol=off
gg_protocol=off
jabber_protocol=off


Caso deseje bloquear o uso da webcam e/ou transferencia de arquivos deixe as linhas abaixo desta forma:

# Block all filetransfers? (transferencia de arquivos)
block_files=on

# Block webcams?
block_webcams=on

Antes de iniciar, insira a seguinte linha ao seu script de firewall e restart seu script.

iptables -t nat -A PREROUTING -p tcp --destination-port 1863 -j REDIRECT --to-ports 16667

Agora vamos iniciar o imspector no modo debug para ver se ocorreu algum erro

# imspector -d &

Para monitorar as conversas vamos pegar um script cgi que se encontra na pasta /usr/src/imspector-0.8/contrib/ e disponibiliza-la para o apache. Verifique o caminho da pasta de scripts cgi da sua distribuiçao.

# mkdir /usr/lib/cgi-bin/imspector
# cp /usr/src/imspector-0.8/contrib/imspector.cgi /usr/lib/cgi-bin/imspector/

Defina as permissões

# chmod 744 -R /usr/lib/cgi-bin/imspector/

Para testar acesse no seu navegador:

http://IPDOSEUGATEWAY/cgi-bin/imspector/imspector.cgi

Agora vamos utilizar um pequeno shell script para manipular facilmente as acl's do imspector. Como ele trabalha?

Contatos Internos:
São os contatos que terão acesso por trás do gateway em questão, todos os outros serão bloqueados. Esses poderão ser da categoria "Aberto" que podem conversar com qualquer contato ou "Fechado" que estarão limitados a lista "Contatos externos". Todos os contatos internos podem conversar entre sí.

Mudar Categoria:
Alterna os contatos internos entre "Aberto" e "Fechado"

Contatos Externos:
É a lista de contatos no qual seus contatos internos da categoria "Fechado" podem conversar.

Aplicar mudanças:
Gera o arquivo acl.txt para o imspector, mata e reinicia o processo. Note que os Clientes Messenger perderão a conexão e terão que se reconectarem, o que normalmente acontece automaticamente.


Crie e edite o arquivo /usr/local/bin/imadmin

# vim /usr/local/bin/imadmin

Copie e cole o conteudo do arquivo abaixo:

#!/bin/bash
#Autor: Gelber de Arruda Junior juniorwinfor@yahoo.com.br
#Data: 15/05/2009
#Função do Script: Manipular Live IDS facilmente para acl's do imspector 0.8
#
# ATENÇÃO: instalar o dialog e psmisc( apt-get install dialog psmisc)
#
# Este programa é um software livre que pode ser copiado e distribuído
# nos termos da Licença Pública Geral GNU (GNU General Public License -
# GPL) versão 2 da licença ou, a seu critério, qualquer versão posterior.
# Este programa foi criado na expectativa de ser útil, porém NÃO POSSUI
# NENHUMA GARANTIA, EXPRESSA, IMPLÍCITA OU DE ATENDIMENTO A ALGUMA
# DETERMINADA FINALIDADE.

lvd=/usr/etc/imspector/liveids
lvdex=/usr/etc/imspector/liveidsex
acls=/usr/etc/imspector/acl.txt
TMPFILE1=/tmp/tmpf1
TMPFILE4=/tmp/tmpf4

Msnmenu() {
while : ; do
resposta=
resposta=$( dialog --stdout \
--title 'Administração Messenger' \
--ok-label 'OK' \
--cancel-label 'Voltar' \
--menu 'Opções:' 0 0 0 1 'Contatos Internos' 2 'Definir Categoria' 3 'Contatos Externos' \
4 'Aplicar Mudanças' )
[ $? -ne 0 ] && break
case "$resposta" in
1) lista="$lvd"
titulo=Lista_de_Contatos_Internos
Manipliveids
;;
2) Defcateg
;;
3) lista="$lvdex"
titulo=Lista_de_Contatos_Externos
Manipliveids
;;
4) Criaacltxt
killall imspector
imspector &
;;
0) break ;;
esac
done
}

Manipliveids() {
[ -s "$lista" ] || echo "exemplo@hotmail.com|Aberto" >> $lista
while : ; do
resposta3=
resposta3=$( \
dialog --stdout \
--title ''$titulo'' \
--ok-label 'Adicionar' \
--extra-button \
--extra-label 'Remover' \
--cancel-label 'Voltar' \
--menu '' 0 60 16 \
$(cont=0
for llvd in `cat $lista`; do
cont=`expr "$cont" + 1`
idlvd=`echo "$llvd" | awk -F "|" '{print $1}'`
[ -z "$idlvd" ] && idlvd=vazio
echo "$cont" "$idlvd"
done))
bt="$?"
case "$bt" in
0) lvdadding=$( dialog --stdout \
--title 'Adicionar Live ID' \
--ok-label 'Adicionar' \
--cancel-label 'Cancelar' \
--inputbox 'Digite a nova Live ID a ser adicionada:' \
0 0 )
if [ -z "$lvdadding" ]; then
sleep 0
else
echo "$lvdadding""|Fechado" >> $lista
fi
;;
1) break ;;
3) dialog \
--title 'Confirma exclusão?' \
--yesno "Tem certeza que deseja excluir Live ID de número "$resposta3"?
" 0 0
if [ "$?" -ne 0 ]; then
sleep 0
else
cont=0
[ -e $TMPFILE4 ] && rm $TMPFILE4
for exllvd in `cat $lista`; do
cont=`expr "$cont" + 1`
if [ "$resposta3" -eq "$cont" ]; then
sleep 0
else
echo "$exllvd" >> $TMPFILE4
fi
done
mv $TMPFILE4 $lista
fi
;;
esac
done
}
Defcateg(){
while : ; do
resposta=
resposta=$( dialog --stdout \
--title 'Definir categoria dos contatos' \
--ok-label 'Alterar' \
--cancel-label 'Voltar' \
--menu 'Selecione:' 0 0 0 $(
for llvd in `cat $lvd`; do
cadalvd=`echo $llvd | awk -F "|" '{print $1}'`
catlvd=`echo $llvd | awk -F "|" '{print $2}'`
echo "$cadalvd $catlvd"
done ))
[ $? -ne 0 ] && break
[ -e $TMPFILE1 ] && rm $TMPFILE1
while : ; do
resposta2=
resposta2=$( dialog --stdout \
--title 'Categoria para o contato' \
--ok-label 'OK' \
--cancel-label 'Voltar' \
--menu 'Selecione uma categoria para o contato '$resposta'' 0 0 0 1 'Aberto' 2 'Fechado')
[ $? -ne 0 ] && break
for llvd in `cat $lvd`; do
cadalvd=`echo $llvd | awk -F "|" '{print $1}'`
catlvd=`echo $llvd | awk -F "|" '{print $2}'`
if [ "$cadalvd" = "$resposta" ]; then
if [ "$resposta2" -eq "1" ]; then
echo ""$cadalvd"|Aberto" >> $TMPFILE1
else
echo ""$cadalvd"|Fechado" >> $TMPFILE1
fi
else
echo "$llvd" >> $TMPFILE1
fi
done
mv $TMPFILE1 $lvd
break
done
done
}

Criaacltxt(){
dialog --infobox 'Aguarde... Montando ACLs de conversas' 0 0
[ -e $acls ] && rm $acls
touch $acls
chmod 777 $acls
for contatoin in `cat $lvd`; do
lvdin=`echo $contatoin | awk -F "|" '{print $1}'`
tplvdin=`echo $contatoin | awk -F "|" '{print $2}'`
if [ "$tplvdin" = "Fechado" ]; then
seqcontatoex=
for contatoex in `cat $lvdex`; do
idlvdex=`echo $contatoex | awk -F "|" '{print $1}'`
seqcontatoex="$idlvdex $seqcontatoex"
done
echo "allow $lvdin $seqcontatoex" >> $acls
fi
done
seqcontatoin=
for contatoin in `cat $lvd`; do
lvdin=`echo $contatoin | awk -F "|" '{print $1}'`
seqcontatoin="$lvdin $seqcontatoin"
done
echo "allow all $seqcontatoin" >> $acls


for contatosint in `cat $lvd`; do
lvdint=`echo $contatosint | awk -F "|" '{print $1}'`
tplvdint=`echo $contatosint | awk -F "|" '{print $2}'`
if [ "$tplvdint" = "Aberto" ]; then
echo "allow $lvdint" >> $acls
fi
done

echo "allow all groupchat" >> $acls
echo "deny all" >> $acls
chmod 777 $acls
chown nobody $acls
}

Msnmenu
########################################################### FIM DO SCRIPT #########################################################

Agora dê permissão ao script

# chmod +x /usr/local/bin/imadmin

Chame o script

# imadmin

Espero ter ajudado

5 comentários:

  1. Que bancana, pesei que seria mais dificil...
    agora, para fazer os logs no MYsql deve ser mais osso, certo?

    abss

    sucesso

    ResponderExcluir
  2. ola boa noite, gostei da sua iniciativa este assunto e interessante, eu ja tenho instalado no meu servidor agora estou tentando colocar uma mensagem de que esta sendo monitorada a conversa, vc sabe me dizer oque devo fazer

    obrigado

    ResponderExcluir
  3. root@ux-01-225:/usr/local/bin# imadmin
    /usr/bin/imadmin: line 178: unexpected EOF while looking for matching `''
    /usr/bin/imadmin: line 191: erro de sintaxe: fim prematuro do arquivo

    ResponderExcluir
  4. Anônimo,

    Provavelmente alguma problema ao copiar e colar o código do script, reveja com atenção.

    ResponderExcluir