Criar um front end RDP / SSH em HTML 5 usando o Guacamole no Ubuntu 16.04 LTS

Introdução

O objetivo deste tutorial é livrar-se das conexões SSH e RDP públicas. Ao colocar tudo isso atrás de um cliente HTML5 muito conveniente, podemos adicionar uma camada de segurança para acessar nossa nuvem.

O Guacamole também registra qualquer acesso remoto, para que o acesso não autorizado se torne muito mais rastreável.

Nota: Para Vamos criptografar (opção B), precisamos de um nome de domínio. Se você não tiver um, você pode pular esta etapa e apenas executar a opção A .

Etapa 1 - Preparando o sistema

Comece girando um VPS na sua zona Vultr desejada. Um 1024 MBVPS será suficiente, pois Guacamole não é tão exigente.

Ativando o IP privado

Comece ativando a rede privada no VPS. Isso está bem documentado aqui

Preparando o firewall

Primeiro vamos endurecer um pouco a imagem. E vamos verificar se a imagem que foi provisionada foi ufwativada.

root@vultr:~# ufw status
Status: inactive

Por padrão, está desativado, portanto, precisaremos adicionar algumas regras.

  • Regra 1: ssh: porta TCP 22
  • Regra 2: http: porta TCP 8080 (regra de teste temporária para Guacamole)

Vamos começar com a configuração dessas portas.

ufw allow 22/tcp
ufw allow 8080/tcp

Em seguida, ative o firewall.

ufw enable

Não se preocupe se você receber um aviso. Se você adicionou a porta 22, não enfrentará nenhum problema.

root@vultr:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Uma vez ativado, solicite o status do firewall e veremos a configuração da porta.

ufw status

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
8080/tcp (v6)              ALLOW       Anywhere (v6)

Etapa 2 - Instalando o Guacamole

Instalando todas as dependências

Antes de começarmos a instalar, precisamos atualizar e atualizar o repositório. Com pacotes como o Tomcatque é baseado em Java, há um fluxo constante de bugs descobertos e suas correções associadas. Geralmente, é uma boa ideia fazer isso primeiro, em vez de entrar diretamente em nossa instalação.

apt-get update
apt-get -y upgrade 

A seguir estão todas as dependências. Guacamole tem alguns deles. (Uma lista completa de dependências e suas funções podem ser encontradas aqui ). Vamos continuar instalando todos eles.

apt-get -y install build-essential tomcat8 freerdp libcairo2-dev libjpeg-turbo8-dev libpng12-dev libossp-uuid-dev libavcodec-dev libavutil-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvorbis-dev libwebp-dev mysql-server mysql-client mysql-common mysql-utilities libswscale-dev libvncserver-dev libpulse-dev libssl-dev

Quando o instalador solicitar uma senha root do MySQL, forneça uma e certifique-se de anotá-la. Usaremos essa senha posteriormente para criar o banco de dados Guacamole.

Baixando Guacamole

Agora que temos todas as nossas dependências, podemos continuar com o download do Guacamole. O próprio guacamole vem principalmente na forma de fonte e não em binário. Primeiro, iremos para a /tmppasta para evitar bagunçar outras partes do disco. Faça o download de todo o código-fonte.

Existem quatro arquivos de origem / binários para baixar:

  • guacamole-0.9.13-incubating.war: Este é o aplicativo da web. Um WARarquivo é um pacote da Web compactado que fornece um único site hospedado em um site Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: Este arquivo fornecerá o guacdaplicativo back-end . Isso cria os fluxos por meio de RDP e SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Usaremos um banco de dados MySQL local, portanto, precisamos do JDBCconector associado .
  • mysql-connector-java-5.1.43.tar.gz: Sem um driver de banco de dados, o conector JDBC não faz nada. Este arquivo é fornecido pela própria equipe do MySQL.

Nota: downloads resolvidos para o servidor mais próximo .

cd /tmp
wget http://apache.belnet.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.43.tar.gz

Depois de baixar todos esses arquivos, extraia os arquivos tar.gz.

tar -xzvf guacamole-server-0.9.13-incubating.tar.gz
tar -xzvf guacamole-auth-jdbc-0.9.13-incubating.tar.gz
tar -xzvf mysql-connector-java-5.1.43.tar.gz

