Cree un frontend HTML 5 RDP / SSH usando Guacamole en Ubuntu 16.04 LTS

Introducción

El objetivo de este tutorial es deshacerse de las conexiones SSH públicas y RDP públicas. Al colocar todo esto detrás de un cliente HTML5 muy conveniente, podemos agregar una capa de seguridad para acceder a nuestra nube.

Guacamole también registra cualquier acceso remoto, por lo que el acceso no autorizado se vuelve mucho más rastreable.

Nota: Para cifrar Let's (opción B) necesitamos un nombre de dominio. Si no tiene uno, puede omitir este paso y sólo hay que ejecutar la opción A .

Paso 1 - Preparando el sistema

Comience girando un VPS en su zona Vultr deseada. Un 1024 MBVPS será suficiente, ya que Guacamole no es tan exigente.

Habilitar la IP privada

Comience habilitando la red privada en el VPS. Esto está bien documentado aquí

Preparando el firewall

Primero endurezcamos un poco la imagen. Y verifiquemos si la imagen aprovisionada se ha ufwhabilitado.

root@vultr:~# ufw status
Status: inactive

Por defecto está deshabilitado, por lo que necesitaremos agregar algunas reglas.

  • Regla 1: ssh: puerto TCP 22
  • Regla 2: http: puerto TCP 8080 (regla de prueba temporal para Guacamole)

Comencemos con la configuración de estos puertos.

ufw allow 22/tcp
ufw allow 8080/tcp

Luego habilite el firewall.

ufw enable

No se preocupe si recibe una advertencia. Si agregó puerto 22, no enfrentará ningún 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

Una vez habilitado, solicite el estado del firewall y veremos la configuración de nuestro puerto.

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)

Paso 2 - Instalando Guacamole

Instalar todas las dependencias

Antes de comenzar a instalar, necesitamos actualizar y actualizar el repositorio. Con paquetes como Tomcat, que está basado en Java, hay un flujo constante de errores descubiertos y sus correcciones de errores asociadas. Por lo general, es una buena idea hacer esto primero en lugar de apresurarse directamente a nuestra instalación.

apt-get update
apt-get -y upgrade 

El siguiente es todas las dependencias. Guacamole tiene bastantes de ellos. (Puede encontrar una lista completa de dependencias y su función aquí ). Continuemos instalándolos todos.

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

Cuando el instalador solicite una contraseña raíz de MySQL, proporcione una y asegúrese de anotarla. Usaremos esta contraseña más adelante para crear la base de datos Guacamole.

Descargando Guacamole

Ahora que tenemos todas nuestras dependencias, podemos continuar con la descarga de Guacamole. El guacamole en sí viene principalmente en forma de fuente, y no en binario. Primero nos moveremos a la /tmpcarpeta para evitar saturar otras partes del disco. Luego descargue todo el código fuente.

Hay cuatro archivos fuente / binarios para descargar:

  • guacamole-0.9.13-incubating.war: Esta es la aplicación web. Un WARarchivo es un paquete web comprimido que proporciona un único sitio web alojado en un sitio web de Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: Este archivo proporcionará la guacdaplicación de fondo. Esto crea las secuencias a través de RDP y SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Utilizaremos una base de datos MySQL local, por lo que necesitamos el JDBCconector asociado .
  • mysql-connector-java-5.1.43.tar.gz: Sin un controlador de base de datos, el conector JDBC no hace nada. Este archivo lo proporciona el equipo de MySQL.

Nota: las descargas se resolvieron en el servidor más cercano .

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

Una vez que hayamos descargado todos estos archivos, extraiga los 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

Ahora que hemos extraído todo el código fuente, hagamos algunas guacamolecarpetas, que serán utilizadas por la aplicación guacamole y sus dependencias.

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

Todo está listo para nuestros nuevos binarios de Guacamole. Ahora podemos comenzar el proceso de compilación e instalación. Vaya a la carpeta extraída del Servidor Guacamole.

cd /tmp/guacamole-server-0.9.13-incubating

Configure la aplicación para crear también un init.darchivo para ejecutarlo como un servicio más adelante.

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

