The Misconception of Public IPs
For years, the default assumption for anyone running a server, even for a humble side project, was that it needed a public IP address. This perceived necessity was deeply ingrained: how else would the server be accessible from the internet? This mindset, however, often leads to unnecessary complexities and security vulnerabilities. The reality is that for many applications, especially personal side projects, a public IP address is not only non-essential but actively detrimental.
Consider a common scenario: a developer builds a small Node.js API backed by a Postgres database. Historically, the go-to deployment method was a cheap Virtual Private Server (VPS). This VPS would be assigned a public IP, and the developer would then meticulously configure firewalls, intrusion detection systems, and SSH security to protect it. The implicit belief was that a public IP was the cost of entry for internet accessibility. This approach, while functional, comes with a constant underlying anxiety. Are the firewall rules perfect? Is the SSH configuration hardened enough? What if a new vulnerability emerges tomorrow?
The author of the original piece experienced this firsthand. After two years of running a side project on a VPS, a routine check of authentication logs revealed a barrage of brute-force attempts. Thousands of failed login attempts per day, originating from IP addresses across the globe, targeted the root user. Despite implementing key-based SSH authentication, Fail2Ban, and the Uncomplicated Firewall (UFW), the relentless assault continued. The fundamental issue wasn't the security measures themselves, but the server's very presence on the public internet. A public IP address, by its nature, makes a server a visible target. It's an open invitation for automated scans and malicious actors to probe for weaknesses.
The core problem with public IPs for side projects is that they transform a personal tool into a potential attack vector. Even with robust security in place, the sheer volume of automated attacks can consume resources, obscure legitimate activity, and, critically, leave a door ajar for sophisticated exploits. The constant need to monitor logs, update firewall rules, and patch systems becomes a significant maintenance burden, often detracting from the actual development or enjoyment of the side project.
Rethinking Accessibility: The Power of Private Networks
The breakthrough came when the author moved their side project to Krova Cloud, a platform that defaults to providing private networking for its compute instances, known as 'cubes.' These cubes do not receive public IPs by default. This architectural choice immediately eliminated the primary source of security anxiety: the exposed public endpoint. Within a single day of this migration, the author realized the extent to which they had been unnecessarily exposed. The absence of a public IP meant an end to SSH brute-force attacks, the elimination of accidentally exposed open ports, and a profound reduction in the stress associated with maintaining perfect firewall configurations.
This approach leverages the concept of private networks, which are standard in cloud environments but often overlooked for simpler deployments. Instead of directly exposing a service to the global internet, it can be made accessible through a secure, managed gateway or a VPN. For instance, a developer might use a service like Cloudflare Tunnel (formerly Argo Tunnel) or a similar solution. These tools create an outbound-only connection from the server to the service provider's network. The service provider then acts as a secure proxy, exposing a public endpoint that routes traffic through this secure tunnel to the private server. This way, the server itself never needs a public IP address. It remains invisible to direct internet scans.
The benefits are manifold. Firstly, security is dramatically enhanced. With no open ports and no direct public IP, the attack surface is drastically reduced. SSH access can be further secured, perhaps by restricting it to specific internal IPs or using bastion hosts within the private network. Secondly, operational overhead decreases. The constant vigilance required to defend against internet-based attacks diminishes, freeing up cognitive load and development time. The focus can shift back to building features rather than managing a fortress. Thirdly, cost savings can be realized. Servers without public IPs are often cheaper, and the reduction in necessary security tooling can also contribute to lower overall infrastructure expenses.
For developers, this paradigm shift is akin to moving from a house with a constantly unlocked front door to one where all visitors must first pass through a secure reception area. The house is still accessible, but the pathway is controlled and monitored. The analogy holds: the private network is the secure reception, and the tunnel/gateway is the trusted intermediary. This makes the entire setup significantly more robust against opportunistic attacks.

Implementing an IP-less Strategy
Adopting an IP-less strategy for side projects involves a few key considerations. The primary goal is to ensure the project remains accessible for its intended purpose (e.g., for the developer to use, for a small group of collaborators, or for limited public interaction) without direct exposure. Several technologies facilitate this:
- Tunneling Services: Tools like Cloudflare Tunnel, ngrok, or Tailscale offer robust solutions. Cloudflare Tunnel, for instance, establishes an outbound-only connection from the origin server to Cloudflare's edge. This allows Cloudflare to proxy traffic to the origin without it ever needing a public IP. ngrok creates secure tunnels from a local machine to a public endpoint, useful for local development or temporary deployments. Tailscale creates a secure, private network between devices, effectively giving them private IP addresses that can communicate securely over the internet.
- Managed Container Platforms: Platforms like Krova Cloud, Fly.io, or Render often abstract away public IP management. They might offer private networking by default or provide secure ingress points that don't directly expose VM IPs. These platforms are designed for modern application deployment and often prioritize security and ease of use.
- Bastion Hosts/Jump Boxes: For more complex setups, a single, hardened bastion host with a public IP can serve as the sole entry point. All other internal services and databases reside on private networks and are only accessible from the bastion host. This centralizes security management and limits the blast radius of any potential compromise.
- Serverless Architectures: For many web applications and APIs, serverless functions (e.g., AWS Lambda, Google Cloud Functions) eliminate the need to manage servers and their IP addresses altogether. The infrastructure is managed by the cloud provider, and access is typically controlled via API gateways, which provide secure, managed endpoints.
The decision to forgo a public IP for a side project is not merely an optimization; it's a fundamental shift in security posture. It acknowledges that the default internet is a hostile environment and that unnecessary exposure is the first vulnerability to eliminate. By embracing private networking, tunneling, or managed platforms, developers can build and deploy their projects with significantly reduced risk and operational burden. The proof is in the peace of mind and the reduced log noise: your side project doesn't need a public IP to be functional, and it's far safer when it doesn't have one.
