В этом разделе содержатся рекомендации, соблюдение которых позволит настроить Zabbix безопасным образом.
Практики, описанные здесь, не являются обязательными для работы Zabbix. Они рекомендуются для повышения безопасности системы.
Принцип наименьших привилегий всегда должен всегда быть использован для Zabbix. Принцип подразумевает, что учётные записи пользователей (в веб-интерфейсе Zabbix) или пользователь процесса (Zabbix сервер/прокси или агент) имеют привилегии, необходимые только для выполнения предусмотренных функций. Другими словами, учётные записи пользователей всегда должны иметь минимально возможное количество необходимых привилегий.
Предоставление дополнительных разрешений пользователю «zabbix» откроет ему доступ до файлов конфигурации и выполнения операций, которые могут скомпрометировать общую безопасность всей инфраструктуры.
При реализации принципа наименьших привилегий необходимо учитывать типы пользователей веб-интерфейса. Важно понимать, что хотя у пользователя с типом "Администратор" меньше привилегий, чем у пользователя с типом "Супер-администратор", у него (тем не менее) есть доступ к административным функциям, позволяющим управлять конфигурацией и выполнять пользовательские скрипты.
Некоторая информация доступна даже непривилегированным пользователям. Например, хотя раздел Администрирование → Скрипты недоступен для пользователей с типом, отличным от Супер-администратор, но сами скрипты доступны для получения посредством Zabbix API. Во избежание раскрытия конфиденциальной информации, доступной в глобальных скриптах, нужно ограничивать доступ к скриптам и не использовать в них конфиденциальную информацию (например, данные доступа и т.д.).
В конфигурации по умолчанию процессы Zabbix сервера и Zabbix агента совместно используют одну учётную запись «zabbix». Если вы хотите убедиться, что агент не сможет получить доступ к конфиденциальной информации из конфигурации сервера (например, данные подключения к базе данных), агента необходимо запускать из-под другого пользователя:
UTF-8 является единственной кодировкой, которая поддерживается Zabbix. Она, как известно, работает без каких-либо проблем с безопасностью. Пользователи должны знать, что существуют известные проблемы с безопасностью при использовании некоторых других кодировок.
При использовании инсталятора Windows рекомендуется использовать предоставляемые инсталятором пути по умолчанию, поскольку применение пользовательских путей без надлежащим образом назначенных прав может скомпрометировать безопасность вашей инсталляции.
Смотрите Советы по безопасности Zabbix и базу данных CVE.
На системах на базе RHEL, установите пакет mod_ssl
:
Создайте директорию для SSL ключей:
Создайте 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, чтобы применить изменения:
На системах на основе RHEL, добавьте виртуальный хост в файл конфигурации Apache (/etc/httpd/conf/httpd.conf
) и настройте постоянную переадресацию для корневого каталога на Zabbix SSL URL. Обратите внимание, что example.com следует заменить на фактическое имя сервера.
# Добавьте строки:
<VirtualHost *:*>
ServerName example.com
Redirect permanent / https://example.com
</VirtualHost>
Перезапустите сервис Apache, чтобы применить изменения:
Чтобы защитить веб-интерфейс Zabbix от атак, понижающих версию протокола, мы рекомендуем включить HSTS политику на веб-сервере.
Чтобы включить HSTS политику для веб-интерфейса вашего Zabbix в конфигурации Apache, выполните седующие шаги:
1. Найдите файл конфигурации виртуальных хостов:
/etc/httpd/conf/httpd.conf
на системах на базе RHEL/etc/apache2/sites-available/000-default.conf
на Debian/Ubuntu2. Добавьте следующую директиву к файл конфигурации ваших виртуальных хостов:
3. Перезапустите службу Apache, чтобы применить изменения:
# на системах на базе RHEL:
systemctl restart httpd.service
# на Debian/Ubuntu:
systemctl restart apache2.service
Чтобы защитить интерфейс 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/Ubuntu2. Добавьте следующую директиву в ваш файл конфигурации виртуальных хостов:
<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 (используется как пример):
Подпись PHP (HTTP заголовок X-Powered-By ) можно отключить, изменив файл конфигурации php.ini (подпись отключена по умолчанию):
Чтобы изменения файлов конфигурации вступили в силу, необходимо перезапустить веб-сервер.
Дополнительного уровня безопасности можно достичь, используя mod_security (пакет libapache2-mod-security2) с Apache. mod_security позволяет полностью удалить подпись сервера вместо удаления лишь версии из подписи сервера. После установки mod_security, подпись можно изменить на любое значение, исправив "SecServerSignature" на любое желаемое значение.
Пожалуйста, обратитесь к документации по вашему веб-серверу для того, чтобы узнать, как удалять/изменять подписи к программному обеспечению.
Рекомендуется отключить страницы ошибок по умолчанию, чтобы избежать раскрытия информации. По умолчанию веб-сервер использует встроенные страницы ошибок:
Как часть процесса по улучшению защищенности веб-сервера, используемые по умолчанию страницы ошибок необходимо заменить/удалить. Можно использовать директиву "ErrorDocument", чтобы задать пользовательскую страницу/текст для веб-сервера Apache (используется как пример).
Пожалуйста, обратитесь к документации по вашему веб-серверу для того, чтобы узнать как заменять/удалять используемые по умолчанию страницы ошибок.
Рекомендуется удалить тестовую страницу веб-сервера, чтобы избежать раскрытия информации. По умолчанию, корневой каталог веб-сервера содержит тестовую страницу с именем index.html (Apache2 на Ubuntu используется как пример):
Как часть процесса по улучшению защищенности веб-сервера, тестовую страницу необходимо удалить или сделать недоступной.
По умолчанию, в конфигурации Zabbix Использовать HTTP заголовок X-Frame-Options имеет значение SAMEORIGIN
. Это означает, что содержимое может быть загружено только во фрейм с таким же источником, как и у самой страницы.
Элементы веб-интерфейса Zabbix, которые извлекают содержимое с внешних URL-адресов (а именно, виджет панели URL), отображают полученное содержимое в так называемой песочнице (sandbox), при этом все ограничения песочницы включены.
Такие настройки улучшают безопасность веб-интерфейса Zabbix и обеспечивают защиту от XSS и кликджекинг атак. Пользователи Супер-администраторы могут изменить параметры Использовать sandbox атрибут в iframe and Использовать HTTP заголовок X-Frame-Options по мере необходимости. Пожалуйста, тщательно взвесьте риски и преимущества перед изменением настроек по умолчанию. Отключать полностью песочницу iframe или HTTP-заголовок X-Frame-Options не рекомендуется.
Zabbix агент на Windows, скомпилированный с OpenSSL, попытается получить доступ к файлу конфигурации SSL в c:\openssl-64bit. Директория "openssl-64bit" на диске C: может быть создана непривилегированными пользователями.
Поэтому для повышения безопасности системы, необходимо создать данную директорию вручную и убрать доступ на запись для пользователей, не являющихся администраторами.
Пожалуйста, обратите внимание, что имена директорий будут отличаться на 32-битных и 64-битных версиях Windows.
Для повышения сложности атак методом перебора пароля, рекомендуется ограничить доступ к файлу ui/data/top_passwords.txt
, изменив конфигурацию веб-сервера. В данном файле находится список самых распространённых и контекстно-зависимых паролей, используемый для ограничения возможности пользователей от использования подобных паролей в случае, если параметр Избегать легко угадываемых паролей включён в политике паролей.
Например, в NGINX доступ к файлу может быть ограничен при помощи директивы location
:
В Apache - используя файл .htacess
: