It has been exactly 24 days since the GDPR enforcement deadline passed, and the panic is just starting to settle. If you are still relying on a "hard outer shell, soft chewy center" security model—essentially a firewall and a prayer—you are negligent. The traditional VPN-based perimeter is obsolete. Google proved this years ago with BeyondCorp, yet too many sysadmins in Oslo are still just whitelisting IP addresses and calling it a day.
In the Nordic hosting market, trust is currency. But from an architectural standpoint, trust is a vulnerability. Zero Trust isn't a product you buy from a vendor; it's a rigorous discipline of "never trust, always verify." It means that a request from inside your datacenter is treated with the same suspicion as a request from a hacker in a basement.
Let’s cut through the marketing noise and look at how to actually build this on a Linux stack today, June 18, 2018.
1. Identity-Aware Proxies over VPNs
Stop giving users network-level access just to reach one admin panel. If a developer needs access to your Jenkins instance, they shouldn't have TCP access to your entire subnet. The solution is an Identity-Aware Proxy (IAP). While you could build this with complex OAuth2 shims, the most robust method for internal service communication right now is Mutual TLS (mTLS).
With mTLS, the server validates the client's certificate, and the client validates the server's. If the certificate isn't signed by your internal CA, the handshake fails before a single byte of application data is exchanged.
Here is a battle-tested nginx.conf block for enforcing mTLS. This assumes you have already generated your internal CA and client keys.
server {
listen 443 ssl http2;
server_name internal-api.coolvds.io;
# Standard SSL Config
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
# mTLS Configuration
ssl_client_certificate /etc/nginx/ssl/internal-ca.crt;
ssl_verify_client on;
# Optimization for 2018 hardware
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2; # TLS 1.3 is still draft/experimental in OpenSSL 1.1.1 pre-releases
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Client-DN $ssl_client_s_dn;
}
}
Pro Tip: Don't blindly usessl_verify_client optionalunless you are handling the verification logic in your application code. For true Zero Trust at the infrastructure level, set it toon. Nginx will drop unverified connections instantly, saving CPU cycles on your backend.
2. Killing Static SSH Keys
If you are managing authorized_keys files across fifty servers, you have already lost. Static keys are a nightmare to rotate and impossible to expire automatically. In a Zero Trust environment, we use SSH Certificate Authorities.
Netflix released BLESS and Uber has their solution, but you can implement this natively with OpenSSH (7.x is standard in most 2018 distros like Ubuntu 16.04/18.04). You sign a user's public key for a specific duration. Once the certificate expires, access is revoked automatically. No leftover keys on servers.
Step 1: Create the CA (On your secure local machine)
ssh-keygen -C "CoolVDS Internal CA" -f user_ca
Step 2: Sign a User Key (Valid for 1 hour)
ssh-keygen -s user_ca -I user_ident -n root,dev -V +1h id_rsa.pub
Step 3: Configure the Server (sshd_config)
On your target VPS, tell SSH to trust keys signed by your CA:
# /etc/ssh/sshd_config
TrustedUserCAKeys /etc/ssh/user_ca.pub
# Revocation list (critical for immediate termination)
RevokedKeys /etc/ssh/revoked_keys
This fundamentally shifts security from "what you have" (a static key) to "who you are" (a signed, time-bound identity).
3. Micro-Segmentation and The "Noisy Neighbor" Fallacy
Software-defined security is useless if your hypervisor leaks data. This is where the choice of hosting provider becomes a security decision, not just a procurement one.
Many budget providers in Europe still rely on OpenVZ or LXC containers where the kernel is shared. If a kernel exploit (like the recent Spectre/Meltdown variants patching) hits the host, your container isolation is theoretical at best. Zero Trust requires Kernel Isolation.
At CoolVDS, we exclusively use KVM (Kernel-based Virtual Machine). Each instance runs its own kernel. This allows us to implement strict iptables rules that can't be overridden by a neighbor.
Here is a baseline iptables policy for a database node that should only accept traffic from the web application's private IP (e.g., 10.0.0.5), dropping everything else:
# Flush existing rules
iptables -F
# Set default policies to DROP (The essence of Zero Trust)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Allow loopback
iptables -A INPUT -i lo -j ACCEPT
# Allow established connections (so you don't lock yourself out)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Allow SSH only from Admin VPN IP
iptables -A INPUT -p tcp -s 192.168.1.50 --dport 22 -j ACCEPT
# Allow MySQL only from Web Server Private IP
iptables -A INPUT -p tcp -s 10.0.0.5 --dport 3306 -j ACCEPT
# Log dropped packets (Crucial for auditing)
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: "
4. Data Sovereignty and the Physical Layer
You can encrypt data in transit and at rest, but if the physical disk resides in a jurisdiction that compels data access without warrants, your Zero Trust model has a backdoor. With the Datatilsynet keeping a close watch on compliance, hosting data in Norway is the safest bet for GDPR adherence.
Latency is the other side of the coin. A TLS handshake involves two round-trips. If your server is in Virginia and your users are in Oslo, that handshake is adding 200ms of latency before the first byte is sent. Hosting locally on CoolVDS NVMe instances cuts that RTT (Round Trip Time) to <10ms for Nordic users. Speed is a security feature—slow encryption gets turned off by impatient developers.
The Verdict
Implementing Zero Trust in 2018 is heavy lifting. It requires moving away from the comfortable "intranet" mindset and treating every server as if it's naked on the public internet. But the trade-off is sleeping soundly knowing that a breached VPN credential doesn't give an attacker the keys to the kingdom.
Start small. Rotate your SSH keys into a Certificate Authority. Enable mTLS on your critical internal APIs. And ensure your foundation is solid by deploying on true KVM-isolated infrastructure.
Need a sandbox to test your new iptables rules? Deploy a CoolVDS KVM instance in Oslo today. High-performance NVMe storage comes standard, so your encryption overhead won't slow you down.