Créer un frontend HTML 5 RDP / SSH à laide de Guacamole sur Ubuntu 16.04 LTS

introduction

Le but de ce didacticiel est de se débarrasser des connexions SSH publiques et RDP publiques. En plaçant tout cela derrière un client HTML5 très pratique, nous pouvons ajouter une couche de sécurité pour accéder à notre cloud.

Guacamole enregistre également tout accès à distance, de sorte que l'accès non autorisé devient beaucoup plus traçable.

Remarque: Pour chiffrer (option B), nous avons besoin d'un nom de domaine. Si vous ne l' avez pas, vous pouvez sauter cette étape et juste exécuter l' option A .

Étape 1 - Préparation du système

Commencez par faire tourner un VPS dans la zone Vultr souhaitée. Un 1024 MBVPS suffira, car Guacamole n'est pas si exigeant.

Activation de l'adresse IP privée

Commencez par activer le réseau privé sur le VPS. Ceci est bien documenté ici

Préparation du pare-feu

Durcissons d'abord un peu l'image. Et vérifions si l'image qui a été mise à disposition a été ufwactivée.

root@vultr:~# ufw status
Status: inactive

Par défaut, il est désactivé, nous devrons donc ajouter quelques règles.

  • Règle 1: ssh: port TCP 22
  • Règle 2: http: port TCP 8080 (règle de test temporaire pour Guacamole)

Commençons par configurer ces ports.

ufw allow 22/tcp
ufw allow 8080/tcp

Activez ensuite le pare-feu.

ufw enable

Ne vous inquiétez pas si vous recevez un avertissement. Si vous avez ajouté un port 22, vous ne rencontrerez aucun problème.

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

Une fois activé, demandez l'état du pare-feu et nous verrons la configuration de notre port.

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)

Étape 2 - Installation de Guacamole

Installation de toutes les dépendances

Avant de commencer l'installation, nous devons mettre à jour et mettre à niveau le référentiel. Avec des packages tels que Tomcat, qui est basé sur Java, il existe un flux constant de bogues découverts et leurs corrections de bogues associées. C'est généralement une bonne idée de le faire d'abord au lieu de se précipiter directement dans notre installation.

apt-get update
apt-get -y upgrade 

Ensuite, toutes les dépendances. Guacamole en a plusieurs. (Une liste complète des dépendances et de leur fonction peut être trouvée ici ). Continuons en les installant tous.

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

Lorsque le programme d'installation demande un mot de passe root MySQL, fournissez-en un et assurez-vous d'en prendre note. Nous utiliserons ce mot de passe plus tard pour créer la base de données Guacamole.

Téléchargement de Guacamole

Maintenant que nous avons toutes nos dépendances, nous pouvons continuer à télécharger Guacamole. Le guacamole lui-même se présente principalement sous forme source, et non sous forme binaire. D'abord, nous allons déplacer vers le /tmpdossier pour éviter d'encombrer d'autres parties du disque. Téléchargez ensuite tout le code source.

Il y a quatre fichiers source / binaires à télécharger:

  • guacamole-0.9.13-incubating.war: Ceci est l'application Web. Un WARfichier est un package Web compressé fournissant un site Web unique hébergé sur un site Web Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: Ce fichier fournira l' guacdapplication backend . Cela crée les flux via RDP et SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Nous utiliserons une base de données MySQL locale, nous avons donc besoin du JDBCconnecteur associé .
  • mysql-connector-java-5.1.43.tar.gz: Sans pilote de base de données, le connecteur JDBC ne fait rien. Ce fichier est fourni par l'équipe MySQL elle-même.

Remarque: les téléchargements ont été résolus sur le serveur le plus proche .

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

Une fois que nous avons téléchargé tous ces fichiers, extrayez les fichiers 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

Compilation de guacamole

Maintenant que nous avons extrait tout le code source, créons quelques guacamoledossiers, ceux-ci seront utilisés par l'application guacamole et ses dépendances.

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

Tout est prêt pour nos nouveaux binaires Guacamole. Nous pouvons maintenant démarrer le processus de compilation et d'installation. Passez au dossier Guacamole Server extrait.

cd /tmp/guacamole-server-0.9.13-incubating

Configurez l'application pour créer également un init.dfichier pour l'exécuter en tant que service ultérieurement.

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

