[comment]: # ({f4bccb67-40cfdec2})
# 3 Servidor web

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

[comment]: # ({2ff4365d-129e34f5})
#### Descripción general

Esta sección contiene las mejores prácticas para configurar el servidor web de forma segura.

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

[comment]: # ({a38dec5b-bb3706f4})
#### Forzar la redirección de la URL raíz a Zabbix SSL

En sistemas basados en RHEL, agregue un host virtual a la configuración de Apache (`/etc/httpd/conf/httpd.conf`) y establezca una redirección permanente de la raíz del documento a la URL SSL de Zabbix.
Tenga en cuenta que `example.com` debe ser reemplazado por el nombre real del servidor.

```ini
# Agregue las siguientes líneas:

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

Reinicie el servicio de Apache para aplicar los cambios:

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

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

[comment]: # ({3d62d250-c7ee0bb2})
#### Habilitar HTTP Strict Transport Security (HSTS) en el servidor web

Para proteger la interfaz web de Zabbix contra ataques de degradación de protocolo, recomendamos habilitar la política [HSTS](https://es.wikipedia.org/wiki/HTTP_Strict_Transport_Security) en el servidor web.

Para habilitar la política HSTS para su interfaz web de Zabbix en la configuración de Apache, siga estos pasos:

1\. Localice el archivo de configuración de su host virtual:

-   `/etc/httpd/conf/httpd.conf` en sistemas basados en RHEL
-   `/etc/apache2/sites-available/000-default.conf` en Debian/Ubuntu

2\. Añada la siguiente directiva al archivo de configuración de su host virtual:

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

3\. Reinicie el servicio de Apache para aplicar los cambios:

```bash
# En sistemas basados en RHEL:
systemctl restart httpd.service

# En Debian/Ubuntu
systemctl restart apache2.service
```

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

[comment]: # ({09df8737-8057bf9f})
#### Aplicación de cookies de sesión Secure y SameSite en Zabbix

Al configurar Zabbix, es esencial aplicar los atributos secure y SameSite a las cookies de sesión para mejorar la seguridad y prevenir ataques de falsificación de solicitudes entre sitios (CSRF). Sin embargo, aplicar ``SameSite=Strict`` puede causar problemas en ciertos escenarios, tales como:

-   Los widgets de URL del panel muestran "usuario no autenticado" al incrustar iframes del mismo dominio.
-   Los usuarios que acceden al panel a través de HTTP en lugar de HTTPS pueden enfrentar problemas de inicio de sesión.
-   Imposibilidad de compartir URLs a secciones específicas del menú de Zabbix o a equipos.

Para mitigar estos problemas, los usuarios deben tener una forma de ajustar la política SameSite.

1\. Cookies seguras

Establecer la bandera ``secure`` garantiza que las cookies solo se transmitan a través de HTTPS, evitando la exposición en conexiones no cifradas.

Para habilitar cookies seguras en Zabbix, agregue o modifique la siguiente configuración en el servidor web:

Para Apache:

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

Para Nginx:

    proxy_cookie_path / "/; Secure";

Asegúrese de que su frontend de Zabbix se acceda a través de HTTPS; de lo contrario, las cookies con la bandera ``Secure`` no se enviarán.

2\. Configuración del atributo SameSite

La configuración del servidor web también puede aplicar el atributo SameSite:

Para Apache:

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

Para Nginx (versión 1.19.3+):

    proxy_cookie_flags ~ samesite=Strict; # Reemplace ~ por 'zbx_session' para mayor especificidad

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

[comment]: # ({0291801e-55d3532e})
#### Habilitar la Política de Seguridad de Contenidos (CSP) en el servidor web

Para proteger la interfaz de Zabbix contra ataques de Cross Site Scripting (XSS), inyección de datos y ataques similares, recomendamos habilitar la Política de Seguridad de Contenidos en el servidor web.
Para ello, configure el servidor web para que devuelva la [cabecera HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy).

::: noteimportant
La siguiente configuración de la cabecera CSP es solo para la instalación por defecto de la interfaz de Zabbix y para los casos en los que todo el contenido se origina en el dominio del sitio (excluyendo subdominios).
Puede ser necesaria una configuración diferente de la cabecera CSP si, por ejemplo, está configurando el widget [*URL*](/manual/web_interface/frontend_sections/dashboards/widgets/url) para mostrar contenido de subdominios del sitio o dominios externos, cambiando de *OpenStreetMap* a otro motor de mapas, o añadiendo CSS o widgets externos.
Si utiliza el método de autenticación multifactor [Duo Universal Prompt](/manual/web_interface/frontend_sections/users/authentication/mfa), asegúrese de añadir "duo.com" a la directiva CSP en el archivo de configuración de su virtual host.
:::

Para habilitar CSP para su interfaz de Zabbix en la configuración de Apache, siga estos pasos:

1\. Localice el archivo de configuración de su virtual host:

-   `/etc/httpd/conf/httpd.conf` en sistemas basados en RHEL
-   `/etc/apache2/sites-available/000-default.conf` en Debian/Ubuntu

2\. Añada la siguiente directiva al archivo de configuración de su virtual host:

```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\. Reinicie el servicio de Apache para aplicar los cambios:

