Running a hosting business alongside IT services means I need infrastructure that's reliable, secure, and efficient to manage. Here's the actual stack and configuration I use at 330 Hosting for client websites.
TL;DR
- cPanel/LiteSpeed stack: Reliable, client-manageable hosting platform
- Security first: CSF firewall, fail2ban, ModSecurity, regular hardening
- WordPress optimized: Redis caching, PHP-FPM, LiteSpeed Cache
- Redundant backups: Local + remote, tested regularly
- Monitoring: Proactive alerting, performance tracking
- Philosophy: Reliable over cheap, support over automation
Server Foundation
Base infrastructure:
- VPS or dedicated server depending on client load
- CentOS/AlmaLinux (cPanel's preferred platform)
- Minimum 4GB RAM for small deployments, 8GB+ for WordPress-heavy loads
- SSD storage (NVMe preferred for database performance)
- Located in a US datacenter with good peering
Why cPanel:
- Clients can manage basics themselves (email accounts, file manager)
- Backup and restore is straightforward
- SSL automation with AutoSSL
- PHP version management per account
- I know it well, which means faster troubleshooting
Initial Server Hardening
Before hosting any client sites:
SSH configuration:
# /etc/ssh/sshd_config changes
Port 22 → custom port (reduces noise)
PermitRootLogin no
PasswordAuthentication no (key only)
Firewall (CSF preferred with cPanel):
# Install ConfigServer Firewall
cd /usr/src
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
Key CSF settings I change:
- TESTING = 0 (enable firewall)
- TCP_IN: Only ports needed (80, 443, custom SSH, cPanel ports)
- DENY_IP_LIMIT = 500 (prevent blocklist bloat)
- LF_TRIGGER = 10 (login failure trigger)
- Enable login failure tracking for SSH, SMTP, POP3, IMAP
Fail2ban as additional layer (CSF handles most, but belt and suspenders):
- Monitor SSH
- Monitor cPanel login
- Monitor WordPress logins (with WP Fail2ban plugin)
cPanel/WHM Configuration
Initial WHM Setup
Tweak Settings (WHM → Tweak Settings):
- Default home directory: /home
- Maximum Accounts per Client Domain: 1
- Prevent users from parking/adding domains: varies by client
- cPanel & WHM Updates: Automatic (STABLE tier)
- System Update Preferences: Daily automatic updates
Security Center:
- Enable cPHulk Brute Force Protection
- Configure password strength requirements (minimum 12 chars)
- Enable Two-Factor Authentication for WHM
- Apache mod_userdir Protection: On
PHP Configuration (WHM → MultiPHP Manager):
- Default PHP version: 8.1 or 8.2 (latest stable for WordPress)
- Keep 7.4 available for legacy sites
- Remove old unsupported versions
MultiPHP INI Editor (per-system defaults):
max_execution_time = 300
max_input_time = 300
memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M
max_input_vars = 5000
These defaults work for most WordPress sites. Adjust per-account if needed.
Apache/LiteSpeed Configuration
I run LiteSpeed on most servers now. The performance gain for WordPress is significant.
If staying with Apache:
- Enable mod_deflate for compression
- Enable mod_expires for browser caching
- Configure MPM Event (better than prefork for performance)
With LiteSpeed:
- LSWS replaces Apache (cPanel compatible)
- LiteSpeed Cache plugin for WordPress
- HTTP/3 and QUIC support
- Better resource usage under load
Performance settings:
# .htaccess defaults for static content
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
MySQL/MariaDB Tuning
Basic tuning for WordPress-heavy server (8GB RAM):
# /etc/my.cnf additions
[mysqld]
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
max_connections = 150
query_cache_type = 0
query_cache_size = 0
Why disable query cache: It's deprecated and can cause contention. Let object caching (Redis) handle this at the application layer.
Email Configuration
SpamAssassin settings:
- Score threshold: 5 (default is reasonable)
- Auto-delete spam: No (let users check quarantine)
- Bayes filtering: Enabled
DKIM, SPF, DMARC:
- Enable DKIM for all domains
- Guide clients on SPF records
- Recommend DMARC with p=none initially, then quarantine
Outbound rate limiting:
- Max emails per domain per hour: 500 (prevents compromised account spam blasts)
- WHM → Tweak Settings → Max Hourly Emails Per Domain
Backup Strategy
This is where most cheap hosts fail. Backups are mandatory, not optional.
Local backups:
- JetBackup or cPanel native backup
- Daily incremental, weekly full
- Retain 14 daily, 4 weekly
Remote backups:
- Sync to separate backup server or object storage (S3/Backblaze B2)
- Geographically separate from primary server
- Test restores monthly
JetBackup configuration:
- Enable account-level restores (clients can restore their own files)
- Database-specific restores
- Email restoration capability
WordPress-Specific Optimizations
Since 80% of hosted sites are WordPress:
Object caching with Redis:
# Install Redis
yum install redis
systemctl enable redis
systemctl start redis
# Configure PHP Redis extension via EasyApache4
WHM → EasyApache 4 → PHP Extensions → php-redis
Then use Redis Object Cache plugin per WordPress site.
PHP-FPM over suPHP:
- Better performance
- Per-user process pools
- Configurable via MultiPHP Manager
ModSecurity with OWASP ruleset:
- Provides WAF protection
- Block common WordPress attacks
- May need rule exceptions for some plugins (WooCommerce, page builders)
Imunify360 or similar:
- Proactive defense
- Malware scanning
- Reputation management
Per-Account Setup (New Client Onboarding)
When I set up a new hosting account:
- Create account with strong password
- Configure PHP version appropriate for their site
- Enable AutoSSL - free SSL certificates from Let's Encrypt
- Set resource limits based on their plan:
- CPU seconds
- Physical memory
- Entry processes
- I/O throughput
- Create staging subdomain if they'll be doing development
- Document control panel access and send credentials securely
Monitoring
What I monitor:
- Server load average
- Disk space (/ and /home partitions)
- Memory usage
- MySQL connections
- SSL certificate expiration
- Service availability (HTTP, MySQL, mail)
Tools:
- Nagios/Icinga for alerting
- Netdata for real-time dashboard
- cPanel native stats for per-account usage
Uptime monitoring:
- External ping monitor for each significant site
- Alert on 5xx errors
- DNS monitoring
Security Incident Response
When something goes wrong (malware, compromise, etc.):
- Isolate - suspend account if actively malicious
- Identify - check access logs, file modification times
- Clean - remove malware, backdoors
- Harden - update WordPress/plugins, reset passwords
- Restore if needed from known-good backup
- Document - for client and own records
Common WordPress compromises:
- Outdated plugins (90% of cases)
- Weak admin passwords
- Nulled themes/plugins with backdoors
- xmlrpc.php attacks
What I Don't Do
- Oversell resources: If the server can handle 50 accounts well, I don't add 100
- Skimp on backups: The cost of storage is nothing compared to data loss
- Ignore updates: Security patches go in promptly
- Use shared IP for everyone: Sites that need it get dedicated IPs
- Promise unlimited anything: Reasonable limits, clearly communicated
Pricing Philosophy
My hosting isn't the cheapest. It's:
- Reliable (redundant backups, monitored)
- Secure (hardened, firewalled, malware-scanned)
- Supported (I answer the phone)
- Properly resourced (not oversold)
That's worth more than $3/month hosting from a big box provider where you're a ticket number.
The technical setup above takes time to configure and maintain. But it results in hosting that clients can depend on, and that I can sleep at night providing.
Need Reliable WordPress Hosting?
Looking for hosting that's actually secure, monitored, and supported? At my company 330 Hosting, we provide cPanel hosting that's optimized for WordPress with the configurations described above.
Whether you need shared hosting, a VPS, or dedicated server, we focus on reliability over cheap pricing. Check out our hosting plans or contact us to discuss your needs.