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.