Maak een HTML 5 RDP / SSH-frontend met Guacamole op Ubuntu 16.04 LTS

Invoering

Het doel van deze tutorial is om de openbare SSH- en openbare RDP-verbindingen te verwijderen. Door dit allemaal achter een zeer handige HTML5-client te plaatsen, kunnen we een beveiligingslaag toevoegen voor toegang tot onze cloud.

Guacamole registreert ook elke toegang op afstand, zodat ongeautoriseerde toegang veel traceerbaarder wordt.

Opmerking: voor Let's encrypt (optie B) hebben we een domeinnaam nodig. Als je er geen hebt, kun je deze stap overslaan en gewoon optie A uitvoeren .

Stap 1 - Het systeem voorbereiden

Begin met het draaien van een VPS in de gewenste Vultr-zone. Een 1024 MBVPS is voldoende, want Guacamole is niet zo veeleisend.

Het inschakelen van het privé IP

Begin met het inschakelen van het particuliere netwerk op de VPS. Dit is goed gedocumenteerd hier

De firewall voorbereiden

Laten we eerst de afbeelding een beetje verharden. En laten we controleren of de afbeelding die is ingericht, is ufwingeschakeld.

root@vultr:~# ufw status
Status: inactive

Standaard is het uitgeschakeld, dus we zullen een paar regels moeten toevoegen.

  • Regel 1: ssh: TCP-poort 22
  • Regel 2: http: TCP-poort 8080 (tijdelijke testregel voor Guacamole)

Laten we beginnen met het configureren van deze poorten.

ufw allow 22/tcp
ufw allow 8080/tcp

Schakel vervolgens de firewall in.

ufw enable

Maak je geen zorgen als je een waarschuwing krijgt. Als u poort 22heeft toegevoegd , zult u geen problemen ondervinden.

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

Eenmaal ingeschakeld, vraag de status van de firewall aan en we zullen onze poortconfiguratie zien.

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)

Stap 2 - Guacamole installeren

Alle afhankelijkheden installeren

Voordat we beginnen met installeren, moeten we de repo bijwerken en upgraden. Met pakketten zoals Tomcat, die op Java is gebaseerd, is er een constante stroom van ontdekte bugs en de bijbehorende bugfixes. Het is meestal een goed idee om dit eerst te doen in plaats van direct naar onze installatie te rennen.

apt-get update
apt-get -y upgrade 

Het volgende is alle afhankelijkheden. Guacamole heeft er nogal wat. (Een volledige lijst van afhankelijkheden en hun functie vindt u hier ). Laten we doorgaan door ze allemaal te installeren.

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

Wanneer het installatieprogramma om een ​​MySQL-rootwachtwoord vraagt, geef dit dan op en noteer het. We zullen dit wachtwoord later gebruiken om de Guacamole-database te maken.

Guacamole downloaden

Nu we al onze afhankelijkheden hebben, kunnen we doorgaan met het downloaden van Guacamole. Guacamole zelf komt meestal in een bronvorm en niet in een binair. Eerst gaan we naar de /tmpmap om te voorkomen dat andere delen van de schijf vol raken. Download vervolgens alle broncode.

Er zijn vier bron- / binaire bestanden om te downloaden:

  • guacamole-0.9.13-incubating.war: Dit is de webapplicatie. Een WARbestand is een gecomprimeerd webpakket met één website die wordt gehost op een Tomcat-website
  • guacamole-server-0.9.13-incubating.tar.gz: Dit bestand levert de backend- guacdapplicatie. Dit creëert de streams via RDP en SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: We zullen een lokale MySQL-database gebruiken, dus we hebben de bijbehorende JDBCconnector nodig.
  • mysql-connector-java-5.1.43.tar.gz: Zonder een databasestuurprogramma doet de JDBC-connector niets. Dit bestand wordt aangeleverd door het MySQL-team zelf.

Let op: downloads opgelost naar de dichtstbijzijnde 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

