1 MySQL encryption configuration

סקירה כללית

סעיף זה מספק מספר דוגמאות לתצורת הצפנה עבור CentOS 8.2 ו-MySQL 8.0.21 ויכולים לשמש כמדריך להתחלה מהירה עבור הצפנת החיבור למסד הנתונים.

::: שימו לב חשוב אם מארח MySQL מוגדר ל-localhost, אפשרויות ההצפנה לא יהיו זמין. במקרה זה קשר בין Zabbix frontend לבין מסד הנתונים משתמש בקובץ socket (ב-Unix) או בזיכרון משותף (ב-Windows) ו לא ניתן להצפין. :::

רשימת ההצפנה השילובים אינם מוגבלים לאלה המפורטים בדף זה. ישנם הרבה יותר שילובים זמינים.

דרישות מוקדמות

התקן את מסד הנתונים של MySQL מתוך הרשמית מאגר.

ראה MySQL תיעוד לפרטים כיצד להשתמש ב-MySQL repo.

שרת MySQL מוכן לקבל חיבורים מאובטחים באמצעות חתימה עצמית תְעוּדָה.

כדי לראות אילו משתמשים משתמשים בחיבור מוצפן, הפעל את הפעולות הבאות שאילתה (יש להפעיל את סכימת הביצועים):

 mysql> SELECT sbt.variable_value AS tls_version, t2.variable_value צופן AS, processlist_user AS user, processlist_host AS host
                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_version' ו-t2.variable_name = 'Ssl_cipher'
                ORDER BY tls_version;

מצב נדרש

תצורת MySQL

גרסאות מודרניות של מסד הנתונים מוכנות מהקופסה עבור 'נדרש' מצב הצפנה. א אישור בצד השרת ייווצר לאחר ההגדרה וההפעלה הראשונית.

צור משתמשים ותפקידים עבור הרכיבים העיקריים:

 mysql> צור משתמש
         'zbx_srv'@'%' מזוהה עם mysql_native_password על ידי '<strong_password>',
         'zbx_web'@'%' מזוהה עם mysql_native_password על ידי '<strong_password>'
         דורש SSL
         היסטוריית סיסמאות 5;
       
        mysql> CREATE ROLE 'zbx_srv_role', 'zbx_web_role';
       
        mysql> GRANT SELECT, עדכן, מחק, הוספה, יצירה, זרוק, שינוי, אינדקס, הפניות על zabbix.* TO 'zbx_srv_role';
        mysql> GRANT SELECT, עדכן, מחק, 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'@'%';

שימו לב, פרוטוקול X.509 אינו משמש לבדיקת זהות, אלא את המשתמש מוגדר להשתמש רק בחיבורים מוצפנים. ראה MySQL תיעוד לפרטים נוספים על הגדרת משתמשים.

הפעל כדי לבדוק חיבור (לא ניתן להשתמש בחיבור שקע לבדיקת מאובטח חיבורים):

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

בדוק את המצב הנוכחי ואת חבילות הצופן הזמינות:

 מצב mysql>
        --------------
        mysql גרסה 8.0.21 עבור לינוקס ב-x86_64 (שרת קהילה MySQL - GPL)
       
        מזהה חיבור: 62
        מסד נתונים נוכחי:
        משתמש נוכחי: [email protected]
        SSL: הצופן בשימוש הוא TLS_AES_256_GCM_SHA384
       
       
        mysql> הצג סטטוס הפעלה כמו 'Ssl_cipher_list'\G;
        **************************** 1. שורה ******************** *******
        Variable_name: Ssl_cipher_list
        RSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCMD-SHA256:AES128-GCMD-SHA256 SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-DHE25AES:SHA25A GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA:DHE128-A SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES256-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA:AES128-GCM-SHA256:AES256-GCM-SHA3684:ASHAES2156:A2684:AES2684:A2684:A2684:A2684:A2684 AES128-SHA
        שורה אחת בסט (0.00 שניות)
       
        שְׁגִיאָה:
        לא צוינה שאילתה

חזיתי

כדי לאפשר הצפנה לתחבורה בלבד עבור חיבורים בין Zabbix ממשק קצה ומסד הנתונים:

  • בדוק הצפנת TLS של מסד נתונים
  • השאר את אמת אישור מסד נתונים לא מסומן

שרת

כדי לאפשר הצפנה לתחבורה בלבד עבור חיבורים בין שרת ל- את מסד הנתונים, הגדר את /etc/zabbix/zabbix_server.conf:

 ...
        DBHost=10.211.55.9
        DBName=zabbix
        DBUser=zbx_srv
        DBPassword=<strong_password>
        DBTLSConnect=נדרש
        ...

