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 MB
VPS 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é ufw
activé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 /tmp
dossier 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 WAR
fichier 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' guacd
application 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 JDBC
connecteur 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 guacamole
dossiers, 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.d
fichier 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 ldconfig
pour reconstruire le chemin de recherche des bibliothèques qui ont été ajoutées.
ldconfig
Procédez en utilisant systemctl
pour 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 war
fichier vers le guacamole
dossier que nous venons de créer, une fois cela fait, créez un lien logique dans le répertoire tomcat pour pointer vers notre war
fichier.
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 extensions
dossier, le connecteur dans le lib
dossier.
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 tocamt8
fichier. Ce fichier contient beaucoup de tomcat8
paramètres, et dans notre cas, nous devons ajouter la GUACAMOLE_HOME
variable à 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 password
vous 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 user
commande. 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 CRUD
opé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.properties
fichier. 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 WAR
fichier recherchera ces propriétés.
ln -s /etc/guacamole /usr/share/tomcat8/.guacamole
Test de la configuration
Terminez en redémarrant le tomcat8
serveur et démarrez le guacd
dé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 guacadmin
et 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 guacadmin
et sélectionnez Settings
. Une fois dans la page des paramètres, allez dans l' Users
onglet 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 /tmp
dossier.
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 ROOT
dossier est celle qui est lancée par défaut lorsque vous accédez au site Web.
Supprimez l'ancien ROOT
espace réservé.
rm -rf /var/lib/tomcat8/webapps/ROOT
Et faites un lien symbolique pour que le serveur guacamole soit celui- ROOT
là.
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.xml
fichier 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 8080
par 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 default
fichier de tomcat8 et décommentez la AUTHBIND
ligne 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 80
puisse être revendiqué par tomcat8.
touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat8 /etc/authbind/byport/80
Autorisez le port à 80
travers 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 8080
et 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 ppa
au 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_name
paramè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 DH
paramè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 8080
rè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 R2
connexion " " 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 username
sur le haut du menu et allez à " Settings
". Allez ensuite dans l' Connections
onglet " " 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 .