forwardproxy icon indicating copy to clipboard operation
forwardproxy copied to clipboard

Allow use of wildcard outside of `*.` prefix

Open mogul opened this issue 2 years ago • 5 comments

Problem

From the docs:

For hostname, you can specify *. as a prefix to match domain and subdomains. For example, *.caddyserver.com will match caddyserver.com, subdomain.caddyserver.com, but not fakecaddyserver.com.

Active word: prefix.

This implementation is constraining how well I can address a real-world example: New Relic says that their agent traffic is ingested via collector*.newrelic.com. If I try to specify that pattern, I get this from Caddy:

2023-05-04T18:10:04.94+0000 [APP/PROC/WEB/0] ERR run: loading initial config: loading new config: loading http app module: provision http: server srv0: setting up route handlers: route 0: loading handler modules: position 0: loading module 'subroute': provision http.handlers.subroute: setting up subroutes: route 0: loading handler modules: position 0: loading module 'forward_proxy': provision http.handlers.forward_proxy: *-[api.newrelic.com](http://api.newrelic.com/) could not be parsed as either IP, IP network, or domain: character * is not allowed

Since I can't specify collector*.newrelic.com for an acl directive I instead have to allow traffic to all of *.newrelic.com which is very overbroad for what I want!

Proposed solution

acl patterns like collector*.newrelic.com and *-api.newrelic.com should be supported.

mogul avatar May 04 '23 18:05 mogul

The restriction is defined by TLS certificate validation rules regarding wildcards. The Caddyfile conflates the TLS certificate name and the Host for routing HTTP requests. But you can probably do what you want with a regex matcher inside a site block. I'm mobile at the moment but you can probably find what you need in our docs.

mholt avatar May 04 '23 19:05 mholt

Oh, you know -- my bad. This is an ACL rule, duh. (See, I was mobile, I should just wait until I'm at my computer.)

I think the ACL rules don't currently support any wildcard characters. But they probably should. Want to submit a PR?

mholt avatar May 09 '23 19:05 mholt

Given my Go skills, I don't think you want me to do that. ;)

mogul avatar May 10 '23 17:05 mogul

I think the ACL rules don't currently support any wildcard characters.

I've tested that it works with things like *.newrelic.com and *.google.com; it's only when the * is in the middle of a subdomain that's not accepted.

mogul avatar May 10 '23 17:05 mogul

@mogul Only *. as a prefix works, not * in isolation.

mholt avatar May 10 '23 19:05 mholt