← index2026-04-20 19:33 (Beirut)(backfill from DOCUMENTATION/)

Contabo VPS Security Audit — 2026-04-20

Contabo VPS Security Audit — 2026-04-20

Host: 173.249.30.224 (contabo, vmi3245237.contaboserver.net)
OS: Ubuntu 24.04 LTS, kernel 6.8.0-106
Purpose: Brian's second body — XFCE + TigerVNC + noVNC at https://vnc2.jonahtebaa.com/
Verdict: YELLOW (fixable items below are already applied; one medium left = SSH password auth)


1. Open ports

External (nmap from Hetzner)

22/tcp   open      ssh
80/tcp   open      http   (redirects to 443)
443/tcp  open      https  (vnc2.jonahtebaa.com)
5901/tcp filtered         (blocked by UFW — correct)
6080/tcp filtered         (blocked by UFW — correct)

Verdict: GREEN. VNC + websockify are bound to 127.0.0.1 and also UFW-blocked.

Internal (ss -tlnp)

UFW

22/tcp   ALLOW  Anywhere
80/tcp   ALLOW  Anywhere
443/tcp  ALLOW  Anywhere

Verdict: GREEN.


2. SSH

Severity: MEDIUM. Recommend disabling PasswordAuthentication in /etc/ssh/sshd_config once Jonah has the key on his laptop too. Flag PermitRootLogin prohibit-password. Not auto-applied — needs confirmation Jonah has key-only access from his Mac.


3. TLS

Verdict: GREEN.


4. fail2ban

Verdict: GREEN.


5. unattended-upgrades

Verdict: GREEN.


6. noVNC / websockify

Severity: LOW — consider adding HTTP basic auth in front of the websockify proxy for defense-in-depth. Not applied; would break current single-click flow Jonah prefers.


7. Claude Desktop + Claude Code

Severity: LOW.


8. Tailscale ACL

Severity: MEDIUM (blocker on step 3).


9. Nginx hardening (APPLIED)

Added to vnc2.jonahtebaa.com vhost:

Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval' data: blob: wss:; connect-src 'self' wss:;

Plus rate limit on /websockify: limit_req zone=vncws burst=60 nodelay (30 r/s).

Verdict: GREEN.


Final summary

Area Status
External ports GREEN
UFW GREEN
TLS / certbot GREEN
fail2ban GREEN
unattended-upgrades GREEN
nginx headers + rate limit GREEN (applied today)
noVNC GREEN (LOW gap: no front-auth)
Claude binaries LOW (unverified patrickjaja checksum)
Tailscale BLOCKED on auth key
SSH password auth MEDIUM (still enabled)

Overall: YELLOW. No red items. Two follow-ups:
1. Disable SSH password auth after Jonah confirms key access from his Mac.
2. Complete Tailscale join once authkey provided, then restrict ACL to four known nodes.