Ustvarite frontend HTML 5 RDP/SSH z uporabo Guacamole v Ubuntu 16.04 LTS

Uvod

Cilj te vadnice je, da se znebite javnih povezav SSH in javnih RDP. Če vse to postavimo za zelo priročnega odjemalca HTML5, lahko dodamo plast varnosti za dostop do našega oblaka.

Guacamole beleži tudi vsak oddaljeni dostop, tako da postane nepooblaščen dostop veliko bolj sledljiv.

Opomba: Za Let's encrypt (možnost B) potrebujemo ime domene. Če nimate, lahko preskočite ta korak in samo izvedbo možnost A .

1. korak - Priprava sistema

Začnite z vrtenjem VPS v želenem območju Vultr. 1024 MBVPS bo dovolj, saj je Guacamole ni tako zahtevna.

Omogočanje zasebnega IP-ja

Začnite tako, da omogočite zasebno omrežje na VPS. To je tukaj dobro dokumentirano

Priprava požarnega zidu

Najprej malo utrdimo sliko. In preverimo, ali je ufwomogočena slika, ki je bila omogočena.

root@vultr:~# ufw status
Status: inactive

Privzeto je onemogočen, zato bomo morali dodati nekaj pravil.

  • Pravilo 1: ssh: vrata TCP 22
  • Pravilo 2: http: vrata TCP 8080 (začasno pravilo testiranja za Guacamole)

Začnimo s konfiguracijo teh vrat.

ufw allow 22/tcp
ufw allow 8080/tcp

Nato omogočite požarni zid.

ufw enable

Ne skrbite, če prejmete opozorilo. Če ste dodali vrata 22, ne boste imeli težav.

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

Ko je omogočeno, zahtevajte stanje požarnega zidu in videli bomo konfiguracijo naših vrat.

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)

2. korak - Namestitev Guacamole

Namestitev vseh odvisnosti

Preden začnemo nameščati, moramo repo posodobiti in nadgraditi. Pri paketih, kot je Tomcat, ki temelji na Javi, obstaja stalen tok odkritih napak in z njimi povezanih popravkov napak. Običajno je dobro, da to storimo najprej, namesto da hitimo neposredno v našo namestitev.

apt-get update
apt-get -y upgrade 

Naslednje so vse odvisnosti. Guacamole jih ima kar nekaj. (Celoten seznam odvisnosti in njihove funkcije najdete tukaj ). Nadaljujmo z namestitvijo vseh.

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

Ko namestitveni program zahteva korensko geslo MySQL, ga navedite in se prepričajte, da ste ga zabeležili. To geslo bomo kasneje uporabili za ustvarjanje baze podatkov Guacamole.

Prenašanje Guacamole

Zdaj, ko imamo vse naše odvisnosti, lahko nadaljujemo s prenosom Guacamole. Guacamole sam je večinoma v izvorni obliki in ne v binarni obliki. Najprej se bomo premaknili v /tmpmapo, da se izognemo neredu drugih delov diska. Nato prenesite vso izvorno kodo.

Obstajajo štiri izvorne/binarne datoteke za prenos:

  • guacamole-0.9.13-incubating.war: To je spletna aplikacija. WARDatoteka je stisnjena spletna paket zagotavlja enotno spletno stran gostuje na spletni strani Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: Ta datoteka bo zagotovila zaledno guacdaplikacijo. To ustvarja tokove prek RDP in SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Uporabljali bomo lokalno bazo podatkov MySQL, zato potrebujemo povezani JDBCkonektor.
  • mysql-connector-java-5.1.43.tar.gz: Brez gonilnika baze podatkov konektor JDBC ne naredi ničesar. To datoteko je zagotovila ekipa MySQL sama.

Opomba: prenosi so razrešeni na najbližji strežnik .

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

Ko prenesemo vse te datoteke, izvlecite 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

Sestavljanje Guacamole

Zdaj, ko smo ekstrahirali vso izvorno kodo, naredimo nekaj guacamolemap, ki jih bo uporabljala aplikacija guacamole in njene odvisnosti.

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

Vse je pripravljeno za naše nove binarne Guacamole. Zdaj lahko začnemo s postopkom sestavljanja in namestitve. Premaknite se na ekstrahirano mapo strežnika Guacamole.

cd /tmp/guacamole-server-0.9.13-incubating

Konfigurirajte aplikacijo, da ustvari tudi init.ddatoteko za kasnejše izvajanje kot storitev.

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

Ukaz se mora končati z "da" v vseh knjižnicah in protokolih. Če ne, se vrnite in preverite ukaz apt-get, da se prepričate, da niste zamudili nobenega paketa.

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

Nato prevedite in namestite strežnik Gucamole.

make && make install

Ko je to vse opravljeno, zaženite ldconfigznova zgraditi pot iskanja za knjižnice, ki so bile dodane.

