feat: add PHP ini management system and update infrastructure configs
- Add PHP ini management classes (Access, IniDirective, IniKey, PhpIni) - Update deployment configurations (Wireguard, Traefik, Monitoring) - Add DNS stack and Ansible role - Add deployment debugging playbooks - Update framework components (FilePath, RedisConnectionPool) - Update .gitignore and documentation
This commit is contained in:
@@ -12,7 +12,9 @@ Dieses Dokument beschreibt die geplante Sicherheitshärtung für Backend-Dienste
|
||||
|
||||
**Aktueller Zustand:**
|
||||
- ✅ WireGuard VPN ist installiert und funktionsfähig
|
||||
- ✅ Backend-Dienste sind öffentlich über Traefik erreichbar
|
||||
- ✅ Traefik-Dashboard ist jetzt VPN-only (nur über WireGuard erreichbar)
|
||||
- ✅ Grafana ist VPN-only (nur über WireGuard erreichbar)
|
||||
- ✅ Andere Backend-Dienste sind noch öffentlich über Traefik erreichbar
|
||||
- ✅ VPN-Zugriff funktioniert parallel
|
||||
|
||||
**Zielzustand:**
|
||||
@@ -38,11 +40,19 @@ Folgende Dienste sollen später nur noch über VPN erreichbar sein:
|
||||
- Aktuell: `https://portainer.michaelschiemer.de` (öffentlich)
|
||||
- Zukünftig: Nur `https://10.8.0.1:9443` über VPN
|
||||
|
||||
## Aktueller Test: Grafana nur per VPN
|
||||
## Aktuell implementiert: VPN-only Services
|
||||
|
||||
- Realisiert über Traefik-IP-Whitelist (`grafana-vpn-only` Middleware)
|
||||
- Whitelist-Wert: `MONITORING_VPN_IP_WHITELIST` in `deployment/stacks/monitoring/.env` (Ansible default `monitoring_vpn_ip_whitelist`)
|
||||
- Ziel: Erst Grafana absichern, später Prometheus/Portainer nachziehen
|
||||
### Traefik-Dashboard
|
||||
- ✅ Realisiert über Traefik-IP-Whitelist (`vpn-only` Middleware)
|
||||
- ✅ Zusätzlich durch BasicAuth geschützt
|
||||
- ✅ Whitelist umfasst standardmäßig ausschließlich das WireGuard-Netz `10.8.0.0/24`
|
||||
- ✅ Öffentlicher Zugriff ist blockiert (403 Forbidden)
|
||||
|
||||
### Grafana
|
||||
- ✅ Realisiert über Traefik-IP-Whitelist (`grafana-vpn-only` Middleware)
|
||||
- ✅ Whitelist umfasst standardmäßig ausschließlich das WireGuard-Netz `10.8.0.0/24`
|
||||
- ✅ Anpassung via Ansible-Extra-Var `monitoring_vpn_ip_whitelist_ranges` möglich (falls weitere Netze freigeschaltet werden sollen)
|
||||
- ✅ CoreDNS-Override aktiv, damit `grafana.michaelschiemer.de` im VPN auf `10.8.0.1` zeigt
|
||||
|
||||
### Rollout-Schritte
|
||||
1. Neue Stacks auf den Server syncen: \
|
||||
@@ -55,6 +65,8 @@ Folgende Dienste sollen später nur noch über VPN erreichbar sein:
|
||||
- Ohne VPN (öffentliche IP): `curl -I https://grafana.michaelschiemer.de` → `403 Forbidden`
|
||||
- Mit WireGuard (`10.8.0.x` Client): Grafana im Browser laden, Login funktioniert
|
||||
- Optional: Traefik-Logs prüfen (`docker compose -f ~/deployment/stacks/traefik/docker-compose.yml logs -f traefik`) für geblockte IPs
|
||||
- DNS-Check im VPN: `dig grafana.michaelschiemer.de @10.8.0.1` → `10.8.0.1`
|
||||
- WireGuard-Client bekommt automatisch `DNS = 10.8.0.1`, solange `wireguard_dns_servers` nicht überschrieben wird (ansonsten manuell auf internen Resolver setzen)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -38,10 +38,15 @@ hT3OCWZ6ElX79YdAdexSsZnbWLzRM/5szk+XNEBUaS8=
|
||||
- ✅ Normale Internet-Routen werden nicht geändert
|
||||
- ✅ Firewall-Regeln für SSH (Port 22) werden NICHT entfernt oder blockiert
|
||||
|
||||
**Aktuelle Sicherheitshärtung:**
|
||||
- 🔒 **Traefik-Dashboard** ist jetzt nur noch über WireGuard VPN erreichbar (VPN-only + BasicAuth)
|
||||
- 🔒 **Grafana** ist nur noch über WireGuard VPN erreichbar (VPN-only Middleware)
|
||||
- ✅ Hauptanwendung (`michaelschiemer.de`) bleibt öffentlich erreichbar (wie gewünscht)
|
||||
- 🔒 Traefik arbeitet hinter WireGuard für interne Services (Dashboard, Monitoring)
|
||||
|
||||
**Zukünftige Sicherheitshärtung (geplant):**
|
||||
- 🔒 Backend-Dienste (Prometheus, Grafana, Portainer) sollen später nur noch über VPN erreichbar sein
|
||||
- 🔒 Aktuell sind alle Dienste noch öffentlich erreichbar (für einfachere Einrichtung)
|
||||
- 🔒 Firewall-Regeln können später angepasst werden, um nur VPN-Zugriff zu erlauben
|
||||
- 🔒 Weitere Backend-Dienste (Prometheus, Portainer) können später nur noch über VPN erreichbar sein
|
||||
- 🔒 Firewall-Regeln können bei Bedarf weiter angepasst werden
|
||||
|
||||
---
|
||||
|
||||
@@ -485,6 +490,7 @@ ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml
|
||||
- `client_name`: Name des Clients (erforderlich)
|
||||
- `client_ip`: Spezifische Client-IP (Standard: automatisch berechnet)
|
||||
- `allowed_ips`: Erlaubte IP-Ranges (Standard: 10.8.0.0/24)
|
||||
- `wireguard_dns_servers`: Liste interner Resolver (Default: WireGuard-Server-IP, z.B. `["10.8.0.1"]`)
|
||||
|
||||
**Dokumentation**: Siehe `deployment/ansible/playbooks/README-WIREGUARD.md`
|
||||
|
||||
@@ -492,6 +498,33 @@ ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml
|
||||
> `deployment/ansible/wireguard-clients/<client_name>.conf` – ideal zum direkten
|
||||
> Import auf deinem Admin-Rechner (Datei bleibt mit `chmod 600` geschützt).
|
||||
|
||||
### Interner DNS (CoreDNS) für VPN-Clients
|
||||
|
||||
**Datei**: `deployment/ansible/playbooks/setup-infrastructure.yml` (Tag `dns`)
|
||||
|
||||
**Verwendung:**
|
||||
```bash
|
||||
cd deployment/ansible
|
||||
ANSIBLE_VAULT_PASSWORD_FILE=secrets/.vault_pass \
|
||||
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml --tags dns
|
||||
```
|
||||
|
||||
**Konfiguration:**
|
||||
- DNS-Records definieren sich über `dns_records` (Default in `group_vars/production.yml` → `grafana.<app_domain>` → `10.8.0.1`)
|
||||
- Zusätzliche Einträge können per Override vor dem Playbook-Lauf gesetzt werden, z.B.:
|
||||
```bash
|
||||
ansible-playbook ... --tags dns \
|
||||
-e 'dns_records=[{"host":"grafana.michaelschiemer.de","address":"10.8.0.1"},{"host":"prometheus.michaelschiemer.de","address":"10.8.0.1"}]'
|
||||
```
|
||||
- Upstream-Resolver werden über `dns_forwarders` gesteuert (Standard: `1.1.1.1`, `8.8.8.8`)
|
||||
|
||||
**Ergebnis:**
|
||||
- CoreDNS läuft auf dem Server via `network_mode: host` (UDP/TCP 53)
|
||||
- Alle VPN-Clients können `grafana.michaelschiemer.de` (und weitere Overrides) direkt auf `10.8.0.1` auflösen
|
||||
- Nicht hinterlegte Hostnamen werden dank `fallthrough` automatisch an die definierten Upstream-Resolver weitergereicht
|
||||
- Traefik-Middleware `grafana-vpn-only` akzeptiert ausschließlich Verbindungen aus dem WireGuard-Netz `10.8.0.0/24`
|
||||
- HTTP-Aufrufe zu Grafana laufen so automatisch durch den WireGuard-Tunnel
|
||||
|
||||
---
|
||||
|
||||
## Verzeichnisstruktur
|
||||
|
||||
Reference in New Issue
Block a user