2. Наилучшие практики для безопасной установки Zabbix

Обзор

В этом разделе содержатся рекомендации, соблюдение которых позволит настроить Zabbix безопасным образом.

Практики, описанные здесь, не являются обязательными для работы Zabbix. Они рекомендуются для повышения безопасности системы.

Контроль доступа

Принцип наименьших привилегий

Принцип наименьших привилегий всегда должен всегда быть использован для Zabbix. Принцип подразумевает, что учётные записи пользователей (в веб-интерфейсе Zabbix) или пользователь процесса (Zabbix сервер/прокси или агент) имеют привилегии, необходимые только для выполнения предусмотренных функций. Другими словами, учётные записи пользователей всегда должны иметь минимально возможное количество необходимых привилегий.

Предоставление дополнительных разрешений пользователю «zabbix» откроет ему доступ до файлов конфигурации и выполнения операций, которые могут скомпрометировать общую безопасность всей инфраструктуры.

При реализации принципа наименьших привилегий необходимо учитывать типы пользователей веб-интерфейса. Важно понимать, что хотя у пользователя с типом "Администратор" меньше привилегий, чем у пользователя с типом "Супер-администратор", у него (тем не менее) есть доступ к административным функциям, позволяющим управлять конфигурацией и выполнять пользовательские скрипты.

Некоторая информация доступна даже непривилегированным пользователям. Например, хотя раздел АдминистрированиеСкрипты недоступен для пользователей с типом, отличным от Супер-администратор, но сами скрипты доступны для получения посредством Zabbix API. Во избежание раскрытия конфиденциальной информации, доступной в глобальных скриптах, нужно ограничивать доступ к скриптам и не использовать в них конфиденциальную информацию (например, данные доступа и т.д.).

Защищённый пользователь для Zabbix агента

В конфигурации по умолчанию процессы Zabbix сервера и Zabbix агента совместно используют одну учётную запись «zabbix». Если вы хотите убедиться, что агент не сможет получить доступ к конфиденциальной информации из конфигурации сервера (например, данные подключения к базе данных), агента необходимо запускать из-под другого пользователя:

  1. Создайте защищённого пользователя
  2. Укажите этого пользователя в файле конфигурации агента (параметр «User»)
  3. Перезапустите агента с правами администратора. Привилегии администратора сбросятся на указанного пользователя.

Кодировка UTF-8

UTF-8 является единственной кодировкой, которая поддерживается Zabbix. Она, как известно, работает без каких-либо проблем с безопасностью. Пользователи должны знать, что существуют известные проблемы с безопасностью при использовании некоторых других кодировок.

Пути инсталятора Windows

При использовании инсталятора Windows рекомендуется использовать предоставляемые инсталятором пути по умолчанию, поскольку применение пользовательских путей без надлежащим образом назначенных прав может скомпрометировать безопасность вашей инсталляции.

Советы по безопасности Zabbix и база данных CVE

Смотрите Советы по безопасности Zabbix и базу данных CVE.

Настройка SSL для веб-интерфейса Zabbix

На системах на базе RHEL, установите пакет mod_ssl:

dnf install mod_ssl

Создайте директорию для SSL ключей:

mkdir -p /etc/httpd/ssl/private
       chmod 700 /etc/httpd/ssl/private

Создайте SSL сертификат:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/private/apache-selfsigned.key -out /etc/httpd/ssl/apache-selfsigned.crt

Заполните запросы соответствующим образом. Самая важная строка здесь та, которая запрашивает Common Name. Вам необходимо указать доменное имя, которое вы хотите связать с вашим сервером. Вместо него вы можете указать публичный IP адрес, если у вас отсутствует доменное имя.

