Instalação e configuração de um servidor Jabber

Esta contribuição está participando do sorteio da Mochila Targus Matrix. Envie seu texto e participe você também, você contribui com outros usuários e ainda pode faturar uma mochila novinha em folha para o seu laptop. Saiba mais sobre como participar.

Sobre o Autor:

Evandro Guglielmeli
miware@mednet.com.br

Introdução

Jabber é um protocolo aberto, baseado em XML, para sistemas de mensagens instantâneas. O serviço de comunicação Jabber é distribuído em milhares de servidores através da internet e usado por cerca de dez milhões de pessoas em todo mundo, de acordo com a Fundação Jabber Software. Um servidor pode criar uma rede privada Jabber (por detrás de um firewall, por exemplo) ou pode se juntar à rede Jabber global e pública.

Um conceito chave do sistema Jabber são os transportes, ou gateways, que permite aos seus usuários acessarem redes usando outros protocolos, tais como ICQ, AIM ou MSN Messenger. Isto é feito no próprio servidor e o usuário não precisa ter um software cliente especial, multi-protocolo, para acessar as diferentes redes; com um único cliente que suporte inteiramente o protocolo Jabber, o usuário tem acesso simultâneo a todas as redes a que o servidor dá acesso.

1 – Serviço jabber privado

A configuração que será realizada se destina a criar uma rede jabber privada, para uso interno da Instituição, com acesso a rede MSN restrito a usuários específicos.

Software utilizado:

Sistema operacional
Slackware 12.0, com bibliotecas completas e X (ambiente gráfico). O X foi instalado por que alguns dos seus módulos são necessários para processar imagens usadas como avatares no transporte MSN.

Servidor jabber
O servidor jabber instalado é o ejabberd, da Process One, desenvolvido em erlang. O pacote de instalação binário já contém todo o suporte necessário para rodar o servidor, inclusive o executável da linguagem.

Transporte MSN
Para conexão com a rede MSN, é usado o PyMSNt, desenvolvido em python usando o framework Twisted e as bibliotecas pyOpenssl, pycrypto e Imaging. O pacote sumo do Twisted traz tudo que é necessário ao seu funcionamento, inclusive a biblioteca zopeinterface. As demais bibliotecas são obtidas em separado, na Internet.

2 – Instalação do software

2.1 – ejjaberd 1.1.4

Para instalar o ejabberd a partir do pacote binário, basta definir a permissão de execução e chamar o arquivo, ele executa tanto em modo texto quanto gráfico e pede confirmação de alguns parâmetros para instalação, tais como diretório de destino, nome do domínio jabber e nome e senha do administrador do serviço.

Na instalação em ambiente Slackware 12 o script de pós-instalação acusou um erro não identificado, avisando que a instalação não pode ser concluída com êxito, mas nenhuma falha ocorre quando se executam os programas instalados. Por padrão, a instalação é feita no diretório /opt/ejabber-1.1.4, com arquivo de configuração no subdiretório conf e executáveis no subdiretório bin.

A princípio nenhuma modificação precisa ser feita no arquivo de configuração, conf/ejabberd.cfg, para se iniciar o servidor.

# chmod +x ejjaberd-1.1.4-linux-x86-installer.bin
# ./ejjaberd-1.1.4-linux-x86-installer.bin

# /opt/ejabberd-1.1.4/bin/start
ou
# /opt/ejabberd-1.1.4/bin/ejabberdctl start

2.2 – twisted 2.5.0

O framework Twisted é um conjunto de ferramentas que pode ser obtido e instalado no todo ou em parte, o chamado pacote sumo traz todas as ferramentas e mais a biblioteca zopeinterface necessária para a ferramenta TwistedWeb.

Primeiro extraia os arquivos do pacote com a ferramenta tar, depois entre no diretório extraído e execute a instalação.

O script setup.py instala os módulos Twisted, mas não a interface Zope; instale primeiro o pacote no subdiretório zope.interface, depois volte ao diretório raiz do pacote e instale os módulos do Twisted.

# tar -jxf Twisted-2.5.0.tar.bz2
# cd Twisted-2.5.0/zope.interface-3.3.0
# python setup.py build

# python setup.py install

# cd ..
# python setup.py build

# python setup.py install

2.3 – pycrypto, pyOpenssl e Imaging

Estes pacotes usam uma instalação padrão de pacotes python; basta extrair os arquivos com tar, entrar no diretório, construir a biblioteca e instalar, faça isso para cada um dos pacotes.

# tar -jxf pycrypto-2.0.1.tar.gz
# cd pycrypto-2.0.1
# python setup.py build

# python setup.py install

Nota: Os pacotes Twisted, Zope.interface, pycrypto, pyOpenssl e Imaging são instalados diretamente na estrutura de diretórios Python do sistema, no diretório /usr/lib/python2.5/site-packages/.

2.4 – PyMSNt 0.11.2

O transporte PyMSNt é uma aplicação e pode ser instalado em qualquer ponto do sistema, basta extrair no lugar desejado. Para maior coerência, extraímos os arquivos sob o diretório /opt (ao lado do ejabberd). Aplicações python costumam ser independentes de SO, mas em alguns casos a implemenação de uma classe pode precisar de adaptações entre uma plataforma e outra; no caso do transporte pymsnt é preciso ajustar a importação da classe twistd, no arquivo src/main.py, para pegar a versão unix da classe.