Compilando Guacamole

Agora que extraímos todo o código-fonte, vamos criar algumas guacamolepastas, que serão usadas pelo aplicativo guacamole e suas dependências.

mkdir -p /etc/guacamole/lib
mkdir -p /etc/guacamole/extensions

Está tudo pronto para os nossos novos binários Guacamole. Agora podemos iniciar o processo de compilação e instalação. Vá para a pasta extraída do Guacamole Server.

cd /tmp/guacamole-server-0.9.13-incubating

Configure o aplicativo para também criar um init.darquivo para executá-lo como um serviço posteriormente.

./configure --with-init-dir=/etc/init.d

O comando deve terminar com um 'sim' em todas as bibliotecas e protocolos. Caso contrário, volte e verifique o comando apt-get para garantir que você não perdeu nenhum pacote.

------------------------------------------------
guacamole-server version 0.9.13-incubating
------------------------------------------------

   Library status:

     freerdp ............. yes
     pango ............... yes
     libavcodec .......... yes
     libavutil ........... yes
     libssh2 ............. yes
     libssl .............. yes
     libswscale .......... yes
     libtelnet ........... yes
     libVNCServer ........ yes
     libvorbis ........... yes
     libpulse ............ yes
     libwebp ............. yes

   Protocol support:

      RDP ....... yes
      SSH ....... yes
      Telnet .... yes
      VNC ....... yes

   Services / tools:

      guacd ...... yes
      guacenc .... yes

   Init scripts: /etc/init.d

Type "make" to compile guacamole-server.

Em seguida, compile e instale o servidor Gucamole.

make && make install

Feito isso, execute ldconfiga reconstrução do caminho de pesquisa das bibliotecas que foram adicionadas.

ldconfig

Prossiga usando o systemctlsetup guacd(Guacamole Daemon) para iniciar na inicialização.

systemctl enable guacd

Os binários Guacamole agora estão instalados. Agora vamos preparar o aplicativo Web para o Tomcat.

Comece movendo o wararquivo para a guacamolepasta que acabamos de criar, uma vez feito isso, crie um link lógico no diretório tomcat para apontar para o nosso wararquivo.

cd /tmp
mv guacamole-0.9.13-incubating.war /etc/guacamole/guacamole.war
ln -s /etc/guacamole/guacamole.war /var/lib/tomcat8/webapps/

Então precisamos do conector mysql e JDBC. O driver JDBC é necessário na extensionspasta, o conector na libpasta.

cp mysql-connector-java-5.1.43/mysql-connector-java-5.1.43-bin.jar /etc/guacamole/lib/
cp guacamole-auth-jdbc-0.9.13-incubating/mysql/guacamole-auth-jdbc-mysql-0.9.13-incubating.jar /etc/guacamole/extensions/

Configurando Guacamole e Tomcat

Depois que o conector e o JDBC estiverem instalados, precisamos editar o tocamt8arquivo. Este arquivo contém muitas tomcat8configurações e, no nosso caso, precisamos adicionar a GUACAMOLE_HOMEvariável no final do arquivo.

nano /etc/default/tomcat8

Anexe com o seguinte.

GUACAMOLE_HOME=/etc/guacamole

Criando o banco de dados

O próximo passo é criar o banco de dados. O Guacamole armazena sua configuração de conexão em um banco de dados, não dentro de um arquivo.

Entre com o que root passwordvocê usou durante a instalação.

mysql -u root -p

O primeiro passo é criar um banco de dados chamado 'guacamole_db'.

create database guacamole_db;

Em seguida, execute o create usercomando Isso criará um usuário com uma senha mysupersecretpassword, da qual ele poderá se conectar apenas localhost.

create user 'guacamole_user'@'localhost' identified by "mysupersecretpassword";

Conceda CRUDoperações a este usuário para o banco de dados guacamole_db.

GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';

Liberar privilégios e sair do shell.

flush privileges;
exit

Finalize adicionando o esquema Guacamole ao nosso banco de dados recém-criado.

