Hosting server security checklist: 40 checks

A hosting server security checklist with 40 checks for a VPS that hosts websites: updates, SSH, firewall, panel, account isolation, web layer and backups.

A numbered checklist next to a server rack, with some items ticked

Key takeaways

  • A hosting server needs more than a hardened OS: the panel, each customer account and the web layer all need their own checks.
  • The highest-impact items are security updates, SSH keys, a default-deny firewall, a restricted panel port and off-server backups.
  • On a shared server, per-account isolation decides whether one hacked site stays one hacked site.
  • Re-run the checklist after every big change, not only at install time.

A hosting server security checklist covers six areas: the operating system and its updates, SSH access, the network firewall, the control panel, isolation between hosting accounts, and the web layer with its backups. The 40 checks below are written for an Ubuntu or Debian VPS that hosts websites for you or your customers. If you only have an hour, do checks 3, 7 to 9, 14, 16, 20 and 39 first: they close the most common ways in.

A bare VPS hardening guide, like our 10 steps for the first hour on Ubuntu, covers the base system; a hosting server also has a panel, customer accounts that must not reach each other, PHP you did not write, and mail that can get your IP blocklisted.

For each check, the last column says whether ZoPanel already does it for you, based on our security documentation and install guide. "Yes" means done automatically at install or by default. "One click" means Security Center offers a Fix button. "Checked" means Security Center reports it but you act. "You" means you have to do it yourself, on ZoPanel or any other panel.

The 40-point hosting server security checklist

