Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie OpenVPN do zabezpieczania dostępu do klastra baz danych w chmurze

Internet to niebezpieczne miejsce, zwłaszcza jeśli pozostawiasz swoje dane niezaszyfrowane lub bez odpowiedniego zabezpieczenia. Istnieje kilka sposobów zabezpieczenia danych; wszystko na różnych poziomach. Zawsze powinieneś mieć silne zasady dotyczące zapory sieciowej, szyfrowania danych i silnych zasad dotyczących haseł. Innym sposobem zabezpieczenia danych jest dostęp do nich za pomocą połączenia VPN.

Wirtualna sieć prywatna (lub VPN) to metoda połączenia stosowana w celu zwiększenia bezpieczeństwa i prywatności w sieciach prywatnych i publicznych, chroniąc Twoje dane.

OpenVPN to w pełni funkcjonalne, otwarte rozwiązanie SSL VPN do zabezpieczania komunikacji. Może być używany do zdalnego dostępu lub komunikacji między różnymi serwerami lub centrami danych. Można go zainstalować lokalnie lub w chmurze, w różnych systemach operacyjnych i można go skonfigurować z wieloma opcjami bezpieczeństwa.

W tym blogu utworzymy połączenie VPN, aby uzyskać dostęp do bazy danych w chmurze. Istnieją różne sposoby osiągnięcia tego celu, w zależności od infrastruktury i ilości zasobów sprzętowych, które chcesz wykorzystać do tego zadania.

Możesz na przykład utworzyć dwie maszyny wirtualne, jedną lokalną, a drugą w chmurze, i mogą one stanowić most łączący Twoją sieć lokalną z siecią chmurową bazy danych za pośrednictwem sieci Peer-to- Połączenie VPN równorzędne.

Inną prostszą opcją może być połączenie z serwerem VPN zainstalowanym w węźle bazy danych przy użyciu połączenia klienta VPN skonfigurowanego na komputerze lokalnym. W tym przypadku skorzystamy z tej drugiej opcji. Zobaczysz, jak skonfigurować serwer OpenVPN w węźle bazy danych działającym w chmurze i będziesz mieć do niego dostęp za pomocą klienta VPN.

W przypadku węzła bazy danych użyjemy instancji Amazon EC2 z następująca konfiguracja:

  • System operacyjny:Ubuntu Server 18.04
  • Publiczny adres IP:18.224.138.210
  • Prywatny adres IP:172.31.30.248/20
  • Otwarte porty TCP:22, 3306, 1194

Jak zainstalować OpenVPN na Ubuntu Server 18.04

Pierwszym zadaniem jest zainstalowanie serwera OpenVPN w węźle bazy danych. W rzeczywistości używana technologia bazy danych nie ma znaczenia, ponieważ pracujemy na warstwie sieciowej, ale do celów testowych po skonfigurowaniu połączenia VPN załóżmy, że używamy Percona Server 8.0.

Zacznijmy więc od zainstalowania pakietów OpenVPN.

$ apt install openvpn easy-rsa

Ponieważ OpenVPN używa certyfikatów do szyfrowania ruchu, do tego zadania będziesz potrzebować EasyRSA. Jest to narzędzie CLI do tworzenia głównego urzędu certyfikacji oraz żądania i podpisywania certyfikatów, w tym podrzędnych urzędów certyfikacji i list unieważnionych certyfikatów.

Uwaga:Dostępna jest nowa wersja EasyRSA, ale aby skupić się na instalacji OpenVPN, użyjmy wersji EasyRSA dostępnej w bankomacie repozytorium Ubuntu 18.04 (wersja EasyRSA 2.2.2- 2)).

Poprzednie polecenie utworzy katalog /etc/openvpn/ dla konfiguracji OpenVPN oraz katalog /usr/share/easy-rsa/ ze skryptami i konfiguracją EasyRSA.

Aby ułatwić to zadanie, utwórzmy dowiązanie symboliczne do ścieżki EasyRSA w katalogu OpenVPN (lub po prostu skopiuj go):

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

Teraz musisz skonfigurować EasyRSA i utworzyć certyfikaty. Przejdź do lokalizacji EasyRSA i utwórz kopię zapasową pliku „vars”:

$ cd /etc/openvpn/easy-rsa

$ cp vars vars.bak

Edytuj ten plik i zmień następujące wiersze zgodnie z posiadanymi informacjami:

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

Następnie utwórz nowe dowiązanie symboliczne do pliku openssl:

$ cd /etc/openvpn/easy-rsa

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

Teraz zastosuj plik vars:

$ cd /etc/openvpn/easy-rsa

$ . vars

UWAGA:Jeśli uruchomisz ./clean-all, wykonam rm -rf na /etc/openvpn/easy-rsa/keys

Uruchom skrypt czyszczenia wszystkiego:

$ ./clean-all

I utwórz klucz Diffie-Hellman (DH):

$ ./build-dh

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

This is going to take a long time

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

Ta ostatnia czynność może zająć kilka sekund, a po jej zakończeniu będziesz mieć nowy plik DH w katalogu „keys” w katalogu EasyRSA.

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

dh2048.pem

Teraz utwórzmy certyfikaty 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.

...

Spowoduje to utworzenie ca.crt (certyfikat publiczny) i ca.key (klucz prywatny). Certyfikat publiczny będzie wymagany na wszystkich serwerach, aby połączyć się z VPN.

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

ca.crt  ca.key

Teraz masz już utworzony CA, utwórzmy certyfikat serwera. W tym przypadku nazwiemy go „serwer openvpn”:

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

