Servidor Jabber com Openfire + MySQL + Debian Squeeze

Instalação e configuração de um servidor Jabber com Openfire e MySQL. Integração do Openfire com o MySQL, dois clientes locais e um cliente web, integração do Openfire com o cliente MSN, como efetuar a configuração dos clientes Spark e Pidgin.

Definição do Jabber pelo Wikipédia:

Jabber é um protocolo aberto, com bases XML, para sistemas de mensagens instantâneas. Softwares com base Jabber são distribuídos em milhares de servidores através da internet, e usados por cerca de dez milhões de pessoas em todo mundo, de acordo com a Fundação Jabber Software.

Jeremie Miller iniciou o projecto em 1988; a principal versão pública ocorreu em Maio de 2000. O produto principal do projecto é o jabberd, um servidor em que os clientes Jabber se ligam para comunicar. Este 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, também conhecido como gateways, que permite aos utilizadores acederem a redes usando outros protocolos - tais como o AIM, o ICQ (usando o OSCAR), MSN Messenger e Windows Messenger (usando o .NET Messenger Service), SMS ou E-mail. Ao contrário dos clientes de multiprotocolo, como o Trillian ou Gaim, Jabber fornece este acesso no nível de servidor comunicando via serviços especiais de gateway em um computador remoto.

Qualquer utilizador Jabber pode se registrar com uma destas gateways fornecendo a informação necessária para aceder a essa rede, e pode então comunicar-se com os utilizadores dessa rede como se fossem utilizadores de Jabber. Isto significa que qualquer cliente que suportar inteiramente o protocolo Jabber pode ser usado para aceder a qualquer rede em que exista uma gateway, sem necessitar de código extra no cliente.

As bases do protocolo Jabber, agora administrado pela fundação Jabber Software, foram aceitas pela IETF como padrão sob o nome XMPP, com RFC número 3920. É frequentemente considerado como estando na competição com o SIMPLE, baseado no protocolo do SIP, como protocolo padrão da notificação de presença e de instant messaging; no entanto, o design do XMPP tem por finalidade fornecer uma plataforma de interface mais geral entre aplicações.

Fonte: http://pt.wikipedia.org/wiki/Jabber

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.

Precisamos instalar o MySQL Server para podermos preparar uma base de dados para o nosso Openfire.

Vamos instalar o mysql server

aptitude update && aptitude dist-upgrade -y && aptitude install mysql-server -y

Após a instalação aparecerá uma tela de wizard para a definição da senha do root da base de dados. Defina uma senha e confirme-a.

Agora vamos acessar o banco de dados e criar a nossa base.

mysql -u root -p
mysql> CREATE DATABASE openfire;
mysql> GRANT ALL PRIVILEGES ON openfire.* TO openfire@localhost IDENTIFIED BY 'senha';
mysql> QUIT;

Explicando:

  1. Na primeira linha estamos criando um banco de dados com o nome openfire, que será utilizado pelo servidor Openfire.
  2. Na segunda linha estamos dando para o usuário openfire todos os privilégios neste banco de dados e estamos definindo para ele uma senha.
  3. Na terceira linha estamos saindo do banco de dados.

Pronto, agora já temos a nossa base de dados onde ficaram armazenados todos os dados pertinentes ao nosso servidor Openfire.

Instalação do Java e do Apache

Como o Openfire trabalha em cima de Java, temos que instalá-lo.

Nos repositórios do Debian já temos o Java, precisamos somente instalá-lo.

aptitude install sun-java6-jre libmysql-java libapache2-mod-auth-mysql -y

Pronto, com isso o Java já será instalado e suas dependências.

Como pretendemos colocar para trabalhar um cliente web e a administração do servidor Openfire é web, vamos instalar o Apache:

aptitude install apache2 -y

Pronto, temos a nossa base web para trabalharmos.

Instalação do Openfire

Porém vou utilizar a última versão na Data 04/08/2012

Vamos baixar a última versão pertinente a hoje do site.

wget -c http://wiki.douglasqsantos.com.br/Downloads/jabber/openfire_3.7.1_all.deb

Vamos instalar:

dpkg -i openfire_3.7.1_all.deb

Acertando as permissões

chown -R openfire:openfire /var/lib/openfire

Agora vamos reiniciar o servidor

reboot

Agora vamos testar a porta, para confirmar que ela esta escutando