Country Name (2 letter code) [XX]:
       State or Province Name (full name) []:
       Locality Name (eg, city) [Default City]:
       Organization Name (eg, company) [Default Company Ltd]:
       Organizational Unit Name (eg, section) []:
       Common Name (eg, your name or your server's hostname) []:example.com
       Email Address []:

Отредактируйте файл конфигурации Apache SSL (/etc/httpd/conf.d/ssl.conf):

DocumentRoot "/usr/share/zabbix"
       ServerName example.com:443
       SSLCertificateFile /etc/httpd/ssl/apache-selfsigned.crt
       SSLCertificateKeyFile /etc/httpd/ssl/private/apache-selfsigned.key

Перезапустите сервис Apache, чтобы применить изменения:

systemctl restart httpd.service

Защита веб-сервера

Включение Zabbix в корневом каталоге URL

На системах на основе RHEL, добавьте виртуальный хост в файл конфигурации Apache (/etc/httpd/conf/httpd.conf) и настройте постоянную переадресацию для корневого каталога на Zabbix SSL URL. Обратите внимание, что example.com следует заменить на фактическое имя сервера.

# Добавьте строки:
       
       <VirtualHost *:*>
           ServerName example.com
           Redirect permanent / https://example.com
       </VirtualHost>

Перезапустите сервис Apache, чтобы применить изменения:

systemctl restart httpd.service

Включение строгой транспортной безопасности HTTP (HSTS) на веб-сервере

Чтобы защитить веб-интерфейс Zabbix от атак, понижающих версию протокола, мы рекомендуем включить HSTS политику на веб-сервере.

Чтобы включить HSTS политику для веб-интерфейса вашего Zabbix в конфигурации Apache, выполните седующие шаги:

1. Найдите файл конфигурации виртуальных хостов:

  • /etc/httpd/conf/httpd.conf на системах на базе RHEL
  • /etc/apache2/sites-available/000-default.conf на Debian/Ubuntu

2. Добавьте следующую директиву к файл конфигурации ваших виртуальных хостов:

<VirtualHost *:*>
           Header set Strict-Transport-Security "max-age=31536000"
       </VirtualHost>

3. Перезапустите службу Apache, чтобы применить изменения:

# на системах на базе RHEL:
       systemctl restart httpd.service
       
       # на Debian/Ubuntu:
       systemctl restart apache2.service

Включение политики безопасности контента (CSP) на веб-сервере

Чтобы защитить интерфейс Zabbix от межсайтового скриптинга (Cross Site Scripting, XSS), внедрения данных (data injection) и подобных атак, мы рекомендуем включить политику безопасности контента (Content Security Policy, CSP) на веб-сервере. Для этого настройте веб-сервер на возврат HTTP-заголовка [en].

Следующая конфигурация заголовка CSP предназначена только для установки веб-интерфейса Zabbix по умолчанию и для случаев, когда весь контент происходит из домена сайта (за исключением поддоменов). Другая конфигурация заголовка CSP может потребоваться, если вы, например, настраиваете виджет URL для отображения контента из поддоменов сайта или внешних доменов, переключаете с OpenStreetMap на другой картографический движок или добавляете внешние CSS или виджеты.

Чтобы включить CSP для вашего веб-интерфейса Zabbix в конфигурации Apache, выполните следующие действия:

1. Найдите ваш файл конфигурации виртуальных хостов:

  • /etc/httpd/conf/httpd.conf на системах на базе RHEL
  • /etc/apache2/sites-available/000-default.conf на Debian/Ubuntu

2. Добавьте следующую директиву в ваш файл конфигурации виртуальных хостов:

<VirtualHost *:*>
           Header set Content-Security-Policy: "default-src 'self' *.openstreetmap.org; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self' data: *.openstreetmap.org; style-src 'self' 'unsafe-inline'; base-uri 'self'; form-action 'self';"
       </VirtualHost>

3. Перезапустите службу Apache, чтобы применить изменения:

# на системах на базе RHEL:
       systemctl restart httpd.service
       
       # на Debian/Ubuntu
       systemctl restart apache2.service

Отключение отображения информации о веб-сервере

Как часть процесса по улучшению защищенности веб-сервера, рекомендуется отключить все подписи веб-сервера. По умолчанию веб-сервер раскрывает подпись программного обеспечения:

Эту подпись можно отключить, добавив две строки в файл конфигурации Apache (используется как пример):

ServerSignature Off
       ServerTokens Prod

Подпись PHP (HTTP заголовок X-Powered-By ) можно отключить, изменив файл конфигурации php.ini (подпись отключена по умолчанию):

expose_php = Off

Чтобы изменения файлов конфигурации вступили в силу, необходимо перезапустить веб-сервер.

Дополнительного уровня безопасности можно достичь, используя mod_security (пакет libapache2-mod-security2) с Apache. mod_security позволяет полностью удалить подпись сервера вместо удаления лишь версии из подписи сервера. После установки mod_security, подпись можно изменить на любое значение, исправив "SecServerSignature" на любое желаемое значение.

Пожалуйста, обратитесь к документации по вашему веб-серверу для того, чтобы узнать, как удалять/изменять подписи к программному обеспечению.

Отключение страниц ошибок веб-сервера по умолчанию

Рекомендуется отключить страницы ошибок по умолчанию, чтобы избежать раскрытия информации. По умолчанию веб-сервер использует встроенные страницы ошибок:

Как часть процесса по улучшению защищенности веб-сервера, используемые по умолчанию страницы ошибок необходимо заменить/удалить. Можно использовать директиву "ErrorDocument", чтобы задать пользовательскую страницу/текст для веб-сервера Apache (используется как пример).

Пожалуйста, обратитесь к документации по вашему веб-серверу для того, чтобы узнать как заменять/удалять используемые по умолчанию страницы ошибок.

Удаление тестовой страницы веб-сервера

Рекомендуется удалить тестовую страницу веб-сервера, чтобы избежать раскрытия информации. По умолчанию, корневой каталог веб-сервера содержит тестовую страницу с именем index.html (Apache2 на Ubuntu используется как пример):

Как часть процесса по улучшению защищенности веб-сервера, тестовую страницу необходимо удалить или сделать недоступной.

Настройка заголовка HTTP ответа X-Frame-Options

По умолчанию, в конфигурации Zabbix Использовать HTTP заголовок X-Frame-Options имеет значение SAMEORIGIN. Это означает, что содержимое может быть загружено только во фрейм с таким же источником, как и у самой страницы.

Элементы веб-интерфейса Zabbix, которые извлекают содержимое с внешних URL-адресов (а именно, виджет панели URL), отображают полученное содержимое в так называемой песочнице (sandbox), при этом все ограничения песочницы включены.

Такие настройки улучшают безопасность веб-интерфейса Zabbix и обеспечивают защиту от XSS и кликджекинг атак. Пользователи Супер-администраторы могут изменить параметры Использовать sandbox атрибут в iframe and Использовать HTTP заголовок X-Frame-Options по мере необходимости. Пожалуйста, тщательно взвесьте риски и преимущества перед изменением настроек по умолчанию. Отключать полностью песочницу iframe или HTTP-заголовок X-Frame-Options не рекомендуется.

Отзыв доступа на запись к файлу конфигурации SSL на Windows

Zabbix агент на Windows, скомпилированный с OpenSSL, попытается получить доступ к файлу конфигурации SSL в c:\openssl-64bit. Директория "openssl-64bit" на диске C: может быть создана непривилегированными пользователями.

Поэтому для повышения безопасности системы, необходимо создать данную директорию вручную и убрать доступ на запись для пользователей, не являющихся администраторами.

Пожалуйста, обратите внимание, что имена директорий будут отличаться на 32-битных и 64-битных версиях Windows.

Криптография

Скрытие файла со списком распространённых паролей

Для повышения сложности атак методом перебора пароля, рекомендуется ограничить доступ к файлу ui/data/top_passwords.txt, изменив конфигурацию веб-сервера. В данном файле находится список самых распространённых и контекстно-зависимых паролей, используемый для ограничения возможности пользователей от использования подобных паролей в случае, если параметр Избегать легко угадываемых паролей включён в политике паролей.

Например, в NGINX доступ к файлу может быть ограничен при помощи директивы location:

location = /data/top_passwords.txt {
       deny all;
       return 404;
       }

В Apache - используя файл .htacess:

<Files "top_passwords.txt">
       Order Allow,Deny
       Deny from all
       </Files>