NAME
auto-repair-website — A website for an auto repair shop, on its own hardened server
SYNOPSIS
A website that takes customer requests, on a small server locked down and checked across three restarts.
SITUATION
An owner-run auto repair shop. The shop had no website that took requests, and nobody on staff to look after a server.
WHAT I CHANGED
- Built a website that takes customer requests and sends them straight to the shop.
- Put the site on its own small virtual server. Web traffic is accepted only through the DNS provider’s proxy, with a one-command switch to reopen direct access if that provider has an outage.
- Hardened the server: key-only SSH, automatic bans for repeated failed sign-ins, kernel network protections, and SSH over IPv6 closed outright.
- Nightly backups, with a copy kept off the server.
- Registered the domain in the shop’s own name, with a written handover path.
HOW IT WAS CHECKED
| Measure | Before | After |
|---|---|---|
| Hardening still active after a restart | not tested | 3 of 3 restarts |
| Kernel protections inactive on the live network interface | 2 | 0 |
- Restarted the server three times and re-checked every protection after each one, rather than trusting the configuration files.
- Found two kernel settings that read as correct but were inactive on the server’s only real network interface, and fixed them with a start-up job that sets every interface.
- Found that a firewall reload silently removed active bans. Bans are now written through the firewall itself, so they survive a reload.
- Ran the search-engine checks against a server that was switched off first, to prove each check can actually fail.
STACK
- Linux
- nginx
- PHP
- DNS proxy and TLS
- ufw
- fail2ban
- off-site backups