1 MySQL encryption configuration

Áttekintés

Ez a szakasz több titkosítási konfigurációs példát mutat be a következőhöz CentOS 8.2 és MySQL 8.0.21, és rövid útmutatóként használható az adatbázishoz való kapcsolat titkosítása.

Ha A MySQL gazdagép localhost-ra van állítva, a titkosítási beállítások nem lesznek elérhető. Ebben az esetben kapcsolat a Zabbix frontend és a adatbázis socket fájlt (Unix rendszeren) vagy megosztott memóriát (Windows rendszeren) használ, és nem titkosítható.

A titkosítások listája kombinációk nem korlátozódnak az ezen az oldalon felsoroltakra. Vannak a sokkal több kombináció elérhető.

Előtanulmányok

Telepítse a MySQL adatbázist a official tárhely.

Lásd: MySQL dokumentáció a MySQL repo használatának részleteiért.

A MySQL szerver készen áll a biztonságos kapcsolatok elfogadására önaláírt eszköz használatával bizonyítvány.

Ha látni szeretné, hogy mely felhasználók használnak titkosított kapcsolatot, futtassa a következőt lekérdezés (a teljesítménysémát be kell kapcsolni):

mysql> SELECT sbt.variable_value AS tls_version, t2.variable_value AS titkosítás, processlist_user AS user, processlist_host AS gazdagép
               FROM performance_schema.status_by_thread AS sbt
               JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
               JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id
               WHERE sbt.variable_name = 'Ssl_verzió' és t2.variable_name = 'Ssl_cipher'
               ORDER BY tls_version;

Kötelező mód

MySQL configuration

Modern versions of the database are ready out-of-the-box for 'required' encryption mode. A server-side certificate will be created after initial setup and launch.

Create users and roles for the main components:

mysql> CREATE USER   
        'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>',   
        'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>'
        REQUIRE SSL   
        PASSWORD HISTORY 5; 
       
       mysql> CREATE ROLE 'zbx_srv_role', 'zbx_web_role'; 
       
       mysql> GRANT SELECT, UPDATE, DELETE, INSERT, CREATE, DROP, ALTER, INDEX, REFERENCES ON zabbix.* TO 'zbx_srv_role'; 
       mysql> GRANT SELECT, UPDATE, DELETE, INSERT ON zabbix.* TO 'zbx_web_role'; 
       
       mysql> GRANT 'zbx_srv_role' TO 'zbx_srv'@'%'; 
       mysql> GRANT 'zbx_web_role' TO 'zbx_web'@'%'; 
       
       mysql> SET DEFAULT ROLE 'zbx_srv_role' TO 'zbx_srv'@'%'; 
       mysql> SET DEFAULT ROLE 'zbx_web_role' TO 'zbx_web'@'%';

Note, that the X.509 protocol is not used to check identity, but the user is configured to use only encrypted connections. See MySQL documentation for more details about configuring users.

Run to check connection (socket connection cannot be used to test secure connections):

$ mysql -u zbx_srv -p -h 10.211.55.9 --ssl-mode=REQUIRED 

Check current status and available cipher suites:

mysql> status
       --------------
       mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL)
       
       Connection id: 62
       Current database:
       Current user: [email protected]
       SSL: Cipher in use is TLS_AES_256_GCM_SHA384
       
       
       mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher_list'\G;
       *************************** 1. row ***************************
       Variable_name: Ssl_cipher_list
       Value: TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES256-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA
       1 row in set (0.00 sec)
       
       ERROR:
       No query specified

Frontend

Csak szállítási titkosítás engedélyezése a Zabbix közötti kapcsolatokhoz frontend és az adatbázis:

  • Ellenőrizze az adatbázis TLS-titkosítását
  • Hagyja bejelöletlenül az Verify adatbázis tanúsítványt

Szerver

Csak szállítási titkosítás engedélyezése a szerver és a kiszolgáló közötti kapcsolatokhoz az adatbázisban állítsa be az /etc/zabbix/zabbix_server.conf fájlt:

...
       DBHost=10.211.55.9
       DBName=zabbix
       DBUser=zbx_srv
       DBPassword=<strong_password>
       DBTLSConnect=telező
       ...

Ellenőrizze a CA módot

Másolja a szükséges MySQL CA-t a Zabbix előtér-kiszolgálóra, és rendelje hozzá a megfelelőt engedélyeket, hogy a webszerver elolvashassa ezt a fájlt.

Ellenőrizze, hogy a CA mód nem működik SLES 12 és RHEL 7 esetén régebbi MySQL-könyvtárak.

Frontend

A titkosítás engedélyezése a kapcsolatok tanúsítvány-ellenőrzésével A Zabbix frontend és az adatbázis között:

  • Ellenőrizze az Adatbázis TLS-titkosítást és az Az adatbázis-tanúsítvány ellenőrzését
  • Adja meg az adatbázis TLS CA-fájl elérési útját

Alternatív megoldásként ez beállítható az /etc/zabbix/web/zabbix.conf.php fájlban:

...
       $DB['TITKOSÍTÁS'] = igaz;
       $DB['KEY_FILE'] = ';
       $DB['CERT_FILE'] = ';
       $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
       $DB['VERIFY_HOST'] = hamis;
       $DB['CIPHER_LIST'] = ';
       ...

