Luo HTML 5 RDP/SSH -käyttöliittymä Guacamolella Ubuntu 16.04 LTS:ssä

Johdanto

Tämän opetusohjelman tavoitteena on päästä eroon julkisista SSH- ja julkisista RDP-yhteyksistä. Sijoittamalla tämän kaiken erittäin kätevän HTML5-asiakkaan taakse voimme lisätä suojaustasoa pilveen pääsyyn.

Guacamole kirjaa myös kaikki etäkäytöt lokiin, joten luvaton käyttö on paljon paremmin jäljitettävissä.

Huomautus: Let's encrypt (vaihtoehto B) -toimintoa varten tarvitsemme verkkotunnuksen. Jos sinulla ei ole sellaista, voit ohittaa tämän vaiheen ja suorittaa vain vaihtoehdon A .

Vaihe 1 - Järjestelmän valmistelu

Aloita pyörittämällä VPS haluamallasi Vultr-alueella. 1024 MBVPS riittää, koska Guacamolea ei ole niin vaativa.

Yksityisen IP:n käyttöönotto

Aloita ottamalla yksityinen verkko käyttöön VPS:ssä. Tämä on hyvin dokumentoitu täällä

Palomuurin valmistelu

Kovennetaan ensin kuvaa hieman. Ja tarkistetaan, onko käytössä oleva kuva otettu ufwkäyttöön.

root@vultr:~# ufw status
Status: inactive

Oletuksena se on poistettu käytöstä, joten meidän on lisättävä muutama sääntö.

  • Sääntö 1: ssh: TCP-portti 22
  • Sääntö 2: http: TCP-portti 8080 (väliaikainen testaussääntö Guacamolelle)

Aloitetaan näiden porttien määrittämisestä.

ufw allow 22/tcp
ufw allow 8080/tcp

Ota seuraavaksi palomuuri käyttöön.

ufw enable

Älä huoli, jos saat varoituksen. Jos lisäsit portin 22, et kohtaa ongelmia.

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

Kun se on otettu käyttöön, pyydä palomuurin tilaa, niin näemme porttikokoonpanomme.

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)

Vaihe 2 - Asenna Guacamole

Kaikkien riippuvuuksien asentaminen

Ennen kuin aloitamme asennuksen, meidän on päivitettävä ja päivitettävä repo. TomcatJava-pohjaisten pakettien kaltaisissa paketeissa on jatkuvasti löydettyjä virheitä ja niihin liittyviä virheenkorjauksia. Yleensä on hyvä idea tehdä tämä ensin sen sijaan, että kiirehdit suoraan asennukseemme.

apt-get update
apt-get -y upgrade 

Seuraavaksi kaikki riippuvuudet. Guacamolessa niitä on melko paljon. (Täydellinen luettelo riippuvuuksista ja niiden toiminnoista löytyy täältä ). Jatketaan asentamalla ne kaikki.

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

Kun asennusohjelma pyytää MySQL-pääkäyttäjän salasanaa, anna se ja muista ottaa se huomioon. Käytämme tätä salasanaa myöhemmin Guacamole-tietokannan luomiseen.

Ladataan Guacamolea

Nyt kun meillä on kaikki riippuvuutemme, voimme jatkaa Guacamolen lataamista. Itse guacamole tulee enimmäkseen lähdemuodossa, ei binäärimuodossa. Ensin siirrymme /tmpkansioon, jotta vältytään sotkeutumasta levyn muihin osiin. Lataa sitten kaikki lähdekoodi.

Ladattavissa on neljä lähde-/binaaritiedostoa:

  • guacamole-0.9.13-incubating.war: Tämä on verkkosovellus. WARTiedosto on zip Web paketti tarjoaa yhtä ainoaa verkkosivuilla isännöi Tomcat verkkosivuilla
  • guacamole-server-0.9.13-incubating.tar.gz: Tämä tiedosto tarjoaa taustasovelluksen guacd. Tämä luo streamit RDP:n ja SSH:n kautta.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Käytämme paikallista MySQL-tietokantaa, joten tarvitsemme siihen liittyvän JDBCliittimen.
  • mysql-connector-java-5.1.43.tar.gz: Ilman tietokantaohjainta JDBC-liitin ei tee mitään. Tämän tiedoston tarjoaa MySQL-tiimi itse.

Huomautus: lataukset on ratkaistu lähimmälle palvelimelle .

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

Kun olemme ladaneet kaikki nämä tiedostot, pura tar.gz's.

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

Guacamoleen kokoaminen

