Implementando o Apache Guacamole no Azure

Introdução

O objetivo deste artigo é demonstrar sobre o setup do Apache Guacamole no Azure abordando os detalhes de arquitetura, segurança e disponibilidade.

O Apache Guacamole é um “remote desktop gateway clientless” com suporte aos protocolos mais utilizados como SSH, RDP e VNC. É chamado de clientless pois permite o uso sem a necessidade de utilização da plugins ou clientes extras, sendo utilizado diretamente pelo seu browser.

Arquitetura

A ilustração abaixo se refere à arquitetura sugerida. Esta arquitetura contempla um balanceador de carga público que recebe os acessos externos e direciona para duas máquinas virtuais na camada web. A camada web se comunica com a camada de dados onde temos um banco de dados MySQL responsável por armazenar as informações de login, acessos e conexões.

O uso do Availability Set garante o SLA de 99.95% para as máquinas virtuais e o uso do Azure Database for MySQL, um banco de dados como serviço gerenciado, escalável e altamente disponível garante o SLA de 99.99%.

Deployment do ambiente

Abaixo serão descritos os comandos do Azure CLI que podem ser usados para criar o ambiente. Além de servir como uma documentação sobre os serviços que foram implantados, são uma boa prática de infraestrutura como código.

Instalação do Azure CLI

O Azure CLI é a ferramenta que permite o gerenciamento de recursos do Azure via linha de comandos. Ela é um pré-requisito para este tutorial e neste link você encontra as informações sobre como realizar a instalação.

Criação do Resource Group

Uma vez que você já tenha o AZ CLI instalado, vamos aos comandos. A primeira coisa a fazer é rodar o comando “az login” que irá permitir que você se autentique com sua conta do Azure. Será gerado um código e solicitado que você acesse https://microsoft.com/devicelogin para informá-lo.

Assim que concluir esta etapa, você já estará autenticado em sua assinatura do Azure e pronto para começar a executar os comandos.

Criação do serviço do MySQL

Criação da regra de firewall para o MySQL

Após setup e testes iniciais, é importante remover esta regra a deixar habilitado apenas a flag que permite comunicação do serviço do MySQL apenas com serviços do Azure:

Criação da VNET

Criação do Availability Set

Criação das VMs

Após a execução deste bloco de comandos, serão criadas duas máquinas virtuais inseridas dentro do Availability Set criado previamente e com as características definidas nos comandos executados.

Importante ressaltar que as chaves SSH serão armazenadas no diretório ~/.ssh do host onde os comandos foram executados e para conectar nas VMs basta rodar o comando abaixo:

Criação do Network Security Group

Neste caso, estamos criando a regra de liberar o acesso na porta 80 (HTTP) à partir da Internet. O acesso na porta 22 (SSH) é criado automaticamente. Estas configurações devem ser revisadas futuramente para aumentar a segurança oferecendo um acesso mais restrito sobre a origem destas conexões ao Apache Guacamole.

Instalação dos pacotes relacionados e devidas configurações

Neste ponto iremos usar um arquivo json que irá fazer uma chamada à um shell script e executar a instalação de pacotes necessários no Linux. Abaixo os comandos à serem executados:

Conteúdo do arquivo JSON (guac.json)

Caso o script guac-install.sh esteja armazenado em outra url, alterar no campo correspondente acima.

Conteúdo do script shell (guac-install.sh)

Alteração para chamar o Guacamole diretamente no “/” ao invés de “/guacamole”

Por padrão o acesso no Guacamole se dá acessando o IP do servidor /guacamole. Por exemplo, http://10.20.30.40/guacamole. O objetivo aqui é permitir que o acesso seja feito diretamente em http://10.20.30.40

Alteração na porta do Tomcat (de 8080 para 80)

Por padrão o Tomcat trabalha escutando requisições na porta 8080. Aqui é feita a alteração para que ele escute por requisições na porta 80.

Criação do Balanceador de Carga

A utilização de um balanceador de carga irá distribuir o acesso entre as duas VMs e permitir que no caso de falha em uma delas, isso seja transparente para o usuário. Neste exemplo estará sendo criado um balanceador de carga público, no entanto nada impede que seja utilizado um balanceador de carga interno (privado).

A criação do balanceador de carga envolve alguns passos, como a criação do IP público que ele terá, seu nome DNS,  healthprobe, regra de balanceamento e regras de nat interno (opcional). Nos próximos tópicos serão descritos cada um dos passos.

Criação do IP Público do Balanceador de Carga

Criação do Balanceador de Carga

Criação do Healthprobe

Criação da regra de balanceamento

Inserção das máquinas virtuais na regra de balanceamento

Criação das regras de INAT

As regras de INAT irão permitir que as chamadas feitas diretamente no endereço do balanceador de carga direcionem para cada servidor por baixo dele dependendo da porta chamada.

Neste caso, ao realizar a chamadda na porta 21 do balanceador, direciona para a porta a VM1 na porta 22 (SSH) e a chamada na porta 23 do balanceador direciona para a VM2 na porta 22 (SSH).

Com isso, você pode alterar a regra default do NSG criado anteriormente que possui a porta 22 exposta para a internet com o comando abaixo:

Finalizando o setup

Após completar todos os passos anteriores, já teremos finalizado a setup do Apache Guacamole. Para acessá-lo, basta ir até o endereço http://loadbalancerguaca.eastus.cloudapp.azure.com/ e informar o usuário e senha padrão da instalação (guacadmin/guacadmin)