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

Използване на OpenVPN за защитен достъп до вашия клъстер от база данни в облака

Интернет е опасно място, особено ако оставяте данните си некриптирани или без подходяща защита. Има няколко начина да защитите данните си; всички на различни нива. Винаги трябва да имате силни правила за защитна стена,  криптиране на данни и силни правила за пароли. Друг начин да защитите вашите данни е чрез достъп до тях чрез VPN връзка.

Виртуалната частна мрежа (или VPN) е метод за свързване, използван за добавяне на сигурност и поверителност към частни и обществени мрежи, защитавайки вашите данни.

OpenVPN е пълнофункционално решение с отворен код, SSL VPN за сигурни комуникации. Може да се използва за отдалечен достъп или комуникация между различни сървъри или центрове за данни. Може да се инсталира локално или в облака, в различни операционни системи и може да бъде конфигуриран с много опции за сигурност.

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

Например, можете да създадете две виртуални машини, една on-prem и друга в облака, и те биха могли да бъдат мост за свързване на вашата локална мрежа към облачната мрежа на базата данни чрез Peer-to- Peer VPN връзка.

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

За възела на базата данни ще използваме екземпляр на Amazon EC2 с следната конфигурация:

  • ОС:Ubuntu Server 18.04
  • Обществен IP адрес:18.224.138.210
  • Частен IP адрес:172.31.30.248/20
  • Отворени TCP портове:22, 3306, 1194

Как да инсталирате OpenVPN на Ubuntu Server 18.04

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

И така, нека започнем с инсталирането на OpenVPN пакетите.

$ apt install openvpn easy-rsa

Тъй като OpenVPN използва сертификати за криптиране на вашия трафик, ще ви трябва EasyRSA за тази задача. Това е CLI помощна програма за създаване на главен сертифициращ орган и искане и подписване на сертификати, включително под-CA и списъци за анулиране на сертификати.

Забележка:Налична е нова версия на EasyRSA, но за да запазим фокуса върху инсталацията на OpenVPN, нека използваме версията EasyRSA, налична в хранилището на Ubuntu 18.04 (EasyRSA версия 2.2.2- 2).

Предишната команда ще създаде директорията /etc/openvpn/ за конфигурацията на OpenVPN и директорията /usr/share/easy-rsa/ със скриптовете и конфигурацията на EasyRSA.

За да улесним тази задача, нека създадем символна връзка към пътя на EasyRSA в директорията OpenVPN (или можете просто да я копирате):

$ ln -s /usr/share/easy-rsa /etc/openvpn/

Сега трябва да конфигурирате EasyRSA и да създадете своите сертификати. Отидете до местоположението на EasyRSA и създайте резервно копие за файла „vars“:

$ cd /etc/openvpn/easy-rsa

$ cp vars vars.bak

Редактирайте този файл и променете следните редове според вашата информация:

$ vi vars

export KEY_COUNTRY="US"

export KEY_PROVINCE="CA"

export KEY_CITY="SanFrancisco"

export KEY_ORG="Fort-Funston"

export KEY_EMAIL="[email protected]"

export KEY_OU="MyOrganizationalUnit"

След това създайте нова символна връзка към файла openssl:

$ cd /etc/openvpn/easy-rsa

$ ln -s openssl-1.0.0.cnf openssl.cnf

Сега приложете файла vars:

$ cd /etc/openvpn/easy-rsa

$ . vars

ЗАБЕЛЕЖКА:Ако стартирате ./clean-all, ще направя rm -rf на /etc/openvpn/easy-rsa/keys

Изпълнете скрипта за почистване на всички:

$ ./clean-all

И създайте ключа на Diffie-Hellman (DH):

$ ./build-dh

Generating DH parameters, 2048 bit long safe prime, generator 2

This is going to take a long time

.....................................................................................................................................................................+

Това последно действие може да отнеме няколко секунди и когато приключи, ще имате нов DH файл в директорията „ключове“ в директорията EasyRSA.

$ ls /etc/openvpn/easy-rsa/keys

dh2048.pem

Сега нека създадем CA сертификатите.

$ ./build-ca

Generating a RSA private key

..+++++

...+++++

writing new private key to 'ca.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

...

