sql >> Databasteknik >  >> RDS >> Mysql

Använda SSH Tunneling som ett VPN-alternativ

Att använda en VPN-anslutning är det säkraste sättet att komma åt ett nätverk om du arbetar på distans, men eftersom den här konfigurationen kan kräva hårdvara, tid och kunskap bör du förmodligen vilja veta alternativ för att göra det . Att använda SSH är också ett säkert sätt att komma åt ett fjärrnätverk utan extra hårdvara, mindre tidskrävande och mindre ansträngning än att konfigurera en VPN-server. I den här bloggen kommer vi att se hur du konfigurerar SSH Tunneling för att komma åt dina databaser på ett säkert sätt.

Vad är SSH?

SSH (Secure SHell), är ett program/protokoll som låter dig komma åt en fjärrvärd/nätverk, köra kommandon eller dela information. Du kan konfigurera olika krypterade autentiseringsmetoder och den använder 22/TCP-porten som standard, men det rekommenderas att du ändrar den av säkerhetsskäl.

Hur använder man SSH?

Det säkraste sättet att använda det är att skapa ett SSH-nyckelpar. Med detta behöver du inte bara ha lösenordet utan även den privata nyckeln för att kunna komma åt fjärrvärden.

Du bör också ha en värd med endast SSH-serverrollen och hålla den så isolerad som möjligt, så i händelse av en extern attack kommer det inte att påverka dina lokala servrar. Något så här:

Låt oss först se hur man konfigurerar SSH-servern.

Serverkonfiguration

De flesta av Linux-installationerna har SSH Server installerad som standard, men det finns vissa fall där den kan saknas (minimal ISO), så för att installera den behöver du bara installera följande paket:

RedHat-baserat OS

$ yum install openssh-clients openssh-server

Debian-baserat operativsystem

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

Nu har du SSH-servern installerad, du kan konfigurera den så att den endast accepterar anslutningar med en nyckel.

vi /etc/ssh/sshd_config

PasswordAuthentication no

Se till att du ändrar den efter att ha den offentliga nyckeln på plats, annars kommer du inte att kunna logga in.

Du kan också ändra porten och neka root-åtkomst för att göra den säkrare:

Port 20022

PermitRootLogin no

Du måste kontrollera om den valda porten är öppen i brandväggskonfigurationen för att kunna komma åt den.

Detta är en grundläggande konfiguration. Det finns olika parametrar att ändra här för att förbättra SSH-säkerheten, så du kan följa dokumentationen för denna uppgift.

Klientkonfiguration

Nu, låt oss skapa nyckelparet för den lokala användaren "fjärr" för att komma åt SSH-servern. Det finns olika typer av nycklar, i det här fallet genererar vi en RSA-nyckel.

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

Detta genererar följande filer i en katalog som heter ".ssh" i användarens hemkatalog:

$ 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 är den privata nyckeln (håll den så säker som möjligt), och "id_rsa.pub" är den offentliga som måste kopieras till fjärrvärden för att få åtkomst till den. För detta, kör följande kommando som motsvarande användare:

$ 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 det här exemplet använder jag porten 20022 för SSH, och min fjärrvärd är 35.166.37.12. Jag har också samma användare (fjärr) skapad i både lokala och fjärrvärdar. Du kan använda en annan användare i fjärrvärden, så i så fall bör du ändra användaren till den korrekta i kommandot ssh-copy-id:

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

Det här kommandot kopierar den publika nyckeln till filen authorized_keys i fjärrkatalogen .ssh. Så i SSH-servern bör du ha detta 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 bör du kunna komma åt fjärrvärden:

$ ssh -p 20022 [email protected]

Men detta är inte tillräckligt för att komma åt din databasnod, eftersom du är i SSH-servern ännu.

SSH-databasåtkomst

För att komma åt din databasnod har du två alternativ. Det klassiska sättet är att om du är i SSH-servern kan du komma åt den därifrån eftersom du är i samma nätverk, men för detta bör du öppna två eller tre anslutningar.

Först, SSH-anslutningen upprättad till SSH-servern:

$ ssh -p 20022 [email protected]

Sedan, SSH-anslutningen till databasnoden:

$ ssh [email protected]

Och slutligen, databasanslutningen, som i fallet med MySQL, är:

$ mysql -h localhost -P3306 -udbuser -p

Och för PostgreSQL:

$ psql -h localhost -p 5432 -Udbuser postgres

Om du har databasklienten installerad i SSH-servern kan du undvika den andra SSH-anslutningen och bara köra databasanslutningen direkt från SSH-servern:

$ mysql -h 192.168.100.120 -P3306 -udbuser -p

eller:

$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres

Men detta kan vara irriterande eftersom du brukade använda databasanslutningen direkt från din dator ansluten på kontoret, så låt oss se hur du använder SSH Tunneling för detta.

SSH-tunnelering

I samma exempel har vi:

  • SSH Server Public IP-adress:35.166.37.12
  • SSH-serverport:20022
  • Databasnod Privat IP-adress:192.168.100.120
  • Databasport:3306/5432
  • SSH-användare (lokal och fjärr):fjärr
  • Databasanvändare:dbuser

Kommandorad

Så, om du kör följande kommando på din lokala dator:

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

Detta öppnar port 8888 på din lokala dator, som kommer åt fjärrdatabasnoden, port 3306, via SSH-servern, port 20022, med hjälp av "fjärranvändaren".

Så, för att göra det mer tydligt, efter att ha kört det här kommandot, kan du komma åt fjärrdatabasnoden och köra detta på din lokala dator:

$ mysql -h localhost -P8888 -udbuser -p

Grafika verktyg

Om du använder ett grafiskt verktyg för att hantera databaser, har det troligen möjlighet att använda SSH Tunneling för att komma åt databasnoden.

Låt oss se ett exempel med MySQL Workbench:

Och samma sak för PgAdmin:

Som du kan se är informationen som frågas här ganska lik den som används för kommandoraden SSH Tunneling-anslutning.

Slutsats

Säkerhet är viktigt för alla företag, så om du arbetar hemifrån måste du hålla data lika säker som du är när du arbetar på kontoret. Som vi nämnde, för detta är förmodligen den bästa lösningen att ha en VPN-anslutning för att komma åt databaserna, men om det av någon anledning inte är möjligt måste du ha ett alternativ för att undvika att hantera data över internet på ett osäkert sätt. Som du kunde se är det inte raketvetenskap att konfigurera SSH Tunneling för åtkomst till dina databaser, och förmodligen det bästa alternativet i det här fallet.


  1. cx_Oracle och undantagshantering - god praxis?

  2. Oracle PL/SQL:Exportera data från en tabell till CSV

  3. FEL:behörighet nekades för relationstabellnamn på Postgres vid försök med en SELECT som skrivskyddad användare

  4. Fixa "profilnamnet är inte giltigt" när du skickar e-post från SQL Server