cat /tmp/guacamole-auth-jdbc-0.9.13-incubating/mysql/schema/*.sql | mysql -u root -p guacamole_db

Feito isso, precisamos editar o guacamole.propertiesarquivo. Este arquivo contém nossa configuração de servidor MySQL criada recentemente.

nano /etc/guacamole/guacamole.properties

Anexe os detalhes e credenciais da conexão MySQL.

mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: mysupersecretpassword

Conclua criando um link simbólico para a pasta de compartilhamento do tomcat, pois é onde o WARarquivo pesquisará essas propriedades.

ln -s /etc/guacamole /usr/share/tomcat8/.guacamole

Testando a instalação

Termine reiniciando o tomcat8servidor e inicie o guacddaemon do servidor.

service tomcat8 restart
service guacd start

Você pode verificar usando o comando status.

service tomcat8 status
service guacd status

Agora você pode navegar para o seu VPS na porta 8080

http://<yourpublicip>:8080/guacamole/

Use o nome de usuário guacadmine a mesma senha guacadmin. Isso concederá acesso a um servidor Guacamole vazio.

Clique no canto superior direito do seu nome de usuário guacadmine selecione Settings. Quando estiver na página de configurações, vá para a Usersguia e selecione o usuário guacadmin.

Agora altere sua senha para outra coisa ou crie um novo usuário administrador e exclua a senha padrão guacadmin.

Etapa 3 - Ajuste fino e limpeza

Estes são os passos finais: limpar depois de terminar.

Exclua o código-fonte e os binários baixados da /tmppasta.

rm -rf /tmp/guacamole-*
rm -rf /tmp/mysql-connector-java-*

Além disso, torne o aplicativo da web Guacamole o padrão. No ecossistema tomcat, o aplicativo que obtém a ROOTpasta é aquele iniciado por padrão quando você acessa o site.

Exclua o ROOTespaço reservado antigo .

rm -rf /var/lib/tomcat8/webapps/ROOT

E faça um link simbólico para o servidor guacamole ser o ROOTúnico.

ln -s /var/lib/tomcat8/webapps/guacamole /var/lib/tomcat8/webapps/ROOT

Isso requer uma reinicialização do tomcat.

service tomcat8 restart

Etapa 4 (opção A) - Executando apenas em HTTP

  • Se você não usar certificados Let's Encrypt e não usar DNS, execute as ações nesta etapa e depois vá diretamente para a Etapa 6. - Opção A
  • Se você deseja criar um site mais seguro e possuir um DNS pronto, pode pular isso e ir direto para a opção B (Etapa 5).

Edite o tomcat8/server.xmlarquivo e altere a porta do conector.

nano /etc/tomcat8/server.xml

Procure o Connector port.

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />

E substitua 8080por 80.

Por padrão, o tomcat não permite a ligação de portas abaixo 1024. Para habilitar isso, precisamos informar ao tomcat8 para criar ligações autenticadas.

Edite o defaultarquivo de tomcat8 e remova o comentário da AUTHBINDlinha e use a opçãoyes

nano /etc/default/tomcat8

AUTHBIND=yes

Feito isso, instale authbind.

apt-get install authbind

Configure-o para que a porta 80possa ser reivindicada pelo tomcat8.

touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat8 /etc/authbind/byport/80

Permita a porta 80através do firewall e exclua a regra para 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Reinicie o tomcat.

service tomcat8 restart

É isso, agora o Guacamole deve estar rodando no porto 80.

Etapa 5 (opção B) - Configurando o Nginx

Instalação e configuração do Nginx

O Tomcat realmente não é um dos aplicativos melhores e mais robustos para usar certbot. Felizmente Nginx é. Vamos apenas fazer proxy do tomcat para o Nginx. Ele usa a funcionalidade pronta para uso do certbot ao custo de sacrificar um pouco de RAM.

apt-get install nginx

Depois de instalado, edite a configuração padrão.

nano /etc/nginx/sites-available/default

Exclua todas as configurações de exemplo e adicione a seguinte configuração.

server {      
  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Isso criará um proxy para o site em execução em 8080. Reinicie o Nginx e ative-o na inicialização.

systemctl restart nginx
systemctl enable nginx

Verifique se está tudo funcionando.

systemctl status nginx

Desative a porta de teste 8080e permita o tráfego na porta 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Instalando o Let's Encrypt

Antes de podermos usar certbot, precisamos adicionar o correto ppaao sistema que contém nossos pacotes certbot.

add-apt-repository ppa:certbot/certbot

Pressione " ENTER" para aceitar a alteração na configuração.

Atualize aptpara reunir os novos pacotes.

apt-get update

Por fim, instale o módulo Nginx para atribuir os certificados.

apt-get -y install python-certbot-nginx

Configure o Nginx para usar certificados

Configure o firewall para permitir HTTPS.

ufw allow 443/tcp

Antes de podermos solicitar novos certificados, precisamos de um nome DNS.

nano /etc/nginx/sites-available/default

Adicione a seguinte server_nameconfiguração.

server_name rdp.example.com;

Altere a configuração para refletir essa nova configuração.

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Verifique se tudo está funcionando e reinicie o Nginx.

nginx -t
service nginx restart

Agora solicite um certificado com certbot.

certbot --nginx -d rdp.example.com

Forneça seu email e concorde com as perguntas feitas pelo instalador. (Você pode escolher " No" com segurança para compartilhar seu email.) O Certbot perguntará automaticamente o que ele precisa fazer HTTPS. Nós estaremos usando a opção 2: redirect to HTTPS.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

A última coisa que faremos é atualizar os DHparâmetros. Estes são, por padrão, um pouco fracos para os padrões de 2017.

Crie alguns novos.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Em seguida, adicione-os ao site padrão no Nginx.

nano /etc/nginx/sites-available/default

Adicione-os à configuração do servidor.

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Verifique se há erros.

nginx -t

Aplique as alterações reiniciando o servidor.

service nginx restart

Limpar a 8080regra antiga

ufw delete allow 8080/tcp

Nota: se você receber um "502 Bad Gateway", precisará reiniciar o tomcat8 .

service tomcat8 restart

Renovar certificados automaticamente

Vamos criptografar certificados exigem renovação. Podemos criar um trabalho cron para isso. Comece editando o crontab.

crontab -e

Adicione a seguinte linha.

00 2 * * * /usr/bin/certbot renew --quiet

Isso verificará às 2:00 da manhã se algum certificado exige uma renovação e, se necessário, será renovado.

Etapa 6 - Testando tudo

Vá para o servidor Guacamole ( http://<ip>/ou https://rdp.example.com)).

Para este teste, você precisará de mais duas instâncias: uma VM Linux e outra Windows Server 2012 R2 com um IP privado ativado em ambas.

Adicionando a conexão RDP do Windows

Clique no " username" no canto superior direito e vá para " Settings". Então vá para " Connections" e selecione " New Connection".

Preencha as seguintes configurações (você pode deixar os outros como padrão).

Name: Windows Server 2012 R2
Location: ROOT
Protocol: RDP
Maximum number of connections: 1
Maximum number of connections per user: 1
Parameters > Hostname: 10.99.0.12
Parameters > Port: 3389
Username: Administrator
Password: <password> (provided by Vultr)
Security mode: Any
Ignore server certificate: <checked>

Pressione " save" e volte para a tela inicial. Agora você pode clicar na Windows Server 2012 R2conexão " " e ela fará o RDP para esta máquina.

Adicionando a conexão SSH do Linux

Pressione " Ctrl+Shift+Alt". Isso exibirá o menu ao lado. Aqui você pode desconectar ou executar outras tarefas administrativas do Guacamole.

Clique usernamena parte superior do menu e vá para " Settings". Então vá para a Connectionsaba " " e selecione " New Connection".

Preencha as seguintes configurações (você pode deixar os outros como padrão).

Name: Linux
Location: ROOT
Protocol: SSH
Maximum number of connections: 5
Maximum number of connections per user: 2
Parameters > Hostname: 10.99.0.11
Parameters > Port: 22
Username: root
Password: <password> (provided by Vultr)

Pressione " save" e volte para a tela inicial. Agora você pode clicar nesta conexão recém-criada e estar conectado ao seu servidor Linux via SSH.

Conclusão

Agora você tem um gateway RDP / SSH HTML5 da web. Agora você pode firewall do acesso público RDP e SSH da sua plataforma e acessar seu ambiente a partir de qualquer navegador moderno. Para mais informações sobre o que o Guacamole pode oferecer, há um ótimo vídeo mostrando todas as possibilidades da plataforma aqui .



Leave a Comment

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.