VEIL

EU-sovereign · zero-trust network cloaking

Your servers are on someone's scan list right now.

Same app. Two servers. One is exposed to the internet, the other is cloaked by Veil. A port scan finds everything on the first — and nothing on the second. When there's nothing to reach, there's nothing to attack.

Identity-gated access MFA + full audit Nothing on the public internet
Exposed
5
open ports indexed in 11.45s — full attack surface
22 sshopen
80 httpopen
5432 pgopen
6379 redisopen
11434 aiopen
Cloaked
0
reachable services in 0.62s — nothing to attack
22 sshclosed
80 httpclosed
5432 pgclosed
6379 redisclosed
11434 aiclosed

The setup

Two identical servers. The same real software.

Both are Ubuntu boxes running the exact same production stack — an internal admin console, a self-hosted AI model, a cache, and a database. The only difference is how you reach them.

Server A · exposed.getveil.eu Plain internet
Ubuntu 24.04 LTS · public IPv4 · no overlay
Internal admin console (HTTP):80
Ollama — self-hosted LLM API:11434
Redis key-value store:6379
PostgreSQL:5432
→ Every service answers anyone who sends a packet.
Server B · cloaked.getveil.eu Cloaked by Veil
Ubuntu 24.04 LTS · same stack · zero-trust overlay
Internal admin console (HTTP):80
Ollama — self-hosted LLM API:11434
Redis key-value store:6379
PostgreSQL:5432
→ Identical services — but none of them face the internet.

The scan · the whole story in one command

Point the same scanner at both. Watch one disappear.

nmap -sV is the first thing every attacker runs. Here is its real output against each server, verbatim.

nmap -sV exposed.getveil.eu Exposed
$ nmap -sV exposed.getveil.eu

PORT      STATE  SERVICE    VERSION
22/tcp    open   ssh        OpenSSH 9.6p1 Ubuntu
80/tcp    open   http       ACME Ops internal console
5432/tcp  open   postgresql PostgreSQL
6379/tcp  open   redis      Redis key-value store 7.0.15
11434/tcp open   http       Ollama API (self-hosted LLM)

# scan completed in 11.45s — full attack surface
nmap -sV cloaked.getveil.eu Cloaked
$ nmap -sV cloaked.getveil.eu

PORT      STATE  SERVICE    VERSION
22/tcp    closed ssh
80/tcp    closed http
5432/tcp  closed postgresql
6379/tcp  closed redis
11434/tcp closed http

# scan completed in 0.62s — nothing to attack
11.45s to map the full attack surface — console, AI, cache, database all fingerprinted.
VS
0.62s to find nothing. Every application port reads closed from the public internet.

No exploit needed — just connect

An open port is an open door.

Nothing below uses a vulnerability, a zero-day, or a stolen password. It's just an attacker connecting to services that answer the whole internet — and then running the same commands against the cloaked box.

attacker@vps — unauthenticated, no exploit
# ── Against exposed.getveil.eu ─────────────────────────────
$ redis-cli -h exposed.getveil.eu KEYS '*'
cust:2   cust:1   stripe:live_key   session:9f3a2b

$ redis-cli -h exposed.getveil.eu GET stripe:live_key
"sk_live_51Nx0b2Qf"

$ psql -h exposed.getveil.eu -U postgres -d acme -c 'select name,email from customers'
 Nadia Bakker | nadia@northwind.eu
 Sofie Jansen | sofie@deltlogix.nl

$ curl exposed.getveil.eu:11434/api/version
{"version":"0.32.1"}

# ── Same commands against cloaked.getveil.eu ───────────────
$ redis-cli -h cloaked.getveil.eu KEYS '*'
^C  (hangs / no response)

$ psql -h cloaked.getveil.eu -U postgres ...
psql: connection to server ... failed: Connection refused

$ curl cloaked.getveil.eu:11434/api/version
(no response)

Same console · two very different front doors

What "reachable" actually means.

This is the internal operations console both servers run. On the left, anyone who scans the IP can load it. On the right, the only way in is a verified identity over the overlay.

EXPOSED TO THE INTERNET — anyone who scans this IP can load it: no identity, no MFA, no audit.
http://exposed.getveil.eu/ops

ACME Corp · Internal Ops Console

signed in as: — (anonymous)
HostServiceStatus
acme-db-01PostgreSQL● healthy
acme-cache-01Redis● healthy
acme-k8s-cpK8s control-plane● healthy
API keys
Stripe (live)sk_live_••••••••••••
AWS rootAKIA••••••••••••
reachable_by: 0.0.0.0/0 · auth: none · audit_log: —
CLOAKED BY VEIL — no open port on the public internet. Reached through a verified identity over the zero-trust overlay. A scanner sees nothing.
veil://ops.acme.internal · identity verified

ACME Corp · Internal Ops Console

signed in as: r.degraaf · MFA ✓
HostServiceStatus
acme-db-01PostgreSQL● healthy
acme-cache-01Redis● healthy
acme-k8s-cpK8s control-plane● healthy
API keys
Stripe (live)sk_live_••••••••••••
AWS rootAKIA••••••••••••
reachable_by: verified identities only · auth: MFA · audit_log: every session

Attack vectors removed

Take away reachability, and the whole list collapses.

Every attack below has the same first requirement: the attacker has to be able to reach the service. Veil removes that first step — so none of the rest can start.

Internet-wide scanning & fingerprinting

Removed

Mass scanners index every open port on the internet within hours. With Veil there is no reachable port to find or catalogue — you never make the list.

Unauthenticated Redis / DB dump

Removed

Open caches and databases hand over their contents to anyone who connects. With Veil the datastore simply isn't on the internet to connect to.

Ransomware of exposed databases

Removed

Exposed databases get wiped and held for ransom at scale. If there's nothing to reach, there's nothing to encrypt or extort.

Exposed AI API

Removed

Public model endpoints leak to model theft, free GPU abuse, and RCE on unpatched builds. Behind Veil, the API answers no one on the open internet.

Brute-force & credential stuffing

Removed

Every public login page is a target for endless guessing. With Veil there is no login page facing the internet to hammer.

Pre-auth CVE exploitation

Removed

Edge services get hit by new CVEs before you can patch. Behind Veil the service is dark before auth even happens — the exploit can't reach it.

The common thread: every one of these needs reachability first. Veil removes reachability — so the attack never reaches step two. Access becomes identity-gated, MFA-protected, and fully audited instead of open to the internet.

Straight talk

What Veil does — and what it doesn't.

Veil does

  • + Removes internet reachability — your services stop answering the open internet.
  • + Makes access identity-gated, MFA-protected, and audited on every session.
  • + Supports NIS2 attack-surface reduction as an EU-sovereign overlay.

Veil doesn't

  • Patch your software — keep your CVEs updated as you always would.
  • Replace credential hygiene — strong secrets and rotation still matter.
  • Help if you also keep the port public — cloaking only works if it's the only door.

The move is simple

Take your servers off the map.

Same apps, same team, same workflows — just unreachable to everyone who hasn't proven who they are.

# Reproduce every result on this page:
nmap -sV exposed.getveil.eu   # 5 open ports — full attack surface
nmap -sV cloaked.getveil.eu   # nothing to attack