Nyt kun olemme purkaneet kaiken lähdekoodin, tehdään muutama guacamolekansio, joita guacamole-sovellus ja sen riippuvuudet käyttävät.

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

Kaikki on valmiina uusia Guacamole-binaareja varten. Voimme nyt aloittaa kokoamisen ja asennuksen. Siirry purettuun Guacamole Server -kansioon.

cd /tmp/guacamole-server-0.9.13-incubating

Määritä sovellus luomaan myös init.dtiedosto, jotta se voidaan suorittaa myöhemmin palveluna.

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

Komennon tulee päättyä "kyllä" kaikissa kirjastoissa ja protokollissa. Jos ei, palaa takaisin ja tarkista apt-get-komento varmistaaksesi, ettet missannut yhtään pakettia.

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

Seuraavaksi käännä ja asenna Gucamole-palvelin.

make && make install

Kun tämä kaikki on tehty, suorita ldconfigja rakenna lisättyjen kirjastojen hakupolku uudelleen.

ldconfig

Edetä käyttämällä systemctlsetup guacd(Guacamolea Daemon) aloittaa käynnistyksen.

systemctl enable guacd

Guacamole-binaarit on nyt asennettu. Nyt saamme verkkosovelluksen valmiiksi Tomcatille.

Aloita siirtämällä wartiedosto guacamolejuuri luomaan kansioon. Kun tämä on tehty, luo tomcat-hakemistoon looginen linkki, joka osoittaa wartiedostoomme.

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

Sitten tarvitsemme mysql-liittimen ja JDBC:n. JDBC-ohjain tarvitaan extensionskansiossa, liitin libkansiossa.

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/

Määritetään Guacamole ja Tomcat

Once the connector and JDBC are in place, we need to edit the tocamt8 file. This file contains a lot of tomcat8 settings, and in our case we need to add the GUACAMOLE_HOME variable at the end of the file.

nano /etc/default/tomcat8

Append with the following.

GUACAMOLE_HOME=/etc/guacamole

Creating the database

Next up is creating the database. Guacamole stores its connection configuration in a database, not inside a file.

Login with the root password you used during the installation.

mysql -u root -p

The first step is to create a database called 'guacamole_db'.

create database guacamole_db;

Then run the create user command. This will create a user with a password mysupersecretpassword, this user will only be able to connect from localhost.

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

Grant CRUD operations to this user for the database guacamole_db.

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

Flush privileges and exit the shell.

flush privileges;
exit

Finish up by adding the Guacamole schema to our newly created database.

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

Once this is done, we need to edit the guacamole.properties file. This file contains our recently created MySQL server configuration.

nano /etc/guacamole/guacamole.properties

Append the MySQL connection details and credentials.

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

Finish up by creating a symbolic link to the tomcat share folder, as this is where the WAR file will search these properties.

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

Testing the setup

End by restarting the tomcat8 server and start the guacd server daemon.

service tomcat8 restart
service guacd start

You can verify by using the status command.

service tomcat8 status
service guacd status

Now you can browse to your VPS on port 8080

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

Use the username guacadmin and the same password guacadmin. This will grant you access to an empty Guacamole server.

Click in the top right corner on your username guacadmin and select Settings. Once you are in the settings page go to the Users tab and select the user guacadmin.

Now change your password to something else or create a new admin user and delete the default guacadmin one.

Step 3 - Fine tuning and cleanup

These are the final steps: cleaning up after you are done.

Delete the downloaded source code and binaries from the /tmp folder.

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

Also, make the Guacamole web application the default one. In the tomcat ecosystem the application that gets the ROOT folder is the one that is started by default when you access the website.

Delete the old ROOT placeholder.

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

And make a symbolic link for the guacamole server to be the ROOT one.

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

This requires a tomcat restart.

service tomcat8 restart

Step 4 (option A) - Running on HTTP only

  • If you are not going to use Let's Encrypt certificates and not use a DNS, execute the actions in this step and afterwards go directly to Step 6. - Option A
  • If you want to create a more secure site and you have a DNS ready, you can skip this and go straight to option B (Step 5).

Edit the tomcat8/server.xml file and change the connector port.

nano /etc/tomcat8/server.xml

Search for the Connector port.

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

And replace 8080 with 80.

By default, tomcat doesn't allow the binding of ports below 1024. To enable this we need to tell tomcat8 to create authenticated binds.

Edit the default file of tomcat8 and uncomment the AUTHBIND line and use the option yes

nano /etc/default/tomcat8

AUTHBIND=yes

Once this is done, intall authbind.

