Neste tutorial, vou explicar como instalar o Guacamole no Ubuntu, configurar o acesso aos dispositivos e utilizá-lo.
Antes de entrar nos detalhes técnicos, vou primeiro apresentar o Apache Guacamole e, especialmente, explicar porque deve implementá-lo.
O que é o guacamole?
Não, não vou falar sobre a receita do molho de abacate neste tutorial, para ser mais preciso, vamos falar sobre Apache Guacamole que é uma solução de gateway de ambiente de trabalho remoto sem cliente.
Para lhe dar uma introdução simples ao Apache Guacamole, é uma solução gratuita de código aberto que lhe permite configurar o acesso remoto através de um portal web em diferentes dispositivos.
No momento em que este tutorial foi escrito, os seguintes protocolos eram suportados:
- RDP
- SSH
- Telnet
- VNC
Através do portal web é possível gerir múltiplos utilizadores e ligações, agrupá-los em grupos, configurar restrições de acesso (tempo, número de ligações, etc.) e gravar sessões de vídeo.
O guacamole é frequentemente apresentado como uma solução utilizada em casa para poder aceder ao seu computador com um browser…
Vou focar-me na utilização profissional para configurar uma solução “bastião”/PAM (Privileged Access Management)
Utilizar o Guacamole em um ambiente profissional
O que me interessa aqui é o porquê e como utilizar o Guacamole num ambiente profissional para gerir o acesso aos fornecedores e protegê-los.
Hoje muitas empresas enfrentam o problema da gestão dos prestadores de serviços e principalmente de como lhes dar acesso ao sistema de informação mais seguro possível.
A solução é o Bastion, que é uma solução de software de acesso remoto que irá gerir isso gerindo as contas e limitando o seu acesso e adicionando camadas de diversas seguranças.
O problema das soluções bastião é o seu custo, que pode rapidamente tornar-se um verdadeiro obstáculo à sua adoção.
Sem uma solução forte, as empresas continuam a fazer o que podem e muitas vezes “sujeitas” aos métodos operacionais dos prestadores de serviços:
- Múltiplas soluções de controlo remoto (Teamviewer, AnyDesk, Remote Desktop, VPN, etc.)
- As palavras-passe são frequentemente fornecidas aos fornecedores de serviço
- Sem monitorização de acesso
- Pouco ou nenhum controlo sobre o horário de acesso
- …
O guacamole permitir-nos-á responder parcialmente a estas questões:
- Solução única para ligação ao sistema de informação através de um navegador de Internet
- Como é possível configurar as ligações aos equipamentos (SSH, RDP) indicando os identificadores, deixa de ser necessário comunicá-los, bastando apenas informar os identificadores de acesso ao portal web que devem ser diferentes. Esta solução permite ainda limitar o retorno dos prestadores de serviços noutros equipamentos.
- Todos os acessos são registados no Guacamole, o que facilita o rastreio das atividades dos fornecedores e permite gravar sessões em vídeo.
- É possível configurar agendamentos de acesso nas contas, o que evita certos estouros.
Como funciona o guacamole
Não vou entrar aqui em detalhes sobre o funcionamento do Guacamole, aqui fica um diagrama para terem uma ideia:
O Apache Guacamole consiste em 2 componentes principais:
- Servidor Guacamole: fornece todos os componentes nativos e do lado do servidor necessários para que o Guacamole se ligue a áreas de trabalho remotas.
- Cliente Guacamole: Trata-se de uma aplicação web e cliente HTML 5 que lhe permite ligar-se aos seus servidores/desktops remotos. Este é suportado pelo servidor Tomcat.
Veremos agora como instalar o Guacamole.
Guacamole: Instalação
Para este tutorial utilizei uma nova instalação do Ubuntu Server 20.04.
Neste tutorial, vamos ligar o Guacamole ao MySQL para gerir contas de utilizadores e ligações.
Para começar, vamos instalar os vários pré-requisitos no servidor.
Como é necessário compilar o Guacamole, deve ser instalado o make.
sudo apt install make -y
Por defeito, o make não é instalado no Ubuntu Server versão 20.04
Agora, vamos instalar os pré-requisitos usando o comando abaixo:
sudo apt install gcc g++ libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libvncserver-dev libtelnet-dev libssl-dev libvorbis-dev libwebp-dev libpango1.0-dev libwebsockets-dev libpulse-dev -y
Se quiser mais informações sobre os pré-requisitos, está tudo explicado aqui : Chapter 2. Installing Guacamole natively (apache.org)
Instalando o Guacamole-Server
Agora vamos instalar o primeiro componente do servidor guacamole.
À data em que este tutorial foi escrito, a versão disponível do Guacamole é a 1.3.0
Carregue o ficheiro para o servidor:
wget https://downloads.apache.org/guacamole/1.3.0/source/guacamole-server-1.3.0.tar.gz
Descompacte o ficheiro:
tar xzf guacamole-server-1.3.0.tar.gz
Vá para a pasta que acabou de descompactar:
cd guacamole-server-1.3.0/
Agora vamos verificar se todas as dependências necessárias estão instaladas no servidor utilizando o configure:
sudo ./configure --with-init-dir=/etc/init.d
Mais ajuda para executar o comando : .
/configure --help
Se tudo estiver bem, deverá ter todos os protocolos definidos como yes.
Vamos agora compilar e instalar o Guacamole-Server.
Compilação:
sudo make
Instalação:
sudo make install
Execute agora o comando ldconfig para criar os diferentes links com as bibliotecas.
sudo ldconfig
Ative o serviço:
sudo systemctl enable guacd
Inicie o serviço guacd:
sudo systemctl start guacd
Verifique o estado do serviço (opcional):
systemctl status guacd
A parte do servidor Guacamole está operacional.
Instalando o Guacamole-Client
O cliente que fornece a interface HTML5 e necessita do Tomcat.
No servidor instale o Tomcat utilizando o comando abaixo:
sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user -y
Verifique se o servidor Tomcat está em execução:
systemctl status tomcat9
Crie uma pasta onde iremos armazenar a configuração e o cliente:
sudo mkdir /etc/guacamole
Vamos agora fazer o download do cliente e armazená-lo na pasta que acabamos de criar:
sudo wget https://downloads.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war -O /etc/guacamole/guacamole.war
Necessita de criar um link simbólico para o Tomcat9 WebApps para “activar o uso do cliente”
sudo ln -s /etc/guacamole/guacamole.war /var/lib/tomcat9/webapps/
Para que a aplicação seja totalmente implementada, os serviços devem ser reiniciados:
sudo systemctl restart tomcat9
sudo systemctl restart guacd
A partir daí, deve aparecer a janela de autenticação e acede-se ao url: http://IP_SERVER:8080/guacamole
Guacamole-Server|Cliente: configuração
Agora que os principais serviços estão instalados, precisamos de configurar tudo para que funcionem em conjunto.
Crie as extensões e pastas lib na pasta /etc/guacamole:
sudo mkdir /etc/guacamole/{extensions,lib}
Adicione uma variável de ambiente:
Solução 1 :
sudo echo "GUACAMOLE_HOME=/etc/guacamole" /etc/default/tomcat9
Solução 2 :
echo "GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/default/tomcat
Solução 3 :
Abra o ficheiro /etc/default/tomcat9 com o nano e adicione a variável:
sudo nano /etc/default/tomcat9
No final do ficheiro adicione:
GUACAMOLE_HOME=/etc/guacamole
Numa configuração básica, a partir de agora, a maioria dos tutoriais explica como configurar o cliente com o servidor e como gerir um ficheiro de mapeamento. Como lembrete, na introdução expliquei que iremos utilizar o MySQL/MariaDB
Instale o MariaDB ou o MySQL no servidor:
sudo apt install mariadb-server mariadb-client
Agora precisamos de criar um utilizador e a base de dados, começamos por ligar ao servidor de base de dados:
sudo mysql
Execute as consultas abaixo para, pelo menos, alterar a palavra-passe:
CREATE DATABASE guacamole_db;
CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'P@$sW0rd';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
FLUSH PRIVILEGES;
quit;
Descarregue a extensão mysql para Guacamole:
wget http://apache.mirror.digionline.de/guacamole/1.3.0/binary/guacamole-auth-jdbc-1.3.0.tar.gz
Descompacte o ficheiro:
tar vfx guacamole-auth-jdbc-1.3.0.tar.gz
Adicione as tabelas necessárias à base de dados criada:
cat guacamole-auth-jdbc-1.3.0/mysql/schema/*.sql | sudo mysql guacamole_db
Instalando a extensão:
sudo cp guacamole-auth-jdbc-1.3.0/mysql/guacamole-auth-jdbc-mysql-1.3.0.jar /etc/guacamole/extensions/
Descarregue o driver JDBC:
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.13.tar.gz
Descompacte o ficheiro:
tar xvzf mysql-connector-java-8.0.13.tar.gz
Instale (copie) o driver para o Guacamole:
sudo cp mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar /etc/guacamole/lib/
Agora podemos proceder para configurar o cliente para utilizar a base de dados.
Crie o ficheiro de configuração:
sudo nano /etc/guacamole/guacamole.properties
Adicione a configuração abaixo adaptando ao seu ambiente (mysql-):
# Hostname and Guacamole server port
guacd-hostname: localhost
guacd-port: 4822
# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: P@$sW0rd
A configuração está concluída, ligue a pasta de configuração ao Tomcat:
sudo ln -s /etc/guacamole /usr/share/tomcat9/.guacamole
Reiniciar serviços:
sudo systemctl restart tomcat9
sudo systemctl restart guacd
Opcional: Crie uma pasta guacamole na pasta /var para armazenar as gravações de vídeo
sudo mkdir /var/guacamole
A instalação e configuração básica estão concluídas, vamos agora ver como utilizar o Guacamole.
Usando Guacamole
Como lembrete, para aceder ao Guacamole a partir de um web browser, aceda ao endereço: http://IP_SERVER:8080/guacamole
As credenciais padrão são: guacadmin:guacadmin
Uma vez ligado, chega a uma página que normalmente exibe as últimas ligações utilizadas e as ligações que o utilizador pode utilizar.
Para aceder às definições do Guacamole, clique no nome de utilizador 1 para abrir o menu e clique em Definições 2.
Para começar, explicarei como utilizar o Guacamole de forma lógica e não mostrarei a sua utilização diretamente.
O objetivo, como lembrete, é fornecer acesso a prestadores de serviços externos, pelo que basearei os meus grupos nesta questão.
Criar um grupo de ligação
A primeira coisa que vamos ver é a criação de um grupo de ligação.
No menu de navegação, aceda a Ligação 1.
Neste momento esta vista está vazia, mais tarde iremos encontrar todas as ligações configuradas, bem como os diferentes grupos.
O objetivo será agora criar uma estrutura em árvore para organizar as ligações do fornecedor de serviços.
O que aqui mostro é um exemplo, fica livre para o adaptar às suas necessidades.
Em primeiro lugar, criarei um grupo de Fornecedores, no qual criarei subgrupos que representarão um fornecedor.
Clique no botão Novo Grupo 1.
Nomeie o grupo como 1, a Localização como ROOT 2 e o Tipo como Organizacional 3. Clique no botão Guardar 4 para criar o grupo.
O grupo é criado e visível na lista de ligações, se o desdobrarmos, verificamos que podemos adicionar ligações e subgrupos. Clique em Novo Grupo 1.
Quanto ao grupo raiz, nomeie o grupo 1 (aqui o nome do fornecedor prefixado com GC), o campo Localização já está selecionado e deixe o tipo Organizacional. Clique em Guardar 2.
O grupo é adicionado.
Para ilustrar o tutorial, adicionei um segundo grupo de ligações para simular vários fornecedores.
Criar um grupo de utilizadores
Os grupos de utilizadores permitirão agrupar as contas de utilizadores num grupo para que possa aceder aos seus dados mais facilmente, em vez de os gerir utilizador a utilizador.
Aceda ao menu Grupo 1 e clique em Novo Grupo 2.
Nomeie o grupo 1, marque os grupos de ligação ligados ao fornecedor 2 e clique em Guardar 3.
É imprescindível verificar os grupos pais, caso contrário o acesso às ligações não será possível.
Numa configuração de grupo, é possível adicionar direitos de administração no Guacamole.
O grupo é adicionado.
Também adicionei um segundo grupo.
Adicionar uma nova ligação
Antes de explicar como adicionar uma ligação, é necessário pensar numa ligação como um acesso a um dispositivo com uma configuração específica. Assim, é normal ter várias ligações com parâmetros diferentes para o mesmo servidor dependendo dos acessos e informações que pretende passar ao seu fornecedor de serviços.
Vá ao menu Ligações 1, para adicionar uma ligação, várias possibilidades, clique no botão Nova Ligação 2 ou em Nova Ligação 2 que está ao nível do grupo.
Configurar uma ligação RDP
A primeira ligação que iremos configurar é um acesso RDP a um servidor Windows.
Como existem muitos parâmetros de ligação, vou usá-los em blocos.
Comece por nomear a ligação 1 e selecione o protocolo RDP 2.
Quanto ao campo Localização, ao clicar em Nova Ligação ao nível do grupo, já está selecionado
Na secção LIMITES DE CONCORRÊNCIA, é possível limitar o número de ligações simultâneas, no contexto de uma ligação RDP onde são passados os identificadores, isto não terá impacto porque o mesmo utilizador não poderá abrir a ligação várias vezes.
Ignoramos as partes de BALANCEAMENTO DE CARGA e PARÂMETROS DE PROXY GUACAMOLE (GUACD), que devem ser configuradas em instalações complexas com vários servidores.
Vamos agora focar-nos na parte dos PARÂMETROS, aqui também não vou abordar todas as opções disponíveis, vou deixar-vos navegar por elas e poderão ver que podemos configurar todos os parâmetros do cliente RDP (RDS Gateway, Periféricos de redireccionamento, Performances…) .
Vou manter isto no mínimo e deixá-lo fazer os seus próprios testes, se necessário.
Na secção Rede, indique o nome ou endereço IP do host 1 e a porta 2 (3389) para RDP.
Na secção Autenticação, indicaremos diretamente a conta a utilizar para ligar, o que evita fornecer esta informação ao fornecedor de serviços. Introduza o nome de utilizador 1 e a palavra-passe 2, seleccione Qualquer 3 para o campo Modo de segurança e assinale a caixa Ignorar certificado do servidor 4.
O último item de configuração que vou mostrar é gravar a sessão na secção Gravação de ecrã. No campo Caminho da gravação 1 indique o local onde serão armazenados (/var/guacamole/) e, de seguida, indique o nome da gravação no campo Nome da gravação 2.
Guarde a ligação clicando no botão Guardar 1.
A ligação é adicionada e armazenada no grupo de ligação.
Configurar uma ligação SSH
Da mesma forma que para a ligação SSH, vou limitar-me ao mínimo, para o resto dos parâmetros deixo-vos ver.
Nomeie a ligação 1 e seleccione o protocolo SSH 2.
Na secção Rede, introduza o host 1 (IP ou FQDN) e indique a porta (22) 2.
Na secção Autenticação, indique o par de utilizador e palavra-passe 1 de acordo com a sua política.
Quanto à ligação RDP, na secção Gravação de Ecrã é possível configurar a gravação de vídeo da sessão de ligação.
Para finalizar, clique em Guardar 1.
A ligação SSH é adicionada e está no grupo.
Para o tutorial, adicionei também ligações ao segundo fornecedor, mas desta vez sem indicar os identificadores.
Editar uma ligação
Para modificar uma ligação existente, basta clicar nela e chegará ao mesmo formulário utilizado para adicionar uma ligação. Depois de efetuar as alterações, clique em Guardar.
Atribuir ligações a grupos
Esta operação é obrigatória para que os utilizadores possam ter acesso às ligações.
Esta manipulação fez-me perder a cabeça, porque a herança não é automática.
Volte à gestão do grupo de utilizadores 1 e clique no grupo para o editar 2.
Na secção Ligações 1, verifique as ligações criadas anteriormente 2 e clique em Guardar 3.
Adicionar um utilizador (fornecedor)
Veremos agora como adicionar um utilizador e atribuí-lo diretamente a um grupo.
Aceda a Gestão de Utilizadores 1 e clique no botão Novo Utilizador 2.
Quanto aos outros elementos, vou focar-me nos campos obrigatórios.
Introduza o ID da conta 1 e a palavra-passe 2 (x2), na secção GRUPOS, assinale o(s) grupo(s) a que o utilizador pertence 3 e clique em Guardar < <4> >.
O utilizador é adicionado.
Repita os passos para as outras contas e fornecedores de serviços.
Iniciar sessão/Utilizar com uma conta de fornecedor de serviços
Agora que já temos tudo configurado, só falta testar a nossa solução “bastião”.
Efetue o login com uma conta de fornecedor de serviços:
Se a conta tiver apenas uma ligação configurada, esta será estabelecida diretamente.
Chegámos a uma página onde podemos ver as ligações recentes (actualmente vazias) e abaixo a lista de ligações disponíveis.
Expanda as ligações e clique numa para ligar (começarei pela ligação RDP).
Aguarde enquanto se liga ao servidor…
A ligação é estabelecida via RDP com o servidor sem necessidade de fornecer um identificador.
Dica: Durante uma sessão, é possível navegar entre várias ligações ou voltar à página inicial utilizando um menu “oculto”, utilize a combinação de teclas Ctrl+Alt+Shift para o apresentar.
Para ligação SSH é semelhante:
De volta à página inicial da conta de utilizador, desta vez vemos as últimas ligações utilizadas.
Se estiverem abertas várias sessões em simultâneo, é possível alternar rapidamente clicando no canto inferior esquerdo do ecrã.
Siga as sessões
O interesse de montar uma solução Bastion é também acompanhar as sessões, o Guacamole oferece-nos duas soluções.
Sessões atuais
É possível acompanhar as sessões atuais na administração acedendo ao menu Sessões Ativas.
Nesta visualização pode ver as ligações atuais com a possibilidade de fechar uma sessão e a cereja no topo do bolo é acompanhar em direto e interagir clicando no nome da ligação.
Abaixo está uma captura com o rastreio de visualização ao vivo de uma ligação:
Histórico da sessão
O histórico da sessão está disponível em vários locais:
- No menu Histórico
- Ao editar uma ligação
Gravações de vídeo
Se tiver a gravação de sessão ativada, explicarei como utilizá-la.
Como lembrete, o armazenamento foi configurado na pasta /var/guacamole.
É assim que os ficheiros se parecem:
Por defeito, os ficheiros não são utilizáveis, devem ser convertidos em ficheiros de vídeo através do comando abaixo:
guacenc -s 1280x720 -r 20000000 -f file-name
Uma vez convertido, temos um ficheiro no formato m4v.
Durante 10 minutos tenho um ficheiro de 40 MB
Tudo o que resta é descarregar o ficheiro e visualizá-lo com um player como o VLC.
Conclusão
Agora já sabe como configurar uma solução Bastion/PAM gratuita com o Guacamole.
Neste tutorial, foquei-me no acesso do fornecedor de serviços, mas também é possível utilizá-lo para todos os administradores gerirem o SI e evitar o uso de VPN, Remote Desktop Gateway, etc.
É possível aumentar facilmente o nível de segurança gratuitamente, configurando um sistema de autenticação de dois fatores.
Antes de implementar externamente, recomendo vivamente que configure um proxy reverso Apache2 ou Nginx no servidor para publicar o Guacamole através do protocolo HTTPS.