Crea un frontend HTML 5 RDP / SSH usando Guacamole su Ubuntu 16.04 LTS

introduzione

L'obiettivo di questo tutorial è quello di sbarazzarsi delle connessioni SSH pubbliche e RDP pubbliche. Mettendo tutto questo dietro un client HTML5 molto conveniente, possiamo aggiungere un livello di sicurezza per accedere al nostro cloud.

Guacamole registra anche qualsiasi accesso remoto, quindi l'accesso non autorizzato diventa molto più tracciabile.

Nota: per Let's encrypt (opzione B) abbiamo bisogno di un nome di dominio. Se non ne avete uno, è possibile saltare questo passaggio e basta eseguire l'opzione A .

Passaggio 1: preparazione del sistema

Inizia ruotando un VPS nella zona Vultr desiderata. Un 1024 MBVPS sarà sufficiente, poiché Guacamole non è così esigente.

Abilitazione dell'IP privato

Inizia abilitando la rete privata sul VPS. Questo è ben documentato qui

Preparare il firewall

Prima induriamo un po 'l'immagine. E controlliamo se l'immagine che è stata fornita è stata ufwabilitata.

root@vultr:~# ufw status
Status: inactive

Per impostazione predefinita è disabilitato, quindi dovremo aggiungere alcune regole.

  • Regola 1: ssh: porta TCP 22
  • Regola 2: http: porta TCP 8080 (regola di prova temporanea per Guacamole)

Cominciamo con la configurazione di queste porte.

ufw allow 22/tcp
ufw allow 8080/tcp

Quindi abilitare il firewall.

ufw enable

Non preoccuparti se ricevi un avviso. Se hai aggiunto la porta 22, non dovrai affrontare alcun 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 volta abilitato, richiedi lo stato del firewall e vedremo la nostra configurazione delle porte.

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)

Passaggio 2: installazione di Guacamole

Installare tutte le dipendenze

Prima di iniziare l'installazione è necessario aggiornare e aggiornare il repository. Con pacchetti come Tomcat, basato su Java, esiste un flusso costante di bug rilevati e le relative correzioni associate. Di solito è una buona idea farlo prima invece di correre direttamente nella nostra installazione.

apt-get update
apt-get -y upgrade 

Il prossimo è tutte le dipendenze. Guacamole ne ha parecchi. (Un elenco completo delle dipendenze e delle relative funzioni è disponibile qui ). Continuiamo installandoli tutti.

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 il programma di installazione richiede una password di root di MySQL, fornirne una e assicurarsi di prenderne nota. Questa password verrà utilizzata in seguito per creare il database Guacamole.

Download di Guacamole

Ora che abbiamo tutte le nostre dipendenze, possiamo continuare con il download di Guacamole. Lo stesso Guacamole si presenta principalmente in forma sorgente e non binaria. Innanzitutto ci sposteremo nella /tmpcartella per evitare di ingombrare altre parti del disco. Quindi scarica tutto il codice sorgente.

Esistono quattro file sorgente / binari da scaricare:

  • guacamole-0.9.13-incubating.war: Questa è l'applicazione web. Un WARfile è un pacchetto Web compresso che fornisce un singolo sito Web ospitato su un sito Web Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: Questo file fornirà l' guacdapplicazione di backend . Questo crea i flussi attraverso RDP e SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Utilizzeremo un database MySQL locale, quindi abbiamo bisogno del JDBCconnettore associato .
  • mysql-connector-java-5.1.43.tar.gz: Senza un driver di database il connettore JDBC non fa nulla. Questo file è fornito dal team MySQL stesso.

Nota: download risolti sul server più vicino .

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

Dopo aver scaricato tutti questi file, estrarre i file 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

Compilazione del guacamole

Ora che abbiamo estratto tutto il codice sorgente, creiamo alcune guacamolecartelle, che verranno utilizzate dall'applicazione guacamole e dalle sue dipendenze.

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

Tutto è pronto per i nostri nuovi binari di Guacamole. Ora possiamo iniziare il processo di compilazione e installazione. Passa alla cartella Server Guacamole estratta.

cd /tmp/guacamole-server-0.9.13-incubating

Configurare l'applicazione per creare anche un init.dfile per eseguirlo come servizio in un secondo momento.

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

