84
How to selfhost with a VPN (95.181.238.34:40152)
submitted 1 year ago* (last edited 1 year ago) by humanoidchaos@lemmy.cif.su to c/selfhosted@lemmy.world

These are some quick n' dirty instructions so people can get up and running fast.

I wish I had known this was possible sooner.

Instructions:

Check that your VPN supports port forwarding and you have it enabled.

Grab your VPN's internal IP with ip a

Find the interface for your VPN. For me it's called tun0.

Open up /etc/nginx/nginx.conf

You can back it up, or comment everything out, or pick what's necessary. Here's what my file looks like.

	worker_processes  1;
	include modules.d/*.conf;

	events {
		worker_connections  1024;
	}
	http {
		server {
			listen [VPN INTERNAL IP]:[VPN FORWARDED PORT];
			server_name  localhost;
			location / {
				root '[ABSOLUTE PATH TO YOUR WEBSITE ROOT FOLDER]';
				index index.html; # Relative to your website root.
			}
		}
	}

Make sure your permissions are correct. For me, the 'other' group needs read permissions to the root folder, including where it's mounted.

Start nginx with systemctl start nginx

You can visit your website on your host machine in a browser at [VPN INTERNAL IP]:[VPN FORWADED PORT]. For me, using the internal IP is required to view the website on my host machine.

To view the website on other machines, you can use [VPN EXTERNAL IP]:[VPN FORWARDED PORT]. The only thing you need to change is the IP address.

I hope this works for you and you are inspired to selfhost and take back power from those who stole it from us.

you are viewing a single comment's thread
view the rest of the comments
[-] possiblylinux127@lemmy.zip 8 points 1 year ago* (last edited 1 year ago)

You you setup a proper domain and https for your website instead of having a random IP address and port. Don't visit http pages in 2025. It is a major security risk.

Edit: If you need help setting up https let me know. You will need a domain but they are fairly inexpensive. If it is a matter of technical knowledge let me know as I can help.

[-] null_dot@lemmy.dbzer0.com 31 points 1 year ago

LOL. On the scale of risky things I've done today, visiting this guy's http website barely rates a mention.

Someone posts about something they've learned and the best you can do is dump on them about whatever thing in order to demonstrate to everyone your superior knowledge.

Everyone starts somewhere.

[-] possiblylinux127@lemmy.zip 4 points 1 year ago

I'm down to help people get https set up. I'm not trying to dunk but rather I'm trying to make the internet a safer place by reducing attacks and mass surveillance.

[-] EncryptKeeper@lemmy.world 0 points 1 year ago

Let’s be real, this guy has no knowledge. He’s just yet another security parrot who doesn’t even understand the why behind the things they’re regurgitating.

[-] EncryptKeeper@lemmy.world 19 points 1 year ago* (last edited 1 year ago)

There’s no security risk viewing this bit of html via http lmao

[-] possiblylinux127@lemmy.zip 5 points 1 year ago* (last edited 1 year ago)

How so?

Data send back isn't validated so someone could tamper with the data. A bad actor could add some arbittary Javascript plus ISPs have been caught inserting marketing materials into pages.

From a privacy perspective it is also bad as not only does it include your user agent in plain text it doesn't have any encryption on page contents which allows your ISP to snoop on what you are doing.

All of these reasons are while we moved to https. X.509 certs are free and trivial to setup with Caddy or any other Reverse proxy/web server. If https was crazy had to setup I'd be more understanding but it is very easy to do in 2025.

[-] null_dot@lemmy.dbzer0.com 3 points 1 year ago

Do you really think someone is going to set up a MITM attack for the dozen people who visit this blog?

[-] possiblylinux127@lemmy.zip 4 points 1 year ago

No, but governments and ISPs can and have historically done so for all http traffic.

It doesn't matter the page. They just care about http.

[-] missfrizzle@discuss.tchncs.de 7 points 1 year ago* (last edited 1 year ago)

specifically this is how QUANTUMINSERT worked (from the Snowden leaks.) also China used the same technique, injecting malicious JS through the GFW to get bystanders to DDoS github, in a much more obvious and indiscriminate way.

nobody here is remotely likely to be targeted by NSA, of course, but you can actually do such attacks on a budget if you compromise any router in the chain. combined with a BGP hijack it's not far out of reach for even a ransomware gang to pull something like that these days.

[-] possiblylinux127@lemmy.zip 2 points 1 year ago

To add to this, a whole lot of places have been compromised in the salt typhoon attacks. China has compromised infrastructure all over the place including ISP hardware.

[-] jafra@slrpnk.net -2 points 1 year ago

Maybe there is, maybe it's only little. Maybe people browsing should be more aware of where they click on. Either way, this method shouldn't be used for any sensitive information least a personal cloud. Would be suicidal I guess.

[-] EncryptKeeper@lemmy.world 6 points 1 year ago

Luckily this website contains no sensitive information and is not a personal cloud.

load more comments (8 replies)
[-] humanoidchaos@lemmy.cif.su 14 points 1 year ago

Thanks.

It's my understanding that https provides encryption for the data sent between you and the server. If you're not sending any sensitive data, then the encryption shouldn't be necessary.

Don't get me wrong, encryption is great even when it isn't necessary. For my demonstration purposes though, I chose not to include it.

I also believe it's possible to set up HTTPS encryption without a domain name, but it might result in that "we can't verify the authenticity of this website" warning in web browsers due to using a self-signed certificate.

[-] stratself@lemdro.id 21 points 1 year ago* (last edited 1 year ago)

Let's Encrypt are rolling out IP-based certs, you may wanna follow its development. I'm not sure if it could be used for your forwarded VPN port, but it'd be nice anyhow

Edit: I believe encryption helps prevent tampering the data between the server and user too. It should prevent for example, someone MITM the connection and injecting malicious content that tells the user to download malware

[-] humanoidchaos@lemmy.cif.su 5 points 1 year ago

Thanks. This is new to me and I'm going to be looking into it.

[-] turmoil@feddit.org 0 points 1 year ago

As I use docker for most of my deploys (as you should for websites exposed to the Internet anyway), I can wholeheartedly recommend traefik for this. Basically it has the functionality of nginx, but supports easy Let's Encrypt certificates.

[-] Laser@feddit.org -1 points 1 year ago* (last edited 1 year ago)

Let's Encrypt are rolling out IP-based certs, you may wanna follow its development. I'm not sure if it could be used for your forwarded VPN port, but it'd be nice anyhow

It shouldn't be because you're not actually the owner of the IP address. If any user could get a cert, they could impersonate any other.

I believe encryption helps prevent tampering the data between the server and user too. It should prevent for example, someone MITM the connection and injecting malicious content that tells the user to download malware

No, encryption only protects the confidentiality of data. You need message authentication codes or authenticated encryption to make sure the message hasn't been ~~transported~~ tampered with. Especially stream ciphers like ChaCha (but also AES in counter mode) are susceptible to malleability attacks, which are super simple yet very dangerous.

Edit: this post is a bit pedantic because any scheme that is relevant for LE certificates covers authenticity protection. But it's not the encryption part of those schemes that is responsible.

[-] frezik@lemmy.blahaj.zone 5 points 1 year ago

Public key crypto, properly implemented, does prevent MITM attacks. TLS does do this, and that's all that matters here

load more comments (3 replies)
[-] SteveTech@programming.dev 2 points 1 year ago

It shouldn't be because you're not actually the owner of the IP address. If any user could get a cert, they could impersonate any other.

They're 'shortlived' 7 day certs, verified using a HTTP challenge. It doesn't matter who owns the IP, it's just a matter of who holds the IP.

[-] Laser@feddit.org 0 points 1 year ago

Right, and for the challenge, you need to have access to a privileged port (which usually implies ownership), which you won't get assigned.

[-] stratself@lemdro.id 2 points 1 year ago* (last edited 1 year ago)

Ah right, completely forgot about that (80 for HTTP-01, 443 for TLS-ALPN-01). Is a bummer unfortunately

[-] possiblylinux127@lemmy.zip 18 points 1 year ago

That is a pretty bad take as all data is sensitive. Https also provides integrity to prevent man in the middle attacks.

[-] theshatterstone54@feddit.uk 9 points 1 year ago

And that's why even static sites like Hugo blogs or even simple pages like the one OP posted should have HTTPS. Source: Studied Distributed Systems at university.

[-] ComradeMiao@lemmy.world 4 points 1 year ago

It takes two seconds to get https and 10 bucks a year for a domain. Come on

[-] possiblylinux127@lemmy.zip 3 points 1 year ago

Honestly if one is wanting the lowest cost you can buy a 1.111B class domain from gen.xyz. it is $0.99 a year which is far cheaper than anything I've seen.

[-] ComradeMiao@lemmy.world 1 points 1 year ago

Even more reason for no excuse

[-] possiblylinux127@lemmy.zip 3 points 1 year ago

You can pickup a cheap domain from gen.xyz. The cheapest domain is $0.99 which is pretty affordable especially since you probably are already paying for a internet connection.

Once you have the domain you can point it to your IP and then set port 443 on that address to point to Caddy. On Caddy you can either configure it as a server or use it as a reverse proxy to point to something else.

Security wise I would put all of this on its own vlan with ACLs to control access. If that sounds confusing start with https.

[-] WhyJiffie@sh.itjust.works 3 points 1 year ago

but it is sensitive data. the webserver can send executable code to the web browser. if it does not that doesn't matter, what matters is that it can be inserted by a middleman. It's not like there's a dedicated person needed to do that, it can just happen automatically.

[-] SMillerNL@lemmy.world 1 points 1 year ago

It's my understanding that https provides encryption for the data sent between you and the server. If you're not sending any sensitive data, then the encryption shouldn't be necessary.

As others have pointed out, everything can be sensitive. If I’m self hosting nextcloud instance with chat that under British law should check for age… self hosting is now sensitive.

In addition to that, without a secure connection you’re stuck with HTTP/1.1 from 1999 instead of the modern 2 or 3 versions.

I also believe it's possible to set up HTTPS encryption without a domain name, but it might result in that "we can't verify the authenticity of this website" warning in web browsers due to using a self-signed certificate.

You can: https://letsencrypt.org/2025/07/01/issuing-our-first-ip-address-certificate

[-] N0x0n@lemmy.ml 1 points 1 year ago

In addition to that, without a secure connection you’re stuck with HTTP/1.1

That's not entirely true. A lot of requests, even with https, are send over HTTP/1.1. And this is kinda mind blowing that in 2025 we still rely on something so old and insecure...

Same goes with SMS and the old SS7 protocol from 1970... 2FA SMS is probably the most insecure way to get access to your bank account or what ever service promotes 2FA sms login.

[-] falynns@lemmy.world 3 points 1 year ago

I can't believe SMS is still used for anything but sure OTP sent in text makes sure my account is secure Mr Bank.

[-] SMillerNL@lemmy.world 1 points 1 year ago

Does that contradict what I said? Sure, HTTP 1 is still widely used, but without TLS you can’t use anything else.

For SMS we don’t have a choice, but if you configure your own web server you do have a choice.

[-] fmstrat@lemmy.nowsci.com 1 points 1 year ago

Not that I think you need it for this, but a DynDNS implementation would give you a hostname you can dynamically change to your VPN ip, thus solving the SSL host issue.

[-] drspod@lemmy.ml 1 points 1 year ago

Anyone with the ability to inject or modify packets in the network path between server and client can inject malicious javascript or browser exploits into an unencrypted HTTP TCP stream. The client's User-Agent and other headers would allow the attacker to customize their attack to target that specific browser version, and compromise the client machine.

[-] N0x0n@lemmy.ml 0 points 1 year ago

I also believe it's possible to set up HTTPS encryption without a domain name, but it might result in that "we can't verify the authenticity of this website" warning in web browsers due to using a self-signed certificate.

Just create your own rootCA and IntermediateCA and sign your certificate with those, put the CA in your trust store of your system and get rid of this self-signed warning on every device and happily access all your service via: *.home.lab or whater ever local domain pleases you.

[-] frongt@lemmy.zip 3 points 1 year ago

I'm not installing OP's CA cert just to view his blog.

[-] N0x0n@lemmy.ml 1 points 1 year ago

Fair point ! Yeah sure if you host a blog online it doesn't make sense... But if you only self-host your services for family and some friends and access them over VPN, a local CA is actually a privacy respecting choice.

Hosting something on the web (specially self-hosted) without the propre software and hardware is a bad idea in the first place anyway !

[-] Typewar@infosec.pub 2 points 1 year ago* (last edited 1 year ago)

Is it not possible to set up https for just an ip address with no domain?

I think it’s technically possible, but your IP likely isn’t static, especially if you’re using a VPN. You’d need a new cert every time your IP changed.

[-] possiblylinux127@lemmy.zip 0 points 1 year ago

Buy a domain

They are pretty cheap especially compared to hardware

load more comments (2 replies)
this post was submitted on 01 Sep 2025
84 points (89.6% liked)

Selfhosted

62266 readers
388 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:

Detailed Rules Post

  1. Be civil.

  2. No spam.

  3. Posts are to be related to self-hosting.

  4. Don't duplicate the full text of your blog or readme if you're providing a link.

  5. Submission headline should match the article title.

  6. No trolling.

  7. Promotion posts require active participation, with an account that is at least 30 days old. F/LOSS without a paywall has exceptions, with requirements. See the rules link for details. Tags [CBH] or [AIP] are required, see the links in Rule 8 for details.

  8. AI-related discussions and AI-involved promotional posts have additional requirements for tagging, as noted in Rule 7 and the AI & Promotional Post Expanded Rules post, and find example disclosures here.

Resources:

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

Questions? DM the mods!

founded 3 years ago
MODERATORS