Creați un frontend HTML 5 RDP / SSH folosind Guacamole pe Ubuntu 16.04 LTS

Introducere

Scopul acestui tutorial este de a scăpa de conexiunile publice SSH și publice RDP. Plasând toate acestea în spatele unui client HTML5 foarte convenabil, putem adăuga un strat de securitate pentru accesarea norului nostru.

De asemenea, Guacamole înregistrează orice acces la distanță, astfel încât accesul neautorizat devine mult mai urmărit.

Notă: Pentru a cripta (opțiunea B) avem nevoie de un nume de domeniu. Dacă nu aveți, puteți sări peste acest pas și doar executa opțiunea A .

Pasul 1 - Pregătirea sistemului

Începeți prin a roti un VPS în zona voastră dorită. Un 1024 MBVPS va fi suficient, deoarece Guacamole nu este atât de solicitant.

Activarea IP-ului privat

Începeți prin activarea rețelei private de pe VPS. Acest lucru este bine documentat aici

Pregătirea firewallului

Mai întâi, să întărim puțin imaginea. Și să verificăm dacă imaginea furnizată a fost ufwactivată.

root@vultr:~# ufw status
Status: inactive

În mod implicit, este dezactivat, așa că va trebui să adăugăm câteva reguli.

  • Regula 1: ssh: port 22 TCP
  • Regula 2: http: TCP port 8080 (regulă de testare temporară pentru Guacamole)

Să începem cu configurarea acestor porturi.

ufw allow 22/tcp
ufw allow 8080/tcp

Apoi activați firewallul.

ufw enable

Nu vă faceți griji dacă primiți un avertisment. Dacă ați adăugat port 22, nu veți întâmpina probleme.

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

Odată activată, solicitați starea firewallului și vom vedea configurația portului nostru.

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)

Pasul 2 - Instalarea Guacamole

Instalarea tuturor dependențelor

Înainte de a începe instalarea, trebuie să actualizăm și să actualizăm repo. Cu pachete cum ar fi Tomcat, bazată pe Java, există un flux constant de buguri descoperite și de bugfix-urile asociate acestora. De obicei, este o idee bună să faceți acest lucru mai întâi în loc să vă grăbiți direct în instalarea noastră.

apt-get update
apt-get -y upgrade 

Următoarele sunt toate dependențele. Guacamole are destul de multe dintre ele. (O listă completă de dependențe și funcția lor poate fi găsită aici ). Să continuăm instalându-le pe toate.

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

Când instalatorul solicită o parolă rădăcină MySQL, furnizați una și asigurați-vă că o luați în considerare. Mai târziu vom folosi această parolă pentru a crea baza de date Guacamole.

Descărcarea Guacamole

Acum că avem toate dependențele noastre, putem continua cu descărcarea Guacamole. Guacamole în sine vine mai ales într-o formă sursă, și nu în mod binar. Mai întâi ne vom muta în /tmpfolder pentru a evita aglomerarea altor părți ale discului. Apoi descărcați tot codul sursă.

Există patru fișiere sursă / binare pentru a descărca:

  • guacamole-0.9.13-incubating.war: Aceasta este aplicația web. Un WARfișier este un pachet web zipped care oferă un singur site găzduit pe un site Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: Acest fișier va furniza guacdaplicația de backend . Aceasta creează fluxurile prin RDP și SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Vom folosi o bază de date locală MySQL, deci avem nevoie de JDBCconectorul asociat .
  • mysql-connector-java-5.1.43.tar.gz: Fără un driver de bază de date, conectorul JDBC nu face nimic. Acest fișier este furnizat chiar de echipa MySQL.

Notă: descărcările rezolvate la cel mai apropiat server .

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

După ce am descărcat toate aceste fișiere, extrageți- tar.gzle.

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

Compilarea Guacamole

Acum că am extras tot codul sursă, să facem câteva guacamolefoldere, acestea vor fi utilizate de aplicația guacamole și de dependențele acesteia.

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

Totul este gata pentru noile noastre binare Guacamole. Acum putem începe procesul de compilare și instalare. Mutați-vă în folderul extras al serverului Guacamole.

cd /tmp/guacamole-server-0.9.13-incubating

Configurați aplicația pentru a crea, de asemenea, un init.dfișier pentru a fi rulat ca serviciu ulterior.

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

Comanda ar trebui să se încheie cu un „da” pe toate bibliotecile și protocoalele. Dacă nu, mergeți înapoi și verificați comanda apt-get pentru a vă asigura că nu ați ratat niciun pachet.

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

Urmăriți compilarea și instalarea serverului Gucamole.

make && make install

După ce toate acestea sunt făcute, executați ldconfigpentru a reconstrui calea de căutare pentru bibliotecile care au fost adăugate.

ldconfig

Continuați folosind systemctlconfigurarea guacd(Guacamole Daemon) pentru a începe pornirea.

systemctl enable guacd

Acum sunt instalate binarele Guacamole. Acum vom pregăti aplicația web pentru Tomcat.

