[comment]: # translation:outdated

[comment]: # ({f4bccb67-40cfdec2})
# 3. Веб-сервер

[comment]: # ({/f4bccb67-40cfdec2})

[comment]: # ({2ff4365d-129e34f5})
#### Обзор

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

[comment]: # ({/2ff4365d-129e34f5})

[comment]: # ({a38dec5b-bb3706f4})
#### Принудительное перенаправление корневого URL на использование SSL

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

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

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

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

```bash
systemctl restart httpd.service
```

[comment]: # ({/a38dec5b-bb3706f4})

[comment]: # ({3d62d250-c7ee0bb2})
#### Включение строгой транспортной безопасности HTTP (HSTS) на веб-сервере

Чтобы защитить веб-интерфейс Zabbix от атак, понижающих версию протокола, мы рекомендуем включить [HSTS](https://ru.wikipedia.org/wiki/HSTS) политику на веб-сервере.

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

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

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

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

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

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

```bash
# на системах на базе RHEL:
systemctl restart httpd.service

# на Debian/Ubuntu:
systemctl restart apache2.service
```

[comment]: # ({/3d62d250-c7ee0bb2})

[comment]: # ({09df8737-8057bf9f})
#### Принудительное применение безопасных и SameSite сеансовых файлов cookie в Zabbix

При настройке Zabbix важно принудительно применять атрибуты secure и SameSite для сеансовых файлов cookie для повышения безопасности и предотвращения атак с подделкой межсайтовых запросов (CSRF). Однако, принудительное применение ``SameSite=Strict`` может вызвать проблемы в определённых сценариях, такие как:

-   Виджеты URL панели отображают «пользователь не вошел в систему» ("user not logged in") при встраивании фреймов (iframes) того же домена.
-   Пользователи, получающие доступ к панели через 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; # Замените «~» на «zbx_session» для конкретности

[comment]: # ({/09df8737-8057bf9f})

[comment]: # ({0291801e-55d3532e})
#### Включение политики безопасности контента (CSP) на веб-сервере

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

::: noteimportant
Следующая конфигурация заголовка CSP предназначена только для установки веб-интерфейса Zabbix по умолчанию и для случаев, когда весь контент происходит из домена сайта (за исключением поддоменов).
Другая конфигурация заголовка CSP может потребоваться, если вы, например, настраиваете виджет [*URL*](/manual/web_interface/frontend_sections/dashboards/widgets/url) для отображения контента из поддоменов сайта или внешних доменов, переключаете с *OpenStreetMap* на другой картографический движок или добавляете внешние CSS или виджеты.
Если вы используете метод многофакторной аутентификации Duo Universal Prompt, обязательно добавьте «duo.com» в директиву CSP в файле конфигурации вашего виртуального хоста.
:::

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

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

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

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

```ini
<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, чтобы применить изменения:

```bash
# на системах на базе RHEL:
systemctl restart httpd.service

# на Debian/Ubuntu
systemctl restart apache2.service
```

[comment]: # ({/0291801e-55d3532e})

[comment]: # ({cc2b15aa-cd09dcd1})
#### Отключение отображения информации о веб-сервере

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

To improve security, disabling all web server signatures is recommended.

По умолчанию веб-сервер раскрывает подпись программного обеспечения:

![](../../../../assets/en/manual/installation/requirements/software_signature.png)

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

```ini
ServerSignature Off
ServerTokens Prod
```

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

```ini
expose_php = Off
```

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

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

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

[comment]: # ({/cc2b15aa-cd09dcd1})

[comment]: # ({2053690e-720052da})
#### Отключение страниц ошибок веб-сервера по умолчанию

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

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

![](../../../../assets/en/manual/installation/requirements/error_page_text.png)

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

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

[comment]: # ({/2053690e-720052da})

[comment]: # ({5dd327a4-ba1547c0})
#### Удаление тестовой страницы веб-сервера

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

По умолчанию, корневой каталог веб-сервера Apache содержит тестовую страницу с именем `index.html`:

![](../../../../assets/en/manual/installation/requirements/test_page.png)

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

[comment]: # ({/5dd327a4-ba1547c0})

[comment]: # ({47163d34-7e4e4a45})
#### Настройка заголовка HTTP ответа X-Frame-Options

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

Элементы веб-интерфейса Zabbix, которые извлекают содержимое с внешних URL-адресов (а именно, [виджет панели](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets/url) URL), отображают полученное содержимое в так называемой песочнице (sandbox), при этом все ограничения песочницы включены.

Такие настройки улучшают безопасность веб-интерфейса Zabbix и обеспечивают защиту от XSS и кликджекинг атак.
Пользователи *Супер-администраторы* могут [изменить](/manual/web_interface/frontend_sections/administration/general#безопасность) параметры *Использовать sandbox атрибут в iframe* and *Использовать HTTP заголовок X-Frame-Options* по мере необходимости. Пожалуйста, тщательно взвесьте риски и преимущества перед изменением настроек по умолчанию. Отключать полностью песочницу iframe или HTTP-заголовок X-Frame-Options не рекомендуется.

[comment]: # ({/47163d34-7e4e4a45})

[comment]: # ({35ac3238-3f76ae70})
#### Скрытие файла со списком распространённых паролей

Для повышения сложности атак методом перебора пароля, рекомендуется ограничить доступ к файлу `ui/data/top_passwords.txt`.
Данном файл содержит список самых распространённых и контекстно-зависимых паролей и не даёт пользователям устанавливать такие пароли в случае, если параметр *Избегать легко угадываемых паролей* включён в [политике паролей](/manual/web_interface/frontend_sections/administration/authentication#внутренняя-аутентификация).

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

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

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

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

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

[comment]: # ({/35ac3238-3f76ae70})