La commande doit se terminer par un «oui» sur toutes les bibliothèques et tous les protocoles. Sinon, revenez en arrière et vérifiez la commande apt-get pour vous assurer que vous n'avez raté aucun paquet.

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

Ensuite, compilez et installez le serveur Gucamole.

make && make install

Une fois que tout est terminé, exécutez ldconfigpour reconstruire le chemin de recherche des bibliothèques qui ont été ajoutées.

ldconfig

Procédez en utilisant systemctlpour configurer guacd(Guacamole Daemon) pour démarrer au démarrage.

systemctl enable guacd

Les binaires de guacamole sont maintenant installés. Nous allons maintenant préparer l'application Web pour Tomcat.

Commencez par déplacer le warfichier vers le guacamoledossier que nous venons de créer, une fois cela fait, créez un lien logique dans le répertoire tomcat pour pointer vers notre warfichier.

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

Ensuite, nous avons besoin du connecteur mysql et de JDBC. Le pilote JDBC est nécessaire dans le extensionsdossier, le connecteur dans le libdossier.

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/

Configuration de Guacamole et Tomcat

Une fois le connecteur et JDBC en place, nous devons modifier le tocamt8fichier. Ce fichier contient beaucoup de tomcat8paramètres, et dans notre cas, nous devons ajouter la GUACAMOLE_HOMEvariable à la fin du fichier.

nano /etc/default/tomcat8

Ajoutez ce qui suit.

GUACAMOLE_HOME=/etc/guacamole

Création de la base de données

La prochaine étape consiste à créer la base de données. Guacamole stocke sa configuration de connexion dans une base de données, pas à l'intérieur d'un fichier.

Connectez-vous avec le que root passwordvous avez utilisé lors de l'installation.

mysql -u root -p

La première étape consiste à créer une base de données appelée 'guacamole_db'.

create database guacamole_db;

Exécutez ensuite la create usercommande. Cela créera un utilisateur avec un mot de passe mysupersecretpassword, cet utilisateur ne pourra se connecter qu'à partir de localhost.

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

Accordez des CRUDopérations à cet utilisateur pour la base de données guacamole_db.

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

Vider les privilèges et quitter le shell.

flush privileges;
exit

Terminez en ajoutant le schéma Guacamole à notre base de données nouvellement créée.

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

Une fois cela fait, nous devons modifier le guacamole.propertiesfichier. Ce fichier contient notre configuration de serveur MySQL récemment créée.

nano /etc/guacamole/guacamole.properties

Ajoutez les détails de connexion et les informations d'identification MySQL.

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

Terminez en créant un lien symbolique vers le dossier de partage tomcat, car c'est là que le WARfichier recherchera ces propriétés.

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

Test de la configuration

Terminez en redémarrant le tomcat8serveur et démarrez le guacddémon du serveur.

service tomcat8 restart
service guacd start

Vous pouvez vérifier en utilisant la commande status.

service tomcat8 status
service guacd status

Vous pouvez maintenant accéder à votre VPS sur le port 8080

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

Utilisez le nom d'utilisateur guacadminet le même mot de passe guacadmin. Cela vous donnera accès à un serveur Guacamole vide.

Cliquez dans le coin supérieur droit de votre nom d'utilisateur guacadminet sélectionnez Settings. Une fois dans la page des paramètres, allez dans l' Usersonglet et sélectionnez l'utilisateur guacadmin.

Maintenant, changez votre mot de passe pour autre chose ou créez un nouvel utilisateur administrateur et supprimez celui par défaut guacadmin.

Étape 3 - Réglage fin et nettoyage

Ce sont les étapes finales: le nettoyage après avoir terminé.

Supprimez le code source téléchargé et les fichiers binaires du /tmpdossier.

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

Faites également de l'application Web Guacamole celle par défaut. Dans l'écosystème tomcat, l'application qui obtient le ROOTdossier est celle qui est lancée par défaut lorsque vous accédez au site Web.

Supprimez l'ancien ROOTespace réservé.

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

Et faites un lien symbolique pour que le serveur guacamole soit celui- ROOTlà.

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

Cela nécessite un redémarrage de Tomcat.

service tomcat8 restart