ldconfig

Nadaljujte z uporabo systemctlza nastavitev guacd(Guacamole Daemon), da zaženete ob zagonu.

systemctl enable guacd

Binarne datoteke Guacamole so zdaj nameščene. Zdaj bomo pripravili spletno aplikacijo za Tomcat.

Začnite tako, da premaknete wardatoteko v guacamolemapo, ki smo jo pravkar ustvarili, ko je to končano, ustvarite logično povezavo v imeniku tomcat, ki kaže na našo wardatoteko.

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

Potem potrebujemo konektor mysql in JDBC. Gonilnik JDBC je potreben v extensionsmapi, konektor v libmapi.

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/

Konfiguriranje Guacamole in Tomcat

Ko sta konektor in JDBC na mestu, moramo urediti tocamt8datoteko. Ta datoteka vsebuje veliko tomcat8nastavitev, v našem primeru pa moramo GUACAMOLE_HOMEspremenljivko dodati na konec datoteke.

nano /etc/default/tomcat8

Priložite z naslednjim.

GUACAMOLE_HOME=/etc/guacamole

Ustvarjanje baze podatkov

Naslednji korak je izdelava baze podatkov. Guacamole shrani svojo konfiguracijo povezave v bazo podatkov, ne v datoteko.

Prijavite se z imenom, ki root passwordste ga uporabili med namestitvijo.

mysql -u root -p

Prvi korak je ustvariti bazo podatkov, imenovano 'guacamole_db'.

create database guacamole_db;

Nato zaženite create userukaz. To bo ustvarilo uporabnika z geslom mysupersecretpassword, ta uporabnik se bo lahko povezal samo iz localhost.

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

Dodeli CRUDoperacije temu uporabniku za bazo podatkov guacamole_db.

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

Izbrišite privilegije in zapustite lupino.

flush privileges;
exit

Zaključite tako, da v našo novo ustvarjeno bazo podatkov dodate shemo Guacamole.

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

Ko je to storjeno, moramo guacamole.propertiesdatoteko urediti . Ta datoteka vsebuje našo nedavno ustvarjeno konfiguracijo strežnika MySQL.

nano /etc/guacamole/guacamole.properties

Dodajte podrobnosti o povezavi MySQL in poverilnice.

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

Zaključite tako, da ustvarite simbolično povezavo do mape za skupno rabo tomcat, saj bo tu WARdatoteka iskala te lastnosti.

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

Testiranje nastavitve

Končajte tako, da znova zaženete tomcat8strežnik in zaženete guacddemon strežnika.

service tomcat8 restart
service guacd start

To lahko preverite z ukazom status.

service tomcat8 status
service guacd status

Zdaj lahko brskate do vašega VPS na vratih 8080

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

Uporabite uporabniško ime guacadminin isto geslo guacadmin. To vam bo omogočilo dostop do praznega strežnika Guacamole.

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

Onemogočite testna vrata 8080in dovolite promet na vratih 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Namestitev Let's Encrypt

Preden lahko uporabimo certbot, moramo dodati pravilno ppav sistem, ki vsebuje naše pakete certbot.

add-apt-repository ppa:certbot/certbot

Pritisnite " ENTER", da sprejmete spremembo konfiguracije.

Posodobite aptza zbiranje novih paketov.

apt-get update

Na koncu namestite modul Nginx za dodeljevanje potrdil.

apt-get -y install python-certbot-nginx

Konfigurirajte Nginx za uporabo potrdil

Konfigurirajte požarni zid, da omogočite HTTPS.

ufw allow 443/tcp

Preden lahko zahtevamo nova potrdila, potrebujemo ime DNS.

nano /etc/nginx/sites-available/default

Dodajte naslednjo server_namenastavitev.

server_name rdp.example.com;

Spremenite konfiguracijo, da bo odražala to novo nastavitev.

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

Preverite, ali vse deluje, in znova zaženite Nginx.

nginx -t
service nginx restart

Zdaj zahtevajte potrdilo s certbotom.

certbot --nginx -d rdp.example.com

Navedite svoj e-poštni naslov in se strinjate z vprašanji, ki jih je postavil monter. (Za Noskupno rabo e-pošte lahko varno izberete » «.) Certbot bo samodejno vprašal, kaj mora storiti z HTTPS. Uporabili bomo možnost 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

Zadnja stvar, ki jo bomo naredili, je posodobitev DHparametrov. Ti so privzeto nekoliko šibki za standarde 2017.

Ustvarite nekaj novih.

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

Nato jih dodajte na privzeto spletno mesto v Nginxu.

nano /etc/nginx/sites-available/default

Dodajte jih v konfiguracijo strežnika.

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

Preverite napake.

nginx -t

Uveljavite spremembe tako, da znova zaženete strežnik.

