Het gebruik van een VPN-verbinding is de veiligste manier om toegang te krijgen tot een netwerk als u op afstand werkt, maar aangezien deze configuratie hardware, tijd en kennis kan vereisen, zou u waarschijnlijk alternatieven willen weten om dit te doen . Het gebruik van SSH is ook een veilige manier om toegang te krijgen tot een extern netwerk zonder extra hardware, minder tijdrovend en minder inspanning dan het configureren van een VPN-server. In deze blog laten we zien hoe je SSH Tunneling kunt configureren om op een veilige manier toegang te krijgen tot je databases.
Wat is SSH?
SSH (Secure SHell), is een programma/protocol waarmee u toegang kunt krijgen tot een externe host/netwerk, opdrachten kunt uitvoeren of informatie kunt delen. U kunt verschillende versleutelde authenticatiemethoden configureren en het gebruikt standaard de 22/TCP-poort, maar het wordt aanbevolen om dit om veiligheidsredenen te wijzigen.
Hoe gebruik ik SSH?
De veiligste manier om het te gebruiken is door een SSH-sleutelpaar te maken. Hiermee heb je niet alleen het wachtwoord nodig, maar ook de privésleutel om toegang te krijgen tot de externe host.
U moet ook een host hebben met alleen de SSH-serverrol en deze zo geïsoleerd mogelijk houden, zodat in het geval van een externe aanval uw lokale servers niet worden aangetast. Zoiets als dit:
Laten we eerst kijken hoe we de SSH-server moeten configureren.
Serverconfiguratie
De meeste Linux-installaties hebben standaard SSH-server geïnstalleerd, maar er zijn enkele gevallen waarin het kan ontbreken (minimale ISO), dus om het te installeren, hoeft u alleen de volgende pakketten te installeren:
RedHat-gebaseerd besturingssysteem
$ yum install openssh-clients openssh-server
Op Debian gebaseerd besturingssysteem
$ apt update; apt install openssh-client openssh-server
Nu je de SSH-server hebt geïnstalleerd, kun je deze configureren om alleen verbindingen te accepteren met een sleutel.
vi /etc/ssh/sshd_config
PasswordAuthentication no
Zorg ervoor dat u deze wijzigt nadat u de openbare sleutel hebt ingevoerd, anders kunt u niet inloggen.
Je kunt ook de poort wijzigen en root-toegang weigeren om het veiliger te maken:
Port 20022
PermitRootLogin no
Je moet controleren of de geselecteerde poort open is in de firewallconfiguratie om er toegang toe te krijgen.
Dit is een basisconfiguratie. Er zijn hier verschillende parameters die u kunt wijzigen om de SSH-beveiliging te verbeteren, dus u kunt de documentatie voor deze taak volgen.
Clientconfiguratie
Laten we nu het sleutelpaar genereren voor de lokale gebruiker "remote" om toegang te krijgen tot de SSH-server. Er zijn verschillende soorten sleutels, in dit geval genereren we een RSA-sleutel.
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/remote/.ssh/id_rsa):
Created directory '/home/remote/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/remote/.ssh/id_rsa.
Your public key has been saved in /home/remote/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hT/36miDBbRa3Povz2FktC/zNb8ehAsjNZOiX7eSO4w [email protected]
The key's randomart image is:
+---[RSA 3072]----+
| |
| .. . |
| o.+.=. |
| *o+.o.. |
| +S+o+=o . |
| . o +==o+ |
| =oo=ooo.|
| .E=*o* .+|
| ..BB ooo|
+----[SHA256]-----+
Hiermee worden de volgende bestanden gegenereerd in een map met de naam ".ssh" in de thuismap van de gebruiker:
$ whoami
remote
$ pwd
/home/remote/.ssh
$ ls -la
total 20
drwx------ 2 remote remote 4096 Apr 16 15:40 .
drwx------ 3 remote remote 4096 Apr 16 15:27 ..
-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa
-rw-r--r-- 1 remote remote 569 Apr 16 15:26 id_rsa.pub
Het "id_rsa"-bestand is de privésleutel (houd deze zo veilig mogelijk) en de "id_rsa.pub" is de openbare die naar de externe host moet worden gekopieerd om er toegang toe te krijgen. Voer hiervoor het volgende commando uit als de corresponderende gebruiker:
$ whoami
remote
$ ssh-copy-id -p 20022 [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/remote/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '20022' '[email protected]"
and check to make sure that only the key(s) you wanted were added.
In dit voorbeeld gebruik ik poort 20022 voor SSH en mijn externe host is 35.166.37.12. Ik heb ook dezelfde gebruiker (extern) gemaakt in zowel lokale als externe hosts. U kunt een andere gebruiker in de externe host gebruiken, dus in dat geval moet u de gebruiker wijzigen in de juiste in de opdracht ssh-copy-id:
$ ssh-copy-id -p 20022 [email protected]
Deze opdracht kopieert de openbare sleutel naar het bestand Authorized_keys in de externe .ssh-directory. Dus in de SSH-server zou je dit nu moeten hebben:
$ pwd
/home/remote/.ssh
$ ls -la
total 20
drwx------ 2 remote remote 4096 Apr 16 15:40 .
drwx------ 3 remote remote 4096 Apr 16 15:27 ..
-rw------- 1 remote remote 422 Apr 16 15:40 authorized_keys
-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa
-rw-r--r-- 1 remote remote 569 Apr 16 15:26 id_rsa.pub
U zou nu toegang moeten hebben tot de externe host:
$ ssh -p 20022 [email protected]
Maar dit is niet genoeg om toegang te krijgen tot uw databaseknooppunt, aangezien u zich nog op de SSH-server bevindt.
SSH-databasetoegang
Om toegang te krijgen tot uw databaseknooppunt heeft u twee opties. De klassieke manier is, als u zich in de SSH-server bevindt, kunt u deze vanaf daar openen omdat u zich in hetzelfde netwerk bevindt, maar hiervoor moet u twee of drie verbindingen openen.
Eerst de SSH-verbinding die tot stand is gebracht met de SSH-server:
$ ssh -p 20022 [email protected]
Vervolgens de SSH-verbinding met het databaseknooppunt:
$ ssh [email protected]
En tot slot, de databaseverbinding, die in het geval van MySQL is:
$ mysql -h localhost -P3306 -udbuser -p
En voor PostgreSQL:
$ psql -h localhost -p 5432 -Udbuser postgres
Als u de databaseclient op de SSH-server hebt geïnstalleerd, kunt u de tweede SSH-verbinding vermijden en de databaseverbinding rechtstreeks vanaf de SSH-server uitvoeren:
$ mysql -h 192.168.100.120 -P3306 -udbuser -p
of:
$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres
Maar dit kan vervelend zijn, aangezien u vroeger de databaseverbinding rechtstreeks vanaf uw computer op kantoor gebruikte, dus laten we eens kijken hoe u SSH-tunneling hiervoor kunt gebruiken.
SSH-tunneling
In navolging van hetzelfde voorbeeld hebben we:
- SSH-server openbaar IP-adres:35.166.37.12
- SSH-serverpoort:20022
- Databaseknooppunt privé IP-adres:192.168.100.120
- Databasepoort:3306/5432
- SSH-gebruiker (lokaal en extern):extern
- Databasegebruiker:dbuser
Opdrachtregel
Dus, als je de volgende opdracht uitvoert op je lokale computer:
$ ssh -L 8888:192.168.100.120:3306 [email protected] -p 20022 -N
Hiermee wordt poort 8888 op uw lokale machine geopend, die toegang zal krijgen tot het externe databaseknooppunt, poort 3306, via de SSH-server, poort 20022, met behulp van de "externe" gebruiker.
Dus, om het duidelijker te maken, na het uitvoeren van deze opdracht, heb je toegang tot het externe databaseknooppunt door dit op je lokale computer uit te voeren:
$ mysql -h localhost -P8888 -udbuser -p
Grafische hulpmiddelen
Als je een grafisch hulpmiddel gebruikt om databases te beheren, heeft het hoogstwaarschijnlijk de optie om SSH Tunneling te gebruiken om toegang te krijgen tot het databaseknooppunt.
Laten we een voorbeeld bekijken met MySQL Workbench:
En hetzelfde voor PgAdmin:
Zoals u kunt zien, lijkt de hier gevraagde informatie op de gebruikte informatie. voor de opdrachtregel SSH Tunneling-verbinding.
Conclusie
Beveiliging is belangrijk voor alle bedrijven, dus als u vanuit huis werkt, moet u gegevens net zo veilig bewaren als wanneer u op kantoor werkt. Zoals we al zeiden, is hiervoor waarschijnlijk de beste oplossing het hebben van een VPN-verbinding om toegang te krijgen tot de databases, maar als het om de een of andere reden niet mogelijk is, moet u een alternatief hebben om te voorkomen dat gegevens op een onveilige manier via internet worden verwerkt. Zoals je kon zien, is het configureren van SSH Tunneling voor toegang tot je databases geen rocket science, en in dit geval waarschijnlijk het beste alternatief.