apt-get install authbind

Configure it so that port 80 can be claimed by tomcat8.

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

Allow port 80 through the firewall and delete the rule for 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Restart tomcat.

service tomcat8 restart

That's it, now Guacamole should be running on port 80.

Step 5 (option B) - Setting up Nginx

Installation and configuration of Nginx

Tomcat really isn't one of the best and most robust applications to use with certbot. Luckily Nginx is. We will just to proxy tomcat to Nginx. It uses the out-of-the-box functionality of certbot at the cost of sacrificing a little bit of RAM.

apt-get install nginx

Once installed, edit the default configuration.

nano /etc/nginx/sites-available/default

Delete all example configurations and add the following configuration.

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

This will create a proxy for the website running at 8080. Restart Nginx, and enable it at boot.

systemctl restart nginx
systemctl enable nginx

Check if everything is working.

systemctl status nginx

Disable the testing port 8080 and allow traffic on port 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Installing Let's Encrypt

Before we can use certbot, we need to add the correct ppa to the system containing our certbot packages.

add-apt-repository ppa:certbot/certbot

Press "ENTER" to accept the configuration change.

Update apt to gather the new packages.

apt-get update

Finally, install the Nginx module for assigning the certificates.

apt-get -y install python-certbot-nginx

Configure Nginx to use certificates

Configure the firewall to allow HTTPS.

ufw allow 443/tcp

Before we can request new certificates, we need a DNS name.

nano /etc/nginx/sites-available/default

Add the following server_name setting.

server_name rdp.example.com;

Change the configuration to reflect this new setting.

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

Check if all is working and restart Nginx.

nginx -t
service nginx restart

Now request a certificate with certbot.

certbot --nginx -d rdp.example.com

Anna sähköpostiosoitteesi ja hyväksy asentajan esittämät kysymykset. (Voit turvallisesti valita " No" jakaaksesi sähköpostisi.) Certbot kysyy automaattisesti, mitä sen pitää tehdä HTTPS. Käytämme vaihtoehtoa 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

Viimeinen asia, jonka teemme, on DHparametrien päivittäminen . Nämä ovat oletuksena hieman heikkoja vuoden 2017 standardeille.

Luo uusia.

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

Lisää ne seuraavaksi Nginxin oletussivustolle.

nano /etc/nginx/sites-available/default

Lisää ne palvelimen kokoonpanoon.

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

Tarkista virheet.

nginx -t

Ota muutokset käyttöön käynnistämällä palvelin uudelleen.

service nginx restart

Puhdista vanha 8080sääntö

ufw delete allow 8080/tcp

Huomautus: jos sinun pitäisi saada "502 Bad Gateway", sinun on käynnistettävä tomcat8 uudelleen .

service tomcat8 restart

Varmenteiden automaattinen uusiminen

Let's Encrypt -sertifikaatit vaativat uusimisen. Voimme luoda cron-työpaikan tätä varten. Aloita muokkaamalla crontab.

crontab -e

Lisää seuraava rivi.

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

Tämä tarkistaa klo 2.00, edellyttävätkö varmenteet uusimista, ja uusii ne, jos se vaatii uusimista.

Vaihe 6 - Testaa kaikki

Siirry Guacamole-palvelimellesi (joko http://<ip>/tai https://rdp.example.com)).

Tätä testiä varten tarvitset kaksi muuta esiintymää: yhden Linux-virtuaalikoneen ja toisen Windows Server 2012 R2:n, jossa molemmissa on käytössä yksityinen IP-osoite.

Windowsin RDP-yhteyden lisääminen

Napsauta " username" oikeassa yläkulmassa ja siirry kohtaan " Settings". Siirry sitten kohtaan " Connections" ja valitse " New Connection".

Täytä seuraavat asetukset (voit jättää muut oletusasetukset).

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>

Paina " save" ja palaa aloitusnäyttöön. Nyt voit napsauttaa " Windows Server 2012 R2" yhteyttä ja se lähettää RDP:n tälle koneelle.

Linuxin SSH-yhteyden lisääminen

Paina " Ctrl+Shift+Alt". Tämä avaa sivun valikon. Täällä voit katkaista yhteyden tai suorittaa muita hallinnollisia tehtäviä Guacamolelle.

Napsauta usernamevalikon yläosassa ja siirry kohtaan " Settings". Siirry sitten " Connections" -välilehteen ja valitse " New Connection".

Täytä seuraavat asetukset (voit jättää muut oletusasetukset).

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)