Il comando dovrebbe terminare con un 'sì' su tutte le librerie e protocolli. Altrimenti, torna indietro e controlla il comando apt-get per assicurarti di non perdere nessun pacchetto.

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

Successivamente compila e installa il server Gucamole.

make && make install

Una volta fatto tutto ciò, esegui ldconfigper ricostruire il percorso di ricerca per le librerie che sono state aggiunte.

ldconfig

Procedere utilizzando il systemctlprogramma di installazione guacd(Guacamole Daemon) per l'avvio all'avvio.

systemctl enable guacd

I binari di Guacamole sono ora installati. Ora prepareremo l'applicazione Web per Tomcat.

Inizia spostando il warfile nella guacamolecartella che abbiamo appena creato, una volta fatto crea un collegamento logico nella directory tomcat per puntare al nostro warfile.

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

Quindi abbiamo bisogno del connettore mysql e JDBC. Il driver JDBC è necessario nella extensionscartella, il connettore nella libcartella.

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/

Configurazione di Guacamole e Tomcat

Una volta che il connettore e JDBC sono a posto, dobbiamo modificare il tocamt8file. Questo file contiene molte tomcat8impostazioni e nel nostro caso dobbiamo aggiungere la GUACAMOLE_HOMEvariabile alla fine del file.

nano /etc/default/tomcat8

Aggiungi con il seguente.

GUACAMOLE_HOME=/etc/guacamole

Creazione del database

Il prossimo è la creazione del database. Guacamole memorizza la sua configurazione di connessione in un database, non all'interno di un file.

Accedi con quello che root passwordhai usato durante l'installazione.

mysql -u root -p

Il primo passo è creare un database chiamato 'guacamole_db'.

create database guacamole_db;

Quindi eseguire il create usercomando. Questo creerà un utente con una password mysupersecretpassword, questo utente potrà connettersi solo da localhost.

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

Concedere le CRUDoperazioni a questo utente per il database guacamole_db.

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

Svuota i privilegi ed esci dalla shell.

flush privileges;
exit

Termina aggiungendo lo schema di Guacamole al nostro database appena creato.

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

Fatto ciò, dobbiamo modificare il guacamole.propertiesfile. Questo file contiene la nostra configurazione del server MySQL creata di recente.

nano /etc/guacamole/guacamole.properties

Aggiungi i dettagli e le credenziali della connessione MySQL.

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

Termina creando un collegamento simbolico alla cartella di condivisione Tomcat, poiché è qui che il WARfile cercherà queste proprietà.

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

Testare l'installazione

Termina riavviando il tomcat8server e avvia il guacddemone del server.

service tomcat8 restart
service guacd start

È possibile verificare utilizzando il comando status.

service tomcat8 status
service guacd status

Ora puoi navigare sul tuo VPS sulla porta 8080

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

Usa il nome utente guacadmine la stessa password guacadmin. Ciò ti garantirà l'accesso a un server Guacamole vuoto.

Fai clic nell'angolo in alto a destra del tuo nome utente guacadmine seleziona Settings. Una volta che sei nella pagina delle impostazioni vai alla Usersscheda e seleziona l'utente guacadmin.

Ora cambia la tua password in qualcos'altro o crea un nuovo utente amministratore ed elimina quello predefinito guacadmin.

Passaggio 3: messa a punto e pulizia

Questi sono i passaggi finali: ripulire dopo aver finito.

Elimina il codice sorgente e i file binari scaricati dalla /tmpcartella.

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

Inoltre, rendere l'applicazione Web Guacamole quella predefinita. Nell'ecosistema Tomcat, l'applicazione che ottiene la ROOTcartella è quella che viene avviata per impostazione predefinita quando si accede al sito Web.

Elimina il vecchio ROOTsegnaposto.

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

E crea un collegamento simbolico affinché il server guacamole sia ROOTquello.

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

Ciò richiede un riavvio di Tomcat.

service tomcat8 restart

Passaggio 4 (opzione A) - In esecuzione solo su HTTP

  • Se non si intende utilizzare Let's Encrypt certificati e non utilizzare un DNS, eseguire le azioni in questo passaggio e successivamente passare direttamente al Passaggio 6. - Opzione A
  • Se vuoi creare un sito più sicuro e hai un DNS pronto, puoi saltare questo e andare direttamente all'opzione B (Passaggio 5).

