Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwendung von SSH-Tunneling als VPN-Alternative

Die Verwendung einer VPN-Verbindung ist der sicherste Weg, um auf ein Netzwerk zuzugreifen, wenn Sie remote arbeiten, aber da diese Konfiguration Hardware, Zeit und Wissen erfordern könnte, sollten Sie wahrscheinlich Alternativen dafür kennen . Die Verwendung von SSH ist auch eine sichere Möglichkeit, ohne zusätzliche Hardware auf ein entferntes Netzwerk zuzugreifen, weniger zeitaufwändig und weniger mühsam als die Konfiguration eines VPN-Servers. In diesem Blog erfahren Sie, wie Sie SSH-Tunneling konfigurieren, um auf sichere Weise auf Ihre Datenbanken zuzugreifen.

Was ist SSH?

SSH (Secure SHell) ist ein Programm/Protokoll, mit dem Sie auf einen entfernten Host/ein entferntes Netzwerk zugreifen, Befehle ausführen oder Informationen austauschen können. Sie können verschiedene verschlüsselte Authentifizierungsmethoden konfigurieren und es verwendet standardmäßig den 22/TCP-Port, aber es wird empfohlen, ihn aus Sicherheitsgründen zu ändern.

Wie benutzt man SSH?

Der sicherste Weg, es zu verwenden, ist die Erstellung eines SSH-Schlüsselpaars. Damit benötigen Sie nicht nur das Passwort, sondern auch den privaten Schlüssel, um auf den Remote-Host zugreifen zu können.

Außerdem sollten Sie einen Host nur mit der SSH-Serverrolle haben und ihn so isoliert wie möglich halten, damit im Falle eines externen Angriffs Ihre lokalen Server nicht beeinträchtigt werden. Etwa so:

Sehen wir uns zuerst an, wie man den SSH-Server konfiguriert.

Serverkonfiguration

Bei den meisten Linux-Installationen ist der SSH-Server standardmäßig installiert, aber es gibt einige Fälle, in denen er fehlen könnte (Minimal-ISO). Um ihn zu installieren, müssen Sie also nur die folgenden Pakete installieren:

RedHat-basiertes Betriebssystem

$ yum install openssh-clients openssh-server

Debian-basiertes Betriebssystem

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

Jetzt haben Sie den SSH-Server installiert und können ihn so konfigurieren, dass er nur Verbindungen mit einem Schlüssel akzeptiert.

vi /etc/ssh/sshd_config

PasswordAuthentication no

Stellen Sie sicher, dass Sie ihn ändern, nachdem Sie den öffentlichen Schlüssel installiert haben, sonst können Sie sich nicht anmelden.

Sie können auch den Port ändern und den Root-Zugriff verweigern, um ihn sicherer zu machen:

Port 20022

PermitRootLogin no

Sie müssen überprüfen, ob der ausgewählte Port in der Firewall-Konfiguration geöffnet ist, um darauf zugreifen zu können.

Dies ist eine Grundkonfiguration. Hier müssen verschiedene Parameter geändert werden, um die SSH-Sicherheit zu verbessern, sodass Sie der Dokumentation für diese Aufgabe folgen können.

Client-Konfiguration

Generieren wir nun das Schlüsselpaar für den lokalen Benutzer „remote“, um auf den SSH-Server zuzugreifen. Es gibt verschiedene Arten von Schlüsseln, in diesem Fall generieren wir einen RSA-Schlüssel.

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

Dadurch werden die folgenden Dateien in einem Verzeichnis namens „.ssh“ im Home-Verzeichnis des Benutzers generiert:

$ 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

Die „id_rsa“-Datei ist der private Schlüssel (bewahren Sie ihn so sicher wie möglich auf), und „id_rsa.pub“ ist der öffentliche, der auf den Remote-Host kopiert werden muss, um darauf zugreifen zu können. Führen Sie dazu als entsprechenden Benutzer folgenden Befehl aus:

$ 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 diesem Beispiel verwende ich den Port 20022 für SSH und mein Remote-Host ist 35.166.37.12. Ich habe auch denselben Benutzer (Remote) sowohl auf lokalen als auch auf Remote-Hosts erstellt. Sie können einen anderen Benutzer auf dem Remote-Host verwenden, also sollten Sie in diesem Fall den Benutzer im Befehl ssh-copy-id auf den richtigen ändern:

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