Începeți prin mutarea warfișierului în guacamolefolderul pe care tocmai l-am creat, odată ce acest lucru este realizat, creați o legătură logică în directorul tomcat pentru a indica warfișierul nostru .

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

Apoi avem nevoie de conectorul mysql și JDBC. Driverul JDBC este necesar în extensionsfolder, conectorul din libfolder.

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/

Configurarea Guacamole și Tomcat

Odată ce conectorul și JDBC sunt pe loc, trebuie să edităm tocamt8fișierul. Acest fișier conține o mulțime de tomcat8setări, iar în cazul nostru trebuie să adăugăm GUACAMOLE_HOMEvariabila la sfârșitul fișierului.

nano /etc/default/tomcat8

Se adaugă cu următoarele.

GUACAMOLE_HOME=/etc/guacamole

Crearea bazei de date

Următoarea este crearea bazei de date. Guacamole stochează configurația conexiunii într-o bază de date, nu în interiorul unui fișier.

Conectați-vă cu cel root passwordutilizat în timpul instalării.

mysql -u root -p

Primul pas este crearea unei baze de date numită „guacamole_db”.

create database guacamole_db;

Apoi executați create usercomanda. Acest lucru va crea un utilizator cu o parolă mysupersecretpassword, acest utilizator se va putea conecta doar de la localhost.

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

Acordă CRUDoperațiuni acestui utilizator pentru baza de date guacamole_db.

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

Clătiți privilegiile și ieșiți din coajă.

flush privileges;
exit

Finalizează adăugând schema Guacamole la baza noastră de date recent creată.

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

Odată făcut acest lucru, trebuie să edităm guacamole.propertiesfișierul. Acest fișier conține configurația serverului nostru MySQL creat recent.

nano /etc/guacamole/guacamole.properties

Adăugați detaliile și datele de autentificare ale conexiunii MySQL.

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

Finalizați prin crearea unui link simbolic la folderul de partajare tomcat, deoarece aici este WARfișierul va căuta aceste proprietăți.

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

Testarea configurației

Terminați prin repornirea tomcat8serverului și porniți guacddemonul serverului.

service tomcat8 restart
service guacd start

Puteți verifica folosind comanda status.

service tomcat8 status
service guacd status

Acum puteți naviga la VPS pe port 8080

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

Utilizați numele de utilizator guacadminși aceeași parolă guacadmin. Acest lucru vă va oferi acces la un server Guacamole gol.

Faceți clic în colțul din dreapta sus al numelui de utilizator guacadminși selectați Settings. Odată ce sunteți în pagina de setări, mergeți la Usersfila și selectați utilizatorul guacadmin.

Acum schimba parola cu altceva sau creează-ți un nou utilizator de admin și șterge-o pe cea implicită guacadmin.

Pasul 3 - Reglare fină și curățare

Acestea sunt etapele finale: curățarea după ce ați terminat.

Ștergeți codul sursă și binarele descărcate din /tmpfolder.

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

De asemenea, faceți din aplicația web Guacamole cea implicită. În ecosistemul tomcat, aplicația care primește ROOTfolderul este cea care este pornită implicit atunci când accesați site-ul.

Ștergeți ROOTmarcatorul de locație vechi .

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

Și creează o legătură simbolică pentru ca serverul guacamole să fie ROOTsingurul.

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

Aceasta necesită o repornire a tomcatului.

service tomcat8 restart

Pasul 4 (opțiunea A) - Se rulează doar pe HTTP

  • Dacă nu veți utiliza certificate Encrypt certificate și nu folosiți un DNS, executați acțiunile în acest pas și apoi mergeți direct la Pasul 6. - Opțiunea A
  • Dacă doriți să creați un site mai sigur și aveți un DNS gata, puteți săriți acest lucru și accesați direct opțiunea B (Pasul 5).

Editați tomcat8/server.xmlfișierul și schimbați portul conectorului.

nano /etc/tomcat8/server.xml

Căutați Connector port.

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

Și înlocuiți 8080cu 80.

În mod implicit, tomcat nu permite legarea porturilor de mai jos 1024. Pentru a activa acest lucru, trebuie să spunem tomcat8 să creeze legături autentificate.

Editați defaultfișierul tomcat8 și dezarhivați AUTHBINDlinia și utilizați opțiuneayes

nano /etc/default/tomcat8

AUTHBIND=yes

Odată făcut acest lucru, intall authbind.

apt-get install authbind

Configurați-l astfel încât portul 80să poată fi revendicat de tomcat8.

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

Permiteți portul 80prin firewall și ștergeți regula pentru 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Reporniți tomcatul.

service tomcat8 restart

Asta e, acum Guacamole ar trebui să funcționeze pe port 80.

Pasul 5 (opțiunea B) - Configurarea Nginx

Instalarea și configurarea Nginx

Tomcat nu este într-adevăr una dintre cele mai bune și mai solide aplicații cu care să folosești certbot. Din fericire, Nginx este. Vom proxy tomcat pentru Nginx. Acesta folosește funcționalitatea out-of-the-box a certbot cu prețul sacrificării unui pic de memorie RAM.