A felhasználó hibaelhárítása parancssori eszközzel ellenőrizze, hogy a kapcsolat megvan-e lehetséges a kívánt felhasználó számára:

$ mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=KÖTELEZŐ --ssl-ca=/var/lib/mysql/ca.pem

Szerver

A titkosítás engedélyezése a kapcsolatok tanúsítvány-ellenőrzésével a Zabbix szerver és az adatbázis között, konfigurálja /etc/zabbix/zabbix_server.conf:

...
       DBHost=10.211.55.9
       DBName=zabbix
       DBUser=zbx_srv
       DBPassword=<strong_password>
       DBTLSConnect=verify_ca
       DBTLSCAFile=/etc/ssl/mysql/ca.pem
       ...

Teljes mód ellenőrzése

MySQL konfiguráció

Állítsa be a MySQL CE szerver konfigurációs beállítását (/etc/my.cnf.d/server-tls.cnf) ide:

[mysqld]
       ...
       # ebben a példában a kulcsok a MySQL CE datadir könyvtárában találhatók
       ssl_ca=ca.pem
       ssl_cert=server-cert.pem
       ssl_key=server-key.pem
       
       request_secure_transport=BE
       tls_version=TLSv1.3
       ...

A MySQL CE szerver és a kliens (Zabbix frontend) kulcsai legyenek kézzel készített a MySQl CE dokumentáció szerint: SSL létrehozása és RSA tanúsítványok és kulcsok használatával MySQL vagy SSL-tanúsítványok és kulcsok létrehozása a használatával openssl

A MySQL szerver tanúsítványának tartalmaznia kell a A Közös név mező az FQDN névre van állítva, mivel a Zabbix frontend a következőt fogja használni DNS név az adatbázissal való kommunikációhoz vagy az adatbázis IP-címe házigazda.

MySQL felhasználó létrehozása:

mysql> FELHASZNÁLÓ LÉTREHOZÁSA
         'zbx_srv'@'%' A mysql_native_password AZONOSÍTÁSA '<strong_password>',
         'zbx_web'@'%' A mysql_native_password AZONOSÍTÁSA '<strong_password>'
         SZÜKSÉGES X509
         JELSZÓTÖRTÉNET 5;

Ellenőrizze, hogy be lehet-e jelentkezni ezzel a felhasználóval:

$ mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=VERIFY_IDENTITY --ssl-ca=/var/lib/mysql/ca.pem --ssl-cert=/var/lib/mysql/client- cert.pem --ssl-key=/var/lib/mysql/client-key.pem

Frontend

közötti kapcsolatok titkosításának engedélyezése teljes ellenőrzéssel Zabbix frontend és az adatbázis:

  • Ellenőrizze az adatbázis TLS titkosítását és ellenőrizze az adatbázis-tanúsítványt
  • Adja meg az adatbázis TLS kulcsfájljának elérési útját
  • Adja meg az adatbázis TLS CA-fájl elérési útját
  • Adja meg az adatbázis TLS-tanúsítványfájl elérési útját

Vegye figyelembe, hogy az Adatbázis gazdagép ellenőrzése be van jelölve és ki van szürkítve – ez lépés nem hagyható ki a MySQL esetében.

Rejtjellista üresnek kell lennie, hogy a frontend és a szerver egyeztetni tudja a szükségeset a mindkét végén megtámasztottból.

Alternatív megoldásként ez beállítható az /etc/zabbix/web/zabbix.conf.php fájlban:

...
       // TLS-kapcsolathoz használják szigorúan meghatározott titkosítási listával.
       $DB['TITKOSÍTÁS'] = igaz;
       $DB['KEY_FILE'] = '/etc/ssl/mysql/client-key.pem';
       $DB['CERT_FILE'] = '/etc/ssl/mysql/client-cert.pem';
       $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
       $DB['VERIFY_HOST'] = igaz;
       $DB['CIPHER_LIST'] = 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA -AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GC';
       ...
       // vagy
       ...
       // TLS-kapcsolathoz használatos titkosítási lista definiálása nélkül – a MySQL szerver által kiválasztott
       $DB['TITKOSÍTÁS'] = igaz;
       $DB['KEY_FILE'] = '/etc/ssl/mysql/client-key.pem';
       $DB['CERT_FILE'] = '/etc/ssl/mysql/client-cert.pem';
       $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
       $DB['VERIFY_HOST'] = igaz;
       $DB['CIPHER_LIST'] = ';
       ...

Szerver

közötti kapcsolatok titkosításának engedélyezése teljes ellenőrzéssel Zabbix szerver és adatbázis, konfigurálás /etc/zabbix/zabbix_server.conf:

...
       DBHost=10.211.55.9
       DBName=zabbix
       DBUser=zbx_srv
       DBPassword=<strong_password>
       DBTLSConnect=verify_full
       DBTLSCAFile=/etc/ssl/mysql/ca.pem
       DBTLSCertFile=/etc/ssl/mysql/client-cert.pem
       DBTLSKeyFile=/etc/ssl/mysql/client-key.pem
       ...