Étape 4 (option A) - Exécution sur HTTP uniquement

  • Si vous n'utilisez pas les certificats Let's Encrypt et n'utilisez pas de DNS, exécutez les actions de cette étape et passez ensuite directement à l'étape 6. - Option A
  • Si vous souhaitez créer un site plus sécurisé et que votre DNS est prêt, vous pouvez ignorer cela et passer directement à l'option B (étape 5).

Modifiez le tomcat8/server.xmlfichier et changez le port du connecteur.

nano /etc/tomcat8/server.xml

Recherchez le fichier Connector port.

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

Et remplacez 8080par 80.

Par défaut, tomcat n'autorise pas la liaison des ports ci-dessous 1024. Pour activer cela, nous devons dire à tomcat8 de créer des liaisons authentifiées.

Modifiez le defaultfichier de tomcat8 et décommentez la AUTHBINDligne et utilisez l'optionyes

nano /etc/default/tomcat8

AUTHBIND=yes

Une fois cela fait, intall authbind.

apt-get install authbind

Configurez-le pour que le port 80puisse être revendiqué par tomcat8.

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

Autorisez le port à 80travers le pare-feu et supprimez la règle pour 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Redémarrez Tomcat.

service tomcat8 restart

Ça y est, maintenant Guacamole devrait fonctionner sur le port 80.

Étape 5 (option B) - Configuration de Nginx

Installation et configuration de Nginx

Tomcat n'est vraiment pas l'une des applications les meilleures et les plus robustes à utiliser certbot. Heureusement, Nginx l'est. Nous allons simplement envoyer un proxy tomcat à Nginx. Il utilise la fonctionnalité prête à l'emploi de certbot au prix de sacrifier un peu de RAM.

apt-get install nginx

Une fois installé, modifiez la configuration par défaut.

nano /etc/nginx/sites-available/default

Supprimez tous les exemples de configuration et ajoutez la configuration suivante.

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

Cela créera un proxy pour le site Web fonctionnant sur 8080. Redémarrez Nginx et activez-le au démarrage.

systemctl restart nginx
systemctl enable nginx

Vérifiez si tout fonctionne.

systemctl status nginx

Désactivez le port de test 8080et autorisez le trafic sur le port 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Installation de Let's Encrypt

Avant de pouvoir l'utiliser certbot, nous devons ajouter le correct ppaau système contenant nos packages certbot.

add-apt-repository ppa:certbot/certbot

Appuyez sur " ENTER" pour accepter le changement de configuration.

Mettez aptà jour pour rassembler les nouveaux packages.

apt-get update

Enfin, installez le module Nginx pour l'attribution des certificats.

apt-get -y install python-certbot-nginx

Configurer Nginx pour utiliser des certificats

Configurez le pare-feu pour autoriser HTTPS.

ufw allow 443/tcp

Avant de pouvoir demander de nouveaux certificats, nous avons besoin d'un nom DNS.

nano /etc/nginx/sites-available/default

Ajoutez le server_nameparamètre suivant .

server_name rdp.example.com;

Modifiez la configuration pour refléter ce nouveau paramètre.

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

Vérifiez si tout fonctionne et redémarrez Nginx.

nginx -t
service nginx restart

Demandez maintenant un certificat avec certbot.

certbot --nginx -d rdp.example.com

Fournissez votre e-mail et acceptez les questions posées par l'installateur. (Vous pouvez choisir " No" en toute sécurité pour partager votre e-mail.) Certbot demandera automatiquement ce qu'il doit faire HTTPS. Nous utiliserons l' option 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

La dernière chose que nous allons faire est de mettre à jour les DHparamètres. Ce sont, par défaut, un peu faibles pour les normes 2017.

Créez-en de nouveaux.

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

Ensuite, ajoutez-les au site par défaut dans Nginx.

nano /etc/nginx/sites-available/default

Ajoutez-les à la configuration du serveur.

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

Vérifiez les erreurs.

nginx -t

Appliquez les modifications en redémarrant le serveur.

service nginx restart

Nettoyer l'ancienne 8080règle

ufw delete allow 8080/tcp

Remarque: si vous devez recevoir une "502 Bad Gateway", vous devrez redémarrer tomcat8 .

service tomcat8 restart

Renouvellement automatique des certificats

Les certificats Let's Encrypt nécessitent un renouvellement. Nous pouvons créer un travail cron pour cela. Commencez par éditer le fichier crontab.

crontab -e

Ajoutez la ligne suivante.

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

