Mysql nad tls na Ubuntu top 10.Top 10

Mysql nad tls na Ubuntu top 10.Top 10
Tradycyjnie Twój serwer bazy danych i frontend znajdowały się w tej samej izolowanej sieci. To pozwoliło Frontendowi rozmawiać z bazą danych nad niezaszyfrowanym kanałem bez większego obawy o bezpieczeństwo. Wszystko to zmieniło się w ciągu ostatnich kilku lat wraz ze wzrostem systemów chmur i rozproszonych. Twoje aplikacje nie są już ograniczone w jednej izolowanej sieci. Teraz, bardziej niż kiedykolwiek, komunikacja między frontendą a bazą danych musi być zaszyfrowana i zabezpieczona.Możesz to osiągnąć, używając VPN do wirtualizacji izolowanej sieci. Frontend i baza danych może być częścią tego VPN, a komunikacja między nimi zostanie zabezpieczona. Lub możesz użyć TLS, do szyfrowania danych wysyłanych do i z bazy danych, w tym samym samym stopniu, jak witryny zabezpieczają ich komunikację z przeglądarkami za pomocą HTTPS. Będziemy instalować MySQL i konfigurujemy go tak, aby zapytania i przepływ danych za pośrednictwem TLS.

Instalowanie serwera MySQL

Przewodnik zakłada, że ​​masz serwer odłożony do użytku MySQL z dostępnym statycznym adresem IP, być może w chmurze lub gdzieś w sieci lokalnej. Następujące polecenia, w tym podsekcji, należy wykonywać na powładzie serwera. Szybko zainstaluj i skonfigurujmy MySQL na Ubuntu.

Aktualizacja $ sudo apt
$ sudo apt Zainstaluj mysql-server
$ sudo mysql_secure_instalation

Ostatnie polecenie uruchomi skrypt, aby zmienić niektóre niepewne wartości domyślne MySQL. Najpierw byłby monit o zainstalowanie wtyczki sprawdzania poprawności hasła. To sprawdziłoby, czy nowe hasło, które ustawiasz dla użytkowników, jest wystarczająco silne, czy nie. Jeśli chcesz, możesz zrezygnować z tej wtyczki. Następnie zostaniesz poproszony o ustawienie hasła użytkownika MySQL root. Śmiało i ustaw silne hasło użytkownika root.

Naciśnij y | y dla tak, każdy inny klucz dla nie: n
Prosimy o ustawienie hasła dla root tutaj.
Nowe hasło:
Wprowadź ponownie nowe hasło:

Po tym możesz prawie powiedzieć Tak Do każdego innego wiersza w tym skrypcie, ponieważ skrypt usuwa użytkownika testowego, usuwa testową bazę danych, wyłącza zdalne logowanie root i ostatecznie ponownie załaduje tabelę uprawnień. Po zrobieniu tego, ponieważ niedozwolono zdalnego logowania root, utwórzmy bazę danych i nowy użytkownik, który może uzyskać dostęp do tej bazy danych bez faktycznego SSH (lub logowania) do SSH Server Unix/Linux Shell. Ale zanim to zrobimy, sprawdźmy, czy nasza kompilacja MySQL ma wbudowane TLS, czy nie.

Sprawdzanie, czy TLS jest dostępny

TLS jest dostępny w MySQL. Nie ma modułu dynamicznego do załadowania. Więc jeśli nie masz pewności, że twój pakiet MySQL ma zainstalowany TLS, czy nie, możesz to sprawdzić, uruchamiając:

$ sudo mysql
Mysql> Pokaż zmienną, taką jak „%SSL%”
+---------------+----------+
|. Zmienna_nazwa | Wartość |
+---------------+----------+
|. have_openssl | Niepełnosprawne |
|. have_ssl | Niepełnosprawne |
|. SSL_CA | |
|. SSL_CAPATH | |
|. SSL_CERT | |
|. ssl_cipher | |
|. SSL_CRL | |
|. ssl_crlpath | |
|. ssl_key | |
+---------------+----------+
9 wierszy w zestawie (0.00 s)

Jeśli mówi, że zmienne have_openssl I have_ssl mieć ustawione wartości WYŁĄCZONY Wtedy masz SSL i jesteś gotowy (musisz tylko go włączyć, czytając dalej). Jeśli wartości są ustawione na NIE, Następnie musisz uzyskać inną wersję mysql od menedżera pakietów lub gdzie indziej.

mysql> wyjście

Konfigurowanie MySQL

Domyślnie serwer MySQL słucha tylko na interfejsie Loopback, to znaczy na adresie „LocalHost” lub „127.0.0.1 ', w przypadku zdalnych połączeń chcemy również słuchać publicznego statycznego adresu IP. Aby to otworzyć plik, /etc/mysql/my.CNF i dołącz kolejne kilka wierszy na samym końcu.


[Mysqld]
wymaga_secure_transport = ON
Address BIND =

Tutaj wymieniasz z faktycznym adresem IP twojego serwera. Jeśli masz wątpliwości, którego IP użyć, możesz użyć 0.0.0.0 Aby słuchać wszystkich interfejsów. Teraz uruchom ponownie serwer, aby miała miejsce nowa konfiguracja.

$ sudo service mysql restart

Tworzenie zdalnego użytkownika

