Ingress
BlueGit staat op de mini-PC en spreekt plain HTTP. TLS, certificaten en de publieke SSH-poort horen bij een ingress op een andere machine. Die machine is de enige die vanaf internet bij de mini-PC mag.
BlueGit bouwt URL's niet uit de binnenkomende Host-kop. De externe website is base_url. De SSH-clone-URL is ssh.public_host en ssh.public_port. listen en ssh.listen zijn alleen de adressen waarop dit proces bindt.
BlueGit
base_url: https://git.timfalken.com
listen: 0.0.0.0:8080
trusted_proxies:
- 10.0.0.2
ssh:
enabled: true
listen: 0.0.0.0:2222
public_host: git.timfalken.com
public_port: 22
10.0.0.2 is het adres waarvan de mini-PC de verbinding van de ingress ziet. Een verkeerd adres betekent dat X-Forwarded-For genegeerd wordt. Een te ruime lijst, zoals 0.0.0.0/0, laat elke client zijn adres vervalsen. behind_proxy: true uit een oudere configuratie wordt geweigerd.
In X-Forwarded-For telt de rechtse hop die zelf niet op de lijst staat. Een client die 6.6.6.6 vooraan zet, wint daarmee niet van het adres dat de ingress erachter plakt. Ontbreekt die kop, dan geldt X-Real-IP, maar alleen vanaf een vertrouwde proxy. X-Forwarded-Proto wordt niet gebruikt: de cookie en de OAuth-redirect volgen base_url.
Beperk met de firewall op de mini-PC poort 8080 en 2222 tot de ingress. listen op 0.0.0.0 is bereikbaar voor iedereen die tot het netwerk van de mini-PC kan.
Voorbeeld op de ingress
Caddy doet HTTPS en stuurt door naar de mini-PC. Vervang 10.0.0.5 door het adres van de mini-PC.
git.timfalken.com {
reverse_proxy 10.0.0.5:8080
}
Caddy zet X-Forwarded-For en X-Forwarded-Proto. Het certificaat komt van Caddy; BlueGit ziet geen TLS.
SSH is geen HTTP. De ingress stuurt de TCP-stroom door, zodat de hostkey van BlueGit is wat de client controleert. Met de Caddy-module caddy-l4:
{
layer4 {
:22 {
route {
proxy 10.0.0.5:2222
}
}
}
}
Zonder die module kan nginx hetzelfde op de stream-laag:
stream {
server {
listen 22;
proxy_pass 10.0.0.5:2222;
}
}
De clone-URL op de website is dan git@git.timfalken.com:eigenaar/naam.git (de korte vorm, zoals GitHub). Bij een andere publieke poort wordt het ssh://git@host:poort/eigenaar/naam.git. Op de mini-PC blijft git-SSH op poort 2222 luisteren, naast de SSH van Arch.