Project
A hardened server you built by hand
One small VM — the cheapest instance you can rent — taken from a fresh image to an HTTPS site on a domain you own, entirely by hand, with a runbook precise enough for a stranger to repeat.
- Lock the door first. A non-root sudo user, your public key installed, then
PasswordAuthentication noandPermitRootLogin noin sshd_config. Keep your first session open until a second one connects. - Close everything else. Default-deny inbound with ufw or nftables, allowing only 22, 80 and 443. Confirm from outside with nmap rather than trusting your own config.
- Serve something real. nginx or Caddy in front of an application on a private port — not a static index page. The app runs as its own unprivileged user under systemd with
Restart=always. - Get a real certificate. Point a domain at the box, issue with certbot, apply the intermediate profile from Mozilla's SSL configuration generator, and prove renewal works with a dry run.
- Verify and harden. Score A or better on SSL Labs, enable unattended-upgrades, install fail2ban, and note how many SSH attempts the logs already show.
- Write the runbook, then test it. Every command in order with its purpose and its verification step. Rebuild from a blank instance following only the runbook, and fix every step that failed.
Scope guard: no configuration management, no Docker, no hosting panel. The point is doing by hand exactly what Terraform replaces two topics from now.