Това ще създаде ca.crt (публичен сертификат) и ca.key (частен ключ). Публичният сертификат ще се изисква на всички сървъри за свързване с VPN.

$ ls /etc/openvpn/easy-rsa/keys

ca.crt  ca.key

Сега имате създаден CA, нека създадем сертификата на сървъра. В този случай ще го наречем „openvpn-server“:

$ ./build-key-server openvpn-server

Generating a RSA private key

.......................+++++

........................+++++

writing new private key to 'openvpn-server.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

...

Certificate is to be certified until Dec 23 22:44:02 2029 GMT (3650 days)

Sign the certificate? [y/n]:y



1 out of 1 certificate requests certified, commit? [y/n]y



Write out database with 1 new entries

Data Base Updated

Това ще създаде CRT, CSR и Key файловете за OpenVPN сървъра:

$ ls /etc/openvpn/easy-rsa/keys

openvpn-server.crt  openvpn-server.csr openvpn-server.key

Сега трябва да създадете клиентския сертификат и процесът е доста подобен:

$ ./build-key openvpn-client-1

Generating a RSA private key

.........................................................................................+++++

.....................+++++

writing new private key to 'openvpn-client-1.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

...

Certificate is to be certified until Dec 24 01:45:39 2029 GMT (3650 days)

Sign the certificate? [y/n]:y



1 out of 1 certificate requests certified, commit? [y/n]y



Write out database with 1 new entries

Data Base Updated

Това ще създаде CRT, CSR и Key файловете за OpenVPN клиента:

$ ls /etc/openvpn/easy-rsa/keys

openvpn-client-1.csr  openvpn-client-1.crt openvpn-client-1.key

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

Конфигуриране на OpenVPN сървър

Както споменахме, инсталацията на OpenVPN ще създаде директорията /etc/openvpn, където ще добавите конфигурационните файлове както за сървърни, така и за клиентски роли, и има примерен конфигурационен файл за всяка една в / usr/share/doc/openvpn/examples/sample-config-files/, така че можете да копирате файловете на споменатото място и да ги променяте, както желаете.

В този случай ще използваме само конфигурационния файл на сървъра, тъй като това е OpenVPN сървър:

$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

$ gunzip /etc/openvpn/server.conf.gz

Сега нека видим файл с основна конфигурация на сървъра:

$ cat /etc/openvpn/server.conf

port 1194  

# Which TCP/UDP port should OpenVPN listen on?

proto tcp  

# TCP or UDP server?

dev tun  

# "dev tun" will create a routed IP tunnel,"dev tap" will create an ethernet tunnel.

ca /etc/openvpn/easy-rsa/keys/ca.crt  

# SSL/TLS root certificate (ca).

cert /etc/openvpn/easy-rsa/keys/openvpn-server.crt  

# Certificate (cert).

key /etc/openvpn/easy-rsa/keys/openvpn-server.key  

# Private key (key). This file should be kept secret.

dh /etc/openvpn/easy-rsa/keys/dh2048.pem  

# Diffie hellman parameters.

server 10.8.0.0 255.255.255.0  

# Configure server mode and supply a VPN subnet.

push "route 172.31.16.0 255.255.240.0"

# Push routes to the client to allow it to reach other private subnets behind the server.

keepalive 20 120  

# The keepalive directive causes ping-like messages to be sent back and forth over the link so that each side knows when the other side has gone down.

cipher AES-256-CBC  

# Select a cryptographic cipher.

persist-key  

persist-tun

# The persist options will try to avoid accessing certain resources on restart that may no longer be accessible because of the privilege downgrade.

status /var/log/openvpn/openvpn-status.log  

# Output a short status file.

log /var/log/openvpn/openvpn.log  

# Use log or log-append to override the default log location.

verb 3  

# Set the appropriate level of log file verbosity.

Забележка:Променете пътищата на сертификата според вашата среда.

И след това стартирайте услугата OpenVPN, като използвате създадения конфигурационен файл:

$ systemctl start [email protected]

Проверете дали услугата слуша в правилния порт:

$ netstat -pltn |grep openvpn

tcp        0 0 0.0.0.0:1194            0.0.0.0:* LISTEN   20002/openvpn