nmap -sS localhost -T4

Starting Nmap 5.00 ( http://nmap.org ) at 2011-10-10 10:09 BRT
Interesting ports on localhost (127.0.0.1):
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
111/tcp  open  rpcbind
3306/tcp open  mysql
9090/tcp open  zeus-admin

Nmap done: 1 IP address (1 host up) scanned in 0.35 seconds

Pronto, já estamos com o Openfire e o Java instalados com o MySQL instalado e configurado.

Agora vamos configurar o Openfire.

Acesse pelo navegador http://ip_servidor:9090

  1. Aparecerá uma tela de boas vindas perguntando o idioma, selecione o que você achar mais conveniente e clique em continuar.
  2. Nesta tela vamos começar a configuração do servidor, informe um domínio e as portas para administração do servidor, uma porta para trabalhar via HTTP e uma para trabalhar via HTTPS.
  3. Informe um domínio: douglasqsantos.com.br
  4. Porta do console admin: 9090
  5. Porta segura do console admin: 9091
  6. Depois de definir o domínio e as portas, clique em continuar.
  7. Nesta tela podemos definir o tipo de banco de dados, como pretendemos configurar o Openfire com o MySQL, utilizaremos a primeira opção: conexão padrão do banco de dados.
  8. Clique em continuar.
  9. Nesta tela, na opção Predefinições do driver de banco de dados, utilizaremos a opção MySQL.
  10. Classe do driver JDBC podemos manter a padrão: com.mysql.jdbc.Driver
  11. URL do banco de dados, utilizaremos o local onde está a nossa base de dados MySQL. Aqui temos que definir a maquina que esta o banco no nosso caso localhost e o nome da base que vai ser openfire.
  12. Nome do usuário fica como definimos na base de dados mysql: openfire
  13. Senha: a que você definiu para o usuário na opção IDENTIFIED BY no MySQL no exemplo foi definido senha.
  14. Minimum Connections: fica por sua conta.
  15. Maximum Connections: fica por sua conta.
  16. Tempo de expiração da conexão: 1.0
  17. Selecione Continuar.
  18. Se for preenchido tudo corretamente, passaremos para a próxima pagina, a de configuração de perfis. Podemos utilizar a primeira opção e selecione Continuar.
  19. Agora vamos definir o endereço de email do admin e a senha.
  20. Sempre utilize senhas fortes com caracteres maiúsculos e minúsculos, caracteres especiais para deixar a sua senha mais difícil de ser descoberta.
  21. Após definir a senha, clique em continuar e pode se logar no console de administração.
  22. Logue com o usuário admin e a senha que você definiu.

Criação de usuários e grupos e configuração do compartilhamento de lista de contatos

Vamos criar um grupo.

O padrão é você criar grupos e atribuir aos grupos os usuários.

Então vamos criar um grupo chamado TI:

  1. Clique em Grupos.
  2. Clique em Criar Novo Grupo.
  3. Defina um Nome do Grupo.
  4. Clique em Criar.

Ex.:

  1. Nome do Grupo: TI
  2. Descrição: Departamento de Tecnologia

Pronto, o primeiro grupo está criado.

Agora vamos criar um usuário.

  1. Clique em Usuário
  2. Criar Novo usuário.

O nome de usuário é o nome que será utilizado pelo cliente. Pode ser utilizada nomenclatura como nome+sobrenome.

Ex.:

  1. Nome de usuário: jose.silva
  2. Nome: José da Silva
  3. Email: jose.silva@dominio.com.br
  4. Senha: senha
  5. Confirmar senha: senha
  6. Is Administrator? Nesta opção você define se o usuário é administrador ou não do seu servidor.
  7. Clique em criar Usuário.

Na senha defina uma senha padrão para o primeiro acesso e peça para que os usuários a troquem no primeiro logon.

Pronto, agora temos um usuário e um grupo.

Agora vamos atribuir este usuário a um grupo.

  1. Clique em Grupos.
  2. Aparecerá o grupo TI e que acabamos de criar.
  3. Clique em Editar.
  4. Agora podemos adicionar o jose.silva ao grupo TI.
  5. Na parte da tela, onde está escrito Membros deste grupo, temos um campo Adicionar Usuário(s):
  6. Aqui vamos digitar o nome do jose.silva
  7. Selecione Adicionar.

Pronto, agora o usuário jose.silva faz parte do grupo de TI.

Vamos criar mais um grupo

  1. Clique em: Grupos > Criar novo grupo
  2. Nome do grupo: Administração
  3. Descrição: Administração.
  4. Clique em Criar grupo.

Pronto, o segundo grupo está criado.

Agora vamos criar mais um usuário.

  1. Selecione: Usuário > Criar novo usuário.
  2. Nome de usuário: marcos.silva
  3. Nome: Marcos da Silva
  4. Email: marcos.silva@douglasqsantos.com.br
  5. Senha: senha.
  6. Confirmar senha: senha
  7. Is Administrator? yes
  8. Selecione criar usuário.

Agora vamos atribuir este usuário a o grupo administração.

  1. Selecione Grupos.
  2. Aparecerão os grupos TI e Administração que acabamos de criar.
  3. Selecione o grupo Administração
  4. Agora selecione editar.
  5. Agora podemos adicionar o marcos.silva ao grupo Administração.
  6. Na parte da tela onde está escrito Membros deste grupo temos um campo Adicionar Usuário(s):
  7. Aqui vamos digitar o nome do marcos.silva
  8. Selecione Adicionar.

Pronto, agora o usuário marcos.silva faz parte do grupo de Administração.

Agora podemos utilizar o compartilhamento de lista de contatos, um recurso muito útil.

  1. Clique em Grupos
  2. Listar grupos.
  3. Agora aparecerão dois grupos, Administração e TI.
  4. Selecione editar no grupo Administração.
  5. Em compartilhamento da lista de contatos selecione a segunda opção:
  6. Ativar o compartilhamento de lista de contatos de grupo.
  7. No campo que apareceu, digite o nome da lista de contatos de grupo, este nome será visto pelos outros grupos.
  8. Ex.: Administração Geral.
  9. Selecione o checkbox Compartilhar grupo com usuários adicionais
  10. Agora selecione os grupos que você quer que vejam que o grupo administração está online, ou selecione a opção todos os usuários.
  11. Selecione salvar as configurações da lista de contatos.

Agora para o Grupo TI:

  1. Selecione em Grupos.
  2. Listar grupos.
  3. Aparecerão dois grupos, Administração e TI.
  4. Selecione editar no grupo TI.
  5. Em compartilhamento da lista de contatos selecione a segunda opção. Ativar o compartilhamento de lista de contatos de grupo.
  6. No campo que apareceu, digite o nome da lista de contatos de grupo, digite um nome, este será visto pelos outros grupos.
  7. Ex.: Tecnologia da Informação.
  8. Selecione o checkbox Compartilhar grupo com usuários adicionais e selecione os grupos que você quer que vejam que o grupo TI está online, ou selecione a opção todos os usuários
  9. Selecione salvar as configurações da lista de contatos.

Agora quando os usuários conectarem vão aparecer os grupos TI e Administração com os seus respectivos integrantes.

Configuração dos clientes

Demonstrarei como configurar os clientes Spark e Pidgin.

Podemos obter os clientes pelos seguintes endereços:

Se utilizar o Spark a configuração será a seguinte:

  1. Em usuário informe o nome do usuário cadastrado no Openfire.
  2. Em senha informe a senha definida para o usuário.
  3. Servidor informe o endereço ip do servidor Openfire, se seu servidor Openfire estiver local, digite localhost ou 127.0.0.1, se estiver em outra máquina digite o ip da outra máquina.

Se utilizar o pidgin:

  1. Menu contas/Gerenciar contas
  2. Clique em adicionar
  3. Em protocolo selecione XMPP
  4. Nome de usuário: jose.silva
  5. Domínio: douglasqsantos.com.br
  6. Senha: senha
  7. Apelido local: nome que aparece para os outros usuários
  8. Agora selecione avançado.
  9. Em servidor de conexão informe o ip do seu servidor.
  10. Selecione adicionar.

Pronto, estamos com os clientes configurados

Para alterarmos a senha padrão dos clientes, no cliente Pidgin isso é feito pelo menu Contas/nomeusuário@dominio.com.br/(XMPP)/alterar senha.

No cliente Spark isso é feito pelo menu !Spark/Preferências:

  1. A primeira opção Chat
  2. Em informações gerais
  3. Trocar senha para: novasenha
  4. Confirme a senha: novasenha

Suporte a cliente web

Agora que já temos o nosso cliente local, vamos disponibilizar mais uma ferramenta, um cliente web. Isso pode ser muito útil quando você acaba precisando falar com alguém da empresa e está fora em uma lan ou na casa de um amigo, onde não tem o cliente Spark ou o Pidgin.

Podemos disponibilizar o acesso via https.

Vamos obter e disponibilizar o cliente web.

cd /tmp
wget -c http://wiki.douglasqsantos.com.br/Downloads/jabber/sparkweb.tar.gz
tar -xzvf sparkweb.tar.gz -C /var/www/
cd /var/www/sparkweb
cp SparkWeb.html index.html

Pronto, já temos o cliente.

Agora vamos acertar os Virtuals Host para os nossos serviços trabalharem com https

Vamos gerar a key para o https

Preparando o diretório que vai armazenar os certificados

mkdir -p /etc/ssl/apache
cd /etc/ssl/apache

Gerando a key

openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
....................++++++
...........++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: senha
Verifying - Enter pass phrase for server.key: senha

Vamos gerar agora a requisição de assinatura para o certificado

openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key: senha
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Parana
Locality Name (eg, city) []:Curitiba
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Douglas
Organizational Unit Name (eg, section) []:Douglas
Common Name (eg, YOUR name) []:sparkweb.douglasqsantos.com.br
Email Address []:douglas.q.santos@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Douglas

Agora vamos auto assinar o nosso certificado

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=Douglas/CN=sparkweb.douglasqsantos.com.br/emailAddress=douglas.q.santos@gmail.com
Getting Private key
Enter pass phrase for server.key: senha

Agora vamos acertar as permissões das chaves

chmod 0400 server.*
cp server.key server.key.orig

Agora vamos tirar a senha do certificado assinado para que o apache não fique pedindo senha a cada vez que for inicializar

openssl rsa -in server.key.orig -out server.key
Enter pass phrase for server.key.orig: senha
writing RSA key

Vamos acertar as permissões de todas as chaves

chmod 0400 /etc/ssl/apache/* 

Vamos agora configurar o host virtual com o acesso via https para o nosso sparkweb.

OBS:. Não esqueça de inserir uma entrada no servidor DNS para resolver o seu endereço http://sparkweb.douglasqsantos.com.br para o ip do servidor.

Você também pode testar editando o arquivo /etc/hosts do cliente que vai acessar da seguinte formar

vim /etc/hosts
[...]
ip_servidor  sparkweb.douglasqsantos.com.br sparkweb

Quando o cliente for acessar esse endereço vai ser resolvido diretamente para o ip do servidor e o apache vai receber a solicitação do mailadmin.douglasqsantos.com.br

Aqui estamos redirecionando qualquer acesso ao site via http para https para forçar o cliente utilizar criptografia na conexão

vim /etc/apache2/sites-available/sparkweb
<VirtualHost *:80> 
  ServerName sparkweb.douglasqsantos.com.br
  Redirect / https://sparkweb.douglasqsantos.com.br/ 
</VirtualHost> 
 
<VirtualHost *:443> 
        ServerAdmin webmaster@douglasqsantos.com.br 
        ServerName sparkweb.douglasqsantos.com.br
  DocumentRoot "/var/www/sparkweb"
   <Directory "/var/www/sparkweb">
     Options -Indexes FollowSymLinks MultiViews
     AllowOverride All
     Order Allow,deny
     Allow From All
   </Directory>    
        CustomLog /var/log/apache2/sparkweb.access.log combined 
        ErrorLog /var/log/apache2/sparkweb.error.log 
        LogLevel warn 
  SSLEngine on
  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
  SSLCertificateFile "/etc/ssl/apache/server.crt"
  SSLCertificateKeyFile "/etc/ssl/apache/server.key"
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
     SSLOptions +StdEnvVars
  </FilesMatch>
     BrowserMatch ".*MSIE.*" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0
  ServerSignature Off
</VirtualHost>

Configurando a porta que o nosso host Virtual vai estar escutando.

vim /etc/apache2/ports.conf
[...]
NameVirtualHost *:443

Vamos carregar o módulo ssl para o apache.

a2enmod ssl

Vamos acertar as permissões do diretório

chown -R www-data:www-data /var/www/sparkweb/

Vamos carregar o nosso host Virtual

a2ensite sparkweb

Agora vamos habilitar ele com o seguinte comando.

/etc/init.d/apache2 reload

Vamos fazer um acerto no arquivo de configuração do sparkweb vamos deixar o server como sparkweb.douglasqsantos.com.br

vim /var/www/sparkweb/index.html
[...]
<script type="text/javascript">
function jive_sparkweb_getConfig()
{
        return {
                server: "sparkweb.douglasqsantos.com.br",
                connectionType: "socket",
                port: "5222",
                autoLogin: "false"
        };
}
</script>

Agora podemos acessar ele pelo endereço http://sparkweb.douglasqsantos.com.br

Podemos acessar ele pelo endereço local:

Insira o seu usuário em User name, o servidor em Server e a senha em Password.

Gerenciamento de Logs

Habilite o seguinte plugin no seu servidor Openfire: Monitoring Service

Após isso selecione a opção servidor no seu openfire/Arquivamento.

E fique a vontade para configurar os seus logs. fácil fácil.

OBS: Caso utilize o monitoramento consulte o seu setor juridico pois todos os usuários tem que estar sabendo que estão sendo monitorados e eles tem que assinar um termo sobre isso.

Habilitando o plugin para o integrar o openfire com o MSN

Vamos obter o plugin do msn

cd /tmp && wget -c http://wiki.douglasqsantos.com.br/Downloads/jabber/gateway.tar.gz

Agora vamos descompactar ele em /var/lib/openfire/plugins/.

tar -xzvf gateway.tar.gz -C /var/lib/openfire/plugins/

Agora temos que habilitar ele no nosso servidor openfire.

Agora vamos utilizar mais uma ferramenta para deixar o nosso servidor mais completo. Vamos instalar um plugin para a integração do Openfire com o MSN.

O cliente que dá suporte a este tipo de integração é o Spark.

No console de administração do Openfire:

  1. Selecione plugins.
  2. Selecione plugins disponíveis.
  3. Procure o plugin “Gateway IM”, na última coluna está a opção instalar, selecione ela.

Pronto, habilitamos o plugins para a integração do Openfire com o MSN.

  1. Agora selecione em servidor/gateways.
  2. Temos várias opções, mas aqui estarei mostrando a integração com o MSN.
  3. Selecione o checkbox do MSN Messenger.
  4. Aparecerão 3 opções: Testes, Opções e Permissões.
  5. Em Opções podemos configurar se vai aparecer notificação de emails, updates de nicknames, habilitar buddy icons e reconectar se desconectado. As opções ficam a seu critério.
  6. Em Permissões temos as seguintes questões:
    1. Todos os usuários podem se registrar;
    2. Esse usuário e/ou grupos podem se registrar;
    3. Somente registro manual (veja a seção registro para gerenciar).
  7. Se habilitar a primeira opção, todos os usuários poderão habilitar a integração do cliente Spark ou Pidgin com o MSN.
  8. Em Esse usuário ou grupo podemos limitar quem pode se registrar.
  9. Somente registro manual, o administrador do servidor Openfire poderá cadastrar os usuários que devem ter acesso ao MSN pelo Openfire.
  10. Se utilizar a última opção, em servidor/gateways, do lado esquerdo, terá uma opção registros. Para registrar os usuários:
  11. Selecione adicionar um novo registro.
  12. Em usuário (JID) tem que informar o usuário openfire.
  13. Em gateway selecionar MSN
  14. Em usuário informar o usuário msn.
  15. Em senha a senha do msn.
  16. Em apelido o apelido que será mostrado para os usuários do MSN.
  17. Se escolher a primeira opção os usuários entrarão com o usuário e senha do MSN diretamente no seu cliente.

No cliente Spark habilita-se um ícone do MSN em cinza. É só clicar no ícone e selecionar a primeira opção, informar usuário e senha e pronto!

Nos usuários que forem do MSN vai aparecer o símbolo do MSN do lado direito do nome.

Acho que agora temos um servidor Openfire completo e com várias ferramentas.

Caso precise alterar a quantidade de memoria para o java faça da seguinte forma

vim /etc/default/openfire
DAEMON_OPTS="-Xmx1024m"

Aqui o Xmx1024m é a quantidade de memoria utilizada pelo java aqui estou setando 1GB

Outro plugin que pode ser utilizado para a configuração do MSN com o openfire pode ser obtido em Kraken

Referências