Dieser Befehl kopiert den öffentlichen Schlüssel in die Datei "authorized_keys" im entfernten .ssh-Verzeichnis. Also, im SSH-Server sollten Sie jetzt Folgendes haben:

$ 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

Jetzt sollten Sie auf den Remote-Host zugreifen können:

$ ssh -p 20022 [email protected]

Aber das reicht nicht aus, um auf Ihren Datenbankknoten zuzugreifen, da Sie sich noch im SSH-Server befinden.

SSH-Datenbankzugriff

Um auf Ihren Datenbankknoten zuzugreifen, haben Sie zwei Möglichkeiten. Der klassische Weg ist, wenn Sie sich im SSH-Server befinden, können Sie von dort aus darauf zugreifen, da Sie sich im selben Netzwerk befinden, aber dazu sollten Sie zwei oder drei Verbindungen öffnen.

Zunächst wird die SSH-Verbindung zum SSH-Server aufgebaut:

$ ssh -p 20022 [email protected]

Dann die SSH-Verbindung zum Datenbankknoten:

$ ssh [email protected]

Und schließlich die Datenbankverbindung, die im Fall von MySQL:

$ mysql -h localhost -P3306 -udbuser -p

Und für PostgreSQL:

$ psql -h localhost -p 5432 -Udbuser postgres

Wenn Sie den Datenbankclient auf dem SSH-Server installiert haben, können Sie die zweite SSH-Verbindung vermeiden und die Datenbankverbindung einfach direkt vom SSH-Server ausführen:

$ mysql -h 192.168.100.120 -P3306 -udbuser -p

oder:

$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres

Aber das könnte lästig sein, da Sie früher die Datenbankverbindung direkt von Ihrem im Büro angeschlossenen Computer verwendet haben, also sehen wir uns an, wie Sie dafür das SSH-Tunneling verwenden.

SSH-Tunnelung

Nach demselben Beispiel haben wir:

  • Öffentliche IP-Adresse des SSH-Servers:35.166.37.12
  • SSH-Serverport:20022
  • Private IP-Adresse des Datenbankknotens:192.168.100.120
  • Datenbankport:3306/5432
  • SSH-Benutzer (lokal und remote):remote
  • Datenbankbenutzer:dbuser

Befehlszeile

Also, wenn Sie den folgenden Befehl auf Ihrem lokalen Rechner ausführen:

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

Dadurch wird der Port 8888 auf Ihrem lokalen Rechner geöffnet, der über den SSH-Server, Port 20022, unter Verwendung des Benutzers „remote“ auf den entfernten Datenbankknoten, Port 3306, zugreift.

Also, um es deutlicher zu machen, nachdem Sie diesen Befehl ausgeführt haben, können Sie auf den entfernten Datenbankknoten zugreifen, indem Sie dies auf Ihrem lokalen Rechner ausführen:

$ mysql -h localhost -P8888 -udbuser -p

Grafikwerkzeuge

Wenn Sie ein grafisches Tool zum Verwalten von Datenbanken verwenden, verfügt es höchstwahrscheinlich über die Option, SSH-Tunneling zu verwenden, um auf den Datenbankknoten zuzugreifen.

Sehen wir uns ein Beispiel mit MySQL Workbench an:

Und dasselbe für PgAdmin:

Wie Sie sehen können, sind die hier abgefragten Informationen den verwendeten ziemlich ähnlich für die Befehlszeilen-SSH-Tunneling-Verbindung.

Fazit

Sicherheit ist für alle Unternehmen wichtig. Wenn Sie also von zu Hause aus arbeiten, müssen Sie Ihre Daten genauso sicher aufbewahren wie im Büro. Wie bereits erwähnt, ist hierfür wahrscheinlich eine VPN-Verbindung für den Zugriff auf die Datenbanken die beste Lösung. Wenn dies jedoch aus irgendeinem Grund nicht möglich ist, benötigen Sie eine Alternative, um zu vermeiden, dass Daten auf unsichere Weise über das Internet verarbeitet werden. Wie Sie sehen konnten, ist die Konfiguration von SSH-Tunneling für den Zugriff auf Ihre Datenbanken kein Hexenwerk und in diesem Fall wahrscheinlich die beste Alternative.