Uwaga: Jeśli chcesz korzystać z bazy danych w produkcji, są szanse, że klient, który połączy się z tą bazą danych - Twój front - będzie miał statyczny adres IP. W takim przypadku wymień procent „%” symbolem odpowiednim klientem IP klienta. „%” to tylko dzika karta, co oznacza „dowolną wartość”. Będziemy konfigurować nasze Myuser aby mógł się zalogować z dowolnego adresu IP (na przykład zmieniającego się adresu IP twojego krajowego połączenia szerokopasmowego), który jest prawdopodobnie niepewny.

$ sudo mysql
Mysql> Utwórz bazę danych myDatabase;
mysql> Utwórz użytkownika „Myuser”@'%' identyfikowany przez „hasło” wymaga SSL;
mysql> dotacja na mydatabase.* Do „Myuser”@'%”;

Zastępować 'hasło' z faktycznym silnym hasłem i mamy nazwisko użytkownika Myuser który ma pełny dostęp do bazy danych myDatabaza.

Włączanie TLS (znane również jako „SSL”)

Podczas gdy jesteś zalogowany do powłoki MySQL jako użytkownik root MySQL, możesz sprawdzić status połączenia, wpisując \ s:

mysql> \ s
--------------
Mysql ver 14.14 Dystrybucja 5.7.24, dla Linux (x86_64) za pomocą opakowania edytline
Identyfikator połączenia: 5
Aktualna baza danych:
Obecny użytkownik: root@localHost
SSL: nie używane
Obecny pager: stdout
Korzystanie z Outfile: "
Używając delimiter :;
Wersja serwera: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Wersja protokołu: 10
Połączenie: LocalHost przez gniazdo UNIX

Zwróć uwagę na wyróżnione wiersze dotyczące połączenia i SSL. Podczas gdy ten stan jest w porządku dla lokalnego logowania użytkownika root, zanim zalogujemy się przez TLS Myuser Typ połączenia będzie ponad TCP/IP, a nie surowe gniazdo, a szyfr SSL będzie używany. Istnieje proste polecenie, aby to osiągnąć. Ale najpierw wyjdźmy z naszego myszy MySQL.

mysql> wyjście

Teraz biegnij,

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


Po zakończeniu możesz spojrzeć na zmienna Have_SSL Ponownie.

$ sudo mysql
MySQL> Pokaż zmienne takie jak „%SSL%”;
+---------------+-----------------+
|. Zmienna_nazwa | Wartość |
+---------------+-----------------+
|. have_openssl | Tak |
|. have_ssl | Tak |
|. SSL_CA | ca.PEM |
|. SSL_CAPATH | |
|. SSL_CERT | CERT SERWER.PEM |
|. ssl_cipher | |
|. SSL_CRL | |
|. ssl_crlpath | |
|. ssl_key | Key-key.PEM |
+---------------+-----------------+
9 wierszy w zestawie (0.01 s)

Logowanie z oddzielnego klienta MySQL

Istnieją nowe parametry wskazujące, że certyfikat TLS i klucz są na miejscu, a TLS jest włączony. Teraz możesz wylogować się z tego komputera, otworzyć klienta MySQL na swoim komputerze lokalnym, jeśli go nie masz (i używasz Debian lub Ubuntu), aby uzyskać klienta MySQL Shell:

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

Zastąp Myuser I Za pomocą faktycznej nazwy użytkownika i IP serwera wprowadź wybrane hasło i należy zalogować się do bazy danych. Sprawdź połączenie:

mysql> \ s
--------------
Mysql ver 14.14 Dystrybucja 5.7.24, dla Linux (x86_64) za pomocą opakowania edytline
Identyfikator połączenia: 5
Aktualna baza danych:
Bieżący użytkownik: remote_user@yourLocalip
SSL: W użyciu szyfru jest DHE-RSA-AES256-SHA
Obecny pager: stdout
Korzystanie z Outfile: "
Używając delimiter :;
Wersja serwera: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Wersja protokołu: 10
Połączenie: przez TCP/IP
Charakterystyczny serwer: Latin1
DB Cholesets: Latin1
Charakterystycznych klientów: UTF8
Conn. Postacie: UTF8
Port TCP: 3306
Czas pracy: 13 min 52 sekundy
Wątki: 2 Pytania: 32 Powolne zapytania: 0 Otwarcie: 107 Tabele spłukające: 1
Otwarte tabele: 100 zapytań na sekundę AVG: 0.038
--------------

Możesz zobaczyć, że teraz używa RSA do szyfrowania ruchu, a połączenie jest z określonym adresem IP przez TCP/IP. Teraz twoje połączenie z tą bazą danych MySQL jest bezpieczne.

Wniosek

To najprostszy sposób na zabezpieczenie zdalnych połączeń MySQL z TLS. Pamiętaj, że to nie to samo, co zabezpieczenie klienta phpMyAdmin nad TLS. To jest połączone TLS i HTTP i wymaga zabezpieczenia interfejsu internetowego. Związek między phpMyAdmin, który renderuje Twój interfejs internetowy, a bazą danych może być niezaszyfrowana, co jest w porządku, o ile są na tym samym serwerze.

Możesz dowiedzieć się więcej o połączeniu TLS, leżącym u podstaw CAS, certyfikatów i kluczowych zarządzania w oficjalnych dokumentach MySQL.