O Apache Guacamole é uma solução de gateway para acesso remoto (também chamado de Jump Server) a servidores, computadores e máquinas virtuais, através do navegador (browser). É uma solução open source que facilita a administradores de rede a gestão do acesso a computadores, que podem ser isolados em uma rede local (como uma DMZ) aumentando sua segurança.
O Guacamole permite o acesso através dos protocolos RDP (Remote Desktop Connection), comum em sistemas Microsoft, SSH (Secure Shell), comum em sistemas Linux e derivados e VNC (Virtual Network Computing), aplicativo popular para conexão remota a desktops, compatível com Windows, Linux e macOS.
Pré-requisitos para execução deste tutorial: conhecimento geral em redes de computadores, compreensão do conceito de LAN / WAN / VPN e firewall, conhecimento dos protocolos TCP/IP e suas portas, compreensão do conceito de servidor Web, banco de dados e acesso remoto.
Instalação do Apache Guacamole
A instalação típica do Apache Guacamole não é tão simples (quanto um apt install package) e requer um Servidor Linux, o Apache Tomcat (servidor web Java), o MySQL ou MariaDB e o Java JDK. Neste cenário, a dica é seguir o excelente passo a passo do blog do Rudimar Remontti.
Porém, a dica do Ricardo Conzatti é a melhor (mais fácil) saída para quem deseja uma instalação rápida e eficiente do Apache Guacamole. Ele recomenda o uso do script do Chase Wright, que é praticamente um “apt install apache-guacamole“.
No final deste post estão vários links interessantes sobre o Apache Guacamole, especialmente sobre a sua instalação.
Abaixo estão os (poucos) passos para proceder com a instalação do Guacamole em um servidor Linux Debian 11 usando este scritpt.
Instalação usando script
Considerando que você já possua um servidor Linux, Debian ou Ubuntu, por exemplo, baixe o script com o comando abaixo:
# wget https://raw.githubusercontent.com/MysticRyuujin/guac-install/master/guac-install.sh
Feito o download, dê permissão de execução ao script com o comando:
# chmod +x guac-install.sh
Inicie a instalação executando o script com o comando:
# ./guac-install.sh
O script lhe fará poucos questionamentos (abaixo) como se deseja habilitar a autenticação em dois fatores (MFA) e se deseja instalar um MySQL / MariaDB neste mesmo servidor (ou se, por exemplo, deseja usar um servidor DB já préconfigurado). Caso opte pela instalação do DB, ele solicitará uma senha para o user root e para o user guacamole:
MFA: yes
MySQL: local ou não
Senha do user root do MySQL: *** (insira uma senha)
Senha do user guacamole do MySQL: *** (insira uma senha)
Acesso a interface Web
Após o término da instalação, o Apache Guacamole poderá ser acessado pelo seu endereço padrão, originalmente em porta 80/HTTP. A seguir, faremos as configurações necessárias para habilitar este acesso em 443/HTTPS.
http://ip-do-servidor:8080/guacamole
O user e senha padrão é:
user: guacadmin | password: guacadmin
Caso tenha habilitado o MFA, já em seu primeiro acesso você precisará ler o QR Code gerado pelo Guacamole em seu smartphone (usando o Google Authenticator ou outro app de MFA) e então entrar com o código apresentado em seu aplicativo.
Para trocar a senha do user guacadmin, você precisa, primeiramente, clonar este usuário, criando um segundo user admin (no Guacamole, vá em Main Menu / Settings / Users). Após, acesse o sistema com este segundo user e então troque a senha ou, até mesmo, desabilite o user guacadmin.
Habilitando o SSL
Para habilitar o acesso seguro (SSL) no acesso ao Apache Guacamole, siga os passos abaixo. Em primeiro lugar, vamos gerar um certificado (auto assinado):
# keytool -genkey -alias tomcat -keyalg RSA
O keytool lhe fará os questionamentos padrões para a geração de um certificado, como a senha do keystore (guarde para usar posteriormente), seu nome e sobrenome, depto, empresa, cidade, estado e país. Ao final, confirme as informações inseridas.
Um arquivo oculto chamado .keystore foi criado no seu diretório atual (use o comando # ls -lha
para visualizar). Feito isso, vamos mover este arquivo para o diretório do Apache Tomcat:
# mv /root/.keystore /var/lib/tomcat9/
Em seguida, vamos ajustar a permissões recomendadas para este arquivo:
# chown tomcat. /var/lib/tomcat9/.keystore
# chmod 640 /var/lib/tomcat9/.keystore
E, por fim, vamos editar o arquivo de configuração do Apache Tomcat (server.xml) com as configurações de SSL. Primeiramente, recomendo fazer um backup do arquivo antes de sua edição:
# cp /etc/tomcat9/server.xml /etc/tomcat9/server.xml.bkp
Em seguida, edite o arquivo server.xml usando o nano (ou vim) com as configurações descritas abaixo:
# nano /etc/tomcat9/server.xml
Altere o bloco de configurações abaixo:
[Bloco original]
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
[Bloco editado com as configurações de SSL]
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
scheme="https"
secure="true"
SSLEnabled="true"
keystoreFile="/var/lib/tomcat9/.keystore"
keystorePass="senha inserida anteriormente"
clientAuth="false"
sslProtocol="TLS" />
Salve o arquivo! Usando o nano, tecle Ctrl + X e yes para salvar o arquivo e sair (se estiver usando o vim, tecle Esc + :wq).
Reinicie o Apache Tomcat com o comando abaixo:
# systemctl restart tomcat9 guacd
Feito isso, o Apache Guacamole poderá ser acessado via HTTPS, pelo seu endereço padrão:
https://ip-do-servidor:8080/guacamole
Criando conexões dentro do Apache Guacamole
Para cadastrar seus computadores e permitir o acesso remoto aos seus usuários, acesse o Apache Guacamole com um user admin (como o guacadmin) e vá em seu Main Menu / Settings / Connections.
Use a opção New Connection para cadastrar os sistemas que poderão ser acessíveis a partir do Apache Guacamole e o New Group para criar grupos e organizar estes sistemas, como abaixo, no ambiente utilizado na construção deste post.
No cadastro de conexões, você precisa informar o protocolo de acesso remoto que esta conexão (computador) permite o acesso (RDP, SSH ou VNC), seu endereço DNS ou IP e o usuário e senha necessário para a autenticação.
Abaixo está o exemplo de uma conexão via protocolo RDP em um sistema Microsoft Windows 10 que, necessariamente, precisa ter o acesso remoto habilitado:
Muito importante destacar que, sendo um gateway de acesso remoto, o Apache Guacamole precisa, de alguma maneira, ter condição e permissão para chegar em todos os computadores e sistemas que poderão ser acessíveis através dele. Isso quer dizer que você precisará organizar sua rede interna (LAN, WLAN, DMZ) para que atenda esta necessidade, como através de configurações de VLANs, Rotas, Regras de Firewall, ACLs e etc.
Feito este cadastro, o computador já poderá ser acessado via Apache Guacamole (neste caso, através do Google Chrome), como exemplificado na imagem abaixo:
Para organizar os usuários e as conexões que estes poderão acessar, use a opção de cadastrar novos usuários (Main Menu / Settings / Users). Dentro deste cadastro, você tem a opção de selecionar quais conexões (ou grupo de conexão) este usuário poderá acessar.
Vale destacar a opção de grupos de usuários (Main Menu / Settings / Groups), que também possui a opção de quais conexões podem ser acessadas (como visto na imagem abaixo), facilitando a gestão de um número volumoso de usuários e conexões.
Recomendação final
Como já citado em outros posts por aqui, em ambiente de testes é comum a utilização de certificado self-signed (auto-assinado). Ele pode ser usado normalmente, porém, como não possui vínculo com uma autoridade certificadora oficial, o navegador sempre exibirá um alerta ao acessá-lo.
Em ambientes de produção, você pode usar qualquer certificado gerado a partir de uma unidade certificadora oficial. Uma alternativa bastante comum é o de usar o Let’s Encrypt, que é uma autoridade de certificação que oferece certificados de criptografia TLS X.509 gratuitamente, através de um processo automatizado bem eficiente.
Para gerar e ativar um ceritificado via Let’s Encrypt é importante lembrar que o domínio utilizado precisa ser acessível via Internet, portanto, as portas 80 http e 443 https devem estar abertas (liberadas) e, se necessário, redirecionadas (NAT) para o servidor (IP local) do sistema.
*Com informações de: Apache Guacamole – Site Oficial, Doc – Brasil Peering Forum – Configurando um GW de Acesso Remoto, Apache Guacamole – Installing, Apache Guacamole – Changing Password, Rudimar Remontti – Aprenda a instalar o Apache Guacamole, Conza Tech – Ricardo Conzatti – Instalando o Apache Guacamole,