Wiki: agregar páginas iniciales (Home, Configuración avanzada, TLS-ACME, Middlewares, Ejemplos, Troubleshooting)
58
Configuracion-Avanzada.md
Normal file
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
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
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
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
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
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
|
||||
Reference in New Issue
Block a user