Cela vérifiera à 2h00 si des certificats nécessitent un renouvellement et les renouvellera s'ils le font.

Étape 6 - Tout tester

Accédez à votre serveur Guacamole (soit http://<ip>/ou https://rdp.example.com)).

Pour ce test, vous aurez besoin de deux autres instances: une machine virtuelle Linux et une autre Windows Server 2012 R2 avec une adresse IP privée activée sur les deux.

Ajout de la connexion Windows RDP

Cliquez sur le " username" dans le coin supérieur droit et allez à " Settings". Allez ensuite dans " Connections" et sélectionnez " New Connection".

Remplissez les paramètres suivants (vous pouvez laisser les autres par défaut).

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>

Appuyez sur " save" et revenez à l'écran d'accueil. Vous pouvez maintenant cliquer sur la Windows Server 2012 R2connexion " " et elle sera RDP vers cette machine.

Ajout de la connexion Linux SSH

Appuyez sur " Ctrl+Shift+Alt". Cela fera apparaître le menu sur le côté. Ici, vous pouvez déconnecter ou effectuer d'autres tâches administratives pour Guacamole.

Cliquez usernamesur le haut du menu et allez à " Settings". Allez ensuite dans l' Connectionsonglet " " et sélectionnez " New Connection".

Remplissez les paramètres suivants (vous pouvez laisser les autres par défaut).

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)

Appuyez sur " save" et revenez à l'écran d'accueil. Vous pouvez maintenant cliquer sur cette connexion nouvellement créée et être connecté à votre serveur Linux via SSH.

Conclusion

Vous disposez maintenant d'une passerelle Web RDP / SSH HTML5. Vous pouvez maintenant pare-feu l'accès public RDP et SSH de votre plate-forme et accéder à votre environnement à partir de n'importe quel navigateur moderne. Pour plus d'informations sur ce que Guacamole peut offrir, voici une superbe vidéo montrant toutes les possibilités de la plateforme ici .



Leave a Comment

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

Les attaques de ransomware sont en augmentation, mais l'IA peut-elle aider à lutter contre le dernier virus informatique ? L'IA est-elle la réponse ? Lisez ici, sachez que l'IA est un boone ou un fléau

ReactOS : est-ce lavenir de Windows ?

ReactOS : est-ce lavenir de Windows ?

ReactOS, un système d'exploitation open source et gratuit est ici avec la dernière version. Cela peut-il suffire aux besoins des utilisateurs de Windows modernes et faire tomber Microsoft ? Découvrons-en plus sur cet ancien style, mais une expérience de système d'exploitation plus récente.

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Whatsapp a finalement lancé l'application de bureau pour les utilisateurs Mac et Windows. Vous pouvez désormais accéder facilement à Whatsapp depuis Windows ou Mac. Disponible pour Windows 8+ et Mac OS 10.9+

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Lisez ceci pour savoir comment l'intelligence artificielle devient populaire parmi les petites entreprises et comment elle augmente les probabilités de les faire grandir et de donner à leurs concurrents un avantage.

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

Récemment, Apple a publié macOS Catalina 10.15.4, une mise à jour supplémentaire pour résoudre les problèmes, mais il semble que la mise à jour cause davantage de problèmes, ce qui entraîne le bridage des machines mac. Lisez cet article pour en savoir plus

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux d'extraction de données de Big Data

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Notre ordinateur stocke toutes les données d'une manière organisée connue sous le nom de système de fichiers de journalisation. C'est une méthode efficace qui permet à l'ordinateur de rechercher et d'afficher des fichiers dès que vous appuyez sur la recherche.https://wethegeek.com/?p=94116&preview=true

Singularité technologique : un futur lointain de la civilisation humaine ?

Singularité technologique : un futur lointain de la civilisation humaine ?

Alors que la science évolue à un rythme rapide, prenant le pas sur une grande partie de nos efforts, les risques de nous soumettre à une Singularité inexplicable augmentent également. Lisez, ce que la singularité pourrait signifier pour nous.

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques d'analyse des mégadonnées : partie 1

Limpact de lintelligence artificielle dans les soins de santé 2021

Limpact de lintelligence artificielle dans les soins de santé 2021

L'IA dans le domaine de la santé a fait de grands progrès au cours des dernières décennies. Ainsi, l'avenir de l'IA dans les soins de santé continue de croître de jour en jour.