6 Безопасное подключение к веб-интерфейсу

Обзор

В этом разделе приведены шаги по настройке Zabbix и примеры конфигурации для защищённых TLS-соединений между веб-интерфейсом Zabbix и сервером Zabbix.

Настройка

По умолчанию обмен данными между веб-интерфейсом Zabbix и сервером Zabbix не шифруется. Для повышения безопасности включите TLS на обеих сторонах. Ниже приведен пример самого простого способа сделать это.

1. Сгенерируйте сертификаты и ключи.

Создайте рабочий каталог:

sudo mkdir -p /etc/zabbix/ssl && cd /etc/zabbix/ssl

Создайте сертификат CA (измените значение MyZabbixCA в соответствии с фактическим common name):

sudo openssl genrsa -out ca.key 4096
sudo openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=MyZabbixCA/"

Сгенерируйте закрытый ключ и сертификат для сервера Zabbix (измените значение zabbix-server.example.com в соответствии с фактическим common name):

sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr -subj "/CN=zabbix-server.example.com/"
sudo openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out server.crt

Сгенерируйте закрытый ключ и сертификат для веб-интерфейса Zabbix (измените значение zabbix-frontend-node в соответствии с фактическим common name):

sudo openssl genrsa -out frontend.key 2048
sudo openssl req -new -key frontend.key -out frontend.csr -subj "/CN=zabbix-frontend-node/"
sudo openssl x509 -req -days 365 -in frontend.csr -CA ca.crt -CAkey ca.key -CAcreateserial -sha256 -out frontend.crt

2. Установите правильные разрешения.

Для сервера Zabbix (измените владельца/группу в соответствии с пользователем демона сервера Zabbix в вашем дистрибутиве):

sudo chown root:zabbix /etc/zabbix/ssl/server.{crt,key} /etc/zabbix/ssl/ca.crt
sudo chmod 640 /etc/zabbix/ssl/server.key
sudo chmod 644 /etc/zabbix/ssl/server.crt /etc/zabbix/ssl/ca.crt

Для веб-интерфейса (измените владельца/группу в соответствии с пользователем веб-сервера в вашем дистрибутиве):

sudo chown root:www-data /etc/zabbix/ssl/frontend.{crt,key}
sudo chmod 640 /etc/zabbix/ssl/frontend.key
sudo chmod 644 /etc/zabbix/ssl/frontend.crt

3. Настройте сервер Zabbix.

В zabbix_server.conf добавьте:

TLSFrontendAccept=cert
TLSCertFile=/etc/zabbix/ssl/server.crt
TLSKeyFile=/etc/zabbix/ssl/server.key
TLSCAFile=/etc/zabbix/ssl/ca.crt
# Optionally:
# TLSFrontendCertIssuer=/CN=MyZabbixCA/
# TLSFrontendCertSubject=/CN=zabbix-frontend-node/

Затем перезапустите сервер:

sudo systemctl restart zabbix-server

4. Настройте веб-интерфейс Zabbix.

Во время установки веб-интерфейса включите опцию Encrypt connections from Web interface (а также опцию Verify server certificate issuer and subject, если необходимо) и заполните поля TLS CA file, TLS key file, TLS certificate file (а также Server TLS certificate issuer и Server TLS certificate subject, если необходимо):

Параметр Описание
TLS CA file Укажите полный путь к файлу сертификата центра сертификации (CA), используемому для проверки сертификата сервера.
TLS key file Укажите полный путь к файлу закрытого ключа клиента, соответствующего сертификату клиента.
TLS certificate file Укажите полный путь к файлу сертификата клиента, если требуется взаимная TLS-аутентификация.
Server TLS certificate issuer Укажите distinguished Name (DN) издателя для сопоставления с сертификатом сервера.
Server TLS certificate subject Укажите distinguished Name (DN) субъекта для сопоставления с сертификатом сервера.

В существующих установках отредактируйте следующие поля в zabbix.conf.php:

$ZBX_SERVER_TLS['ACTIVE'] = '1';
$ZBX_SERVER_TLS['CA_FILE'] = '/etc/zabbix/ssl/ca.crt';
$ZBX_SERVER_TLS['KEY_FILE'] = '/etc/zabbix/ssl/frontend.key';
$ZBX_SERVER_TLS['CERT_FILE'] = '/etc/zabbix/ssl/frontend.crt';
// Optionally:
// $ZBX_SERVER_TLS['CERTIFICATE_ISSUER']  = '/CN=MyZabbixCA/';
// $ZBX_SERVER_TLS['CERTIFICATE_SUBJECT'] = '/CN=zabbix-server.example.com/';

5. Проверьте шифрование, убедившись, что в веб-интерфейсе Zabbix или в файле журнала сервера Zabbix отсутствуют сообщения об ошибках:

tail -f /var/log/zabbix/zabbix_server.log