Aprenda a instalar um Jump Server com Apache Guacamole um gateway de desktop remoto Web


Introdução: vivemos em uma época onde “segurança” deixou de ser uma palavra qualquer, citada e questionada por alguns profissionais a diversos gestores, para se tornar algo realmente em evidência nas mídias. Segurança é um quesito importantíssimo para a continuidade de um negócio e muito ampla em diversos aspectos.
Aqui abordaremos um conceito e uma ferramenta que serão muito úteis para uma Organização. Vamos começar com algumas perguntas simples?

  • Você necessita de acessar remotamente ativos dentro da empresa em que trabalha?
  • Costuma deixar seus ativos acessíveis publicamente só para conectar de qualquer lugar?
  • Você restringe esse acesso por pessoas e/ou grupos?
  • Quando alguém com privilégios é demitido. Você tem que ir em diversos sistemas e equipamentos rapidamente, para remover os acessos?
  • Você sente falta de um local centralizado e único, que contenha a definição de seus sistemas para trabalhar remotamente?

Se a resposta para essas perguntas foi um “SIM”, então esse artigo pode lhe ajudar a melhorar a forma como você acessa determinados ativos em sua rede.

Primeiramente vamos a um conceito que muitos acham que VPN (Virtual Private Network) é a forma mais segura de acessar uma Intranet e assim prestar suporte remotamente de qualquer lugar. Bem, não queria destruir seu conceito mas; a VPN sem determinados cuidados com o seu sistema pessoal, de nada vai te proteger de um incidente que possa parar sua empresa. Imagine uma situação em que você esteja conectado remotamente via VPN corporativa, acessando um compartilhamento de arquivos da empresa e em algum momento durante o trabalho você adquiriu um bem sucedido ransomware. Esse malware causará grande prejuízo para a empresa e para a sua reputação, mesmo estando usando a tal VPN.

Outros preferem usar recursos como os Jump Servers. Equipamentos com sistemas, por exemplo Windows, rodando serviços como RDP (Remote Desktop Protocol), ou Anydesk, ou Teamviewer, ou qualquer outro equivalente para permitir o acesso local e a partir dele conectar em outros sistemas dentro da empresa. Nada contra o sistema da Microsoft ou qualquer produto citado mas não me sinto confortável em deixá-los públicos na Internet. Lembrando que não existem sistemas 100% seguros. Em algum momento falhas podem surgir e alguém pode explorá-las. Pense em uma vulnerabilidade Zero Day.

Então o que venho sugerir nesse artigo é que juntem as duas soluções VPN e Jump Server mas de uma maneira, que na minha opinião, seria mais segura que ambas as soluções acima, construídas isoladamente.

Continuem usando a VPN mas também pensando na segurança dos sistemas pessoais de quem utiliza a VPN, para trabalhar remotamente. Não usem VPN PPTP em suas soluções corporativas, é insegura, obsoleta e não funciona bem com CGNAT, em sistemas que não possuem suporte ao ALG (Application Layer Gateway) PPTP.

Ao invés de deixarem públicos seus Jump Servers, mantenha-os com IPs privados RFC1918 e acessíveis somente através da VPN. Assim chegaremos a dois níveis de autenticação pelo menos. Crie um ou mais servidores Jump e crie ACLs nos equipamentos e sistemas que só permitam acesso dos IPs privados dos Jump Servers.

Dessa forma vai conseguir resolver boa parte daquelas perguntas que fiz, mas ainda não é o objetivo principal deste artigo. Esse artigo vai focar na ferramenta Apache Guacamole que é uma aplicação para construirmos um Jump Server mais inteligente e seguro.

Mas o que seria o Apache Guacamole? Ele é um clientless remote desktop gateway, ou seja, você não precisa de um programa cliente instalado no seu desktop de trabalho ou pessoal, para acessar sistemas que usem os protocolos: RDP, VNC e SSH. Isso é feito através de um browser apenas e usando HTML5.

O Guacamole é uma aplicação Java que roda embaixo do Apache Tomcat. É dividido em duas partes, o server e os clients que fazem a conexão propriamente dita usando RDP, VNC ou SSH, de acordo com o tipo de acesso. Possui suporte a diversas bases de dados como MySQL, MariaDB, PostgreSQL e também LDAP.

Sua arquitetura funciona assim:

Requisitos para o nosso artigo

Debian 11 (Bullseye) 64 bits. Instalação mínima. Sistema deve restringir o acesso apenas via VPN e/ou Rede de Gerência da empresa (utilize regras de firewall iptables ou nftables para essa tarefa).
– VM com 2 cores ou mais. Dependerá da quantidade de acessos simultâneos.
– 2Gb de ram. Sugiro 4Gb.
– 10G de disco. Dependerá do crescimento da base de dados, se for local.
– Interface de rede com IP privado e liberado para acesso aos sistemas remotos.

:: Instalação do MariaDB 10.5 ::

