Wiki: agregar páginas iniciales (Home, Configuración avanzada, TLS-ACME, Middlewares, Ejemplos, Troubleshooting)

2025-11-29 18:26:40 +01:00
parent f9405980d5
commit 05b2136cc3
6 changed files with 303 additions and 1 deletions

58
Configuracion-Avanzada.md Normal file

@@ -0,0 +1,58 @@
# Configuración Avanzada
## entryPoints
```yaml
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
```
La redirección fuerza HTTPS para todo el tráfico.
## Proveedores
```yaml
providers:
docker:
exposedByDefault: false
network: proxy
file:
directory: /etc/traefik/dynamic
watch: true
```
Usa `exposedByDefault: false` para controlar qué servicios se publican.
## Certificados
```yaml
certificatesResolvers:
letsencrypt:
acme:
email: admin@tudominio.com
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
```
`storage` debe ser persistente para mantener renovaciones.
## Dashboard
Se expone vía labels apuntando a `api@internal`. Protege con dominio + auth básica.
## Staging vs Producción
Para pruebas masivas:
```yaml
caServer: https://acme-staging-v02.api.letsencrypt.org/directory
```
Evita límites de emisión.
## Ajustes recomendados
- Mantén el archivo estático mínimo.
- Mueve middlewares personalizados a `/etc/traefik/dynamic`.
- Versiona `traefik.yml` en Git.
---
Última actualización: Nov 2025

56
Ejemplos.md Normal file

@@ -0,0 +1,56 @@
# Ejemplos de Servicios
## Portainer
```yaml
- "traefik.enable=true"
- "traefik.http.routers.portainer.rule=Host(`portainer.tudominio.com`)"
- "traefik.http.routers.portainer.entrypoints=websecure"
- "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
- "traefik.http.services.portainer.loadbalancer.server.port=9443"
- "traefik.http.services.portainer.loadbalancer.server.scheme=https"
```
## NGINX Proxy Manager
```yaml
- "traefik.enable=true"
- "traefik.http.routers.npm.rule=Host(`npm.tudominio.com`)"
- "traefik.http.routers.npm.entrypoints=websecure"
- "traefik.http.routers.npm.tls.certresolver=letsencrypt"
- "traefik.http.services.npm.loadbalancer.server.port=81"
```
## Jellyfin
```yaml
- "traefik.enable=true"
- "traefik.http.routers.jellyfin.rule=Host(`jellyfin.tudominio.com`)"
- "traefik.http.routers.jellyfin.entrypoints=websecure"
- "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
```
## Nextcloud
```yaml
- "traefik.enable=true"
- "traefik.http.routers.nextcloud.rule=Host(`files.tudominio.com`)"
- "traefik.http.routers.nextcloud.entrypoints=websecure"
- "traefik.http.routers.nextcloud.tls.certresolver=letsencrypt"
- "traefik.http.routers.nextcloud.middlewares=sec-headers"
- "traefik.http.services.nextcloud.loadbalancer.server.port=80"
```
## Vaultwarden
```yaml
- "traefik.enable=true"
- "traefik.http.routers.vault.rule=Host(`vault.tudominio.com`)"
- "traefik.http.routers.vault.entrypoints=websecure"
- "traefik.http.routers.vault.tls.certresolver=letsencrypt"
- "traefik.http.services.vault.loadbalancer.server.port=80"
```
## Consejos
- Reutiliza middlewares comunes (seguridad, auth).
- Usa nombres claros de routers y servicios.
- Comprueba logs tras el primer despliegue.
---
Última actualización: Nov 2025

39
Home.md

@@ -1 +1,38 @@
¡Bienvenidos a la Wiki! # Traefik Wiki
Bienvenido a la wiki de **Traefik v2** para esta infraestructura.
## Objetivo
Proveer un reverse proxy moderno con HTTPS automático, detección de servicios Docker y seguridad reforzada.
## Componentes Clave
- entryPoints `web` (80) y `websecure` (443)
- Redirección HTTP→HTTPS
- Proveedor Docker (`exposedByDefault=false`)
- Let's Encrypt (HTTP-01) con almacenamiento ACME
- Dashboard vía dominio protegido
## Despliegue Rápido
```bash
docker network create proxy
git clone https://git.ictiberia.com/groales/traefik
cd traefik
mkdir -p letsencrypt && echo > letsencrypt/acme.json
# chmod 600 letsencrypt/acme.json (Linux)
docker compose up -d
```
## Páginas
- [Configuración Avanzada](Configuracion-Avanzada.md)
- [TLS y ACME](TLS-ACME.md)
- [Middlewares y Seguridad](Middlewares-Seguridad.md)
- [Ejemplos](Ejemplos.md)
- [Troubleshooting](Troubleshooting.md)
## Próximos Pasos
1. Ajusta email ACME en `traefik.yml`
2. Configura DNS del dashboard
3. Añade servicios con labels y red `proxy`
---
Última actualización: Nov 2025

56
Middlewares-Seguridad.md Normal file