Zodra we al deze bestanden hebben gedownload, pak je de tar.gz's uit.

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

Guacamole samenstellen

Nu we alle broncode hebben uitgepakt, laten we een paar guacamolemappen maken, deze zullen worden gebruikt door de guacamole-applicatie en zijn afhankelijkheden.

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

Alles is klaar voor onze nieuwe Guacamole-binaries. We kunnen nu het compilatie- en installatieproces starten. Ga naar de uitgepakte Guacamole Server-map.

cd /tmp/guacamole-server-0.9.13-incubating

Configureer de applicatie om ook een init.dbestand te maken om het later als een service uit te voeren.

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

De opdracht moet op alle bibliotheken en protocollen met een 'ja' eindigen. Zo niet, ga dan terug en controleer de opdracht apt-get om er zeker van te zijn dat je geen enkel pakket hebt gemist.

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

Compileer en installeer vervolgens de Gucamole-server.

make && make install

Zodra dit allemaal is gebeurd, kunt u ldconfighet zoekpad voor de toegevoegde bibliotheken opnieuw opbouwen.

ldconfig

Ga met behulp van systemctlnaar setup guacd(Guacamole Daemon) om te beginnen met het opstarten.

systemctl enable guacd

Guacamole-binaries zijn nu geïnstalleerd. Nu gaan we de webapplicatie klaar maken voor Tomcat.

Begin met het verplaatsen van het warbestand naar de guacamolemap die we zojuist hebben gemaakt. Zodra dit is gebeurd, maakt u een logische link in de tomcat-map om naar ons warbestand te verwijzen .

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

Dan hebben we de mysql-connector en JDBC nodig. Het JDBC-stuurprogramma is nodig in de extensionsmap, de connector in de libmap.

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/

Guacamole en Tomcat configureren

Zodra de connector en JDBC op hun plaats zitten, moeten we het tocamt8bestand bewerken . Dit bestand bevat veel tomcat8instellingen en in ons geval moeten we de GUACAMOLE_HOMEvariabele aan het einde van het bestand toevoegen.

nano /etc/default/tomcat8

Voeg toe met het volgende.

GUACAMOLE_HOME=/etc/guacamole

De database maken

De volgende stap is het maken van de database. Guacamole slaat de verbindingsconfiguratie op in een database, niet in een bestand.

Log in met de naam die root passwordu tijdens de installatie hebt gebruikt.

mysql -u root -p

De eerste stap is het aanmaken van een database genaamd 'guacamole_db'.

create database guacamole_db;

Voer vervolgens de create useropdracht uit. Hierdoor wordt een gebruiker met een wachtwoord gemaakt mysupersecretpassword, deze gebruiker kan alleen verbinding maken vanaf localhost.

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

Verleen CRUDbewerkingen aan deze gebruiker voor de database guacamole_db.

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

Spoel privileges uit en verlaat de shell.

flush privileges;
exit

Rond af door het Guacamole-schema toe te voegen aan onze nieuw gecreëerde database.

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

Zodra dit is gebeurd, moeten we het guacamole.propertiesbestand bewerken . Dit bestand bevat onze recentelijk gemaakte MySQL-serverconfiguratie.

nano /etc/guacamole/guacamole.properties

Voeg de details en referenties van de MySQL-verbinding toe.

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

Rond het af door een symbolische link te maken naar de tomcat-gedeelde map, aangezien dit is waar het WARbestand deze eigenschappen zal doorzoeken.

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

De setup testen

Sluit af door de tomcat8server opnieuw op te starten en start de guacdserverdaemon.

service tomcat8 restart
service guacd start

U kunt dit verifiëren met behulp van de statusopdracht.

service tomcat8 status
service guacd status

Nu kunt u naar uw VPS op poort bladeren 8080

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

Gebruik de gebruikersnaam guacadminen hetzelfde wachtwoord guacadmin. Hiermee krijgt u toegang tot een lege Guacamole-server.

