Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на SSH тунелиране като VPN алтернатива

Използването на VPN връзка е най-сигурният начин за достъп до мрежа, ако работите отдалечено, но тъй като тази конфигурация може да изисква хардуер, време и знания, вероятно трябва да искате да знаете алтернативи за това . Използването на SSH също е сигурен начин за достъп до отдалечена мрежа без допълнителен хардуер, отнема по-малко време и по-малко усилия от конфигурирането на VPN сървър. В този блог ще видим как да конфигурирате SSH тунелиране за достъп до вашите бази данни по защитен начин.

Какво е SSH?

SSH (Secure Shell) е програма/протокол, който ви позволява да осъществявате достъп до отдалечен хост/мрежа, да изпълнявате команди или да споделяте информация. Можете да конфигурирате различни криптирани методи за удостоверяване и той използва 22/TCP порта по подразбиране, но се препоръчва да го промените от съображения за сигурност.

Как да използвам SSH?

Най-сигурният начин да го използвате е чрез създаване на двойка ключове SSH. С това не е необходимо да имате само парола, но и частен ключ, за да имате достъп до отдалечения хост.

Освен това трябва да имате хост само с ролята на SSH сървър и да го държите възможно най-изолиран, така че в случай на външна атака, тя няма да засегне вашите локални сървъри. Нещо като това:

Нека първо да видим как да конфигурирате SSH сървъра.

Конфигурация на сървъра

По-голямата част от инсталацията на Linux има инсталиран SSH сървър по подразбиране, но има някои случаи, в които може да липсва (минимален ISO), така че за да го инсталирате, просто трябва да инсталирате следните пакети:

ОС, базирана на RedHat

$ yum install openssh-clients openssh-server

базирана на Debian ОС

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

Сега имате инсталиран SSH сървър, можете да го конфигурирате да приема връзки само с помощта на ключ.

vi /etc/ssh/sshd_config

PasswordAuthentication no

Уверете се, че сте го променили, след като сте поставили публичния ключ, в противен случай няма да можете да влезете.

Можете също да промените порта и да откажете root достъпа, за да го направите по-сигурен:

Port 20022

PermitRootLogin no

Трябва да проверите дали избраният порт е отворен в конфигурацията на защитната стена, за да имате достъп до него.

Това е основна конфигурация. Тук има различни параметри, които трябва да промените, за да подобрите SSH сигурността, така че можете да следвате документацията за тази задача.

Конфигурация на клиента

Сега нека генерираме двойката ключове за локалния потребител „отдалечено“ за достъп до SSH сървъра. Има различни типове ключове, в този случай ще генерираме 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]-----+

Това ще генерира следните файлове в директория, наречена „.ssh“ в домашната директория на потребителя:

$ 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“ е частният ключ (пазете го възможно най-безопасен), а „id_rsa.pub“ е публичният, който трябва да бъде копиран на отдалечения хост, за да получите достъп до него. За това изпълнете следната команда като съответния потребител:

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

В този пример използвам порт 20022 за SSH и моят отдалечен хост е 35.166.37.12. Също така имам един и същ потребител (отдалечен), създаден както в локални, така и в отдалечени хостове. Можете да използвате друг потребител в отдалечения хост, така че в този случай трябва да промените потребителя на правилния в командата ssh-copy-id:

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

Тази команда ще копира публичния ключ във файла authorized_keys в отдалечената .ssh директория. Така че в SSH сървъра трябва да имате това сега:

$ 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

Сега трябва да имате достъп до отдалечения хост:

$ ssh -p 20022 [email protected]

Но това не е достатъчно за достъп до вашия възел на базата данни, тъй като все още сте в SSH сървъра.

SSH достъп до база данни

За достъп до вашия възел на базата данни имате две възможности. Класическият начин е, ако сте в SSH сървъра, можете да получите достъп до него от там, тъй като сте в същата мрежа, но за това трябва да отворите две или три връзки.

Първо, SSH връзката е установена към SSH сървъра:

$ ssh -p 20022 [email protected]

След това SSH връзката към възела на базата данни:

$ ssh [email protected]

И накрая, връзката към базата данни, в случай на MySQL, е:

$ mysql -h localhost -P3306 -udbuser -p

И за PostgreSQL:

$ psql -h localhost -p 5432 -Udbuser postgres

Ако имате инсталиран клиент на база данни в SSH сървъра, можете да избегнете втората SSH връзка и просто да стартирате връзката към базата данни директно от SSH сървъра:

$ mysql -h 192.168.100.120 -P3306 -udbuser -p

или:

$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres

Но това може да е досадно, тъй като сте използвали връзката към базата данни директно от компютъра, свързан в офиса, така че нека да видим как да използвате SSH тунелирането за това.

SSH тунелиране

Следвайки същия пример, имаме:

  • Обществен IP адрес на SSH сървъра:35.166.37.12
  • SSH сървър порт:20022
  • Частен IP адрес на възел на базата данни:192.168.100.120
  • Порт на базата данни:3306/5432
  • SSH потребител (локален и отдалечен):отдалечен
  • Потребител на базата данни:dbuser

Команден ред

И така, ако изпълните следната команда на вашата локална машина:

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

Това ще отвори порт 8888 във вашата локална машина, който ще има достъп до отдалечения възел на базата данни, порт 3306, през SSH сървъра, порт 20022, използвайки „отдалечения“ потребител.

И така, за да стане по-ясно, след като изпълните тази команда, можете да получите достъп до отдалечения възел на базата данни, изпълнявайки това на вашата локална машина:

$ mysql -h localhost -P8888 -udbuser -p

Графични инструменти

Ако използвате графичен инструмент за управление на бази данни, най-вероятно той има опцията да използва SSH тунелиране за достъп до възела на базата данни.

Нека видим пример с MySQL Workbench:

И същото за PgAdmin:

Както можете да видите, информацията, зададена тук, е доста подобна на използваната за връзка с SSH тунел на командния ред.

Заключение

Сигурността е важна за всички компании, така че ако работите от вкъщи, трябва да поддържате данните толкова сигурни, колкото сте, докато работите в офиса. Както споменахме, за това вероятно най-доброто решение е да имате VPN връзка за достъп до базите данни, но ако по някаква причина това не е възможно, трябва да имате алтернатива, за да избегнете обработката на данни през интернет по несигурен начин. Както можете да видите, конфигурирането на SSH тунелиране за достъп до вашите бази данни не е ракетна наука и вероятно е най-добрата алтернатива в този случай.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изчислим общите продажби на месец в MySQL?

  2. LIMIT ключова дума в MySQL с подготвено изявление

  3. Как да извлечем първия и последния запис на групиран запис в MySQL заявка с агрегатни функции?

  4. Връщане на ResultSet

  5. Извикване на функция-член execute() на булев вход