Por padrão o pacote MariaDB no Debian usa unix_socket para autenticar o login do usuário, o que basicamente significa que você pode usar o nome de usuário e a senha do sistema operacional para efetuar login no console do MariaDB.
Assim, você pode logar diretamente sem fornecer a senha root do MariaDB, para aumentar a seguraça vamos definir uma senha para o usuário root do MariaDB, não esqueça de alterar ALTERE_3ST4_SENHA pela sua senha.

Ainda logado no MariaDB vamos criar nossa base de dados para o Guacamole, não esqueça de alterar S3NHA_GUACAMOL3_US3R por sua senha.

Apague seus rastros, em /root/.mysql_history temos um histórico com todos os comandos dado no terminal do MariaDB, então não é legal deixar lá em texto puro a senha que setamos!

:: Instalação Java JDK ::

Precisaremos configurar a variável de ambiente JAVA_HOME. No final do arquivo /etc/environment adicione o seguinte parâmetro JAVA_HOME=”/usr/lib/jvm/java-11-openjdk-amd64″

Em seguida carregamos o /etc/environment:

:: Instalação Tomcat::

Feito isso vamos criar um usuário de acesso ao Tomcat Web Application Manager. Vamos editar o arquivo /etc/tomcat9/tomcat-users.xml e no final antes de adicionar adicionar as 2 linhas, não esqueça de alterar S3NHA_FORT3:

Arquivo /etc/tomcat9/tomcat-users.xml sem os comentários ficará:

:: Instalação Guacamole::

Os pacotes não criam os diretórios de configuração do Guacamole, então faremos conforme abaixo. Neles ficarão as extensions e o connector e que juntos integrarão o Java às bases de dados para funcionar a nossa autenticação e administração do Jump Server.

Crie um link simbólico do connector java do MariaDB no Guacamole:

Vamos baixar e descompactar o pacote de extensão, para criação das tabelas e autenticação na base de dados. Detalhe que a versão tem que ser a mesma do pacote guacd que instalamos acima. Nesse caso é a versão 1.3.0 que vem no repositório do Debian 11.

Mova a extensão de autenticação via MySQL, para o lugar correto:

Populando a base de dados guacamole com as tabelas e algumas informações iniciais:

Informe a senha do usuário MariaDB root no nosso ex.: “ALTERE_3ST4_SENHA”

Se desejar certificar que as tabelas foram criadas acesse o terminal do MariaDB com o usuário e senha do guacamole

Enter password: S3NHA_GUACAMOL3_US3R
Use o comando show tables; para ver as tabelas.

Criando o arquivo /etc/guacamole/guacamole.properties com as configurações de porta de acesso e os dados de conexão ao MariaDB.

Não esqueça de alterar S3NHA_GUACAMOL3_US3R

OBS: Embora MariaDB e MySQL tenham algumas coisas em comum (MariaDB é um fork do Mysql), mas nesse caso eles são diferentes aqui. Em muitos artigos espalhados pela Internet se fala no pacote libmysql-java mas este não existe mais no Debian 11. No lugar dele usamos o libmariadb-java.

Baixando e habilitando o Guacamole Web Application

Se parássemos por aqui, já teríamos o Guacamole rodando e funcional em HTTP, mas vamos adicionar uma camada de criptografia nisso. Vamos habilitar o SSL no Apache Tomcat:

Vamos criar uma chave e uma senha com o próximo comando. Só seguir as instruções e preencher as perguntas:

Concluído precisaremos movê-la para o local certo e com as devidas permissões:

Em /etc/tomcat9/server.xml:

Troque isso:

Por: (Não esqueça de alterar S3NHA_USADA_K3YTOOL)

Para acessarmos nosso Jump Server:
https://[servidor]:8080/guacamole/

O usuário e senha são guacadmin. Crie um novo usuário com permissões de administrador e em seguida remova este usuário padrão.

Autor: Marcelo Gondim
Brasil Peering Fórum: https://wiki.brasilpeeringforum.org/w/Usuário:Gondim
Linkedin: https://www.linkedin.com/in/marcelo-gondim-sysadmin/
Telegram: @Marcelo_Gondim

Dicas extra do Remontti

Para complementar, tem algumas coisas que eu acho que podem serem aplicadas ao nosso Guacamole apresentado pelo nosso parceiro Marcelo Gondim

– Nginx fazendo Proxy reverso para acessar a aplicação com um subdomínio.
– Utilização do Let’s Encrypt para um certificado válido.
– Port knocking com Nftables, para não deixar totalmente exposto.

Proxy Nginx

Como a aplicação será acessada apenas pelo Nginx podemos deixar o tomcat9 ouvindo apenas em localhost, se você segui o procedimento anterio qual criou o certificado privado agora ele não é mais necessarios vamos desfazer para o que era antes porem vamos colocar o connector ouvindo apenas 127.0.0.1.

Altere para:

Reinicie o tomcat para que o mesmo rode apenas em localhost, assim não será mais possivel acesso pelo seu IP:8080

