Short answer: Put the VPS on a Tailscale network, bind your admin tools (Open WebUI, n8n, Langfuse, Dify) to localhost, and publish them with tailscale serve. Only devices signed in to your tailnet can open them, so there's no public login page for bots to hammer. Check the free plan's non-commercial limit before you use it for a business.
Disclosure: this page has no affiliate link for Tailscale. The Hostinger link is an affiliate link. The install commands and plan limits come from Tailscale's documentation and pricing page on 23 Oct 2026. I did not run these steps on a VPS for this post, so treat the commands as documented-but-unrun here.
Most self-hosted AI tools ship with a login page and nothing else standing between them and the internet. Open WebUI, n8n, Dify and Langfuse all have one. Attackers scan for those pages constantly, and a weak password or an unpatched bug is all it takes. If only you and your team use the tool, it doesn't need a public address at all.
What does Tailscale give you?
A private network ("tailnet") between your devices, with each device reachable by a stable name. Your VPS, laptop and phone join it, and traffic between them is private. Nothing in this setup requires opening an inbound port for the tool itself.
How do you install it?
On the server, per Tailscale's Linux install page (it supports Ubuntu, Debian, RHEL-family, Raspberry Pi OS, Amazon Linux and others):
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale up prints a login URL. Open it on any device, sign in, and the server joins your tailnet. Install Tailscale on your laptop and phone and sign in to the same account.
How do you publish a tool inside the tailnet?
Keep the app bound to 127.0.0.1. In Docker Compose that means publishing as 127.0.0.1:3000:3000, as in the Streamlit and remote MCP posts. Then:
sudo tailscale serve --bg localhost:3000
Tailscale's Serve page says HTTPS is the default, traffic uses an automatically provisioned TLS certificate, and --bg keeps the share running in the background. Your URL follows the pattern https://<your-node>.<tailnet-name>.ts.net/. The docs I read don't list prerequisites such as MagicDNS or certificate settings, so if the HTTPS URL doesn't resolve, check the Tailscale admin console's DNS and HTTPS settings.
Now the tool is reachable from your laptop at that name, and from nowhere else.
Should you use Tailscale SSH too?
You can. The docs show enabling it on the host with tailscale set --ssh, which makes Tailscale answer SSH on the Tailscale IP using your tailnet identity instead of authorized_keys. Two cautions from the docs: existing SSH sessions to that IP will hang when you enable it, and the tailnet policy file must contain both a network grant and an ssh rule, or it won't work. Your normal sshd config isn't modified, so SSH over the public address keeps working.
If you don't want to learn the policy file, plain SSH with keys over the tailnet address is fine.
How do you close the public side without locking yourself out?
- Join the tailnet and confirm you can SSH to the server's tailnet name from your laptop.
- Confirm the tool loads at its
ts.netURL from your laptop. - Only then remove public rules. Hostinger's page lists firewall management on every VPS plan, so you can drop the tool's public ports there. Keep 22 until you've confirmed tailnet SSH works, and keep 80 and 443 if the server also hosts something public.
- Keep a console path in. Check what your provider offers for emergency access, because a wrong firewall rule with no console is a rebuild.
The hardening checklist covers the rest of the baseline.
What are the limits of the free plan?
From Tailscale's pricing page: the Personal plan is $0, up to 6 users, unlimited user devices, 50 tagged resources included (extras at $1 a month each), 1,000 ephemeral-resource minutes a month, 3 ACL groups, and basic Tailscale SSH on up to 5 hosts. The detail that matters: the FAQ says the Personal plan is "only suitable for non-commercial use of Tailscale." If you run client projects or a company, read the current terms and consider a paid plan or another approach (an SSH tunnel needs nothing extra).
Alternatives
- SSH port forwarding:
ssh -L 3000:localhost:3000 you@servergives you the tool on your laptop's localhost with no extra software. Fine for one person. - Cloudflare Tunnel with access rules: covered in the Cloudflare Tunnel post when you do want a public name with authentication in front.
- A reverse proxy with basic auth: adds a second password but leaves the page public.
Which server do these tools need?
Tailscale itself is light. The tools behind it set the size: Dify needs 2 cores and 4 GiB at minimum, Langfuse suggests 4 cores and 16 GiB. Work out the total with the plan sizing guide, then pick the plan that fits. For the model side, pay in rupees via AICredits or use a zero-forex card, as in the credit card guide.



