sql >> Databáze >  >> RDS >> Mysql

Použití SSH tunelování jako alternativy VPN

Použití připojení VPN je nejbezpečnějším způsobem přístupu k síti, pokud pracujete na dálku, ale protože tato konfigurace může vyžadovat hardware, čas a znalosti, pravděpodobně byste měli chtít znát alternativy, jak to udělat . Použití SSH je také bezpečný způsob přístupu ke vzdálené síti bez dalšího hardwaru, méně časově náročné a méně úsilí než konfigurace serveru VPN. V tomto blogu uvidíme, jak nakonfigurovat SSH Tunneling pro bezpečný přístup k vašim databázím.

Co je SSH?

SSH (Secure SHell) je program/protokol, který umožňuje přístup ke vzdálenému hostiteli/síti, spouštění příkazů nebo sdílení informací. Můžete nakonfigurovat různé šifrované metody ověřování a ve výchozím nastavení používá port 22/TCP, ale z bezpečnostních důvodů se doporučuje změnit.

Jak používat SSH?

Nejbezpečnějším způsobem použití je vytvoření páru klíčů SSH. Díky tomu nepotřebujete mít pouze heslo, ale také soukromý klíč, abyste mohli přistupovat ke vzdálenému hostiteli.

Měli byste také mít hostitele pouze s rolí serveru SSH a udržovat jej co nejizolovanější, takže v případě externího útoku to neovlivní vaše místní servery. Něco jako toto:

Nejprve se podívejme, jak nakonfigurovat server SSH.

Konfigurace serveru

Většina linuxové instalace má ve výchozím nastavení nainstalovaný SSH server, ale v některých případech může chybět (minimální ISO), takže k instalaci stačí nainstalovat následující balíčky:

OS založený na RedHat

$ yum install openssh-clients openssh-server

OS založený na Debianu

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

Nyní máte nainstalovaný SSH Server, můžete jej nakonfigurovat tak, aby přijímal pouze připojení pomocí klíče.

vi /etc/ssh/sshd_config

PasswordAuthentication no

Po zavedení veřejného klíče jej nezapomeňte změnit, jinak se nebudete moci přihlásit.

Můžete také změnit port a odepřít přístup root, aby byl bezpečnější:

Port 20022

PermitRootLogin no

Abyste k němu měli přístup, musíte zkontrolovat, zda je vybraný port otevřený v konfiguraci brány firewall.

Toto je základní konfigurace. Zde je třeba změnit různé parametry pro zlepšení zabezpečení SSH, takže se můžete řídit dokumentací pro tento úkol.

Konfigurace klienta

Nyní vygenerujme pár klíčů pro „vzdáleného“ místního uživatele pro přístup k serveru SSH. Existují různé typy klíčů, v tomto případě vygenerujeme klíč RSA.

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

Tím se vygenerují následující soubory v adresáři s názvem „.ssh“ v domovském adresáři uživatele:

$ 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

Soubor „id_rsa“ je soukromý klíč (udržujte jej co možná nejbezpečnější) a soubor „id_rsa.pub“ je veřejný, který je nutné zkopírovat do vzdáleného hostitele, abyste k němu měli přístup. Za tímto účelem spusťte následující příkaz jako odpovídající uživatel:

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

V tomto příkladu používám port 20022 pro SSH a můj vzdálený hostitel je 35.166.37.12. Mám také stejného uživatele (vzdáleného) vytvořeného v místních i vzdálených hostitelích. Ve vzdáleném hostiteli můžete použít jiného uživatele, takže v takovém případě byste měli změnit uživatele na správného v příkazu ssh-copy-id:

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

Tento příkaz zkopíruje veřejný klíč do souboru autorizovaných klíčů ve vzdáleném adresáři .ssh. Takže na serveru SSH byste nyní měli mít toto:

$ 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

Nyní byste měli mít přístup ke vzdálenému hostiteli:

$ ssh -p 20022 [email protected]

To ale pro přístup k vašemu databázovému uzlu nestačí, protože jste zatím na SSH serveru.

Přístup k databázi SSH

Pro přístup k uzlu databáze máte dvě možnosti. Klasickým způsobem je, že pokud jste na SSH serveru, můžete k němu přistupovat odtud, protože jste ve stejné síti, ale za tímto účelem byste měli otevřít dvě nebo tři připojení.

Nejprve je navázáno připojení SSH k serveru SSH:

$ ssh -p 20022 [email protected]

Potom připojení SSH k uzlu databáze:

$ ssh [email protected]

A konečně, připojení k databázi, v případě MySQL, je:

$ mysql -h localhost -P3306 -udbuser -p

A pro PostgreSQL:

$ psql -h localhost -p 5432 -Udbuser postgres

Pokud máte databázového klienta nainstalovaného na serveru SSH, můžete se vyhnout druhému připojení SSH a pouze spustit připojení k databázi přímo ze serveru SSH:

$ mysql -h 192.168.100.120 -P3306 -udbuser -p

nebo:

$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres

To však může být nepříjemné, protože jste byli zvyklí používat připojení k databázi přímo z počítače připojeného v kanceláři, takže se podívejme, jak k tomu použít SSH Tunneling.

tunelování SSH

Podle stejného příkladu máme:

  • Veřejná IP adresa serveru SSH:35.166.37.12
  • Port serveru SSH:20022
  • Soukromá IP adresa databázového uzlu:192.168.100.120
  • Port databáze:3306/5432
  • Uživatel SSH (místní a vzdálený):vzdálený
  • Uživatel databáze:dbuser

Příkazový řádek

Pokud tedy na místním počítači spustíte následující příkaz:

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

Tímto se otevře port 8888 na vašem místním počítači, který bude přistupovat ke vzdálenému databázovému uzlu, port 3306, přes SSH Server, port 20022, pomocí „vzdáleného“ uživatele.

Aby to bylo jasnější, po spuštění tohoto příkazu můžete získat přístup ke vzdálenému databázovému uzlu na svém místním počítači:

$ mysql -h localhost -P8888 -udbuser -p

Grafické nástroje

Pokud ke správě databází používáte grafický nástroj, s největší pravděpodobností má pro přístup k databázovému uzlu možnost použít SSH Tunneling.

Podívejme se na příklad použití MySQL Workbench:

A totéž pro PgAdmin:

Jak vidíte, zde požadované informace jsou velmi podobné použitým pro připojení SSH Tunneling příkazového řádku.

Závěr

Zabezpečení je důležité pro všechny společnosti, takže pokud pracujete z domova, musíte mít data v bezpečí stejně jako při práci v kanceláři. Jak jsme zmínili, pravděpodobně nejlepším řešením je mít připojení VPN pro přístup k databázím, ale pokud to z nějakého důvodu není možné, musíte mít alternativu, abyste se vyhnuli manipulaci s daty přes internet nezabezpečeným způsobem. Jak jste mohli vidět, konfigurace SSH Tunneling pro přístup k vašim databázím není žádná velká věda a je v tomto případě pravděpodobně nejlepší alternativou.


  1. jak deklarovat %ROWTYPE proměnné, která má slabý typ SYS_REFCURSOR?

  2. Jak vytvořit složený primární klíč v SQL Server (příklad T-SQL)

  3. Vytvoření spouštěče v Oracle Express

  4. Jak používat klauzuli Execute Immediate with INTO v databázi Oracle