Paina " save" ja palaa aloitusnäyttöön. Nyt voit napsauttaa tätä äskettäin luotua yhteyttä ja olla yhteydessä Linux-palvelimeesi SSH:n kautta.

Johtopäätös

Sinulla on nyt web RDP/SSH HTML5 -yhdyskäytävä. Nyt voit palomuurilla alustasi julkisen RDP- ja SSH-käytön ja käyttää ympäristöäsi millä tahansa nykyaikaisella selaimella. Lisätietoja siitä, mitä Guacamole voi tarjota, on upea video, joka näyttää kaikki alustan mahdollisuudet täällä .

Jätä kommentti

Koneiden nousu: tekoälyn todelliset sovellukset

Koneiden nousu: tekoälyn todelliset sovellukset

Tekoäly ei ole tulevaisuudessa, se tässä nykyisyydessä Tässä blogissa Lue kuinka tekoälysovellukset ovat vaikuttaneet eri sektoreihin.

DDOS-hyökkäykset: lyhyt katsaus

DDOS-hyökkäykset: lyhyt katsaus

Oletko myös DDOS-hyökkäysten uhri ja hämmentynyt ehkäisymenetelmistä? Lue tämä artikkeli ratkaistaksesi kysymyksesi.

Oletko koskaan miettinyt, kuinka hakkerit ansaitsevat rahaa?

Oletko koskaan miettinyt, kuinka hakkerit ansaitsevat rahaa?

Olet ehkä kuullut, että hakkerit ansaitsevat paljon rahaa, mutta oletko koskaan miettinyt, kuinka he ansaitsevat tuollaista rahaa? keskustellaan.

Googlen vallankumouksellisia keksintöjä, jotka helpottavat elämääsi.

Googlen vallankumouksellisia keksintöjä, jotka helpottavat elämääsi.

Haluatko nähdä Googlen vallankumouksellisia keksintöjä ja kuinka nämä keksinnöt muuttivat jokaisen ihmisen elämää nykyään? Lue sitten blogia nähdäksesi Googlen keksinnöt.

Essential perjantai: Mitä tekoäly-ohjatuille autoille tapahtui?

Essential perjantai: Mitä tekoäly-ohjatuille autoille tapahtui?

Konsepti itseohjautuvista autoista lähteä tielle tekoälyn avulla on ollut haaveena jo jonkin aikaa. Mutta useista lupauksista huolimatta niitä ei näy missään. Lue tämä blogi saadaksesi lisätietoja…

Teknologinen singulaarisuus: ihmissivilisaation kaukainen tulevaisuus?

Teknologinen singulaarisuus: ihmissivilisaation kaukainen tulevaisuus?

Kun tiede kehittyy nopeasti ja ottaa haltuunsa suuren osan ponnisteluistamme, myös riskit altistaa itsemme selittämättömälle singulariteetille kasvavat. Lue, mitä singulaarisuus voisi tarkoittaa meille.

Big Datan referenssiarkkitehtuurikerrosten toiminnot

Big Datan referenssiarkkitehtuurikerrosten toiminnot

Blogista saat tietää Big Data -arkkitehtuurin eri kerroksista ja niiden toiminnoista yksinkertaisimmalla tavalla.

Tietojen tallennuksen evoluutio – Infografiikka

Tietojen tallennuksen evoluutio – Infografiikka

Tietojen säilytystavat ovat kehittyneet mahdollisesti Datan syntymästä lähtien. Tämä blogi käsittelee tiedon tallennuksen kehitystä infografian pohjalta.

6 uskomatonta etua älykkäiden kotilaitteiden käyttämisestä elämässämme

6 uskomatonta etua älykkäiden kotilaitteiden käyttämisestä elämässämme

Tässä digitaalisessa maailmassa kodin älylaitteista on tullut tärkeä osa elämää. Tässä on muutamia älykkäiden kodin laitteiden hämmästyttäviä etuja, joiden avulla ne tekevät elämästämme elämisen arvoista ja yksinkertaisempaa.

macOS Catalina 10.15.4 -täydennyspäivitys aiheuttaa enemmän ongelmia kuin ratkaiseminen

macOS Catalina 10.15.4 -täydennyspäivitys aiheuttaa enemmän ongelmia kuin ratkaiseminen

Apple julkaisi äskettäin macOS Catalina 10.15.4 -lisäpäivityksen ongelmien korjaamiseksi, mutta näyttää siltä, ​​että päivitys aiheuttaa lisää ongelmia, jotka johtavat mac-koneiden tiilikaamiseen. Lue tämä artikkeli saadaksesi lisätietoja