this post was submitted on 19 Dec 2024
36 points (95.0% liked)

Selfhosted

40696 readers
321 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
 

For instance how can I use my *.domain.com SSL certs and NPM to route containers to a subdomain without exposing them? The main domain is exposed.

all 31 comments
sorted by: hot top controversial new old
[–] possiblylinux127@lemmy.zip 7 points 2 days ago (1 children)

You need a DNS service that works with Let's encrypt

[–] ComradeMiao@lemmy.dbzer0.com 1 points 1 day ago (2 children)
[–] possiblylinux127@lemmy.zip 5 points 1 day ago* (last edited 1 day ago) (1 children)

I don't get it. Npm is a package manager. It doesn't handle certificates.

You need a DNS service like route 53 (AWS) or similar where let's encrypt connects via an API and creates the DNS token.

[–] coolie4@lemmy.world 2 points 1 day ago (1 children)

OP isn't referring to the package manager. They're talking about Nginx Proxy Manager

[–] possiblylinux127@lemmy.zip 4 points 1 day ago

Oh

That makes sense. We need to stop making two things use the same acronym. Its like people saying HA for home assistant without realizing that HA is normally used for high availability.

Then you're all set, issue certs over DNS-01 challenge in NPM, and create records in your local DNS server that point to the NPM IP for each domain you want to use.

[–] slazer2au@lemmy.world 16 points 2 days ago (1 children)

Split DNS on your LAN?

Only records permitted to be access on your LAN are responded by a local DNS server. While public DNS still available for your public facing services.

Your wildcard cert will work for both situations as the browser only cares the sni matches the Url in your address bar.

[–] bigdickdonkey@lemmy.ca 2 points 2 days ago (1 children)

I’m using this right now but I’m switching to having all my services under one domain and blocking non internal ips. Technically someone can access your site by providing the host manually, althought it’s unlikely since they would need to know it

[–] derek@infosec.pub 2 points 1 day ago

Would you expanding in this concern? I'm not sure I understand but I'd like to.

[–] wildbus8979@sh.itjust.works 14 points 2 days ago* (last edited 2 days ago) (2 children)

You can use the DNS verification method. Either using nsupdate with bind or what ever protocol your DNS provider and favorite ACME (certbot, acme, lego, etc) utility supports. As long as your DNS server is publically reachable that will work, even if the subdomain itself doesn't exist publically.

[–] thumdinger@lemmy.world 5 points 2 days ago (1 children)

This is what I do as well. I have a public DNS record for my internal reverse proxy IP (no need to expose my public IP and associate it with my domain). I let NPM reach out to the DNS provider to complete verification challenge using an account token, NPM can then get a valid cert from Let’s Encrypt and nothing is exposed. All inbound traffic on 80/443 remains blocked as normal.

This is the way.

Vastly superior to local dns.

[–] just_another_person@lemmy.world 2 points 2 days ago (2 children)

This is specifically info about LetsEncrypt, not general SSL.

[–] wildbus8979@sh.itjust.works 5 points 2 days ago* (last edited 2 days ago)

Yes my answer is for use with Let's Encrypt.

[–] fine_sandy_bottom@lemmy.federate.cc 1 points 2 days ago (1 children)

I don't really understand what you're getting at. The answer to OPs question is to use letsencrypt like everyone else.

[–] just_another_person@lemmy.world 3 points 2 days ago (2 children)

They literally didn't mention LE at all.

SSL is not LetsEncrypt, if you didn't know.

[–] Max_P@lemmy.max-p.me 3 points 2 days ago

To add: a lot of cert providers also offer ACME so while the primary user of ACME is LetsEncrypt, you can use the same tech and validations as LetsEncrypt on other vendors too.

[–] ag10n@lemmy.world 6 points 2 days ago (1 children)
[–] wildbus8979@sh.itjust.works 1 points 2 days ago (2 children)

OP is asking for cases where you don't want to allow the service (or reverse proxy) to be accessible via the web.

[–] NeoNachtwaechter@lemmy.world 2 points 2 days ago

As I understand it, OP just wants to hide (=remove) the subdomains from the public URLs.

[–] ag10n@lemmy.world 1 points 2 days ago (1 children)

public domain for internal services

I guess they need a CA then

https://smallstep.com/docs/step-ca/

[–] wildbus8979@sh.itjust.works 0 points 2 days ago (1 children)

They do not. See my other reply about DNS verification.

[–] ag10n@lemmy.world 2 points 2 days ago* (last edited 2 days ago) (1 children)

Your response clearly states publicly accessible DNS. A CA does not require anything public for local SSL and can work in conjunction with whatever service they want for that which is public.

[–] wildbus8979@sh.itjust.works 1 points 2 days ago

Fair, I don't know why I read OPs post as asking for let's encrypt certs. Internal CA is indeed an option.

[–] mhzawadi@lemmy.horwood.cloud 5 points 2 days ago

I have that setup, my domain is hosted by OVh and they have an API that you can use to get a wildcard certificate with.

At home I run pihole and that has some sites in as local IPs, but if you look the same site up from OVH you would get an internet IP

[–] digdilem@lemmy.ml 3 points 2 days ago

How we've done it recently:

  1. Put domain on cloudflare or another registrar that supports an API. Generate a token with the right privs.
  2. Use certbot with the cloudflare plugin, and that token, and generate whatever certs you need within that domain using the DNS01 method.

No need to have port 80 open to the world, no need for a reverse proxy, no need for NAT rules to point it to the right machine, no need to even have DNS set up for the hostname. All of that BS is removed.

The token proves your authentication and LetsEncrypt will generate the certs.

[–] Lem453@lemmy.ca 1 points 2 days ago* (last edited 2 days ago) (1 children)

I do exactly this with traefik.

ie: Seafile.domain.com

Vaultwarden.local.domain.com

I followed this guide: https://youtu.be/liV3c9m_OX8

[–] GoMati@lemmy.world 4 points 2 days ago

I recommend this one instead: https://youtu.be/n1vOfdz5Nm8

Same guy, just fresh version of Traefik 😁

[–] just_another_person@lemmy.world 0 points 2 days ago* (last edited 2 days ago)

If you have wildcard certs, you just install them everywhere your services are running.

As far as redirects go, you just 302 redirect from one host to another.

Unless you're asking about resolving hosts on your internal network and public ones differently, which is a lot more complicated than you probably want to deal with if you're already kind of lost. Just setup a VPN to your internal network and be done with it. Otherwise setup a local DNS resolver to bridge your public DNS and local requests.