Compare commits
13 Commits
a79625be9f
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 272dff8b90 | |||
| 975763db58 | |||
| ff4214e006 | |||
| 8d5f4a4ac1 | |||
| 566c73b306 | |||
| 6c761c409c | |||
| 2c3cfbf159 | |||
| 36f44190a8 | |||
| 590cf0a27a | |||
| 7a496b235c | |||
| 3c5976e37f | |||
| 4ce8786056 | |||
| 7babf81811 |
@@ -1,8 +1,12 @@
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# GITEA - CONFIGURACIÓN DE PRODUCCIÓN PARA SYNOLOGY DSM
|
# GITEA - CONFIGURACIÓN DE PRODUCCIÓN (REVISIÓN DE SEGURIDAD)
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# Este servicio corre bajo el UID 1032 y GID 100 gestionado internamente por s6.
|
# - Identidad: Ejecución bajo UID 1032 / GID 100 (Estándar OgnirNAS).
|
||||||
# Se conecta a Traefik v3 a través de la red interna de servicios.
|
# - Red: Conectado a 'services-internal-net' para aislamiento Bridge.
|
||||||
|
# - Traefik v3:
|
||||||
|
# * Se utiliza 'security-headers@file' (Middleware dinámico actualizado).
|
||||||
|
# * Vinculación explícita router-servicio para evitar estados 'disabled'.
|
||||||
|
# * Resolución de certificados vía Let's Encrypt.
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
version: "3.9"
|
version: "3.9"
|
||||||
@@ -13,29 +17,51 @@ services:
|
|||||||
container_name: gitea
|
container_name: gitea
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- services-internal-net # Red compartida con el Proxy
|
- services-internal-net
|
||||||
volumes:
|
volumes:
|
||||||
- /volume1/docker/data/gitea:/data # Persistencia de datos, SSH y DB
|
- /volume1/docker/data/gitea:/data
|
||||||
environment:
|
environment:
|
||||||
# IDs de usuario confirmados para evitar conflictos de permisos en el NAS
|
|
||||||
- USER_UID=1032
|
- USER_UID=1032
|
||||||
- USER_GID=100
|
- USER_GID=100
|
||||||
- TZ=Europe/Madrid
|
- TZ=Europe/Madrid
|
||||||
# URL externa para evitar el redireccionamiento a localhost:3000
|
|
||||||
- GITEA__server__ROOT_URL=https://gitea.ognir-server.synology.me/
|
- GITEA__server__ROOT_URL=https://gitea.ognir-server.synology.me/
|
||||||
|
- GITEA__server__SSH_PORT=2222
|
||||||
|
- GITEA__server__SSH_LISTEN_PORT=22
|
||||||
- GITEA__database__DB_TYPE=sqlite3
|
- GITEA__database__DB_TYPE=sqlite3
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
# Enrutamiento mediante Host
|
|
||||||
|
# --- Configuración del Router ---
|
||||||
- "traefik.http.routers.gitea.rule=Host(`gitea.ognir-server.synology.me`)"
|
- "traefik.http.routers.gitea.rule=Host(`gitea.ognir-server.synology.me`)"
|
||||||
- "traefik.http.routers.gitea.entrypoints=websecure"
|
- "traefik.http.routers.gitea.entrypoints=websecure"
|
||||||
- "traefik.http.routers.gitea.tls=true"
|
- "traefik.http.routers.gitea.tls=true"
|
||||||
- "traefik.http.routers.gitea.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.gitea.tls.certresolver=letsencrypt"
|
||||||
# Forzamos a Traefik a usar la red interna para evitar errores de gateway
|
|
||||||
- "traefik.docker.network=services-internal-net"
|
# --- Vinculación Router-Service ---
|
||||||
|
# Define el destino explícito para habilitar el router en el Dashboard.
|
||||||
|
- "traefik.http.routers.gitea.service=gitea"
|
||||||
|
|
||||||
|
# --- Configuración del Servicio (Backend) ---
|
||||||
- "traefik.http.services.gitea.loadbalancer.server.port=3000"
|
- "traefik.http.services.gitea.loadbalancer.server.port=3000"
|
||||||
# Uso del middleware de seguridad definido en el proveedor de archivos (@file)
|
- "traefik.docker.network=services-internal-net"
|
||||||
- "traefik.http.routers.gitea.middlewares=seguridad-general@file"
|
|
||||||
|
# --- Middlewares ---
|
||||||
|
# Se actualiza de 'seguridad-general' a 'security-headers' según el inventario dinámico.
|
||||||
|
- "traefik.http.routers.gitea.middlewares=security-headers@file"
|
||||||
|
|
||||||
|
# --- NUEVO: BLOQUE SSH (SELLADO) ---
|
||||||
|
- "traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)"
|
||||||
|
- "traefik.tcp.routers.gitea-ssh.entrypoints=ssh-git"
|
||||||
|
- "traefik.tcp.routers.gitea-ssh.service=gitea-ssh-svc"
|
||||||
|
- "traefik.tcp.routers.gitea-ssh.priority=100"
|
||||||
|
- "traefik.tcp.services.gitea-ssh-svc.loadbalancer.server.port=22"
|
||||||
|
|
||||||
|
|
||||||
|
# El Sello de Seguridad (Whitelist)
|
||||||
|
# ESTE ES EL SELLO: Solo estas IPs pueden cruzar el puente
|
||||||
|
# Nota: En TCP puro (sin TLS), Traefik v3 usa el filtrado por IP en el middleware o router
|
||||||
|
- "traefik.tcp.routers.gitea-ssh.middlewares=whitelist-ssh"
|
||||||
|
- "traefik.tcp.middlewares.whitelist-ssh.ipallowlist.sourcerange=100.120.105.35,192.168.178.30-192.168.178.39"
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
services-internal-net:
|
services-internal-net:
|
||||||
|
|||||||
@@ -1,41 +1,38 @@
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# PORTAINER CE - CONFIGURACIÓN SEGURA PARA OGNIRNAS
|
# OGNIRNAS - PORTAINER CE (GESTIÓN DE CONTENEDORES)
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# - Usuario: 1032 (docker-manager)
|
# Última revisión: 2026-01-06
|
||||||
# - Acceso Socket: GID 65538 (Synology Docker Group)
|
# Propietario: Ognir (UID 1032 / GID 100)
|
||||||
# - Red: services-internal-net
|
# NOTA: Sin Auth de Traefik (usa su propio login interno).
|
||||||
# - Middleware: seguridad-general@file
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
version: '3.8'
|
version: "3.9"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
portainer:
|
portainer:
|
||||||
image: portainer/portainer-ce:latest
|
image: portainer/portainer-ce:latest
|
||||||
container_name: portainer
|
container_name: portainer
|
||||||
restart: always
|
restart: always
|
||||||
user: "1032:100"
|
security_opt:
|
||||||
group_add:
|
- no-new-privileges:true
|
||||||
- "65538" # Permite al usuario 1032 leer el socket de root
|
|
||||||
networks:
|
networks:
|
||||||
- services-internal-net
|
services-internal-net: {}
|
||||||
# Puertos de emergencia (puedes comentarlos si solo usas Traefik)
|
|
||||||
ports:
|
|
||||||
- "8000:8000"
|
|
||||||
- "9443:9443"
|
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /volume1/docker/data/portainer:/data
|
- /var/run/docker.sock:/var/run/docker.sock:ro # Conexión al socket para gestión
|
||||||
|
- /volume1/docker/data/portainer:/data # Datos persistentes
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.portainer.rule=Host(`portainer.ognir-server.synology.me`)"
|
- "traefik.http.routers.portainer.rule=Host(`portainer.ognir-server.synology.me`)"
|
||||||
- "traefik.http.routers.portainer.entrypoints=websecure"
|
- "traefik.http.routers.portainer.entrypoints=websecure"
|
||||||
- "traefik.http.routers.portainer.tls=true"
|
- "traefik.http.routers.portainer.tls=true"
|
||||||
- "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
|
||||||
- "traefik.docker.network=services-internal-net"
|
|
||||||
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
|
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
|
||||||
# Importante: El middleware que definimos en la config dinámica
|
# --- MIDDLEWARES (SOLO CABECERAS, SIN AUTH) ---
|
||||||
- "traefik.http.routers.portainer.middlewares=seguridad-general@file"
|
- "traefik.http.routers.portainer.middlewares=security-headers@file"
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
services-internal-net:
|
services-internal-net:
|
||||||
|
|||||||
23
tailscale/docker-compose.yml
Executable file
23
tailscale/docker-compose.yml
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
# ==============================================================================
|
||||||
|
# TAILSCALE - NODO DE RED DE GESTIÓN (REVISADO)
|
||||||
|
# ==============================================================================
|
||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
tailscale:
|
||||||
|
image: tailscale/tailscale:latest
|
||||||
|
container_name: tailscale
|
||||||
|
hostname: ognir-nas-tailnet
|
||||||
|
restart: always
|
||||||
|
# Usamos network host para integrarnos en la pila de red del NAS
|
||||||
|
network_mode: host
|
||||||
|
privileged: true # Esto otorga acceso al TUN del kernel sin mapeos manuales
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_MODULE
|
||||||
|
volumes:
|
||||||
|
- /volume1/docker/data/tailscale:/var/lib/tailscale
|
||||||
|
# Eliminamos el mapeo de /dev/net/tun que daba error
|
||||||
|
environment:
|
||||||
|
- TS_USERSPACE=false
|
||||||
|
- TS_STATE_DIR=/var/lib/tailscale
|
||||||
@@ -1,9 +1,17 @@
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# TRAEFIK V3 - INFRAESTRUCTURA COMPLETA (OGNIRNAS)
|
# OGNIRNAS - INFRAESTRUCTURA CORE: TRAEFIK V3 & DOCKER-SOCKET-PROXY
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
# Última revisión: 2026-01-06 (Fase: Auditoría y Seguridad Activa)
|
||||||
|
# Propietario: Ognir (UID 1032 / GID 100)
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
version: "3.9"
|
version: "3.9"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# SERVICE: traefik-socket-proxy
|
||||||
|
# Cortafuegos para el socket de Docker. Aísla a Traefik del motor del NAS.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
traefik-socket-proxy:
|
traefik-socket-proxy:
|
||||||
image: tecnativa/docker-socket-proxy:latest
|
image: tecnativa/docker-socket-proxy:latest
|
||||||
container_name: traefik-socket-proxy
|
container_name: traefik-socket-proxy
|
||||||
@@ -18,10 +26,11 @@ services:
|
|||||||
- SERVICES=1
|
- SERVICES=1
|
||||||
- VERSION=1
|
- VERSION=1
|
||||||
- EVENTS=1
|
- EVENTS=1
|
||||||
- CONNECT_TIMEOUT=30
|
|
||||||
- SERVER_TIMEOUT=30
|
|
||||||
- CLIENT_TIMEOUT=30
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# SERVICE: traefik (v3.0)
|
||||||
|
# Reverse Proxy con TLS, Dashboard seguro y registro de actividad (Logs).
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:v3.0
|
image: traefik:v3.0
|
||||||
container_name: traefik
|
container_name: traefik
|
||||||
@@ -30,33 +39,45 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
traefik-socket-proxy:
|
traefik-socket-proxy:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy-macvlan-net:
|
||||||
|
ipv4_address: 192.168.178.25 # IP fija en red local (Fritz!Box)
|
||||||
|
services-internal-net: {}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- /volume1/docker/configs/traefik:/etc/traefik:ro
|
||||||
|
- /volume1/docker/data/traefik:/letsencrypt
|
||||||
|
- /volume1/docker/data/traefik/logs:/var/log/traefik # Persistencia de logs
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
|
- "traefik.docker.network=services-internal-net"
|
||||||
|
|
||||||
|
# --- ROUTER DASHBOARD ---
|
||||||
- "traefik.http.routers.traefik-dash.rule=Host(`traefik.ognir-server.synology.me`)"
|
- "traefik.http.routers.traefik-dash.rule=Host(`traefik.ognir-server.synology.me`)"
|
||||||
- "traefik.http.routers.traefik-dash.entrypoints=websecure"
|
- "traefik.http.routers.traefik-dash.entrypoints=websecure"
|
||||||
- "traefik.http.routers.traefik-dash.tls=true"
|
- "traefik.http.routers.traefik-dash.tls=true"
|
||||||
- "traefik.http.routers.traefik-dash.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.traefik-dash.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.routers.traefik-dash.service=api@internal"
|
- "traefik.http.routers.traefik-dash.service=api@internal"
|
||||||
# Mantenemos el middleware pero asegúrate de limpiar caché del navegador
|
|
||||||
- "traefik.http.routers.traefik-dash.middlewares=seguridad-general@file"
|
# --- MIDDLEWARES (SEGURIDAD REFORZADA) ---
|
||||||
- "traefik.docker.network=services-internal-net"
|
# Primero Auth (Login) y luego Headers de seguridad.
|
||||||
networks:
|
- "traefik.http.routers.traefik-dash.middlewares=auth-dashboard@file,security-headers@file"
|
||||||
proxy-macvlan-net:
|
|
||||||
ipv4_address: 192.168.178.25
|
|
||||||
services-internal-net:
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080/ping"]
|
|
||||||
interval: 30s
|
|
||||||
timeout: 10s
|
|
||||||
retries: 3
|
|
||||||
start_period: 20s
|
|
||||||
volumes:
|
|
||||||
- /volume1/docker/configs/traefik:/etc/traefik:ro
|
|
||||||
- /volume1/docker/data/traefik:/letsencrypt
|
|
||||||
- /volume1/docker/data/traefik/logs:/var/log/traefik
|
|
||||||
command:
|
command:
|
||||||
- "--configFile=/etc/traefik/traefik.yml"
|
- "--configFile=/etc/traefik/traefik.yml"
|
||||||
|
# --- CONFIGURACIÓN DEL VIGILANTE (ACCESS LOGS) ---
|
||||||
|
# Activa el registro de cada petición que llega desde internet.
|
||||||
|
- "--accesslog=true"
|
||||||
|
# Ruta interna (mapeada al volumen data/traefik/logs)
|
||||||
|
- "--accesslog.filepath=/var/log/traefik/access.log"
|
||||||
|
# Buffering para no castigar el disco/SSD del NAS constantemente
|
||||||
|
- "--accesslog.bufferingsize=100"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# REDES EXTERNAS
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
networks:
|
networks:
|
||||||
proxy-macvlan-net:
|
proxy-macvlan-net:
|
||||||
external: true
|
external: true
|
||||||
|
|||||||
9
traefik/dynamic/auth.yml
Executable file
9
traefik/dynamic/auth.yml
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
# ==============================================================================
|
||||||
|
# AUTENTICACIÓN PARA DASHBOARD Y SERVICIOS CRÍTICOS
|
||||||
|
# ==============================================================================
|
||||||
|
http:
|
||||||
|
middlewares:
|
||||||
|
auth-dashboard:
|
||||||
|
basicAuth:
|
||||||
|
users:
|
||||||
|
- "Ognir:$apr1$0.TPOwbF$mHoZOQE2xcdWDBN4VhcBe/"
|
||||||
@@ -1,11 +1,16 @@
|
|||||||
|
# ################################################################# #
|
||||||
|
# CONFIGURACIÓN DEL DASHBOARD DE TRAEFIK - ACCESO SEGURO #
|
||||||
|
# ################################################################# #
|
||||||
|
|
||||||
http:
|
http:
|
||||||
routers:
|
routers:
|
||||||
api:
|
router-traefik-dash:
|
||||||
rule: "Host(`traefik.ognir-server.synology.me`) || Host(`ognir-server.synology.me`)"
|
rule: "Host(`traefik.ognir-server.synology.me`) || Host(`ognir-server.synology.me`)"
|
||||||
service: api@internal
|
|
||||||
middlewares:
|
|
||||||
- auth-dashboard@file
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- "websecure"
|
||||||
|
service: "api@internal"
|
||||||
|
middlewares:
|
||||||
|
- "muro-seguro@file" # Control por IP (Whitelist)
|
||||||
|
- "auth-dashboard@file" # Control por Usuario (Basic Auth)
|
||||||
tls:
|
tls:
|
||||||
certResolver: letsencrypt
|
certResolver: "letsencrypt"
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
http:
|
|
||||||
routers:
|
|
||||||
router-fritz:
|
|
||||||
rule: "Host(`fritz.ognir-server.synology.me`)"
|
|
||||||
entryPoints:
|
|
||||||
- "websecure"
|
|
||||||
service: "fritz-service"
|
|
||||||
tls:
|
|
||||||
certResolver: "letsencrypt"
|
|
||||||
|
|
||||||
services:
|
|
||||||
fritz-service:
|
|
||||||
loadBalancer:
|
|
||||||
servers:
|
|
||||||
- url: "http://192.168.178.1"
|
|
||||||
32
traefik/dynamic/fritz-box.yml
Executable file
32
traefik/dynamic/fritz-box.yml
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
# ################################################################# #
|
||||||
|
# MIDDLEWARE DE WHITELIST - ACCESO RESTRINGIDO OGNIRNAS #
|
||||||
|
# ################################################################# #
|
||||||
|
# Este middleware ya está definido en tu configuración global, #
|
||||||
|
# pero lo vinculamos aquí para proteger el acceso al Router. #
|
||||||
|
|
||||||
|
http:
|
||||||
|
routers:
|
||||||
|
# Definición del Router para Fritz!Box
|
||||||
|
# Aplica TLS con LetsEncrypt y restringe por IP
|
||||||
|
router-fritz:
|
||||||
|
rule: "Host(`fritz.ognir-server.synology.me`)"
|
||||||
|
entryPoints:
|
||||||
|
- "websecure"
|
||||||
|
middlewares:
|
||||||
|
- "muro-seguro"
|
||||||
|
service: "fritz-service"
|
||||||
|
tls:
|
||||||
|
certResolver: "letsencrypt"
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Redirección al hardware físico del Router
|
||||||
|
fritz-service:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://192.168.178.1"
|
||||||
|
|
||||||
|
# ################################################################# #
|
||||||
|
# NOTA DE MANTENIMIENTO: #
|
||||||
|
# Si necesitas acceso externo temporal, comenta la línea de #
|
||||||
|
# 'middlewares' y reinicia Traefik. #
|
||||||
|
# ################################################################# #
|
||||||
42
traefik/dynamic/gestion-segura.yml
Executable file
42
traefik/dynamic/gestion-segura.yml
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
# ################################################################# #
|
||||||
|
# CONFIGURACIÓN DE GESTIÓN PROTEGIDA - OGNIRNAS #
|
||||||
|
# ################################################################# #
|
||||||
|
http:
|
||||||
|
routers:
|
||||||
|
# --- Traefik Dashboard ---
|
||||||
|
router-traefik-dash:
|
||||||
|
rule: "Host(`traefik.ognir-server.synology.me`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))"
|
||||||
|
entryPoints: ["websecure"]
|
||||||
|
middlewares: ["muro-seguro"]
|
||||||
|
service: "api@internal"
|
||||||
|
tls: { certResolver: "letsencrypt" }
|
||||||
|
|
||||||
|
# --- Portainer (Mismo nombre que en Labels para sobrescribir) ---
|
||||||
|
portainer:
|
||||||
|
rule: "Host(`portainer.ognir-server.synology.me`)"
|
||||||
|
entryPoints: ["websecure"]
|
||||||
|
# Añadimos ambos: tus cabeceras originales y el muro
|
||||||
|
middlewares:
|
||||||
|
- "muro-seguro"
|
||||||
|
- "security-headers"
|
||||||
|
service: "portainer-service"
|
||||||
|
tls: { certResolver: "letsencrypt" }
|
||||||
|
|
||||||
|
# --- AdGuard Home ---
|
||||||
|
router-adguard:
|
||||||
|
rule: "Host(`adguard.ognir-server.synology.me`)"
|
||||||
|
entryPoints: ["websecure"]
|
||||||
|
middlewares: ["muro-seguro"]
|
||||||
|
service: "adguard-service"
|
||||||
|
tls: { certResolver: "letsencrypt" }
|
||||||
|
|
||||||
|
services:
|
||||||
|
portainer-service:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://192.168.178.25:9000"
|
||||||
|
adguard-service:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://192.168.178.26:80"
|
||||||
|
# ################################################################# #
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
# ==============================================================================
|
|
||||||
# MIDDLEWARES DE SEGURIDAD (CONFIGURACIÓN DINÁMICA)
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
http:
|
|
||||||
middlewares:
|
|
||||||
seguridad-general:
|
|
||||||
headers:
|
|
||||||
# Cabeceras de seguridad recomendadas (HSTS, XSS, etc.)
|
|
||||||
forceSTSHeader: true
|
|
||||||
stsSeconds: 31536000
|
|
||||||
stsIncludeSubdomains: true
|
|
||||||
stsPreload: true
|
|
||||||
contentTypeNosniff: true
|
|
||||||
browserXssFilter: true
|
|
||||||
frameDeny: true # Evita que tu sitio sea cargado en un iframe (protección clickjacking)
|
|
||||||
referrerPolicy: "same-origin"
|
|
||||||
15
traefik/dynamic/security-headers.yml
Executable file
15
traefik/dynamic/security-headers.yml
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
# ################################################################# #
|
||||||
|
# MIDDLEWARE: SECURITY-HEADERS #
|
||||||
|
# ################################################################# #
|
||||||
|
http:
|
||||||
|
middlewares:
|
||||||
|
security-headers:
|
||||||
|
headers:
|
||||||
|
forceSTSHeader: true
|
||||||
|
stsSeconds: 31536000
|
||||||
|
stsIncludeSubdomains: true
|
||||||
|
stsPreload: true
|
||||||
|
contentTypeNosniff: true
|
||||||
|
browserXssFilter: true
|
||||||
|
frameDeny: true
|
||||||
|
referrerPolicy: "same-origin"
|
||||||
12
traefik/dynamic/whitelist.yml
Executable file
12
traefik/dynamic/whitelist.yml
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
# ################################################################# #
|
||||||
|
# MIDDLEWARE DE WHITELIST - ACCESO RESTRINGIDO OGNIRNAS #
|
||||||
|
# ################################################################# #
|
||||||
|
http:
|
||||||
|
middlewares:
|
||||||
|
muro-seguro:
|
||||||
|
ipAllowList:
|
||||||
|
sourceRange:
|
||||||
|
- "127.0.0.1/32" # Localhost (interno)
|
||||||
|
- "192.168.178.0/24" # Tu red local de casa
|
||||||
|
- "100.64.0.0/10" # Todo el rango de Tailscale
|
||||||
|
- "172.16.0.0/12" # Redes internas de Docker
|
||||||
@@ -31,6 +31,8 @@ entryPoints:
|
|||||||
scheme: https
|
scheme: https
|
||||||
websecure:
|
websecure:
|
||||||
address: ":443"
|
address: ":443"
|
||||||
|
ssh-git:
|
||||||
|
address: ":2222"
|
||||||
|
|
||||||
# --- Proveedores: Docker (vía Proxy) y Archivos Locales ---
|
# --- Proveedores: Docker (vía Proxy) y Archivos Locales ---
|
||||||
providers:
|
providers:
|
||||||
|
|||||||
Reference in New Issue
Block a user