Spowoduje to utworzenie plików CRT, CSR i kluczy dla serwera OpenVPN:

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

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

Teraz musisz utworzyć certyfikat klienta, a proces jest dość podobny:

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

Spowoduje to utworzenie plików CRT, CSR i kluczy dla klienta OpenVPN:

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

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

W tym momencie wszystkie certyfikaty są gotowe. Następnym krokiem będzie utworzenie konfiguracji OpenVPN serwera i klienta.

Konfiguracja serwera OpenVPN

Jak wspomnieliśmy, instalacja OpenVPN utworzy katalog /etc/openvpn, w którym dodasz pliki konfiguracyjne zarówno dla ról serwera, jak i klienta, i będzie zawierał przykładowy plik konfiguracyjny dla każdego z nich w / usr/share/doc/openvpn/examples/sample-config-files/, dzięki czemu możesz kopiować pliki we wspomnianej lokalizacji i modyfikować je według własnego uznania.

W tym przypadku użyjemy tylko pliku konfiguracyjnego serwera, ponieważ jest to serwer OpenVPN:

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

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

Teraz zobaczmy podstawowy plik konfiguracyjny serwera:

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

Uwaga:zmień ścieżki certyfikatów zgodnie ze środowiskiem.

A następnie uruchom usługę OpenVPN za pomocą utworzonego pliku konfiguracyjnego:

$ systemctl start [email protected]

Sprawdź, czy usługa nasłuchuje na właściwym porcie:

$ netstat -pltn |grep openvpn

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

Na koniec, na serwerze OpenVPN musisz dodać linię przekierowania IP w pliku sysctl.conf, aby zezwolić na ruch VPN:

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

I uruchom:

$ sysctl -p

net.ipv4.ip_forward = 1

Teraz zobaczmy, jak skonfigurować klienta OpenVPN do łączenia się z nową siecią VPN.

Konfiguracja klienta OpenVPN

W poprzednim punkcie wspomnieliśmy o przykładowych plikach konfiguracyjnych OpenVPN i użyliśmy serwera, więc teraz zróbmy to samo, ale użyjmy pliku konfiguracyjnego klienta.

Skopiuj plik client.conf z /usr/share/doc/openvpn/examples/sample-config-files/ do odpowiedniej lokalizacji i zmień go, jak chcesz.

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

Do skonfigurowania klienta VPN potrzebne będą również następujące certyfikaty utworzone wcześniej:

ca.crt

openvpn-client-1.crt

openvpn-client-1.key

Więc skopiuj te pliki na komputer lokalny lub maszynę wirtualną. Musisz dodać tę lokalizację plików w pliku konfiguracyjnym klienta VPN.

Teraz zobaczmy podstawowy plik konfiguracyjny klienta:

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

Uwaga:zmień ścieżki certyfikatów zgodnie ze środowiskiem.

Możesz użyć tego pliku, aby połączyć się z serwerem OpenVPN z różnych systemów operacyjnych, takich jak Linux, macOS lub Windows.

W tym przykładzie użyjemy aplikacji Tunnelblick, aby połączyć się z klienta macOS. Tunnelblick to darmowy, graficzny interfejs użytkownika typu open source dla OpenVPN w systemie macOS. Zapewnia łatwą kontrolę klientów OpenVPN. Zawiera wszystkie niezbędne pakiety, takie jak OpenVPN, EasyRSA i sterowniki tun/tap.

Ponieważ pliki konfiguracyjne OpenVPN mają rozszerzenia .tblk, .ovpn lub .conf, Tunnelblick może je wszystkie odczytać.

Aby zainstalować plik konfiguracyjny, przeciągnij go i upuść na ikonę Tunnelblick na pasku menu lub na liście konfiguracji w zakładce „Konfiguracje” w oknie „Szczegóły VPN”.

Następnie naciśnij „Połącz”.

Teraz powinieneś mieć kilka nowych tras na swoim komputerze klienckim:

$ 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

Jak widać, istnieje trasa do lokalnej sieci bazy danych przez interfejs VPN, więc dostęp do usługi bazy danych powinien być możliwy przy użyciu adresu IP prywatnej bazy danych.

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

To działa. Teraz masz zabezpieczony ruch za pomocą VPN, aby połączyć się z węzłem bazy danych.

Wnioski

Ochrona danych jest koniecznością, jeśli uzyskujesz do nich dostęp przez Internet, lokalnie lub w środowisku mieszanym. Musisz wiedzieć, jak zaszyfrować i zabezpieczyć zdalny dostęp.

Jak widać, dzięki OpenVPN możesz uzyskać dostęp do zdalnej bazy danych za pomocą sieci lokalnej poprzez szyfrowane połączenie przy użyciu certyfikatów z podpisem własnym. Tak więc OpenVPN wygląda na świetną opcję do tego zadania. Jest to rozwiązanie typu open source, a instalacja/konfiguracja jest dość łatwa. Użyliśmy podstawowej konfiguracji serwera OpenVPN, więc możesz poszukać bardziej złożonej konfiguracji w oficjalnej dokumentacji OpenVPN, aby ulepszyć swój serwer 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. MySQL match() przeciwko() — kolejność według trafności i kolumny?

  2. 10 najlepszych praktyk w MySQL

  3. Łączenie się z bazą danych MySQL w .NET

  4. Neo4j - Usuń węzeł za pomocą Cypher

  5. Czy istnieje RZECZYWISTA różnica wydajności między kluczami podstawowymi INT i VARCHAR?