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 MB
VPS 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 ufw
abilitata.
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 /tmp
cartella 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 WAR
file è 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' guacd
applicazione 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 JDBC
connettore 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 guacamole
cartelle, 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.d
file 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 ldconfig
per ricostruire il percorso di ricerca per le librerie che sono state aggiunte.
ldconfig
Procedere utilizzando il systemctl
programma 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 war
file nella guacamole
cartella che abbiamo appena creato, una volta fatto crea un collegamento logico nella directory tomcat per puntare al nostro war
file.
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 extensions
cartella, il connettore nella lib
cartella.
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 tocamt8
file. Questo file contiene molte tomcat8
impostazioni e nel nostro caso dobbiamo aggiungere la GUACAMOLE_HOME
variabile 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 password
hai 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 user
comando. 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 CRUD
operazioni 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.properties
file. 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 WAR
file cercherà queste proprietà.
ln -s /etc/guacamole /usr/share/tomcat8/.guacamole
Testare l'installazione
Termina riavviando il tomcat8
server e avvia il guacd
demone 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 guacadmin
e 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 guacadmin
e seleziona Settings
. Una volta che sei nella pagina delle impostazioni vai alla Users
scheda 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 /tmp
cartella.
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 ROOT
cartella è quella che viene avviata per impostazione predefinita quando si accede al sito Web.
Elimina il vecchio ROOT
segnaposto.
rm -rf /var/lib/tomcat8/webapps/ROOT
E crea un collegamento simbolico affinché il server guacamole sia ROOT
quello.
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.xml
file 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 8080
con 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 default
file di tomcat8 e decommenta la AUTHBIND
linea e usa l'opzioneyes
nano /etc/default/tomcat8
AUTHBIND=yes
Fatto ciò, intall authbind
.
apt-get install authbind
Configuralo in modo che la porta 80
possa essere rivendicata da tomcat8.
touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat8 /etc/authbind/byport/80
Consenti porta 80
attraverso 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 8080
e 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 ppa
al sistema contenente i nostri pacchetti certbot.
add-apt-repository ppa:certbot/certbot
Premere " ENTER
" per accettare la modifica della configurazione.
Aggiorna apt
per 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_name
impostazione.
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 DH
parametri. 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 8080
regola
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 username
su in alto nel menu e vai a " Settings
". Quindi vai alla Connections
scheda " " 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 .