El comando debe terminar con un 'sí' en todas las bibliotecas y protocolos. Si no, regrese y verifique el comando apt-get para asegurarse de que no se haya perdido ningún paquete.

------------------------------------------------
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.

A continuación, compile e instale el servidor Gucamole.

make && make install

Una vez hecho todo esto, ejecute ldconfigpara reconstruir la ruta de búsqueda para las bibliotecas que se han agregado.

ldconfig

Continúe usando la systemctlconfiguración guacd(Guacamole Daemon) para iniciar el arranque.

systemctl enable guacd

Los binarios de guacamole ya están instalados. Ahora prepararemos la aplicación web para Tomcat.

Comience moviendo el wararchivo a la guacamolecarpeta que acabamos de crear, una vez hecho esto, cree un enlace lógico en el directorio tomcat para apuntar a nuestro wararchivo.

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

Entonces necesitamos el conector mysql y JDBC. Se necesita el controlador JDBC en la extensionscarpeta, el conector en la libcarpeta.

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 y Tomcat

Una vez que el conector y JDBC estén en su lugar, necesitamos editar el tocamt8archivo. Este archivo contiene muchas tomcat8configuraciones, y en nuestro caso necesitamos agregar la GUACAMOLE_HOMEvariable al final del archivo.

nano /etc/default/tomcat8

Añadir con lo siguiente.

GUACAMOLE_HOME=/etc/guacamole

Creando la base de datos

Lo siguiente es crear la base de datos. Guacamole almacena su configuración de conexión en una base de datos, no dentro de un archivo.

Inicie sesión con el root passwordque utilizó durante la instalación.

mysql -u root -p

El primer paso es crear una base de datos llamada 'guacamole_db'.

create database guacamole_db;

Luego ejecuta el create usercomando. Esto creará un usuario con una contraseña mysupersecretpassword, este usuario solo podrá conectarse localhost.

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

Otorgue CRUDoperaciones a este usuario para la base de datos guacamole_db.

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

Vacíe los privilegios y salga del shell.

flush privileges;
exit

Termine agregando el esquema Guacamole a nuestra base de datos recién creada.

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

Una vez hecho esto, necesitamos editar el guacamole.propertiesarchivo. Este archivo contiene nuestra configuración de servidor MySQL recientemente creada.

nano /etc/guacamole/guacamole.properties

Agregue los detalles y las credenciales de conexión de MySQL.

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

Termine creando un enlace simbólico a la carpeta compartida de tomcat, ya que aquí es donde el WARarchivo buscará estas propiedades.

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

Probar la configuración

Termine reiniciando el tomcat8servidor e inicie el guacddemonio del servidor.

service tomcat8 restart
service guacd start

Puede verificar mediante el comando de estado.

service tomcat8 status
service guacd status

Ahora puedes navegar a tu VPS en el puerto 8080

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

Use el nombre de usuario guacadminy la misma contraseña guacadmin. Esto le otorgará acceso a un servidor Guacamole vacío.

Haga clic en la esquina superior derecha de su nombre de usuario guacadminy seleccione Settings. Una vez que esté en la página de configuración, vaya a la Userspestaña y seleccione el usuario guacadmin.

Ahora cambie su contraseña a otra o cree un nuevo usuario administrador y elimine la predeterminada guacadmin.

Paso 3 - Ajuste fino y limpieza

Estos son los pasos finales: limpiar después de que haya terminado.

Elimine el código fuente descargado y los binarios de la /tmpcarpeta.

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

Además, haga que la aplicación web Guacamole sea la predeterminada. En el ecosistema tomcat, la aplicación que obtiene la ROOTcarpeta es la que se inicia de manera predeterminada cuando accede al sitio web.

Eliminar el antiguo ROOTmarcador de posición.

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

Y haga un enlace simbólico para que sea el servidor guacamole ROOT.

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

Esto requiere un reinicio de tomcat.

service tomcat8 restart