```bash
# En sistemas basados en RHEL:
systemctl restart httpd.service

# En Debian/Ubuntu
systemctl restart apache2.service
```

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

[comment]: # ({cc2b15aa-cd09dcd1})
#### Deshabilitar la exposición de información del servidor web

Para mejorar la seguridad, se recomienda deshabilitar todas las firmas del servidor web.

Por defecto, el servidor web expone la firma del software:

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

La firma se puede deshabilitar añadiendo los siguientes parámetros al archivo de configuración de Apache:

```ini
ServerSignature Off
ServerTokens Prod
```

La firma de PHP (cabecera HTTP X-Powered-By) se puede deshabilitar cambiando el archivo de configuración `php.ini` (por defecto, la firma está deshabilitada):

```ini
expose_php = Off
```

Es necesario reiniciar el servidor web para que se apliquen los cambios en el archivo de configuración.

Para mayor seguridad, puede utilizar la herramienta *mod_security* con Apache (paquete *libapache2-mod-security2*).
Esta herramienta permite eliminar la firma del servidor en lugar de eliminar solo la versión de la firma del servidor.
La firma del servidor se puede cambiar a cualquier valor configurando "SecServerSignature" con el valor deseado después de instalar *mod_security*.

Consulte la documentación de su servidor web para obtener ayuda sobre cómo eliminar/cambiar las firmas del software.

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

[comment]: # ({2053690e-720052da})
#### Deshabilitar las páginas de error predeterminadas del servidor web

Para evitar la exposición de información, se recomienda deshabilitar las páginas de error predeterminadas.

Por defecto, un servidor web utiliza páginas de error integradas:

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

Estas páginas de error predeterminadas deben ser reemplazadas/eliminadas.
Por ejemplo, la directiva "ErrorDocument" puede utilizarse para definir una página/texto de error personalizado para el servidor web Apache.

Consulte la documentación de su servidor web para obtener ayuda sobre cómo reemplazar/eliminar las páginas de error predeterminadas.

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

[comment]: # ({5dd327a4-ba1547c0})
#### Eliminando la página de prueba del servidor web

Para evitar la exposición de información, se recomienda eliminar la página de prueba del servidor web.

Por defecto, el directorio raíz web de Apache contiene la página de prueba `index.html`:

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

Por favor, consulte la documentación de su servidor web para obtener ayuda sobre cómo eliminar las páginas de prueba predeterminadas.

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

[comment]: # ({47163d34-7e4e4a45})
#### Configurar la cabecera de respuesta HTTP X-Frame-Options

Por defecto, Zabbix está configurado con el parámetro *Usar la cabecera HTTP X-Frame-Options* establecido en `SAMEORIGIN`.
Esto significa que el contenido solo puede cargarse en un marco que tenga el mismo origen que la propia página.

Los elementos del frontend de Zabbix que obtienen contenido de URLs externas (concretamente, el [widget de URL](/manual/web_interface/frontend_sections/dashboards/widgets/url) del panel) muestran el contenido recuperado en una zona aislada (sandbox) con todas las restricciones de sandboxing habilitadas.

Estas configuraciones mejoran la seguridad del frontend de Zabbix y proporcionan protección contra ataques XSS y clickjacking.
Los usuarios *Super admin* pueden [modificar](/manual/web_interface/frontend_sections/administration/general#security) los parámetros *Usar sandboxing en iframe* y *Usar la cabecera HTTP X-Frame-Options* según sea necesario.
Por favor, sopese cuidadosamente los riesgos y beneficios antes de cambiar la configuración por defecto.
No se recomienda desactivar completamente el sandboxing en iframe o la cabecera HTTP X-Frame-Options.

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

[comment]: # ({ac11e1b7-3f76ae70})
#### Ocultando el archivo con la lista de contraseñas comunes

Para aumentar la complejidad de los ataques de fuerza bruta de contraseñas, se recomienda limitar el acceso al archivo `ui/data/top_passwords.txt`.
Este archivo contiene una lista de las contraseñas más comunes y específicas del contexto y evita que los usuarios establezcan dichas contraseñas (si el parámetro *Evitar contraseñas fáciles de adivinar* está habilitado en la [política de contraseñas](/manual/web_interface/frontend_sections/users/authentication#internal_authentication)).

Para limitar el acceso al archivo `top_passwords.txt`, modifique la configuración de su servidor web.

En Apache, el acceso al archivo puede limitarse utilizando el archivo `.htaccess`:

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

En NGINX, el acceso al archivo puede limitarse utilizando la directiva `location`:

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

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