1 הגדרות הצפנת MySQL
סקירה כללית
סעיף זה מספק מספר דוגמאות לתצורת הצפנה עבור 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
...