Paso 4 (opción A): solo se ejecuta en HTTP

  • Si no va a utilizar los certificados Let's Encrypt y no utilizará un DNS, ejecute las acciones en este paso y luego vaya directamente al Paso 6. - Opción A
  • Si desea crear un sitio más seguro y tiene un DNS listo, puede omitir esto e ir directamente a la opción B (Paso 5).

Edite el tomcat8/server.xmlarchivo y cambie el puerto del conector.

nano /etc/tomcat8/server.xml

Busque el Connector port.

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

Y reemplazar 8080con 80.

De forma predeterminada, tomcat no permite el enlace de puertos a continuación 1024. Para habilitar esto, debemos decirle a tomcat8 que cree enlaces autenticados.

Edite el defaultarchivo de tomcat8 y descomente la AUTHBINDlínea y use la opciónyes

nano /etc/default/tomcat8

AUTHBIND=yes

Una vez hecho esto, intall authbind.

apt-get install authbind

Configúrelo para que 80tomcat8 pueda reclamar el puerto.

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

Permita el puerto a 80través del firewall y elimine la regla para 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Reiniciar tomcat.

service tomcat8 restart

Eso es todo, ahora Guacamole debería estar funcionando en el puerto 80.

Paso 5 (opción B) - Configuración de Nginx

Instalación y configuración de Nginx

Tomcat realmente no es una de las mejores y más robustas aplicaciones para usar certbot. Por suerte Nginx es. Solo haremos un proxy de tomcat a Nginx. Utiliza la funcionalidad lista para usar de certbot a costa de sacrificar un poco de RAM.

apt-get install nginx

Una vez instalado, edite la configuración predeterminada.

nano /etc/nginx/sites-available/default

Elimine todas las configuraciones de ejemplo y agregue la siguiente configuración.

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;
  }
}

Esto creará un proxy para el sitio web que se ejecuta en 8080. Reinicie Nginx y actívelo en el arranque.

systemctl restart nginx
systemctl enable nginx

Comprueba si todo funciona.

systemctl status nginx

Deshabilite el puerto de prueba 8080y permita el tráfico en el puerto 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Instalar Let's Encrypt

Antes de que podamos usar certbot, necesitamos agregar el correcto ppaal sistema que contiene nuestros paquetes certbot.

add-apt-repository ppa:certbot/certbot

Presione " ENTER" para aceptar el cambio de configuración.

Actualice aptpara reunir los nuevos paquetes.

apt-get update

Finalmente, instale el módulo Nginx para asignar los certificados.

apt-get -y install python-certbot-nginx

Configure Nginx para usar certificados

Configure el firewall para permitir HTTPS.

ufw allow 443/tcp

Antes de que podamos solicitar nuevos certificados, necesitamos un nombre DNS.

nano /etc/nginx/sites-available/default

Agregue la siguiente server_nameconfiguración.

server_name rdp.example.com;

Cambie la configuración para reflejar esta nueva configuración.

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;
  }
}

Compruebe si todo funciona y reinicie Nginx.

nginx -t
service nginx restart

Ahora solicite un certificado con certbot.

certbot --nginx -d rdp.example.com

Proporcione su correo electrónico y acepte las preguntas formuladas por el instalador. (Puede elegir " No" compartir su correo electrónico de forma segura). Certbot le preguntará automáticamente qué necesita hacer HTTPS. Vamos a utilizar la opción 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

Lo último que haremos será actualizar los DHparámetros. Estos son, por defecto, un poco débiles para los estándares de 2017.

Crea algunos nuevos.

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

A continuación, agréguelos al sitio predeterminado en Nginx.

nano /etc/nginx/sites-available/default

Agréguelos a la configuración del 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;
  }
}

Verificar errores.

nginx -t

Aplique los cambios reiniciando el servidor.

service nginx restart

Limpiar la vieja 8080regla

ufw delete allow 8080/tcp

Nota: si recibe un "502 Bad Gateway", necesitará reiniciar tomcat8 .

service tomcat8 restart

Renovación automática de certificados

Encriptemos los certificados requieren renovación. Podemos crear un trabajo cron para esto. Comience editando el crontab.

crontab -e

Agrega la siguiente línea.

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