Modifica il tomcat8/server.xmlfile e cambia la porta del connettore.

nano /etc/tomcat8/server.xml

Cerca il Connector port.

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

E sostituisci 8080con 80.

Per impostazione predefinita, tomcat non consente l'associazione delle porte di seguito 1024. Per abilitare ciò, dobbiamo dire a tomcat8 di creare collegamenti autenticati.

Modifica il defaultfile di tomcat8 e decommenta la AUTHBINDlinea e usa l'opzioneyes

nano /etc/default/tomcat8

AUTHBIND=yes

Fatto ciò, intall authbind.

apt-get install authbind

Configuralo in modo che la porta 80possa essere rivendicata da tomcat8.

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

Consenti porta 80attraverso il firewall ed elimina la regola per 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Riavvia Tomcat.

service tomcat8 restart

Ecco fatto, ora Guacamole dovrebbe essere in esecuzione sul porto 80.

Passaggio 5 (opzione B) - Impostazione di Nginx

Installazione e configurazione di Nginx

Tomcat non è davvero una delle applicazioni migliori e più robuste da utilizzare certbot. Fortunatamente Nginx lo è. Faremo solo delega di Tomcat a Nginx. Utilizza la funzionalità out of the box di certbot al costo di sacrificare un po 'di RAM.

apt-get install nginx

Una volta installato, modifica la configurazione predefinita.

nano /etc/nginx/sites-available/default

Elimina tutte le configurazioni di esempio e aggiungi la seguente configurazione.

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

Ciò creerà un proxy per il sito Web in esecuzione su 8080. Riavvia Nginx e abilitalo all'avvio.

systemctl restart nginx
systemctl enable nginx

Controlla se tutto funziona.

systemctl status nginx

Disabilitare la porta di prova 8080e consentire il traffico sulla porta 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Installazione Let's Encrypt

Prima di poter usare certbot, dobbiamo aggiungere il corretto ppaal sistema contenente i nostri pacchetti certbot.

add-apt-repository ppa:certbot/certbot

Premere " ENTER" per accettare la modifica della configurazione.

Aggiorna aptper raccogliere i nuovi pacchetti.

apt-get update

Infine, installa il modulo Nginx per l'assegnazione dei certificati.

apt-get -y install python-certbot-nginx

Configurare Nginx per utilizzare i certificati

Configura il firewall per consentire HTTPS.

ufw allow 443/tcp

Prima di poter richiedere nuovi certificati, abbiamo bisogno di un nome DNS.

nano /etc/nginx/sites-available/default

Aggiungi la seguente server_nameimpostazione.

server_name rdp.example.com;

Modificare la configurazione per riflettere questa nuova impostazione.

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

Controlla se tutto funziona e riavvia Nginx.

nginx -t
service nginx restart

Ora richiedi un certificato con certbot.

certbot --nginx -d rdp.example.com

Fornisci la tua e-mail e accetta le domande poste dall'installatore. (Puoi tranquillamente scegliere " No" per condividere la tua email.) Certbot ti chiederà automaticamente di cosa ha bisogno HTTPS. Useremo l'opzione 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

L'ultima cosa che faremo è aggiornare i DHparametri. Questi sono, per impostazione predefinita, un po 'deboli per gli standard del 2017.

Creane di nuovi.

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

Successivamente, aggiungili al sito predefinito in Nginx.

nano /etc/nginx/sites-available/default

Aggiungili alla configurazione del server.

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

Controlla errori.

nginx -t

Applicare le modifiche riavviando il server.

service nginx restart

Pulisci la vecchia 8080regola

ufw delete allow 8080/tcp

Nota: se dovessi ricevere un "502 Bad Gateway" dovrai riavviare tomcat8 .

service tomcat8 restart

Certificati di rinnovo automatico

Let's Encrypt certificati richiedono il rinnovo. Per questo possiamo creare un lavoro cron. Inizia modificando il crontab.

crontab -e

Aggiungi la seguente riga.

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

Questo verificherà alle 2:00 AM se alcuni certificati richiedono un rinnovo e li rinnoverà se lo fanno.

