Werk

Self-hosting op een NAS

Eigen apps live met Docker, Forgejo en een reverse proxy, plus een beveiligingsfout die ik zelf vond en dichtte.

Probleem

Ik wilde mijn eigen apps zelf hosten: zelf weten waar de data staat en zelf begrijpen wat er tussen een git push en een werkende site gebeurt. Wie zelf host, is ook zelf verantwoordelijk voor wat er aan het internet hangt.

Wat ik deed

  • Apps draaien als Docker-containers op een NAS.
  • De code staat op een eigen Forgejo. Deployen is een git pull op de NAS en de container opnieuw bouwen.
  • Een reverse proxy (Nginx Proxy Manager) verzorgt de domeinen en de certificaten van Let's Encrypt.
  • Daarnaast heb ik wat ervaring met Kubernetes en ArgoCD. TODO: in één of twee zinnen beschrijven waar en waarvoor.

Deze site draait op dezelfde manier.

De beveiligingsfout

Een van mijn eigen sites werd geserveerd door een nginx-container met de standaardconfiguratie, met de hele repository als webroot. Daardoor waren de .git-map, de README en het compose-bestand voor iedereen te downloaden. Ik vond het zelf bij het nalopen van een melding over een omleidingsfout.

De oplossing: een eigen nginx-configuratie buiten de webroot, die voor dotfiles en andere niet-sitebestanden een 404 geeft. De omleidingsfout zat in dezelfde standaardconfiguratie en ging in dezelfde wijziging mee.

Wat ik mat

Na de wijziging van buitenaf gecontroleerd: een verzoek naar /.git/config geeft een 404 en een omleiding blijft op https. Bij deze site gaat het een stap verder: de container bevat alleen de build-output, dus de repository staat niet eens op de plek die geserveerd wordt.

Wat ik leerde

  • Een standaardconfiguratie is gemaakt om te werken, niet om veilig te zijn.
  • Serveer de build, niet de repository.
  • Controleer van buitenaf wat bereikbaar is. Van binnenuit ziet alles er goed uit.