Mysql over tls på ubuntu topp 10.Topp 10

Mysql over tls på ubuntu topp 10.Topp 10
Tradisjonelt pleide databaseserveren din og fronten din å være på det samme isolerte nettverket. Dette tillot frontend å snakke med databasen over en ukryptert kanal uten mye bekymring for sikkerhet. Alt dette har endret seg det siste året med økningen av sky og distribuerte systemer. Appene dine er ikke lenger begrenset i et enkelt isolert nettverk. Nå, mer enn noen gang, må kommunikasjonen mellom fronten og databasen krypteres og sikres.Du kan oppnå dette ved å enten bruke en VPN for å virtualisere et isolert nettverk. Frontend og databasen kan være en del av denne VPN, og kommunikasjonen mellom dem vil være sikret. Eller du kan bruke TLS, for å kryptere dataene som blir sendt til og fra databasen, på samme måte som nettsteder sikrer kommunikasjonen med nettleserne ved hjelp av HTTPS. Vi installerer MySQL og setter det opp slik at spørsmål og dataflyt via TLS.

Installere MySQL -serveren

Guiden antar at du har en server satt av til MySQL -bruk med en tilgjengelig statisk IP -adresse, kanskje på skyen eller et sted på ditt lokale nettverk. Følgende kommandoer, i dette underavsnittet, skal utføres på serverens skall. La oss raskt installere og konfigurere mysql på Ubuntu.

$ sudo apt oppdatering
$ sudo apt install mysql-server
$ sudo mysql_secure_installation

Den siste kommandoen kjører et skript for å endre noen av de usikre standardene til MySQL. Først ville være en anmodning om å installere en passordvalideringsplugin. Dette vil sjekke om det nye passordet du setter for brukere er sterkt nok eller ikke. Du kan velge bort denne pluginen, hvis du vil. Etter dette blir du bedt om å angi MySQL Root -brukerpassord. Gå videre og angi et sterkt resultat av rotbruker.

Trykk y | y for ja, enhver annen nøkkel for nei: n
Angi passordet for roten her.
Nytt passord:
Gå inn igjen nytt passord:

Etter dette kan du ganske mye si ja Til alle andre ledetekst i dette skriptet, når skriptet fjerner testbrukeren, fjerner testdatabasen, deaktiverer ekstern rotpålogging og til slutt laster inn sin privilegiumtabell på nytt. Når det er gjort, siden vi har ikke tillatt innlogging av ekstern rot, la oss opprette en database og en ny bruker som kan få tilgang til den databasen eksternt uten å faktisk måtte SSH (eller logge inn) i serverens UNIX/Linux Shell. Men før vi gjør det, la oss bekrefte om vår bygning av mysql har innebygd eller ikke.

Kontroller om TLS er tilgjengelig

TLS er bare tilgjengelig i MySQL hvis MySQL er samlet for å få den innebygd i den. Det er ingen dynamisk modul å laste. Så hvis du er usikker på at MySQL -pakken din har TLS installert eller ikke, kan du sjekke at ved å kjøre:

$ sudo mysql
mysql> vis variabel som '%ssl%'
+---------------+----------+
| Variabel_navn | Verdi |
+---------------+----------+
| har_openssl | Deaktivert |
| har_ssl | Deaktivert |
| SSL_CA | |
| SSL_CAPATH | |
| SSL_CERT | |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | |
+---------------+----------+
9 rader i settet (0.00 sek)

Hvis det står at variablene har_openssl og har_ssl har verdier satt til FUNKSJONSHEMMET Da har du SSL og er gode å gå (du trenger bare å aktivere det, ved å lese videre). Hvis verdiene er satt til NEI, Da må du få en annen versjon av MySQL fra pakkesjefen din eller andre steder.

mysql> exit

Konfigurere MySQL

Som standard lytter MySQL Server bare på Loopback -grensesnittet, det vil si på adressen 'Localhost' eller '127.0.0.1 ', for eksterne tilkoblinger vil vi at den også skal lytte til den offentlige statiske IP -en. For å gjøre dette åpne filen, /etc/mysql/min.CNF og legg til følgende par linjer helt på slutten av det.

..
[mysqld]
krav_secure_transport = på
Bind-adresse =

Her erstatter du Med den faktiske IP -en på serveren din. Hvis du er i tvil om hvilken IP du skal bruke, kan du bruke 0.0.0.0 for å lytte på alle grensesnitt. Start nå serveren på nytt, for at den nye konfigurasjonen skal finne sted.

$ sudo service mysql omstart

Opprette ekstern bruker