Klik in de rechterbovenhoek op uw gebruikersnaam guacadminen selecteer Settings. Zodra u op de instellingenpagina bent, gaat u naar het Userstabblad en selecteert u de gebruiker guacadmin.

Verander nu uw wachtwoord in iets anders of maak een nieuwe admin-gebruiker aan en verwijder de standaard guacadmin.

Stap 3 - Fijnafstemming en opruimen

Dit zijn de laatste stappen: opruimen nadat je klaar bent.

Verwijder de gedownloade broncode en binaire bestanden uit de /tmpmap.

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

Maak ook de Guacamole-webapplicatie de standaardapplicatie. In het kater-ecosysteem is de toepassing die de ROOTmap ophaalt, degene die standaard wordt gestart wanneer u de website bezoekt.

Verwijder de oude ROOTtijdelijke aanduiding.

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

En maak een symbolische link voor de guacamole-server ROOT.

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

Dit vereist een herstart van de kater.

service tomcat8 restart

Stap 4 (optie A) - Draait alleen op HTTP

  • Als u geen Let's Encrypt-certificaten gaat gebruiken en geen DNS gebruikt, voer dan de acties in deze stap uit en ga daarna direct naar stap 6. - Optie A
  • Als je een veiligere site wilt maken en je hebt een DNS klaar, dan kun je dit overslaan en direct naar optie B gaan (stap 5).

Bewerk het tomcat8/server.xmlbestand en wijzig de connectorpoort.

nano /etc/tomcat8/server.xml

Zoek naar de Connector port.

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

En vervang 8080door 80.

Standaard staat tomcat het binden van onderstaande poorten niet toe 1024. Om dit mogelijk te maken, moeten we tomcat8 vertellen om geverifieerde bindingen te maken.

Bewerk het defaultbestand van tomcat8 en verwijder de commentaar AUTHBINDen gebruik de optieyes

nano /etc/default/tomcat8

AUTHBIND=yes

Zodra dit is gebeurd, intall authbind.

apt-get install authbind

Configureer het zodat de poort 80kan worden geclaimd door tomcat8.

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

Laat poort 80door de firewall en verwijder de regel voor 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Start de kater opnieuw.

service tomcat8 restart

Dat is het, nu zou Guacamole in de haven moeten draaien 80.

Stap 5 (optie B) - Nginx instellen

Installatie en configuratie van Nginx

Tomcat is echt niet een van de beste en meest robuuste applicaties om mee te gebruiken certbot. Gelukkig is Nginx dat wel. We zullen gewoon kater proxy naar Nginx proxy. Het maakt gebruik van de out-of-the-box functionaliteit van certbot ten koste van een beetje RAM.

apt-get install nginx

Na installatie bewerkt u de standaardconfiguratie.

nano /etc/nginx/sites-available/default

Verwijder alle voorbeeldconfiguraties en voeg de volgende configuratie toe.

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

Dit zal een proxy creëren voor de website die draait op 8080. Start Nginx opnieuw op en schakel het in bij het opstarten.

systemctl restart nginx
systemctl enable nginx

Controleer of alles werkt.

systemctl status nginx

Schakel de testpoort uit 8080en sta verkeer op poort toe 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Let's Encrypt installeren

Voordat we kunnen gebruiken certbot, moeten we het juiste toevoegen ppaaan het systeem met onze certbot-pakketten.

add-apt-repository ppa:certbot/certbot

Druk op " ENTER" om de configuratiewijziging te accepteren.

Update aptom de nieuwe pakketten te verzamelen.

apt-get update

Installeer ten slotte de Nginx-module voor het toewijzen van de certificaten.

apt-get -y install python-certbot-nginx

Configureer Nginx om certificaten te gebruiken

Configureer de firewall om toe te staan HTTPS.

ufw allow 443/tcp

