Repository navigation
Romule 0.3.1 — behind a reverse proxy
A follow-up to 0.3.0: the reverse-proxy example the documentation kept
promising, and the four defects that writing it uncovered.
Added
-
exemples/caddy/— a complete reverse-proxy stack, with Romule not
published on the host: it is reachable only through Caddy. CI stands the
stack up on every change and replays the matrix that matters:with ROMULE_TRUSTED_PROXIESwithout a genuinely local client, through the proxy 200 403 an outside client forging X-Forwarded-For: 127.0.0.1403 403 The two rows differ by one header and give opposite results. This cannot be
proven with a double: what is being checked is what a real Caddy writes
into the chain, and a double would only prove what it wrote itself. -
ROMULE_TRUSTED_PROXIESaccepts CIDR —172.16.0.0/12beside
127.0.0.1. Exact-string matching was fine while you wrote127.0.0.1; it
stopped being fine the moment there was a container, because Docker assigns
the proxy's address dynamically. The setting the documentation recommends was
impractical in the deployment it recommends: you had to read an address after
everydocker compose upand fix it when it changed.
Fixed
-
A network notation was compared as an address. With
ROMULE_TRUSTED_PROXIES=10.0.0.0/8, the literal string10.0.0.0/8was in
the exact-match set, so a chain link equal to it counted as a declared relay.
No exploitation is claimed — behind a real proxy the attacker's address is
appended on the right and the walk stops there — but a notation is not an
address, and it is fixed as the comparison bug it is. -
The startup banner said "Network: disabled" right above the address to
connect to. The line followed thelan_accesssetting; in a container
Romule listens on0.0.0.0and protects itself with a token, so the two
disagreed in the most common case. It follows the socket now. -
The update notice no longer reads "Version v0.3.0 available". GitHub
names its tagsv0.3.0and the interface already writes the word Version
in front. The prefix is stripped for display only — the comparison never read
it. Noticed by running the notifier against the first real release.
Docker — docker pull ghcr.io/romule-app/romule:0.3.1 (also 0.3 and latest, amd64 and arm64)
Documentation — https://romule-app.github.io/romule/ · en français
Upgrading — docker compose pull && docker compose up -d. Your state lives in the /data volume and survives.