sql >> Database teknologi >  >> RDS >> Mysql

Brug af SSH Tunneling som et VPN-alternativ

Brug af en VPN-forbindelse er den sikreste måde at få adgang til et netværk på, hvis du arbejder eksternt, men da denne konfiguration kan kræve hardware, tid og viden, bør du nok gerne vide alternativer til at gøre det . Brug af SSH er også en sikker måde at få adgang til et fjernnetværk uden ekstra hardware, mindre tidskrævende og mindre indsats end at konfigurere en VPN-server. I denne blog vil vi se, hvordan du konfigurerer SSH Tunneling til at få adgang til dine databaser på en sikker måde.

Hvad er SSH?

SSH (Secure SHell), er et program/protokol, der giver dig adgang til en ekstern vært/netværk, køre kommandoer eller dele information. Du kan konfigurere forskellige krypterede godkendelsesmetoder, og den bruger 22/TCP-porten som standard, men det anbefales at ændre den af ​​sikkerhedsmæssige årsager.

Hvordan bruges SSH?

Den sikreste måde at bruge det på er ved at oprette et SSH-nøglepar. Med dette behøver du ikke kun have adgangskoden, men også den private nøgle for at få adgang til fjernværten.

Du bør også have en vært med kun SSH-serverrollen og holde den så isoleret som muligt, så i tilfælde af et eksternt angreb vil det ikke påvirke dine lokale servere. Noget som dette:

Lad os først se, hvordan man konfigurerer SSH-serveren.

Serverkonfiguration

Det meste af Linux-installationen har SSH Server installeret som standard, men der er nogle tilfælde, hvor den kunne mangle (minimal ISO), så for at installere den, skal du blot installere følgende pakker:

RedHat-baseret OS

$ yum install openssh-clients openssh-server

Debian-baseret OS

$ apt update; apt install openssh-client openssh-server

Nu har du SSH-serveren installeret, kan du konfigurere den til kun at acceptere forbindelser ved hjælp af en nøgle.

vi /etc/ssh/sshd_config

PasswordAuthentication no

Sørg for, at du ændrer det efter at have den offentlige nøgle på plads, ellers vil du ikke være i stand til at logge ind.

Du kan også ændre porten og nægte root-adgang for at gøre den mere sikker:

Port 20022

PermitRootLogin no

Du skal kontrollere, om den valgte port er åben i firewall-konfigurationen for at kunne få adgang til den.

Dette er en grundlæggende konfiguration. Der er forskellige parametre, der skal ændres her for at forbedre SSH-sikkerheden, så du kan følge dokumentationen for denne opgave.

Klientkonfiguration

Lad os nu generere nøgleparret til den lokale bruger "fjernbetjening" for at få adgang til SSH-serveren. Der er forskellige typer nøgler, i dette tilfælde genererer vi en RSA-nøgle.

$ 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]-----+

Dette vil generere følgende filer i en mappe kaldet ".ssh" inde i brugerens hjemmemappe:

$ 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

"id_rsa"-filen er den private nøgle (hold den så sikker som muligt), og "id_rsa.pub" er den offentlige, der skal kopieres til fjernværten for at få adgang til den. Til dette skal du køre følgende kommando som den tilsvarende bruger:

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

I dette eksempel bruger jeg porten 20022 til SSH, og min fjernvært er 35.166.37.12. Jeg har også den samme bruger (fjernbetjening) oprettet i både lokale og eksterne værter. Du kan bruge en anden bruger i fjernværten, så i så fald bør du ændre brugeren til den korrekte i kommandoen ssh-copy-id:

$ ssh-copy-id -p 20022 [email protected]

Denne kommando vil kopiere den offentlige nøgle til filen authorized_keys i den eksterne .ssh-mappe. Så i SSH-serveren skulle du have dette nu:

$ 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

Nu skulle du kunne få adgang til fjernværten:

$ ssh -p 20022 [email protected]

Men dette er ikke nok til at få adgang til din databasenode, da du er på SSH-serveren endnu.

SSH-databaseadgang

For at få adgang til din databasenode har du to muligheder. Den klassiske måde er, hvis du er i SSH-serveren, kan du få adgang til den derfra, da du er i det samme netværk, men til dette skal du åbne to eller tre forbindelser.

For det første oprettes SSH-forbindelsen til SSH-serveren:

$ ssh -p 20022 [email protected]

Derefter SSH-forbindelsen til databasenoden:

$ ssh [email protected]

Og endelig er databaseforbindelsen, der i tilfælde af MySQL:

$ mysql -h localhost -P3306 -udbuser -p

Og for PostgreSQL:

$ psql -h localhost -p 5432 -Udbuser postgres

Hvis du har databaseklienten installeret i SSH-serveren, kan du undgå den anden SSH-forbindelse og bare køre databaseforbindelsen direkte fra SSH-serveren:

$ mysql -h 192.168.100.120 -P3306 -udbuser -p

eller:

$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres

Men dette kunne være irriterende, da du plejede at bruge databaseforbindelsen direkte fra din computer tilsluttet på kontoret, så lad os se, hvordan du bruger SSH Tunneling til dette.

SSH-tunneling

I det samme eksempel har vi:

  • SSH Server Public IP-adresse:35.166.37.12
  • SSH-serverport:20022
  • Databaseknude privat IP-adresse:192.168.100.120
  • Databaseport:3306/5432
  • SSH-bruger (lokal og fjern):fjern
  • Databasebruger:dbuser

Kommandolinje

Så, hvis du kører følgende kommando på din lokale maskine:

$ ssh -L 8888:192.168.100.120:3306 [email protected] -p 20022 -N

Dette åbner port 8888 på din lokale maskine, som vil få adgang til den eksterne databaseknude, port 3306, via SSH-serveren, port 20022, ved hjælp af "fjernbrugeren".

Så for at gøre det mere overskueligt, efter at have kørt denne kommando, kan du få adgang til den eksterne databaseknude og køre denne på din lokale maskine:

$ mysql -h localhost -P8888 -udbuser -p

Grafiske værktøjer

Hvis du bruger et grafisk værktøj til at administrere databaser, har det højst sandsynligt mulighed for at bruge SSH Tunneling til at få adgang til databasenoden.

Lad os se et eksempel med MySQL Workbench:

Og det samme for PgAdmin:

Som du kan se, ligner de oplysninger, der bliver spurgt her, ret meget om de brugte for kommandolinjen SSH Tunneling-forbindelse.

Konklusion

Sikkerhed er vigtigt for alle virksomheder, så hvis du arbejder hjemmefra, skal du holde data lige så sikre, som du er, mens du arbejder på kontoret. Som vi nævnte, til dette, er nok den bedste løsning at have en VPN-forbindelse for at få adgang til databaserne, men hvis det af en eller anden grund ikke er muligt, skal du have et alternativ for at undgå at håndtere data over internettet på en usikker måde. Som du kunne se, er det ikke raketvidenskab at konfigurere SSH Tunneling til at få adgang til dine databaser, og det er sandsynligvis det bedste alternativ i dette tilfælde.


  1. Postgres-udløser efter indstik med adgang til NYT

  2. SQL FINDER Operatør for begyndere

  3. Sådan fungerer POSITION() i MariaDB

  4. Brug af union og orden efter klausul i mysql