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

Обзор

В этом разделе приведены рекомендации по безопасной настройке веб-сервера.

Принудительное перенаправление корневого URL на Zabbix SSL

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

# Добавьте строки:

<VirtualHost *:*>
    ServerName example.com
    Redirect permanent / https://example.com
</VirtualHost>

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

systemctl restart httpd.service

Включение HTTP Strict Transport Security (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

При настройке Zabbix важно принудительно задавать атрибуты secure и SameSite для cookie сеанса, чтобы повысить безопасность и предотвратить атаки типа cross-site request forgery (CSRF). Однако принудительное использование SameSite=Strict может вызывать проблемы в некоторых сценариях, например:

  • Виджеты URL на панели мониторинга отображают сообщение "user not logged in" при встраивании iframe с тем же доменом.
  • Пользователи, обращающиеся к панели мониторинга по HTTP вместо HTTPS, могут столкнуться с проблемами входа.
  • Невозможно делиться URL на определенные разделы меню Zabbix или узлы сети.

Чтобы смягчить эти проблемы, пользователям должен быть доступен способ настройки политики SameSite.

1. Безопасные cookie

Установка флага secure гарантирует, что cookie передаются только по HTTPS, предотвращая их раскрытие через незашифрованные соединения.

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

Для Apache:

Header always edit Set-Cookie ^(.*)$ $1;Secure

Для Nginx:

proxy_cookie_path / "/; Secure";

Убедитесь, что веб-интерфейс Zabbix открывается по HTTPS; в противном случае cookie с флагом Secure не будут отправляться.

2. Настройка атрибута SameSite

Параметры веб-сервера также могут принудительно задавать атрибут SameSite:

Для Apache:

<IfModule mod_headers.c>
    Header onsuccess edit Set-Cookie (.*) "$1; SameSite=Strict"
</IfModule>

Для Nginx (версия 1.19.3+):

proxy_cookie_flags ~ samesite=Strict; # Replace ~ with 'zbx_session' for specificity

Включение Content Security Policy (CSP) на веб-сервере

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

Следующая конфигурация заголовка CSP предназначена только для стандартной установки веб-интерфейса Zabbix и для случаев, когда весь контент поступает из домена сайта (за исключением поддоменов). Может потребоваться другая конфигурация заголовка CSP, если вы, например, настраиваете виджет URL для отображения контента из поддоменов сайта или внешних доменов, переключаетесь с OpenStreetMap на другой картографический движок или добавляете внешний CSS или виджеты. Если вы используете метод многофакторной аутентификации Duo Universal Prompt multi-factor authentication, обязательно добавьте "duo.com" в директиву CSP в файле конфигурации вашего виртуального хоста.

Чтобы включить 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 с Apache (пакет libapache2-mod-security2). Этот инструмент позволяет удалять сигнатуру сервера, а не только убирать из нее версию. Сигнатуру сервера можно изменить на любое значение, задав "SecServerSignature" нужное значение после установки mod_security.

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

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

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

По умолчанию веб-сервер использует встроенные страницы ошибок:

Эти страницы ошибок по умолчанию следует заменить или удалить. Например, директива "ErrorDocument" может использоваться для задания пользовательской страницы или текста ошибки для веб-сервера Apache.

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

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

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

По умолчанию в webroot веб-сервера Apache находится тестовая страница index.html:

Обратитесь к документации вашего веб-сервера, чтобы найти сведения о том, как удалить стандартные тестовые страницы.

Установите HTTP-заголовок ответа X-Frame-Options

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

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

Эти настройки повышают безопасность веб-интерфейса Zabbix и обеспечивают защиту от атак XSS и clickjacking. Пользователи с ролью Super admin могут изменять параметры Use iframe sandboxing и Use X-Frame-Options HTTP header по мере необходимости. Пожалуйста, внимательно взвесьте риски и преимущества перед изменением настроек по умолчанию. Полностью отключать iframe sandboxing или HTTP-заголовок X-Frame-Options не рекомендуется.

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

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

Чтобы ограничить доступ к файлу top_passwords.txt, измените конфигурацию вашего веб-сервера.

В Apache доступ к файлу можно ограничить с помощью файла .htaccess:

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

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

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