Накрая, в OpenVPN сървъра, трябва да добавите IP пренасочващата линия във файла sysctl.conf, за да разрешите VPN трафика:

$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

И стартирайте:

$ sysctl -p

net.ipv4.ip_forward = 1

Сега нека видим как да конфигурирате OpenVPN клиент да се свързва с тази нова VPN.

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

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

Копирайте файла client.conf от /usr/share/doc/openvpn/examples/sample-config-files/ на съответното място и го променете, както желаете.

$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/

Ще ви трябват и следните сертификати, създадени по-рано, за да конфигурирате VPN клиента:

ca.crt

openvpn-client-1.crt

openvpn-client-1.key

И така, копирайте тези файлове на вашата локална машина или виртуална машина. Ще трябва да добавите това местоположение на файловете в конфигурационния файл на VPN клиента.

Сега нека видим основен клиентски конфигурационен файл:

$ cat /etc/openvpn/client.conf

client  

# Specify that we are a client

dev tun  

# Use the same setting as you are using on the server.

proto tcp  

# Use the same setting as you are using on the server.

remote 18.224.138.210 1194  

# The hostname/IP and port of the server.

resolv-retry infinite  

# Keep trying indefinitely to resolve the hostname of the OpenVPN server.

nobind  

# Most clients don't need to bind to a specific local port number.

persist-key  

persist-tun

# Try to preserve some state across restarts.

ca /Users/sinsausti/ca.crt  

cert /Users/sinsausti/openvpn-client-1.crt

key /Users/sinsausti/openvpn-client-1.key

# SSL/TLS parms.

remote-cert-tls server  

# Verify server certificate.

cipher AES-256-CBC  

# Select a cryptographic cipher.

verb 3  

# Set log file verbosity.

Забележка:Променете пътищата на сертификата според вашата среда.

Можете да използвате този файл за свързване към OpenVPN сървъра от различни операционни системи като Linux, macOS или Windows.

В този пример ще използваме приложението Tunnelblick за свързване от клиент на macOS. Tunnelblick е безплатен графичен потребителски интерфейс с отворен код за OpenVPN на macOS. Той осигурява лесен контрол на OpenVPN клиенти. Той идва с всички необходими пакети като OpenVPN, EasyRSA и драйвери за тун/кран.

Тъй като конфигурационните файлове на OpenVPN имат разширения .tblk, .ovpn или .conf, Tunnelblick може да чете всички тях.

За да инсталирате конфигурационен файл, плъзнете го и го пуснете върху иконата Tunnelblick в лентата с менюта или в списъка с конфигурации в раздела „Конфигурации“ на прозореца „Подробности за VPN“.

И след това натиснете „Свързване“.

Сега трябва да имате някои нови маршрути във вашата клиентска машина:

$ netstat -rn # or route -n on Linux OS

Destination        Gateway Flags        Netif Expire

10.8.0.1/32        10.8.0.5 UGSc         utun5

10.8.0.5           10.8.0.6 UH           utun5

172.31.16/20       10.8.0.5 UGSc         utun5

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

$ mysql -p -h172.31.30.248

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 13

Server version: 8.0.18-9 Percona Server (GPL), Release '9', Revision '53e606f'



Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.



Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



mysql>

Работи. Сега имате защитен трафик с помощта на VPN, за да се свържете с вашия възел на базата данни.

Заключение

Защитата на вашите данни е задължителна, ако осъществявате достъп до тях през интернет, локално или в смесена среда. Трябва да знаете как да криптирате и защитите своя отдалечен достъп.

Както можете да видите, с OpenVPN можете да достигнете до отдалечената база данни, като използвате локалната мрежа чрез криптирана връзка, използвайки самоподписани сертификати. Така че OpenVPN изглежда страхотна опция за тази задача. Това е решение с отворен код и инсталирането/конфигурирането е доста лесно. Използвахме основна конфигурация на OpenVPN сървър, така че можете да потърсите по-сложна конфигурация в официалната документация на OpenVPN, за да подобрите своя OpenVPN сървър.


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

  2. Как да сравним две колони в MySQL

  3. CURRENT_DATE Примери – MySQL

  4. Как да получите данни за последните 12 месеца в MySQL

  5. Подреждане по реда на стойностите в SQL IN() клауза