@@ -0,0 +1,56 @@
# Middlewares y Seguridad
## Basic Auth
```yaml
- "traefik.http.routers.traefik.middlewares=traefik-auth"
- "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$apr1$..."
```
Generar hash: `htpasswd -nb admin 'password'`.
## Headers de Seguridad
```yaml
- "traefik.http.middlewares.sec-headers.headers.stsSeconds=63072000"
- "traefik.http.middlewares.sec-headers.headers.forceSTSHeader=true"
- "traefik.http.middlewares.sec-headers.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.sec-headers.headers.stsPreload=true"
- "traefik.http.middlewares.sec-headers.headers.frameDeny=true"
- "traefik.http.middlewares.sec-headers.headers.contentTypeNosniff=true"
```
Aplicar: `traefik.http.routers.app.middlewares=sec-headers`.
## Rate Limit
```yaml
- "traefik.http.middlewares.rl.rateLimit.average=50"
- "traefik.http.middlewares.rl.rateLimit.burst=100"
```
Útil para APIs públicas.
## IP Whitelist
```yaml
- "traefik.http.middlewares.allow-admin.ipWhiteList.sourceRange=10.0.0.0/24,192.168.1.0/24"
```
## Chain Middleware
Combina varias:
```yaml
- "traefik.http.middlewares.chain-admin.chain.middlewares=traefik-auth,sec-headers"
```
## Redirect Regex
Ejemplo www→root:
```yaml
- "traefik.http.middlewares.www-redirect.redirectregex.regex=^https?://www\\.(.*)"
- "traefik.http.middlewares.www-redirect.redirectregex.replacement=https://$1"
- "traefik.http.middlewares.www-redirect.redirectregex.permanent=true"
```
## mTLS (Avanzado)
Requiere `serversTransport` y certificados cliente; no incluido por simplicidad.
## Recomendaciones
- No abusar de basic auth: combinar con 2FA en app.
- Activar HSTS solo si seguro de usar HTTPS siempre.
- Revisar logs tras aplicar limitaciones.
---
Última actualización: Nov 2025

46
TLS-ACME.md Normal file

@@ -0,0 +1,46 @@
# TLS y ACME
## Flujo HTTP-01
1. Solicitud inicial de certificado.
2. Let's Encrypt envía desafío HTTP.
3. Traefik sirve el token en `/.well-known/acme-challenge/` sobre puerto 80.
4. Validación correcta → emisión de certificado.
5. Renovación automática ~30 días antes de expirar.
## Requisitos
- Puertos 80 y 443 abiertos.
- DNS correcto apuntando al servidor.
- Email válido para notificaciones.
## Errores comunes
| Problema | Causa | Acción |
|----------|-------|--------|
| Timeout | Puerto 80 cerrado | Abrir en firewall/router |
| NXDOMAIN | DNS no propagado | Verificar registros A/AAAA |
| Rate limit | Demasiadas peticiones | Usar staging y espaciar |
| Unauthorized | Token no accesible | Revisar reverse proxy adicional |
## Staging
Usa staging para pruebas: evita límites y bloqueos.
```yaml
certificatesResolvers:
letsencrypt:
acme:
caServer: https://acme-staging-v02.api.letsencrypt.org/directory
```
## Revocación
Si comprometes una clave privada, genera nueva y deja expirar el anterior; la revocación rara vez es necesaria.
## Multi-Dominio
Con labels múltiples:
```yaml
- "traefik.http.routers.app.rule=Host(`app1.tu.com`,`app2.tu.com`)"
```
Un único certificado SAN.
## Forzar renovación manual
No suele ser necesario. Eliminar entrada de `acme.json` concreta (avanzado) → Traefik solicitará de nuevo.
---
Última actualización: Nov 2025

49
Troubleshooting.md Normal file

@@ -0,0 +1,49 @@
# Troubleshooting
## Certificados no se emiten
- Verifica puertos 80/443 abiertos.
- DNS correcto (A/AAAA).
- Usa staging si haces muchas pruebas.
## 404 en servicio
- Falta label `traefik.enable=true`.
- Regla Host incorrecta o sin DNS.
- Contenedor fuera de red `proxy`.
## Dashboard no carga
- Dominio apuntando a servidor.
- Router y service `api@internal` definidos.
- Auth básica mal configurada → revisar hash.
## ACME errores
Revisar logs:
```bash
docker logs traefik | Select-String -Pattern acme,error,challenge
```
## Puerto ya en uso
Ejecuta:
```bash
netstat -ano | findstr :80
```
Identifica proceso y libera puerto.
## Renovación fallida
- Hora del sistema incorrecta.
- Firewall filtra HTTP.
- Eliminaste `acme.json` sin reinstalar correctamente.
## Estrategia de Diagnóstico
1. Logs traefik.
2. Inspección labels (`docker inspect contenedor | Select-String traefik`).
3. DNS con `nslookup dominio`.
4. Verificar red: `docker network inspect proxy`.
## Reinicio Seguro
```bash
docker compose down && docker compose up -d
```
No borra volúmenes ni certificados si usas bind persistente.
---
Última actualización: Nov 2025