apt-get install nginx

După instalare, editați configurația implicită.

nano /etc/nginx/sites-available/default

Ștergeți toate configurațiile de exemplu și adăugați următoarea configurație.

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

Acest lucru va crea un proxy pentru site-ul web care rulează la 8080. Reporniți Nginx și activați-l la pornire.

systemctl restart nginx
systemctl enable nginx

Verificați dacă totul funcționează.

systemctl status nginx

Dezactivează portul de testare 8080și permite traficul în port 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Instalarea Let’s Encrypt

Înainte de a putea utiliza certbot, trebuie să adăugăm corect ppasistemul care conține pachetele noastre certbot.

add-apt-repository ppa:certbot/certbot

Apăsați " ENTER" pentru a accepta modificarea de configurare.

Actualizare aptpentru a aduna noile pachete.

apt-get update

În cele din urmă, instalați modulul Nginx pentru atribuirea certificatelor.

apt-get -y install python-certbot-nginx

Configurați Nginx pentru a utiliza certificatele

Configurați firewallul pentru a permite HTTPS.

ufw allow 443/tcp

Înainte de a putea solicita noi certificate, avem nevoie de un nume DNS.

nano /etc/nginx/sites-available/default

Adăugați următoarea server_namesetare.

server_name rdp.example.com;

Modificați configurația pentru a reflecta această nouă setare.

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

Verificați dacă totul funcționează și reporniți Nginx.

nginx -t
service nginx restart

Acum cereți un certificat cu certbot.

certbot --nginx -d rdp.example.com

Furnizați e-mailul dvs. și fiți de acord cu întrebările adresate de instalator. (Puteți alege în mod sigur " No" pentru a partaja e-mailul dvs.) Certbot va întreba automat cu ce trebuie să facă HTTPS. Vom folosi opțiunea 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

Ultimul lucru pe care îl vom face este actualizarea DHparametrilor. Acestea sunt, implicit, puțin slabe pentru standardele din 2017.

Creați unele noi.

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

Apoi, adăugați-le pe site-ul implicit din Nginx.

nano /etc/nginx/sites-available/default

Adăugați-le la configurația serverului.

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

Verificați erorile.

nginx -t

Aplicați modificările repornind serverul.

service nginx restart

Curățarea vechii 8080reguli

ufw delete allow 8080/tcp

Notă: dacă ar trebui să primiți un "502 Bad Gateway", va trebui să reporniți tomcat8 .

service tomcat8 restart

Certificate de reînnoire automată

Să criptăm certificatele necesită reînnoire. Putem crea un job cron pentru asta. Începeți prin editarea crontab.

crontab -e

Adăugați următoarea linie.

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

Acest lucru se va verifica la 2:00 AM dacă există certificate care necesită o reînnoire și le va reînnoi dacă se întâmplă.

Pasul 6 - Testează totul

Du - te la serverul guacamole (fie http://<ip>/sau https://rdp.example.com)).

Pentru acest test, veți avea nevoie de încă două instanțe: una Linux VM și alta Windows Server 2012 R2 cu un IP privat activat pe ambele.

Adăugarea conexiunii Windows RDP

Faceți clic pe " username" în colțul din dreapta sus și mergeți la " Settings". Apoi mergeți la " Connections" și selectați " New Connection".

Completați următoarele setări (le puteți lăsa pe celelalte implicite).

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>

Apăsați " save" și reveniți la ecranul de start. Acum puteți face clic pe Windows Server 2012 R2conexiunea " " și va RDP la acest aparat.

Adăugarea conexiunii SSH Linux

Apăsați " Ctrl+Shift+Alt". Acest lucru va apărea meniul din lateral. Aici puteți deconecta sau efectua alte sarcini administrative pentru Guacamole.

Faceți clic usernamepe butonul din partea de sus a meniului și mergeți la " Settings". Apoi accesați Connectionsfila " " și selectați " New Connection".

Completați următoarele setări (le puteți lăsa pe celelalte implicite).

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)

Apăsați " save" și reveniți la ecranul de start. Acum puteți face clic pe această conexiune recent creată și a fi conectat la serverul dvs. Linux prin SSH.

Concluzie

Acum aveți un gateway web RDP / SSH HTML5. Acum puteți firewall accesul public RDP și SSH al platformei dvs. și accesați mediul dvs. din orice browser modern. Pentru mai multe informații despre ce poate oferi Guacamole, există un video excelent care arată toate posibilitățile platformei aici .



Leave a Comment

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

6 lucruri extrem de nebunești despre Nintendo Switch

6 lucruri extrem de nebunești despre Nintendo Switch

Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.

Promisiuni tehnologice care sunt încă nelivrate

Promisiuni tehnologice care sunt încă nelivrate

Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!

Te-ai întrebat vreodată cum câștigă hackerii bani?

Te-ai întrebat vreodată cum câștigă hackerii bani?

Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe