In questo scenario dobbiamo mettere in sicurezza un servizio che nativamente non ha un sistema di autenticazione (nel mio caso si tratta di Homepage) e per fare ciò utilizziamo la funzionalità HTTP Basic Auth del reverse proxy.
Generare password hash
Nella configurazione di Caddy non si possono inserire password in chiaro, pertanto è necessario generare l’hash della password. Per farlo Caddy ci mette a disposizione una utility.
caddy hash-password --plaintext 'super-strong-password'
Nel caso stessimo utilizzando Caddy in versione containerizzata, il comando da lanciare sarà questo:
docker exec -it caddy caddy hash-password --plaintext 'super-strong-password'
Configurazione di Caddy
A questo punto possiamo configurare Caddy. Apriamo il file Caddyfile e aggiungiamo la configurazione necessaria:
dashboard.example.com {
basic_auth {
admin $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG
}
reverse_proxy homepage:3000
}
Piccola sicurezza extra (consigliata)
Per migliorare la sicurezza del nostro servizio che sta dietro a HTTP Basic Auth, è consigliabile:
- non esporre la porta del container direttamente
- lasciare il servizio accessibile solo tramite Caddy
Nel mio caso utilizzo un container Docker e pertanto la configurazione nel mio docker-compose.yaml è la seguente:
ports:
- "127.0.0.1:3000:3000"