Merk: Hvis du vil bruke databasen i produksjonen, er sjansen stor for at klienten som vil koble seg til denne databasen - frontend - vil ha en statisk IP. Hvis det er tilfelle, må du erstatte prosentandelen '%' -symbol med den aktuelle klienten IP. '%' er bare et jokertegn, som betyr 'hvilken som helst verdi'. Vi vil konfigurere vår Myuser slik at den kan logge inn fra hvilken som helst IP -adresse (for eksempel den endrede IP -adressen til din innenlandske bredbåndstilkobling), som uten tvil er usikker.

$ sudo mysql
MySQL> Opprett database MyDatabase;
mysql> Opprett bruker 'myUser'@'%' identifisert med 'passord' krever SSL;
mysql> gi alt på mydatabase.* Til 'myuser'@'%';

Erstatte 'passord' med et faktisk sterkt passord, og vi har en bruker som heter Myuser som har full tilgang til databasen myDatabase.

Aktivering av TLS (også kjent som 'SSL')

Mens du er logget til MySQL -skallet som MySQL Root -brukeren, kan du sjekke tilkoblingsstatusen ved å skrive \ S:

mysql> \ s
--------------
mysql ver 14.14 Distrib 5.7.24, for Linux (x86_64) ved hjelp av redigeringsinnpakning
Tilkoblings -ID: 5
Gjeldende database:
Nåværende bruker: root@localhost
SSL: Ikke i bruk
Nåværende personsøker: stdout
Bruker outfile: "
Bruke avgrenser :;
Serverversjon: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Protokollversjon: 10
Tilkobling: Localhost via UNIX -stikkontakt
..

Vær oppmerksom på de uthevede linjene om tilkobling og SSL. Mens denne tilstanden er fin for en lokal pålogging av rotbrukeren, når vi logger inn over TLS som Myuser Tilkoblingstypen vil være over TCP/IP, ikke en rå stikkontakt, og en SSL -chiffer vil være i bruk. Det er en enkel kommando for å oppnå dette. Men la oss først avslutte MySQL -ledeteksten.

mysql> exit

Nå løp,

$ sudo mysql_ssl_rsa_setup --uid = mysql
$ sudo service mysql omstart


Når dette er gjort, kan du se på har_ssl variabel en gang til.

$ sudo mysql
MySQL> Vis variabler som '%SSL%';
+---------------+-----------------+
| Variabel_navn | Verdi |
+---------------+-----------------+
| har_openssl | Ja |
| har_ssl | Ja |
| SSL_CA | ca.pem |
| SSL_CAPATH | |
| SSL_CERT | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | servernøkkel.pem |
+---------------+-----------------+
9 rader i settet (0.01 sek)

Logg inn fra en egen MySQL -klient

Det er nye parametere som indikerer at TLS -sertifikat og nøkkel er på plass og TLS er aktivert. Nå kan du logge ut av denne maskinen, åpne en MySQL -klient på din lokale datamaskin, hvis du ikke har en (og bruker Debian eller Ubuntu) Få en MySQL Shell -klient:

$ sudo apt install mysql-client
$ mysql -u myuser -p -h

Bytt ut Myuser og Med ditt faktiske brukernavn og server -IP, skriv inn det valgte passordet ditt, og du bør være logget inn i databasen. Sjekk tilkoblingen:

mysql> \ s
--------------
mysql ver 14.14 Distrib 5.7.24, for Linux (x86_64) ved hjelp av redigeringsinnpakning
Tilkoblings -ID: 5
Gjeldende database:
Nåværende bruker: ekstern_user@youLocalip
SSL: Cipher in Use er DHE-RSA-AES256-SHA
Nåværende personsøker: stdout
Bruker outfile: "
Bruke avgrenser :;
Serverversjon: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Protokollversjon: 10
Tilkobling: via TCP/IP
Server tegn: latin1
DB Characterset: Latin1
Klientkarakterer: UTF8
Conn. Karaktersett: UTF8
TCP -port: 3306
Oppetid: 13 min 52 sek
Tråder: 2 Spørsmål: 32 Sakte spørsmål: 0 åpner: 107 Spyltbord: 1
Åpne bord: 100 spørsmål per sekund AVG: 0.038
--------------

Du kan se at det nå bruker RSA for å kryptere trafikken og tilkoblingen er til en spesifikk IP over TCP/IP. Nå er forbindelsen din til denne MySQL -databasen sikker.

Konklusjon

Dette er den enkleste måten å sikre dine eksterne MySQL -tilkoblinger med TLS. Husk at dette ikke er det samme som å sikre en phpmyadmin -klient over TLS. Det er TLS og HTTP kombinert, og krever at du skal sikre nettgrensesnittet. Forbindelsen mellom phpmyadmin, som gjengir nettgrensesnittet ditt, og databasen kan fremdeles være ukryptert, noe som er bra så lenge de er på samme server.

Du kan lære mer om TLS -tilkoblingen, underliggende CAS, sertifikater og nøkkelstyring i de offisielle dokumentene til MySQL.