Files
caddy-bunny/teknisk_beskrivning_caddy.md

74 lines
3.5 KiB
Markdown

# Teknisk Beskrivning av Caddy Reverse Proxy
## Översikt
Caddy används som en reverse proxy för att hantera trafik till olika interna tjänster. Denna konfiguration är optimerad för att köra i en Docker-miljö och inkluderar säkerhetsåtgärder för att skydda mot vanliga webbsårbarheter.
## Konfiguration
### Grundläggande Struktur
Caddyfilen är uppdelad i två huvudsektioner:
1. **Snippets**: Återanvändbara konfigurationer som kan importeras.
- `(auth)`: Konfigurerar basautentisering.
- `(common)`: Lägger till säkerhetsrubriker och komprimeringsinställningar.
2. **Domänspecifika Regler**: Varje domän har sina egna regler för hur trafiken ska hanteras.
### Snippets
#### `(auth)`
- Använder `basicauth` för att kräva autentisering.
- Användarnamn och lösenord är krypterade med bcrypt.
#### `(common)`
- `encode gzip zstd`: Aktiverar komprimering för att förbättra prestanda.
- **Säkerhetsrubriker**:
- `Strict-Transport-Security`: Tvingar HTTPS och inkluderar subdomäner.
- `X-Content-Type-Options`: Förhindrar MIME-sniffing.
- `X-Frame-Options`: Förhindrar klickkapning.
- `X-XSS-Protection`: Aktiverar XSS-skydd.
- `Referrer-Policy`: Kontrollerar hur referrer-information skickas.
- `Permissions-Policy`: Begränsar tillgång till känsliga API:er.
- `Cross-Origin-Opener-Policy`, `Cross-Origin-Resource-Policy`, `Cross-Origin-Embedder-Policy`: Förbättrar säkerheten för cross-origin-resurser.
### Domänspecifika Regler
Varje domän har en eller flera `reverse_proxy`-regler som dirigerar trafik till rätt tjänst. Vissa domäner, som `recept.gynther.se`, har mer komplexa regler för att hantera flera tjänster.
#### Exempel: `recept.gynther.se`
- **Import Service**: Hanterar `/api/recipes/import*` och dirigerar till `recipe-import-service:3000`.
- **Frontend Proxy**: Hanterar specifika API-endpoints och dirigerar till `recipe-frontend:3000`.
- **Backend API**: Hanterar `/api/products*`, `/api/inventory*`, och `/api/recipes*` och dirigerar till `recipe-api:8080`.
- **Catch All**: All annan trafik dirigeras till `recipe-frontend:3000`.
## Säkerhet
### Autentisering
- Vissa tjänster, som `wetty.gynther.se`, kräver autentisering via `basicauth`.
### Säkerhetsrubriker
- Caddy lägger till flera säkerhetsrubriker för att skydda mot vanliga webbsårbarheter.
## Docker och Nätverk
- Caddy körs i en **Docker-installation** och kommunicerar med andra containrar via Docker-nätverket.
- Trafik mellan containrar är intern och påverkas inte av brandväggsregler på värdservern.
- **Flutter** har en egen Caddy-installation i sin Docker-container för att hantera specifika behov, vilket innebär att `test.gynther.se` dirigeras till `recipe-flutter:5000` där den egna Caddy-installationen körs.
## Brandvägg (UFW)
För att säkerställa att endast önskad trafik når servern:
- Tillåt port 22 (SSH).
- Tillåt port 80 (HTTP) och 443 (HTTPS) för webbtrafik.
## Felsökning
- **Loggar**: Använd `docker-compose logs caddy` för att se Caddy-loggar.
- **Testa Konnektivitet**: Se till att alla tjänster som Caddy ska dirigera trafik till är igång och lyssnar på rätt portar.
- **Uppdatera Konfiguration**: Om ändringar görs i `Caddyfile`, starta om Caddy-containern med `docker-compose restart caddy`.
## Slutsats
Denna konfiguration ger en säker och effektiv lösning för att hantera trafik till flera tjänster med Caddy som reverse proxy. Genom att använda Docker och Caddy kan du enkelt skalera och hantera dina tjänster.