sql >> Database teknologi >  >> RDS >> Mysql

Brug af OpenVPN til at sikre adgang til din databaseklynge i skyen

Internettet er et farligt sted, især hvis du efterlader dine data ukrypteret eller uden ordentlig sikkerhed. Der er flere måder at sikre dine data på; alle på forskellige niveauer. Du bør altid have en stærk firewallpolitik, datakryptering og en stærk adgangskodepolitik. En anden måde at sikre dine data på er ved at få adgang til dem ved hjælp af en VPN-forbindelse.

Virtuelt privat netværk (eller VPN) er en forbindelsesmetode, der bruges til at tilføje sikkerhed og privatliv til private og offentlige netværk og beskytte dine data.

OpenVPN er en fuldt udstyret, open source, SSL VPN-løsning til sikker kommunikation. Det kan bruges til fjernadgang eller kommunikation mellem forskellige servere eller datacentre. Det kan installeres on-prem eller i skyen, i forskellige operativsystemer og kan konfigureres med mange sikkerhedsmuligheder.

I denne blog opretter vi en VPN-forbindelse for at få adgang til en database i skyen. Der er forskellige måder at nå dette mål på, afhængigt af din infrastruktur og hvor mange hardwareressourcer du vil bruge til denne opgave.

F.eks. kan du oprette to VM, en on-prem og en anden i skyen, og de kunne være en bro til at forbinde dit lokale netværk til databasens cloud-netværk via en Peer-to- Peer VPN-forbindelse.

En anden enklere mulighed kunne være at oprette forbindelse til en VPN-server installeret i databasenoden ved hjælp af en VPN-klientforbindelse konfigureret på din lokale maskine. I dette tilfælde bruger vi denne anden mulighed. Du vil se, hvordan du konfigurerer en OpenVPN-server i databasenoden, der kører i skyen, og du vil være i stand til at få adgang til den ved hjælp af en VPN-klient.

Til databasenoden bruger vi en Amazon EC2-instans med følgende konfiguration:

  • OS:Ubuntu Server 18.04
  • Offentlig IP-adresse:18.224.138.210
  • Privat IP-adresse:172.31.30.248/20
  • Åbnede TCP-porte:22, 3306, 1194

Sådan installeres OpenVPN på Ubuntu Server 18.04

Den første opgave er at installere OpenVPN-serveren i din databasenode. Faktisk betyder den anvendte databaseteknologi ikke noget, da vi arbejder på et netværkslag, men til testformål efter konfiguration af VPN-forbindelsen, lad os sige, at vi kører Percona Server 8.0.

Så lad os starte med at installere OpenVPN-pakkerne.

$ apt install openvpn easy-rsa

Da OpenVPN bruger certifikater til at kryptere din trafik, skal du bruge EasyRSA til denne opgave. Det er et CLI-værktøj til at oprette en rodcertifikatautoritet og anmode om og underskrive certifikater, inklusive under-CA'er og lister med tilbagekaldelse af certifikater.

Bemærk:Der er en ny EasyRSA-version tilgængelig, men for at holde fokus på OpenVPN-installationen, lad os bruge EasyRSA-versionen, der er tilgængelig i Ubuntu 18.04 repository atm (EasyRSA version 2.2.2- 2).

Den forrige kommando vil oprette mappen /etc/openvpn/ til OpenVPN-konfigurationen og mappen /usr/share/easy-rsa/ med EasyRSA-scripts og konfiguration.

For at gøre denne opgave lettere, lad os oprette et symbolsk link til EasyRSA-stien i OpenVPN-biblioteket (eller du kan bare kopiere det):

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

Nu skal du konfigurere EasyRSA og oprette dine certifikater. Gå til EasyRSA-placeringen og opret en sikkerhedskopi til "vars"-filen:

$ cd /etc/openvpn/easy-rsa

$ cp vars vars.bak

Rediger denne fil, og skift følgende linjer i henhold til dine oplysninger:

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

Opret derefter et nyt symbolsk link til openssl-filen:

$ cd /etc/openvpn/easy-rsa

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

Anvend nu vars-filen:

$ cd /etc/openvpn/easy-rsa

$ . vars

BEMÆRK:Hvis du kører ./clean-all, laver jeg en rm -rf på /etc/openvpn/easy-rsa/keys

Kør scriptet til at rense alt:

$ ./clean-all

Og opret Diffie-Hellman-nøglen (DH):

$ ./build-dh

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

This is going to take a long time

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

Denne sidste handling kan tage nogle sekunder, og når den er færdig, vil du have en ny DH-fil inde i "keys"-mappen i EasyRSA-mappen.

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

dh2048.pem

Lad os nu oprette CA-certifikaterne.

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

...

Dette vil oprette ca.crt (offentligt certifikat) og ca.key (privat nøgle). Det offentlige certifikat kræves på alle servere for at oprette forbindelse til VPN.

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

ca.crt  ca.key

Nu har du oprettet din CA, lad os oprette servercertifikatet. I dette tilfælde kalder vi det "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