# Check Why it matters Done automatically by ZoPanel?
System and updates
1 Run an OS release that still gets security updates Old releases stop receiving fixes Partly: installer only runs on supported Ubuntu/Debian releases
2 Fully upgrade packages before going live Fresh images are often weeks behind Yes (installer)
3 Turn on automatic security updates Many attacks use bugs that already have a patch Yes (unattended-upgrades)
4 Reboot after kernel and libc updates A patched kernel only helps once it runs Checked (pending reboot)
5 Keep the clock synchronized Logs, TLS and 2FA codes depend on it One click
6 Apply kernel network hardening (sysctl) Removes risky defaults such as accepting redirects One click
SSH and admin access
7 Log in with SSH keys Passwords can be guessed or reused You
8 Disable root login with a password Root is the first name every bot tries One click (needs a key first)
9 Disable SSH password authentication Makes password guessing useless One click (needs a key first)
10 Limit SSH authentication attempts Slows down guessing per connection One click
11 Ban repeated SSH failures (Fail2ban) Cuts log noise and brute force Yes (5 failures in 10 min, 1 h ban)
12 Give each admin a personal account, no shared root password You can revoke one person without changing everything You
13 No extra UID 0 accounts, no empty passwords Classic signs of a backdoor Checked
Network
14 Firewall on, default deny, only needed ports open Anything listening is attack surface Yes (UFW: SSH, 80, 443, 8888)
15 Databases, Redis and admin tools not on public ports Mass scanners look for exposed databases Checked (public services)
16 Restrict the panel port to your own IPs Panel login pages are prime targets You (panel IP allowlist)
17 Remember that Docker can bypass UFW Published container ports skip UFW rules Yes (panel containers publish on 127.0.0.1 only)
18 Rate-limit abusive clients per site Floods and bots hit PHP hard You (per-site setting)
Control panel
19 Panel web interface does not run as root One web bug must not equal root Yes
20 Two-factor authentication for every admin and reseller Stolen or reused passwords are a common way in You (can be made mandatory)
21 No admin login name It is the first username bots try Checked
22 Panel served with a valid TLS certificate Prevents interception of the admin login You (set a panel domain)
23 Ban repeated panel login failures Stops password guessing Yes (8 failures in 15 min)
24 Updates signed and rolled back if unhealthy A tampered or broken update is a real risk Yes
25 Review and revoke unused API tokens Old tokens are forgotten keys Checked (unused 90 days)
26 Tamper-evident activity log, copied off the server Intruders erase their tracks Partly: hash chain yes, remote syslog you
Account isolation
27 Each account is its own Linux user with its own PHP-FPM pool Stops one site from reading another Yes
28 CPU, memory and process limits per account One site cannot sink the server Yes (from the package)
29 Disk and inode quotas enforced One account cannot fill the disk Yes (check they show as enforced)
30 Hide processes between accounts (hidepid) Command lines can leak secrets Yes
31 SFTP chrooted, shell access sandboxed or off Shell users should see only their home Yes
32 Outgoing mail limited per account A hacked site sending spam gets your IP blocklisted Yes (per package)
33 Containers run in user namespaces Root in a container must not be root on the host Yes (App Store apps)
Web layer
34 HTTPS everywhere with automatic renewal Expired certificates break trust and logins Yes (Let's Encrypt)
35 Block hidden and dump files (.env, .git, .sql, .bak) Leaked configs hand over databases Yes
36 Block PHP execution in upload folders Uploaded webshells cannot run Yes with WordPress rewrite rules
37 Keep CMS core, plugins and themes updated Outdated plugins are a common way in You (WordPress safe auto-updates is one setting)
38 Web application firewall in front of PHP Blocks common injection and scanners You (install, then enable per site; not on Ubuntu 22.04)
Detection and recovery
39 Encrypted backups off the server, recovery key stored offline Ransomware and disk loss take local copies too You (remote backups need Pro)
40 Malware scans, alerts and a tested restore You find problems before customers do Partly: weekly scan yes, alerts and restore tests you

Where to start if you only have an hour

The order that removes the most risk fastest:

  1. Updates (2, 3). Automatic security updates on Ubuntu and Debian are handled by unattended-upgrades; Ubuntu's documentation explains how to check and tune it.
  2. SSH keys, then no passwords (7 to 9). Add a key, test it in a second terminal, then disable password logins. Our guide to SSH brute force protection has the exact steps and the usual lockout traps.
  3. Firewall and panel port (14 to 16). Default deny, then restrict the panel to your office or VPN IP. Several of the worst panel incidents of recent years involved admin ports open to the whole internet, as we documented in hosting panel security incidents 2024 to 2026.
  4. 2FA (20). Turn it on for yourself, then require it for every admin and reseller.
  5. Off-server backups (39). They decide how bad a bad day gets.

Checks people get wrong

The Docker and UFW trap (17). Docker writes its own iptables rules, so a port published with -p 8080:8080 can be reachable from the internet even when UFW says it is blocked. Docker's own packet filtering documentation warns about this. Publish containers on 127.0.0.1 only and put them behind the web server with SSL.

Quotas that are only measured (29). Many setups show disk usage per account but never enforce it. Check that the kernel actually enforces quotas, for example with repquota -a or your panel's quota status.

A WAF in blocking mode on day one (38). Blocking from day one on a shared server breaks page builders and imports. Start in log-only mode; we explain the tuning in ModSecurity and OWASP CRS without false positives.

Backups that live on the same server (39). A local backup protects against a bad plugin update, not against ransomware or a lost disk. Our 3-2-1 website backup strategy explains how to keep copies an attacker on the server cannot delete.

How to verify the checklist on a running server

A few commands answer most of the list on any Ubuntu or Debian server:

# 3: automatic updates
systemctl status unattended-upgrades --no-pager
# 4: reboot needed?
ls /var/run/reboot-required 2>/dev/null && echo "reboot needed"
# 8-10: effective SSH settings
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|maxauthtries'
# 13: extra root accounts
awk -F: '$3 == 0 {print $1}' /etc/passwd
# 14-15: firewall and listening services
sudo ufw status verbose
sudo ss -tlnp | grep -v '127.0.0.1\|::1'
# 30: process hiding
grep ' /proc ' /proc/mounts
# 29: quotas enforced
sudo repquota -a | head

On ZoPanel, the Security Center at the top of the Security page runs most of these checks for you, scores the server and offers a one-click Fix where it is safe. SSH fixes refuse to run until an SSH key is set up, so they cannot lock you out. For a deeper standard, the CIS Benchmarks for Ubuntu and Debian go much further than any 40-point list.

Where ZoPanel leaves work to you

To be clear about the column above: ZoPanel does not decide your SSH policy for you, does not restrict the panel port until you list your IPs, does not turn on the WAF by itself (and cannot on Ubuntu 22.04, which has no ModSecurity module for nginx), and does not send backups off the server until you configure S3, which needs a Pro license. Other panels have similar gaps; the checklist is there to close them whichever panel you run. You can compare how panels handle these areas on our comparison page.

Conclusion

A hosting server security checklist is never finished: you go through it at install, then again after every big change such as a new panel version, a new reseller or a new app. The 40 checks above cover the system, SSH, network, panel, account isolation, web layer and recovery. If you do only the first-hour items, you are already ahead of most servers on the internet.

If you want most of the "Yes" column handled for you, try the ZoPanel Free plan: 3 hosting accounts, 10 websites and 10 databases, no time limit, installed with curl -fsSL https://get.zopanel.net | sudo bash. Then open Security Center and work through what is left.

Frequently asked questions

What is the most important security step for a new hosting server?

Turn on automatic security updates and switch SSH to key-only login. Many compromises use known vulnerabilities or guessed passwords, and these two steps address both. Restricting the control panel port to your own IPs comes a close third.

How often should I review a server security checklist?

At install, after every major change (new panel version, new services, new resellers) and at least once a quarter. Automated checks run continuously, but a manual review also catches things no tool knows about, such as former staff accounts.

Do I need a web application firewall on a hosting server?

It is a useful layer, especially on shared servers with many WordPress sites, but it comes after updates, isolation and backups. Roll it out in log-only mode first so it does not block legitimate requests from page builders or imports.

Does a control panel make a server less secure?

It adds attack surface, because it is a web application with root-level power over the server. A panel that keeps its web interface unprivileged, restricts its port and requires 2FA reduces that risk; one that runs as root and is open to the internet increases it.