אמת את מצב CA

העתק את ה-MySQL CA הנדרש לשרת החזית של Zabbix, הקצה תקין הרשאות לאפשר לשרת האינטרנט לקרוא קובץ זה.

וודא שמצב CA לא עובד על SLES 12 ו-RHEL 7 עקב ספריות MySQL ישנות יותר.

חזיתי

כדי לאפשר הצפנה עם אימות אישור עבור חיבורים בין חזית Zabbix למסד הנתונים:

  • בדוק הצפנת מסד נתונים TLS ו-אמת את אישור מסד הנתונים
  • ציין נתיב לקובץ TLS CA של מסד נתונים

לחלופין, ניתן להגדיר זאת ב-/etc/zabbix/web/zabbix.conf.php:

 ...
        $DB['ENCRYPTION'] = נכון;
        $DB['KEY_FILE'] = '';
        $DB['CERT_FILE'] = '';
        $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
        $DB['VERIFY_HOST'] = false;
        $DB['CIPHER_LIST'] = '';
        ...

פתרון בעיות של משתמש באמצעות כלי שורת הפקודה כדי לבדוק אם החיבור קיים אפשרי עבור המשתמש הנדרש:

 $ mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=REQUIRED --ssl-ca=/var/lib/mysql/ca.pem

שרת

כדי לאפשר הצפנה עם אימות אישור עבור חיבורים בין שרת Zabbix למסד הנתונים, הגדר /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
        ...

ודא מצב מלא

תצורת MySQL

הגדר אפשרות תצורת שרת MySQL CE (/etc/my.cnf.d/server-tls.cnf) אל:

 [mysqld]
        ...
        # בדוגמאות אלה מפתחות ממוקמים בספריית MySQL CE datadir
        ssl_ca=ca.pem
        ssl_cert=server-cert.pem
        ssl_key=server-key.pem
       
        require_secure_transport=פועל
        tls_version=TLSv1.3
        ...

מפתחות עבור שרת ולקוח MySQL CE (חזית Zabbix) צריכים להיות נוצר באופן ידני לפי תיעוד MySQl CE: יצירת SSL ואישורי RSA ומפתחות באמצעות MySQL או יצירת אישורי SSL ומפתחות באמצעות openssl

::: שימו לב חשוב אישור שרת MySQL צריך להכיל את שדה Common Name מוגדר לשם FQDN שכן ממשק Zabbix ישתמש ב- שם DNS לתקשורת עם מסד הנתונים או כתובת ה-IP של מסד הנתונים מנחה. :::

צור משתמש MySQL:

 mysql> צור משתמש
          'zbx_srv'@'%' מזוהה עם mysql_native_password על ידי '<strong_password>',
          'zbx_web'@'%' מזוהה עם mysql_native_password על ידי '<strong_password>'
          דורש X509
          היסטוריית סיסמאות 5;

בדוק אם אפשר להיכנס עם אותו משתמש:

 $ 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

חזיתי

כדי לאפשר הצפנה עם אימות מלא לחיבורים בין חזית ה-Zabix ומסד הנתונים:

  • בדוק את הצפנת TLS של מסד נתונים ואמת את אישור מסד הנתונים
  • ציין נתיב לקובץ מפתח TLS של מסד נתונים
  • ציין נתיב לקובץ TLS CA של מסד נתונים
  • ציין נתיב לקובץ האישור של מסד נתונים TLS

שימו לב, אימות מארח מסד נתונים מסומן ומאפור - זה לא ניתן לדלג על השלב עבור MySQL.

::: הערה אזהרה רשימת צופנים צריך להיות ריק, כך שחזית הקצה והשרת יוכלו לנהל משא ומתן על אחד הנדרש מהנתמך על ידי שני הקצוות. :::

לחלופין, ניתן להגדיר זאת ב-/etc/zabbix/web/zabbix.conf.php:

 ...
        // משמש לחיבור TLS עם רשימת צופן מוגדרת בקפדנות.
        $DB['ENCRYPTION'] = נכון;
        $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'] = נכון;
        -AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GC';
        ...
        // או
        ...
        // משמש לחיבור TLS ללא רשימת צופן מוגדרת - נבחר על ידי שרת MySQL
        $DB['ENCRYPTION'] = נכון;
        $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'] = נכון;
        $DB['CIPHER_LIST'] = '';
        ...

שרת

כדי לאפשר הצפנה עם אימות מלא לחיבורים בין שרת Zabbix ומסד הנתונים, הגדר /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
        ...