Esto verificará a las 2:00 a.m. si algún certificado requiere una renovación y los renovará si lo hacen.

Paso 6: probarlo todo

Vaya a su servidor de Guacamole (ya sea http://<ip>/o https://rdp.example.com)).

Para esta prueba, necesitará dos instancias más: una máquina virtual Linux y otra Windows Server 2012 R2 con una IP privada habilitada en ambas.

Agregar la conexión RDP de Windows

Haz clic en " username" en la esquina superior derecha y ve a " Settings". Luego vaya a " Connections" y seleccione " New Connection".

Complete la siguiente configuración (puede dejar los otros valores predeterminados).

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>

Presione " save" y regrese a la pantalla de inicio. Ahora puede hacer clic en la Windows Server 2012 R2conexión " " y se ejecutará RDP en esta máquina.

Agregar la conexión SSH de Linux

Presione " Ctrl+Shift+Alt". Esto abrirá el menú al costado. Aquí puede desconectar o realizar otras tareas administrativas para Guacamole.

Haz clic usernameen la parte superior del menú y ve a " Settings". Luego vaya a la Connectionspestaña " " y seleccione " New Connection".

Complete la siguiente configuración (puede dejar los otros valores predeterminados).

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)

Presione " save" y regrese a la pantalla de inicio. Ahora puede hacer clic en esta conexión recién creada y conectarse a su servidor Linux a través de SSH.

Conclusión

Ahora tiene una puerta de enlace web RDP / SSH HTML5. Ahora puede firewall el acceso público RDP y SSH de su plataforma y acceder a su entorno desde cualquier navegador moderno. Para obtener más información sobre lo que Guacamole puede ofrecer, hay un excelente video que muestra todas las posibilidades de la plataforma aquí .



Leave a Comment

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

Los ataques de ransomware van en aumento, pero ¿puede la IA ayudar a lidiar con el último virus informático? ¿Es la IA la respuesta? Lea aquí, sepa que la IA es una bendición o una perdición

ReactOS: ¿Es este el futuro de Windows?

ReactOS: ¿Es este el futuro de Windows?

ReactOS, un sistema operativo de código abierto y gratuito, está aquí con la última versión. ¿Puede satisfacer las necesidades de los usuarios de Windows de hoy en día y acabar con Microsoft? Averigüemos más sobre este estilo antiguo, pero una experiencia de sistema operativo más nueva.

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Whatsapp finalmente lanzó la aplicación de escritorio para usuarios de Mac y Windows. Ahora puede acceder a Whatsapp desde Windows o Mac fácilmente. Disponible para Windows 8+ y Mac OS 10.9+

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

Lea esto para saber cómo la Inteligencia Artificial se está volviendo popular entre las empresas de pequeña escala y cómo está aumentando las probabilidades de hacerlas crecer y dar ventaja a sus competidores.

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

Recientemente, Apple lanzó macOS Catalina 10.15.4, una actualización complementaria para solucionar problemas, pero parece que la actualización está causando más problemas que conducen al bloqueo de las máquinas Mac. Lee este artículo para obtener más información

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

¿Qué es un sistema de archivos de diario y cómo funciona?

¿Qué es un sistema de archivos de diario y cómo funciona?

Nuestra computadora almacena todos los datos de una manera organizada conocida como sistema de archivos de diario. Es un método eficiente que permite a la computadora buscar y mostrar archivos tan pronto como presiona buscar.

Singularidad tecnológica: ¿un futuro lejano de la civilización humana?

Singularidad tecnológica: ¿un futuro lejano de la civilización humana?

A medida que la ciencia evoluciona a un ritmo rápido, asumiendo muchos de nuestros esfuerzos, también aumentan los riesgos de someternos a una singularidad inexplicable. Lea, lo que la singularidad podría significar para nosotros.

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

El impacto de la inteligencia artificial en la atención médica 2021

El impacto de la inteligencia artificial en la atención médica 2021

La IA en la salud ha dado grandes pasos desde las últimas décadas. Por tanto, el futuro de la IA en el sector sanitario sigue creciendo día a día.