security(gitea): block stack.env routes
This commit is contained in:
@@ -5,12 +5,27 @@ Gitea es un servidor Git ligero y autoalojado, similar a GitHub o GitLab.
|
|||||||
## 📋 Descripción
|
## 📋 Descripción
|
||||||
|
|
||||||
Este stack despliega Gitea con:
|
Este stack despliega Gitea con:
|
||||||
|
|
||||||
- Base de datos PostgreSQL
|
- Base de datos PostgreSQL
|
||||||
- Servidor SSH para operaciones Git
|
- Servidor SSH para operaciones Git
|
||||||
- Gitea Actions (CI/CD similar a GitHub Actions)
|
- Gitea Actions (CI/CD similar a GitHub Actions)
|
||||||
- Act Runner para ejecutar pipelines
|
- Act Runner para ejecutar pipelines
|
||||||
- Integración con Traefik y Authentik
|
- Integración con Traefik y Authentik
|
||||||
|
|
||||||
|
## Protección de `stack.env`
|
||||||
|
|
||||||
|
La configuración [`traefik-dynamic.yml`](./traefik-dynamic.yml) contiene un router de prioridad alta que devuelve `403 Forbidden` para cualquier ruta de Gitea cuyo último segmento sea exactamente `stack.env`, sin importar mayúsculas o minúsculas. Esto cubre tanto la vista web como las rutas raw de cualquier repositorio.
|
||||||
|
|
||||||
|
El bloqueo se implementa en Traefik, antes de Gitea, y no usa CrowdSec. Por eso se aplica igual a todas las IP y una petición a `stack.env` no provoca por sí sola un baneo que afecte al resto del sitio. Las demás rutas siguen pasando por `crowdsec-bouncer@file`.
|
||||||
|
|
||||||
|
Instala o actualiza la configuración activa con:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo install -m 0644 gitea/traefik-dynamic.yml /opt/traefik/dynamic/gitea.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Traefik observa el directorio dinámico y recarga el archivo sin reiniciar el contenedor.
|
||||||
|
|
||||||
## 🚀 Despliegue
|
## 🚀 Despliegue
|
||||||
|
|
||||||
### Prerequisitos
|
### Prerequisitos
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
http:
|
||||||
|
routers:
|
||||||
|
gitea-block-stack-env:
|
||||||
|
rule: 'Host(`gitea.sherlockhomeless.net`) && PathRegexp(`(?i)(^|/)stack[.]env$`)'
|
||||||
|
priority: 1000
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
tls:
|
||||||
|
certResolver: letsencrypt
|
||||||
|
middlewares:
|
||||||
|
- gitea-deny-stack-env
|
||||||
|
service: gitea
|
||||||
|
|
||||||
|
gitea:
|
||||||
|
rule: 'Host(`gitea.sherlockhomeless.net`)'
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
tls:
|
||||||
|
certResolver: letsencrypt
|
||||||
|
middlewares:
|
||||||
|
- crowdsec-bouncer@file
|
||||||
|
service: gitea
|
||||||
|
|
||||||
|
middlewares:
|
||||||
|
gitea-deny-stack-env:
|
||||||
|
ipAllowList:
|
||||||
|
sourceRange:
|
||||||
|
- 0.0.0.0/32
|
||||||
|
- ::/128
|
||||||
|
|
||||||
|
services:
|
||||||
|
gitea:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: http://gitea:3000
|
||||||
Reference in New Issue
Block a user