# cd /opt
# tar -zxf ~/pymsnt-0.11.2.tar.gz
# vi pymsnt-0.11.2/src/main.py

edite o arquivo trocando a linha
from twisted.scripts import twistd
por
from twisted.scripts import _twistd_unix as twistd

3 – Configuração

Para definir a nossa rede jabber privada, bem como a sua ligação com a rede MSN externa, edite os arquivos /opt/ejabberd-1.1.4/conf/ejabberd.cfg e /opt/pymsnt-0.11.2/config.xml;
os seguintes parâmetros devem ser especificados:

/opt/ejabberd-1.1.4/conf/ejabberd.cfg

{hosts, [“seu.dominio.com”]}.
Coloque aqui o nome do domínio que o servidor jabber irá atender; este é o nome que irá compor o lado direito da identificação do usuário no servidor, ele deve poder ser resolvido por DNS.
{language, “pt-br”}
Isso ajusta as mensagens do servidor para o Português do Brasil.
{acl, msnusers, {user, “nome_usuario”}}.
Lista de controle de acesso ao MSN; coloque uma linha para cada usuário autorizado a usar o transporte MSN.
{access, msnallow, [{allow, msnusers}, {deny, all}]}.
Regra de acesso ao transporte MSN; define uma regra que apenas os usuários listados em msnusers são permitidos.
{listen ..

Esta opção define que endereços e portas o ejabberd irá atender e que serviços ele vai executar; inclua a entrada abaixo para incluir o transporte MSN.

{5347, ejabberd_service, [{access, msnallow},
{host, “msn.seu.dominio.com”,
[{password, “senhasecreta”}]}]},

Onde senhasecreta é a senha de acesso para comunicação entre o serviço jabber e o transport MSN.

/opt/pymsnt-0.11.2/config.xml

msn.seu.dominio.com
Define o JID (identificador jabber) do transporte; deve ser o mesmo usado na opção listen do ejabberd.
seu.dominio.com
Informa o nome de domínio jabber para o transporte; necessário para transferência de arquivos.
127.0.0.1
Endereço (IP ou DNS) do servidor jabber onde o transporte vai se conectar, use 127.0.0.1 se o servidor jabber está na mesma máquina que o transporte MSN.
senhasecreta
Define a senha de acesso para comunicação entre o transporte MSN e o serviço jabber; deve ser a mesma usada na opção listen do ejabberd.

4 – Ativação do serviço

Quando o transporte MSN é iniciado ele tenta se conectar ao servidor jabber, por isso inicie sempre o ejabberd antes do pymsnt.

# /opt/ejabberd-1.1.4/bin/ejabberdctl start
# /opt/pymsnt-0.11.2/PyMSNt.py

5 – Parando o serviço

Proceda na ordem inversa da inicialização.

# kill -9 `cat /opt/pymsnt-0.11.2/PyMSNt.pid`
# /opt/ejabberd-1.1.4/bin/ejabberdctl stop

6 – Segurança aumentada

Como de costume, não é conveniente executar serviços como usuário root; crie um usuário comum para executar o servidor e o transporte, e dê a este usuário a propriedade dos diretórios e arquivos do serviço.

# adduser jb_user

# cd /opt/
# chown jb_user: ejabberd-1.1.4 -R
# chown jb_user: pymsnt-0.11.2 -R

7 – Controle automático do jabber

Para iniciar e parar o serviço jabber na partida e no fechamento do sistema, cria-se um arquivo de inicialização, ‘/etc/rc.d/rc.jabber’, com o seguinte conteúdo:

#!/bin/sh
#
# /etc/rc.d/rc.jabber
#
# Start/stop/restart the ejabberd jabber server
#
# To make jabber start automatically at boot, make this
# file executable: chmod 755 /etc/rc.d/rc.jabber
#

case “$1” in
‘start’)
su jb_user -c “/opt/ejabberd-1.1.4/bin/ejabberdctl start”
su jb_user -c “/opt/pymsnt-0.11.2/PyMSNt.py”
;;
‘stop’)
kill -9 `cat /opt/pymsnt-0.11.2/PyMSNt.pid`
killall -9 ssl_esock
killall -9 beam
killall -9 epmd
;;
‘restart’)
/etc/rc.d/rc.jabber stop
sleep 3
/etc/rc.d/rc.jabber start
;;
*)
echo “Usage: $0 {start|stop|restart}”
;;
esac

Também edite os scripts ‘/etc/rc.d/rc.M’ e ‘/etc/rc.d/rc.K’, incluindo a chamada para rc.jabber.

7.1 – Partida – rc.M

# Start jabber server:
if -x /etc/rc.d/rc.jabber ; then
. /etc/rc.d/rc.jabber start
fi

7.2 – Parada – rc.K

# Stop the jabber server:
if -x /etc/rc.d/rc.jabber ; then
/etc/rc.d/rc.jabber stop
fi