Dette vil oprette CRT-, CSR- og nøglefilerne til OpenVPN-serveren:

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

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

Nu skal du oprette klientcertifikatet, og processen er ret ens:

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

Dette vil oprette CRT-, CSR- og nøglefilerne til OpenVPN-klienten:

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

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

På dette tidspunkt har du alle certifikaterne klar. Det næste trin vil være at oprette både server- og klient OpenVPN-konfiguration.

Konfiguration af OpenVPN-serveren

Som vi nævnte, vil OpenVPN-installationen oprette mappen /etc/openvpn, hvor du tilføjer konfigurationsfilerne for både server- og klientroller, og den har en eksempelkonfigurationsfil for hver enkelt i / usr/share/doc/openvpn/examples/sample-config-files/, så du kan kopiere filerne på den nævnte placering og ændre dem som du ønsker.

I dette tilfælde bruger vi kun serverkonfigurationsfilen, da det er en OpenVPN-server:

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

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

Lad os nu se en grundlæggende serverkonfigurationsfil:

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

Bemærk:Skift certifikatstierne i henhold til dit miljø.

Og start derefter OpenVPN-tjenesten ved hjælp af den oprettede konfigurationsfil:

$ systemctl start [email protected]

Tjek, om tjenesten lytter i den rigtige port:

$ netstat -pltn |grep openvpn

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

Til sidst, i OpenVPN-serveren, skal du tilføje IP-videresendelseslinjen i sysctl.conf-filen for at tillade VPN-trafik:

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

Og kør:

$ sysctl -p

net.ipv4.ip_forward = 1

Lad os nu se, hvordan du konfigurerer en OpenVPN-klient til at oprette forbindelse til denne nye VPN.

Konfiguration af OpenVPN-klienten

I det foregående punkt nævnte vi OpenVPN-eksempelkonfigurationsfilerne, og vi brugte serveren, så lad os nu gøre det samme, men bruge klientkonfigurationsfilen.

Kopiér filen client.conf fra /usr/share/doc/openvpn/examples/sample-config-files/ på den tilsvarende placering og skift den som du ønsker.

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

Du skal også have følgende certifikater oprettet tidligere for at konfigurere VPN-klienten:

ca.crt

openvpn-client-1.crt

openvpn-client-1.key

Så kopier disse filer til din lokale maskine eller VM. Du skal tilføje denne filplacering i VPN-klientens konfigurationsfil.

Lad os nu se en grundlæggende klientkonfigurationsfil:

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

Bemærk:Skift certifikatstierne i henhold til dit miljø.

Du kan bruge denne fil til at oprette forbindelse til OpenVPN-serveren fra forskellige operativsystemer som Linux, macOS eller Windows.

I dette eksempel bruger vi applikationen Tunnelblick til at oprette forbindelse fra en macOS-klient. Tunnelblick er en gratis, open source grafisk brugergrænseflade til OpenVPN på macOS. Det giver nem kontrol over OpenVPN-klienter. Den leveres med alle de nødvendige pakker som OpenVPN, EasyRSA og tun/tap-drivere.

Da OpenVPN-konfigurationsfilerne har filtypenavne .tblk, .ovpn eller .conf, kan Tunnelblick læse dem alle.

For at installere en konfigurationsfil skal du trække og slippe den på Tunnelblick-ikonet i menulinjen eller på listen over konfigurationer på fanen 'Konfigurationer' i vinduet 'VPN-detaljer'.

Og tryk derefter på "Forbind".

Nu skulle du have nogle nye ruter i din klientmaskine:

$ 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

Som du kan se, er der en rute til det lokale databasenetværk via VPN-grænsefladen, så du burde kunne få adgang til databasetjenesten ved hjælp af IP-adressen til den private database.

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

Det virker. Nu har du din trafik sikret ved hjælp af en VPN til at oprette forbindelse til din databasenode.

Konklusion

Beskyttelse af dine data er et must, hvis du får adgang til dem via internettet, on-prem eller i et blandet miljø. Du skal vide, hvordan du krypterer og sikrer din fjernadgang.

Som du kunne se, kan du med OpenVPN nå fjerndatabasen ved hjælp af det lokale netværk gennem en krypteret forbindelse ved hjælp af selvsignerede certifikater. Så OpenVPN ligner en god mulighed for denne opgave. Det er en open source-løsning, og installationen/konfigurationen er ret nem. Vi brugte en grundlæggende OpenVPN-serverkonfiguration, så du kan se efter mere kompleks konfiguration i den officielle OpenVPN-dokumentation for at forbedre din OpenVPN-server.


  1. Sådan bygger du en Rest API med Spring Boot ved hjælp af MySQL og JPA

  2. Er det muligt at GRUPPE BY flere kolonner ved hjælp af MySQL?

  3. Fatal fejl:Kald til udefineret funktion mysql_connect()

  4. Skift separatoren til et komma i SQLite-forespørgselsresultater