---
title: Forward proxy
sourceHash: 37a5c3119fb2
---
# Forward proxy
Dozzle se puede configurar para leer cabeceras de proxy poniendo `--auth-provider` en `forward-proxy`.
::: code-group
```sh [cli]
$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/dozzle/data:/data -p 8080:8080 amir20/dozzle --auth-provider forward-proxy
```
```yaml [docker-compose.yml]
services:
dozzle:
image: amir20/dozzle:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /path/to/dozzle/data:/data
ports:
- 8080:8080
environment:
DOZZLE_AUTH_PROVIDER: forward-proxy
```
:::
Monta `/data` también aquí. Los ajustes por usuario se escriben en disco también en modo forward proxy, y sin el volumen se pierden cada vez que se recrea el contenedor.
En este modo, Dozzle espera las siguientes cabeceras:
- `Remote-User` para el nombre de usuario, por ejemplo `johndoe`
- `Remote-Email` para la dirección de correo del usuario. Ese correo también se usa para encontrar el [Gravatar](https://gravatar.com/) correcto.
- `Remote-Name` para un nombre visible como `John Doe`
- `Remote-Filter` para una lista de filtros permitidos al usuario, separados por comas.
- `Remote-Roles` para una lista de roles permitidos al usuario, separados por comas.
Además, puedes configurar una URL de cierre de sesión con:
```yaml
DOZZLE_AUTH_LOGOUT_URL: http://oauth2.example.ru/oauth2/sign_out
```
## Configurar Dozzle con Authelia
[Authelia](https://www.authelia.com/) es un servidor y portal de autenticación y autorización de código abierto que cubre la gestión de identidades y accesos. Configurar Authelia queda fuera del alcance de esta sección, pero la configuración se puede compartir como ejemplo para montar Dozzle con Authelia.
➡️ Haz clic para desplegar el ejemplo de Authelia
::: code-group
```yaml [docker-compose.yml]
networks:
net:
driver: bridge
services:
authelia:
image: authelia/authelia
container_name: authelia
volumes:
- ./authelia:/config
networks:
- net
labels:
- "traefik.enable=true"
- "traefik.http.routers.authelia.rule=Host(`authelia.example.com`)"
- "traefik.http.routers.authelia.entrypoints=https"
- "traefik.http.routers.authelia.tls=true"
- "traefik.http.routers.authelia.tls.options=default"
- "traefik.http.middlewares.authelia.forwardAuth.address=http://authelia:9091/api/authz/forward-auth"
- "traefik.http.middlewares.authelia.forwardAuth.trustForwardHeader=true"
- "traefik.http.middlewares.authelia.forwardAuth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email"
expose:
- 9091
restart: unless-stopped
traefik:
image: traefik:v3.5
container_name: traefik
volumes:
- ./traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock
networks:
- net
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`traefik.example.com`)"
- "traefik.http.routers.api.entrypoints=https"
- "traefik.http.routers.api.service=api@internal"
- "traefik.http.routers.api.tls=true"
- "traefik.http.routers.api.tls.options=default"
- "traefik.http.routers.api.middlewares=authelia@docker"
ports:
- "80:80"
- "443:443"
command:
- "--api"
- "--providers.docker=true"
- "--providers.docker.exposedByDefault=false"
- "--providers.file.filename=/etc/traefik/certificates.yml"
- "--entrypoints.http=true"
- "--entrypoints.http.address=:80"
- "--entrypoints.http.http.redirections.entrypoint.to=https"
- "--entrypoints.http.http.redirections.entrypoint.scheme=https"
- "--entrypoints.https=true"
- "--entrypoints.https.address=:443"
- "--log=true"
- "--log.level=DEBUG"
dozzle:
image: amir20/dozzle:latest
networks:
- net
environment:
DOZZLE_AUTH_PROVIDER: forward-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- dozzle:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.dozzle.rule=Host(`dozzle.example.com`)"
- "traefik.http.routers.dozzle.entrypoints=https"
- "traefik.http.routers.dozzle.tls=true"
- "traefik.http.routers.dozzle.tls.options=default"
- "traefik.http.routers.dozzle.middlewares=authelia@docker"
expose:
- 8080
restart: unless-stopped
volumes:
dozzle:
```
```yaml [configuration.yml]
###############################################################
# Authelia configuration #
###############################################################
server:
address: tcp://0.0.0.0:9091
log:
level: info
totp:
issuer: authelia.com
identity_validation:
reset_password:
jwt_secret: a_very_important_secret
authentication_backend:
file:
path: /config/users_database.yml
access_control:
default_policy: deny
rules:
- domain: traefik.example.com
policy: one_factor
- domain: dozzle.example.com
policy: one_factor
session:
secret: unsecure_session_secret
cookies:
- domain: example.com # Debe coincidir con el dominio raíz protegido que uses
authelia_url: https://authelia.example.com
default_redirection_url: https://public.example.com
regulation:
max_retries: 3
find_time: 120
ban_time: 300
storage:
encryption_key: you_must_generate_a_random_string_of_more_than_twenty_chars_and_configure_this
local:
path: /config/db.sqlite3
notifier:
filesystem:
filename: /config/notification.txt
```
:::
Se necesitan claves SSL válidas porque Authelia solo funciona con SSL.
Authelia envía la pertenencia a grupos en `Remote-Groups`, y Dozzle no lee esa cabecera por defecto. Para asociar los grupos de Authelia con los [roles](/es/guide/authentication/simple#asignar-roles-especificos-a-los-usuarios) de Dozzle, pon `DOZZLE_AUTH_HEADER_ROLES: Remote-Groups` en el servicio de Dozzle y nombra los grupos como los roles. Los alias con prefijo `dozzle_` existen para esto, así que un grupo llamado `dozzle_shell` concede el rol `shell` y los demás nombres de grupo se ignoran. Sin esa asociación, todo usuario autenticado recibe todos los roles.
## Configurar Dozzle con Cloudflare Zero Trust
Cloudflare Zero Trust es un servicio para dar acceso autenticado a software autoalojado. Esta sección explica cómo configurar Dozzle para usar Cloudflare Zero Trust como autenticación.
```yaml [docker-compose.yml]
services:
dozzle:
image: amir20/dozzle:latest
environment:
DOZZLE_AUTH_PROVIDER: forward-proxy
DOZZLE_AUTH_HEADER_USER: Cf-Access-Authenticated-User-Email
DOZZLE_AUTH_HEADER_EMAIL: Cf-Access-Authenticated-User-Email
DOZZLE_AUTH_HEADER_NAME: Cf-Access-Authenticated-User-Email
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- dozzle:/data
expose:
- 8080
restart: unless-stopped
volumes:
dozzle:
```
`expose` mantiene el puerto 8080 fuera del host, así que la única entrada es a través del túnel. Publicarlo con `ports` permitiría a cualquiera en el host poner la cabecera `Cf-Access-Authenticated-User-Email` por su cuenta y saltarse Cloudflare por completo.
Después de arrancar el contenedor de Dozzle, configura la aplicación en el panel de Cloudflare Zero Trust siguiendo esta [guía](https://developers.cloudflare.com/cloudflare-one/applications/configure-apps/self-hosted-apps/).
## Configurar Dozzle con Pocket ID
> [!TIP]
> Dozzle ya habla OpenID Connect de forma nativa, así que puedes apuntar `--auth-oidc-issuer` directamente a Pocket ID y saltarte oauth2-proxy por completo. Consulta [Iniciar sesión con GitHub y OIDC](/es/guide/authentication/oauth#iniciar-sesion-con-oidc). La receta de abajo sigue aquí para quien ya use oauth2-proxy o quiera que el proxy proteja algo más que Dozzle.
Primero tienes que montar un contenedor que pase la autenticación OpenID Connect a través de tu proxy inverso.
Aquí tienes un ejemplo con [oauth2-proxy](https://github.com/oauth2-proxy/oauth2-proxy).
➡️ Haz clic para desplegar el ejemplo de oauth2-proxy
1. Crea un nuevo cliente OIDC en Pocket ID para Dozzle:
- **Nombre:** `Dozzle`
- **URLs de callback:** `https://dozzle.example.com/oauth2/callback`
- **PKCE:** `Enabled`
Copia los valores de **Client ID** y **Client Secret** para usarlos después.
2. Añade lo siguiente al compose de Dozzle que ya tengas:
```yml
environment:
DOZZLE_AUTH_PROVIDER: forward-proxy
DOZZLE_AUTH_HEADER_USER: X-Forwarded-User
DOZZLE_AUTH_HEADER_EMAIL: X-Forwarded-Email
DOZZLE_AUTH_HEADER_NAME: X-Forwarded-Preferred-Username
```
Comenta los puertos de Dozzle, ya que los vamos a redirigir a través del nuevo contenedor de autenticación.
Este método no debería requerir cambios en la configuración de tu proxy inverso.
```yml
# ports:
# - 8080:8080
```
3. Añade un nuevo servicio de contenedor oauth2-proxy al compose de Dozzle:
```yml
services:
# ...
oauth2-proxy:
image: quay.io/oauth2-proxy/oauth2-proxy:latest
restart: unless-stopped
container_name: dozzle-oidc
command: --config /oauth2-proxy.cfg
volumes:
- "./oauth2-proxy.cfg:/oauth2-proxy.cfg"
ports:
- 8080:4180
```
4. Crea el archivo de configuración de oauth2-proxy.
En el directorio donde está tu archivo compose, crea `oauth2-proxy.cfg`:
```toml
client_id = "xxx" # de Pocket ID
client_secret = "xxx" # de Pocket ID
cookie_secret = "xxx" # genéralo con openssl rand -base64 32 | tr -- '+/' '-_'
upstreams = "http://dozzle:8080" # upstream al puerto interno del contenedor de Dozzle
code_challenge_method = "S256" # desafíos PKCE plain o S256
cookie_expire = "0" # segundos, 0 para sesión
cookie_name = "__Host-oauth2-proxy" # o __Secure-oauth2-proxy (menos seguro)
cookie_secure = true # usa la cookie segura HTTPS
email_domains = ["*"] # permite autenticarse desde cualquier dominio de correo
http_address = "0.0.0.0:4180" # puerto en el que escucha oauth2-proxy
oidc_issuer_url = "https://id.example.com" # tu URL base de Pocket
provider_display_name = "Pocket ID" # nombre visible para el inicio de sesión OIDC
provider = "oidc" # usa OpenID connect
reverse_proxy = true # pasa el tráfico por el proxy inverso
scope = "openid email profile groups" # deja pasar estos scopes OIDC
```
Rellena las variables según los comentarios.
5. Por último, reinicia tu stack de Docker compose.
Tu proxy inverso ya debería autenticarte en Dozzle a través de oauth2-proxy.
Revisa los logs para solucionar problemas.