service nginx restart

Očistite staro 8080pravilo

ufw delete allow 8080/tcp

Opomba: če boste prejeli "502 Bad Gateway", boste morali znova zagnati tomcat8 .

service tomcat8 restart

Samodejno podaljšanje potrdil

Potrdila Let's Encrypt zahtevajo obnovo. Za to lahko ustvarimo cron delo. Začnite z urejanjem crontab.

crontab -e

Dodajte naslednjo vrstico.

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

To bo ob 2.00 preverilo, ali je treba katero koli potrdilo obnoviti, in jo obnovilo, če je potrebno.

6. korak - Preizkusite vse

Pojdite na strežnik Guacamole (ali http://<ip>/ali https://rdp.example.com)).

Za ta preizkus boste potrebovali še dva primerka: enega Linux VM in drugega Windows Server 2012 R2 z zasebnim IP-jem omogočenim na obeh.

Dodajanje povezave Windows RDP

Kliknite " username" v zgornjem desnem kotu in pojdite na " Settings". Nato pojdite na " Connections" in izberite " New Connection".

Izpolnite naslednje nastavitve (druge lahko pustite privzete).

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>

Pritisnite " save" in se vrnite na začetni zaslon. Zdaj lahko kliknete na povezavo " Windows Server 2012 R2" in bo RDP na ta stroj.

Dodajanje povezave Linux SSH

Pritisnite " Ctrl+Shift+Alt". To bo odprlo meni ob strani. Tukaj lahko prekinete povezavo ali opravljate druga administrativna opravila za Guacamole.

Kliknite usernamena vrhu v meniju in pojdite na " Settings". Nato pojdite na Connectionszavihek " " in izberite " New Connection".

Izpolnite naslednje nastavitve (druge lahko pustite privzete).

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)

Pritisnite " save" in se vrnite na začetni zaslon. Zdaj lahko kliknete to novo ustvarjeno povezavo in se prek SSH povežete s svojim strežnikom Linux.

Zaključek

Zdaj imate spletni prehod RDP/SSH HTML5. Zdaj lahko požarno pregradite javni dostop RDP in SSH vaše platforme in dostopate do svojega okolja iz katerega koli sodobnega brskalnika. Za več informacij o tem, kaj lahko Guacamole ponujajo, obstaja velika video, ki prikazuje vse possiblities platforme tukaj .

Vodniki za Linux, varnost, strežniške aplikacije, sistemski skrbnik, Ubuntu

Pusti komentar

Vzpon strojev: aplikacije AI v resničnem svetu

Vzpon strojev: aplikacije AI v resničnem svetu

Umetna inteligenca ni v prihodnosti, tukaj je prav v sedanjosti. V tem blogu preberite, kako so aplikacije umetne inteligence vplivale na različne sektorje.

DDOS napadi: kratek pregled

DDOS napadi: kratek pregled

Ste tudi vi žrtev DDOS napadov in ste zmedeni glede načinov preprečevanja? Preberite ta članek, če želite rešiti svoja vprašanja.

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Morda ste že slišali, da hekerji zaslužijo veliko denarja, a ste se kdaj vprašali, kako zaslužijo takšen denar? razpravljajmo.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Ali želite videti revolucionarne izume Googla in kako so ti izumi danes spremenili življenje vsakega človeka? Nato preberite v blogu in si oglejte Googlove izume.

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Koncept samovozečih avtomobilov, ki zapeljejo na ceste s pomočjo umetne inteligence, so sanje, ki jih imamo že nekaj časa. A kljub številnim obljubam jih ni nikjer. Preberite ta blog, če želite izvedeti več…

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Ker se znanost hitro razvija in prevzame veliko naših prizadevanj, se povečuje tudi tveganje, da se podvržemo nerazložljivi singularnosti. Preberite, kaj bi za nas lahko pomenila singularnost.

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Preberite blog, če želite na najpreprostejši način spoznati različne plasti v arhitekturi velikih podatkov in njihove funkcionalnosti.

Razvoj shranjevanja podatkov – Infografika

Razvoj shranjevanja podatkov – Infografika

Metode shranjevanja podatkov so se lahko razvijale od rojstva podatkov. Ta blog pokriva razvoj shranjevanja podatkov na podlagi infografike.

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

V tem digitalno vodenem svetu so pametne naprave za dom postale ključni del življenja. Tukaj je nekaj neverjetnih prednosti pametnih naprav za dom o tem, kako naredijo naše življenje vredno življenja in poenostavijo.

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Pred kratkim je Apple izdal macOS Catalina 10.15.4 dopolnilno posodobitev za odpravo težav, vendar se zdi, da posodobitev povzroča več težav, ki vodijo do opečenja računalnikov Mac. Preberite ta članek, če želite izvedeti več