Voordat we nieuwe certificaten kunnen aanvragen, hebben we een DNS-naam nodig.

nano /etc/nginx/sites-available/default

Voeg de volgende server_nameinstelling toe.

server_name rdp.example.com;

Wijzig de configuratie om deze nieuwe instelling weer te geven.

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

Controleer of alles werkt en start Nginx opnieuw op.

nginx -t
service nginx restart

Vraag nu een certificaat aan bij certbot.

certbot --nginx -d rdp.example.com

Geef uw e-mailadres op en ga akkoord met de vragen van de installateur. (U kunt " No" veilig kiezen om uw e-mail te delen.) Certbot zal automatisch vragen wat het ermee moet doen HTTPS. We zullen gebruik maken van de optie 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

Het laatste wat we gaan doen is de DHparameters updaten . Deze zijn standaard een beetje zwak voor de normen van 2017.

Maak een paar nieuwe.

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

Voeg ze vervolgens toe aan de standaardsite in Nginx.

nano /etc/nginx/sites-available/default

Voeg ze toe aan de serverconfiguratie.

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

Controleer op fouten.

nginx -t

Pas de wijzigingen toe door de server opnieuw op te starten.

service nginx restart

Ruim de oude 8080regel op

ufw delete allow 8080/tcp

Opmerking: als je een "502 Bad Gateway" ontvangt, moet je tomcat8 opnieuw opstarten .

service tomcat8 restart

Certificaten automatisch vernieuwen

Let's Encrypt-certificaten moeten worden vernieuwd. We kunnen hiervoor een cron-taak maken. Begin met het bewerken van de crontab.

crontab -e

Voeg de volgende regel toe.

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

Dit zal om 2:00 uur controleren of certificaten moeten worden verlengd en zullen ze vernieuwen als dat het geval is.

Stap 6 - Alles testen

Ga naar je Guacamole-server (of http://<ip>/of https://rdp.example.com)).

Voor deze test heb je nog twee instanties nodig: een Linux VM en een andere Windows Server 2012 R2 met een privé-IP ingeschakeld op beide.

De Windows RDP-verbinding toevoegen

Klik op de " username" in de rechterbovenhoek en ga naar " Settings". Ga dan naar " Connections" en selecteer " New Connection".

Vul de volgende instellingen in (u kunt de andere standaard laten staan).

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>

Druk op " save" en ga terug naar het startscherm. Nu kunt u op de " Windows Server 2012 R2" verbinding klikken en het zal naar deze machine RDP.

De Linux SSH-verbinding toevoegen

Druk op " Ctrl+Shift+Alt". Hierdoor verschijnt het menu aan de zijkant. Hier kunt u de verbinding met Guacamole verbreken of andere administratieve taken uitvoeren.

Klik usernameop bovenaan in het menu en ga naar " Settings". Ga vervolgens naar het Connectionstabblad " " en selecteer " New Connection".

Vul de volgende instellingen in (u kunt de andere standaard laten staan).

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)

Druk op " save" en ga terug naar het startscherm. Nu kunt u op deze nieuw gemaakte verbinding klikken en via SSH met uw Linux-server worden verbonden.

Gevolgtrekking

Je hebt nu een web RDP / SSH HTML5-gateway. Nu kunt u de openbare RDP- en SSH-toegang van uw platform firewallen en vanuit elke moderne browser toegang krijgen tot uw omgeving. Voor meer informatie over wat Guacamole te bieden heeft, is er een geweldige video die alle mogelijkheden van het platform hier laat zien .



Leave a Comment

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek

ReactOS: is dit de toekomst van Windows?

ReactOS: is dit de toekomst van Windows?

ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.

Blijf verbonden via WhatsApp Desktop-app 24 * 7

Blijf verbonden via WhatsApp Desktop-app 24 * 7

WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

Wat is een logboekbestandssysteem en hoe werkt het?

Wat is een logboekbestandssysteem en hoe werkt het?

Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.