Instalaremos o nginx e vamos remover a assinatura do nginx onde ele exibe a versão do mesmo.

Irei alterar direto no arquivo default do nginx as configurações, se achar melhor você pode criar um novo arquivo.

Adcione: (Altere server_name para seu subdomínio)

Let’s Encrypt

Para gerar o certificado use o comando:

Não esqueça de colocar no seu cron para ele renovar o certificado, pois a cada 90 ele expira. Neste exemplo todo dia primeiro tento renovar.

Exemplo:

Port knocking

Nftables já vem por padrão no Debian 11 então basta habilitá-lo. Temos um tutorial do se Port knocking

O arquivo de configuração padrão do nftables fica em /etc/nftables.conf, então vamos edita-lo:

Neste exemplo vou estar liberando as portas 80 e 443 após “batermos” nas portas 52341, 28001, 60541, 30951, e por 2h (7200s) após bater nas portas teremos acesso as mesmas, caso fique mais que tempo definido será necessário bater novamente.

Reinicie o nftables

Neste tutorial de Port knocking tenho um modelinho web qual você pode usar, existe alguns clientes para celular Android, iPhone e Windows.

Agora deixamos mais seguro nosso servidor.

Exemplo de como adicionar um Windows Server ao seu guacamole

No canto superior direito, clique no nome de usuário e em seguida Settings.

Click em Connections em seguida New Connection

EDIT CONNECTION
Name: Insira um nome de identificação para a conexão
Location: Use o ROOT padrão se não houver requisitos específicos
Protocol: RDP

PARAMETERS
Network
Hostname: IP o Domínio do seu Servidor
Port: Podemos deixá-lo vazio se usar a porta padrão 3389, ou informe a porta alterada do RDP
Authentication
Username: Usuário
Password: Senha
Domain: Deixe em branco ou use o nome de domínio local do dispositivo Windows
Ignore server certificate: Marque esta opção se o certificado for autoassinado

Role para baixo até o final da página e clique no botão Save.

A interface é bem intuitiva, acredito que não terá dificuldades, você pode criar grupos e usuarios e restrigir o acesso apenas a alguns servidores.

Espero que tenha gostado! E mais uma vez deixo meu agradecimento ao parceio Marcelo Gondim. Para trocar uma ideia chega lá no telegram @remontticombr

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Referências:
https://wiki.debian.org/Guacamole
https://computingforgeeks.com/install-and-use-guacamole-remote-desktop-on-debian/
https://wiki.brasilpeeringforum.org/w/Configurando_um_gateway_de_acesso_remoto_com_Guacamole
https://receitasdecodigo.com.br/web/configurando-ssl-no-tomcat-8

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

11 Resultados

  1. Ádson Richardson disse:

    Para quem efetuou os passos iniciais e tentou testar a página de login antes mesmo de gerar os certificados, mas não abre. Consegui resolver inserindo em /etc/guacamole/guacamole.properties o paramentro: mysql-ssl-mode: disabled

  2. andre disse:

    nao consigo fazer rdp, só ssh.
    comfigurei o meu computador para rdp e testei com outro e funciona mas o guacamole da-me sempre erro, fiz igual ao tutorial alguem me pode ajudar?

  3. Saulo dos Santos Mathias disse:

    Remontti sempre trazendo novidade e agregação de conhecimento e valores..

    Obrigado!!

  4. Isaac disse:

    Pessoal, alguém conseguiu converter a gravação?
    Aqui está dando esse erro:
    # guacenc -s 1920×1080 -r 20000000 -f srvetebd001jag_s
    bash: guacenc: command not found

  5. Marcos Alan disse:

    Bom Dia, segui o procedimento tudo certinho e na hora de logar pela primeira vez na https://[servidor]:8080/guacamole/ com o login e senha guacadmin, vem a mensagem que o login e senha estão incorretas. Alguém pode me ajudar?

  6. Carlos disse:

    Olá,

    Segui o seu tutorial e não consigo abrir a URL https://[servidor]:8080/guacamole/

  7. Marcelo Gondim disse:

    Opa o que baixei foi o TightVNC. https://www.tightvnc.com/download.php

  8. Marcelo Gondim disse:

    Buenas Ricardo,

    Tentei instalar o RealVNC aqui pra testar e pra te dizer a verdade tive problemas inclusive pra fazer ele rodar no Windows. Não subia a porta 5900 por nada e aí realmente no Guacamole não conectava via VNC. Abri o shell do Windows e chequei com o netstat -an|more
    Baixei um outro o TinyVNC, instalei e esse levantou a porta 5900 e consegui acessar normalmente pelo Guacamole.

  9. Ricardo disse:

    cara primeiramente parabéns como sempre impecável nas instruções, só que pra mim não foi de jeito nem um no VNC eu estava com o realvnc 5.2
    e testei com o 6 e nada o que pode ser ?
    obrigado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *