sábado, 11 de abril de 2009

Usando seu servidor Openfire através da Internet

Já recebi vários e-mails de pessoas que conseguiram fazer seus servidores Openfire funcionarem perfeitamente na rede local, mas que com o passar do tempo tem a necessidade de que os mesmos possam ser utilizados via Internet, mas não sabem o que precisa ser feito para resolver tal situação.

Assim, resolvi escrever esse post, discutindo alguns métodos e requerimentos para que isso funcione corretamente.

Existem três cenários que são os mais comuns (pelo que tenho percebido):
  • O Servidor Openfire está rodando no mesmo servidor que o roteador/firewall.
  • O Servidor Openfire está rodando em um outro servidor dentro da rede interna mas o mesmo não possui um IP "público". Saiba mais sobre IPs de redes privadas aqui.
  • O Servidor Openfire está rodando em outro servidor da rede interna, mas o mesmo possui um IP "público".
Em todos os casos citados existem premissas básicas para que o acesso via Internet funcione:
  1. O domínio configurado no Openfire deve ser resolvido via DNS, tanto na rede interna quanto na Internet. Já vi várias pessoas que configuram o domínio como o IP do servidor na rede interna. Isso obviamente impede o uso via Internet, pois tal IP não é roteável. O mais indicado é que você use um nome como jabber.dominio.com.br, e que esse nome seja resolvido ou para o IP "público" do roteador/firewall ou para o IP do Servidor Openfire, caso ele possui um IP "público". Nos casos onde se usa ADSL com IP dinâmico, uma dica é registrar um DNS dinâmico no no-ip ou no dyndns e depois pedir a empresa que cuida de seu DNS para configurar o jabber.dominio.com.br para ser um CNAME desse nome registrado.
  2. Em quaisquer das situações será necessário alterar as políticas de firewall de sua rede. Estou partindo do princípio que você tem acesso ao firewall de sua rede. Como trabalho com Linux, estou também supondo que você tenha conhecimento da ferramenta iptables.
  3. Caso você use um link ADSL, o ideal é que você tenha um modem que funcione em bridge, e que sua operadora utilize o protocolo PPPoE. Assim você poderá se livrar do NAT no modem, e não será necessário configurar o mesmo. Caso não seja seu caso, tal post não tem intenção de debater configurações de modens, por isso consulte a documentação de seu equipamento. Cabe citar que o fato de não ser PPPoE não quer dizer que não vá funcionar, mas sim que isso poderá envolver outros passos e técnicas que não serão discutidos aqui, para que seu acesso externo funcione.

Caso 1 - O Servidor Openfire está rodando no mesmo servidor que é o roteador/firewall.

Nessa situação, basta apenas liberar o acesso de entrada das portas que serão necessárias em seu servidor. Supondo que o domínio do Openfire configurado seja jabber.dominio.com.br você pode fazer isso com os seguintes comandos:
# XMPP e XMPP SSL
iptables -A INPUT -d jabber.dominio.com.br -p tcp --dport 5222:5223 -j ACCEPT
# Server 2 Server
iptables -A INPUT -d jabber.dominio.com.br -p tcp --dport 5269 -j ACCEPT
Caso 2 - O Servidor Openfire está rodando em um outro servidor dentro da rede interna mas o mesmo não possui um IP "público".

Supondo que seu servidor Openfire esteja rodando na rede interna no IP 192.168.0.10, e que o domínio do Openfire configurado seja jabber.dominio.com.br podemos usar as seguintes regras pra desviar todo o tráfego vindo para as portas XMPP para o destino.
iptables -A FORWARD -d jabber.dominio.com.br -p tcp --dport 5222:5223 -j ACCEPT
iptables -A FORWARD -d jabber.dominio.com.br -p tcp --dport 5269 -j ACCEPT

iptables -t nat -A PREROUTING -d jabber.dominio.com.br -p tcp --dport 5222:5223 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A PREROUTING -d jabber.dominio.com.br -p tcp --dport 5269 -j DNAT --to-destination 192.168.0.10
Caso 3 - O Servidor Openfire está rodando em outro servidor da rede interna, mas o mesmo possui um IP "público".

Supondo que seu servidor Openfire esteja rodando em um servidor que tem IP "público" (mas que não é o mesmo servidor roteador/firewall) e que o domínio do Openfire configurado seja jabber.dominio.com.br e ainda que esse nome resolva para o IP do servidor que roda o Openfire, podemos usar as seguintes regras pra aceitar todo o tráfego vindo para as portas XMPP do mesmo.
iptables -A FORWARD -d jabber.dominio.com.br -p tcp --dport 5222:5223 -j ACCEPT
iptables -A FORWARD -d jabber.dominio.com.br -p tcp --dport 5269 -j ACCEPT


Acredito que com as dicas acima você consiga fazer com que seu servidor Openfire possa ser usado pela Internet. Caso seu cenário seja diferente, ou você tenha alguma dúvida, fique à vontade para postar nos comentários.

Até a próxima.