Restrict Caddy trusted_proxies to Cloudflare IP ranges

Replace 'private_ranges' with Cloudflare's official published edge ranges
(15 IPv4 + 7 IPv6 from cloudflare.com/ips-v4 and /ips-v6). This ensures
Cf-Connecting-Ip / X-Forwarded-For are only honoured for requests that
genuinely originate from Cloudflare, preventing client-IP header spoofing
from any other source.

Validated + fmt-clean and tested at runtime against the caddy-cf image:
Caddy starts cleanly with all 22 ranges, serves HTTP 200 with gzip and
security headers.
This commit is contained in:
2026-07-25 04:25:25 +01:00
parent 30ef38b143
commit 7e1728a037
+31 -3
View File
@@ -11,10 +11,38 @@
# docker exec caddy_cf caddy reload --config /etc/caddy/Caddyfile
# or restart the container.
{
# Trust Cloudflare so real visitor IPs (Cf-Connecting-Ip / X-Forwarded-For)
# are used for logging and remote_ip matchers instead of the CF edge IP.
# Trust only Cloudflare's edge IPs so real visitor IPs (Cf-Connecting-Ip /
# X-Forwarded-For) are honoured only when the request actually comes from
# Cloudflare. This prevents header spoofing from any other source.
#
# Ranges from https://www.cloudflare.com/ips-v4/ and /ips-v6/ .
# Keep in sync when Cloudflare updates them (rarely). If you rebuild
# caddy-cf with the caddy-dynamic-cloudflare / caddy-cloudflare-ip plugin,
# this static list can be replaced with `trusted_proxies cloudflare`.
servers {
trusted_proxies static private_ranges
trusted_proxies static \
173.245.48.0/20 \
103.21.244.0/22 \
103.22.200.0/22 \
103.31.4.0/22 \
141.101.64.0/18 \
108.162.192.0/18 \
190.93.240.0/20 \
188.114.96.0/20 \
197.234.240.0/22 \
198.41.128.0/17 \
162.158.0.0/15 \
104.16.0.0/13 \
104.24.0.0/14 \
172.64.0.0/13 \
131.0.72.0/22 \
2400:cb00::/32 \
2606:4700::/32 \
2803:f800::/32 \
2405:b500::/32 \
2405:8100::/32 \
2a06:98c0::/29 \
2c0f:f248::/32
client_ip_headers Cf-Connecting-Ip X-Forwarded-For
}
}