Passaggio 6: testare tutto

Vai al tuo server Guacamole (o http://<ip>/o https://rdp.example.com)).

Per questo test, avrai bisogno di altre due istanze: una VM Linux e un'altra Windows Server 2012 R2 con un IP privato abilitato su entrambi.

Aggiunta della connessione RDP di Windows

Fai clic su " username" nell'angolo in alto a destra e vai a " Settings". Quindi vai a " Connections" e seleziona " New Connection".

Compila le seguenti impostazioni (puoi lasciare le altre predefinite).

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>

Premi " save" e torna alla schermata principale. Ora puoi fare clic sulla " Windows Server 2012 R2" connessione e sarà RDP a questa macchina.

Aggiunta della connessione SSH Linux

Premi " Ctrl+Shift+Alt". Questo farà apparire il menu sul lato. Qui puoi disconnettere o eseguire altre attività amministrative per Guacamole.

Fai clic usernamesu in alto nel menu e vai a " Settings". Quindi vai alla Connectionsscheda " " e seleziona " New Connection".

Compila le seguenti impostazioni (puoi lasciare le altre predefinite).

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)

Premi " save" e torna alla schermata principale. Ora puoi fare clic su questa connessione appena creata ed essere connesso al tuo server Linux tramite SSH.

Conclusione

Ora disponi di un gateway HTML5 Web RDP / SSH. Ora puoi firewall l'accesso pubblico RDP e SSH della tua piattaforma e accedere al tuo ambiente da qualsiasi browser moderno. Per ulteriori informazioni su ciò che Guacamole può offrire, c'è un ottimo video che mostra tutte le possibilità della piattaforma qui .



Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Gli attacchi ransomware sono in aumento, ma l'intelligenza artificiale può aiutare ad affrontare l'ultimo virus informatico? L'intelligenza artificiale è la risposta? Leggi qui sai è AI boone o bane

ReactOS: è questo il futuro di Windows?

ReactOS: è questo il futuro di Windows?

ReactOS, un sistema operativo open source e gratuito è qui con l'ultima versione. Può essere sufficiente alle esigenze degli utenti Windows moderni e abbattere Microsoft? Scopriamo di più su questo vecchio stile, ma un'esperienza del sistema operativo più recente.

Rimani connesso tramite lapp desktop WhatsApp 24*7

Rimani connesso tramite lapp desktop WhatsApp 24*7

Whatsapp ha finalmente lanciato l'app desktop per utenti Mac e Windows. Ora puoi accedere facilmente a Whatsapp da Windows o Mac. Disponibile per Windows 8+ e Mac OS 10.9+

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

Leggi questo per sapere come l'intelligenza artificiale sta diventando popolare tra le aziende di piccole dimensioni e come sta aumentando le probabilità di farle crescere e dare un vantaggio ai loro concorrenti.

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Recentemente Apple ha rilasciato macOS Catalina 10.15.4 un aggiornamento supplementare per risolvere i problemi, ma sembra che l'aggiornamento stia causando più problemi che portano al bricking delle macchine mac. Leggi questo articolo per saperne di più

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per l'estrazione dei dati dai Big Data

Che cosè un file system di journaling e come funziona?

Che cosè un file system di journaling e come funziona?

Il nostro computer memorizza tutti i dati in un modo organizzato noto come file system di journaling. È un metodo efficiente che consente al computer di cercare e visualizzare i file non appena si preme search.https://wethegeek.com/?p=94116&preview=true

Singolarità tecnologica: un lontano futuro della civiltà umana?

Singolarità tecnologica: un lontano futuro della civiltà umana?

Man mano che la scienza si evolve a un ritmo rapido, assumendo gran parte dei nostri sforzi, aumentano anche i rischi di sottoporci a una singolarità inspiegabile. Leggi, cosa potrebbe significare per noi la singolarità.

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Limpatto dellintelligenza artificiale nella sanità 2021

Limpatto dellintelligenza artificiale nella sanità 2021

L'intelligenza artificiale nell'assistenza sanitaria ha compiuto grandi passi avanti negli ultimi decenni. Pertanto, il futuro dell'IA in sanità continua a crescere giorno dopo giorno.