Hosting Equipo Avantys 10 min

Seguridad en HestiaCP: Guía de Hardening 2026

Guía completa de seguridad para HestiaCP. Configura firewall, Fail2ban, SSH seguro, 2FA y protege tu servidor VPS contra ataques.

// Compartir

Seguridad en HestiaCP: Guía de Hardening 2026

// Índice de contenidos

Seguridad en HestiaCP: firewall, Fail2ban y hardening del servidor

Un servidor expuesto a Internet recibe ataques constantes. Bots automatizados escanean puertos, intentan fuerza bruta contra SSH y paneles de control, y buscan vulnerabilidades en aplicaciones web. Sin medidas de seguridad adecuadas, es cuestión de tiempo hasta que un atacante encuentre una entrada.

HestiaCP incluye herramientas de seguridad integradas: firewall basado en iptables, Fail2ban para bloquear intentos de intrusión, y soporte para autenticación de dos factores. Pero la configuración por defecto no es suficiente para un servidor de producción.

En esta guía te muestro cómo fortificar tu servidor HestiaCP con las mejores prácticas de seguridad. Desde cambiar el puerto SSH hasta configurar reglas de firewall personalizadas, cada paso reduce significativamente la superficie de ataque.

Estado de seguridad actual

Antes de hacer cambios, evalúa la seguridad actual de tu servidor.

Verificar servicios instalados

# Ver qué servicios de seguridad están activos
v-list-sys-services | grep -E "iptables|fail2ban"

Deberías ver ambos como “running”.

Ver puertos abiertos

# Puertos escuchando
ss -tlnp

# O con netstat
netstat -tlnp

Puertos típicos de HestiaCP:

PuertoServicioNecesario
22SSHSí (cambiar)
80HTTP
443HTTPS
8083Panel HestiaCPSí (cambiar)
3306MySQLSolo local
25, 465, 587SMTPSi usas email
110, 143, 993, 995POP3/IMAPSi usas email
53DNSSi usas DNS

Ver IPs baneadas actualmente

# Listar IPs bloqueadas por Fail2ban
fail2ban-client status

# Ver detalles de un jail específico
fail2ban-client status hestia-iptables

Configurar el firewall

Configuración del firewall en HestiaCP con reglas personalizadas

HestiaCP usa iptables con una interfaz gráfica para gestionar reglas.

Ver reglas actuales

Desde el panel como admin:

  1. Ve a Server → Firewall
  2. Verás las reglas activas organizadas por acción (ACCEPT, DROP)

Por CLI:

# Listar reglas de HestiaCP
v-list-firewall

# Ver iptables directamente
iptables -L -n -v

Añadir regla para permitir IP

Si necesitas whitelist para una IP específica (oficina, casa, etc.):

Desde el panel:

  1. Server → Firewall → Add Rule
  2. Action: ACCEPT
  3. Protocol: TCP (o UDP según necesites)
  4. Port: El puerto a permitir (o rango como 1:65535 para todo)
  5. IP: La IP a permitir
  6. Comment: Descripción (ej: “Oficina Madrid”)
  7. Save

Por CLI:

# Permitir IP específica a todo
v-add-firewall-rule ACCEPT 0 tcp 1.2.3.4

# Permitir IP a puerto específico
v-add-firewall-rule ACCEPT 22 tcp 1.2.3.4 "SSH desde oficina"

Bloquear IP manualmente

# Bloquear IP
v-add-firewall-ban 1.2.3.4 HESTIA

# Desbloquear
v-delete-firewall-ban 1.2.3.4

Reglas recomendadas

AcciónPuertoProtocoloIPComentario
ACCEPT80TCP0.0.0.0/0HTTP público
ACCEPT443TCP0.0.0.0/0HTTPS público
ACCEPT22TCPTU_IPSSH solo tu IP
ACCEPT8083TCPTU_IPPanel solo tu IP
DROP3306TCP0.0.0.0/0Bloquear MySQL externo

Configurar reglas por defecto

Edita /usr/local/hestia/data/firewall/rules.conf para reglas persistentes.

Configurar Fail2ban

Fail2ban en HestiaCP bloqueando ataques de fuerza bruta

Fail2ban monitoriza logs y banea IPs que muestran comportamiento malicioso.

Jails activos por defecto

HestiaCP configura estos jails automáticamente:

JailProtegeLog monitoreado
hestia-iptablesPanel HestiaCP/var/log/hestia/auth.log
sshdSSH/var/log/auth.log
exim-iptablesSMTP/var/log/exim4/mainlog
dovecot-iptablesIMAP/POP3/var/log/dovecot.log
vsftpd-iptablesFTP/var/log/vsftpd.log
phpmyadmin-iptablesphpMyAdmin/var/log/roundcube/errors

Ver estado de Fail2ban

# Estado general
fail2ban-client status

# Estado de jail específico
fail2ban-client status sshd

# IPs baneadas en un jail
fail2ban-client get sshd banned

Configurar tiempos de baneo

Edita /etc/fail2ban/jail.local:

[DEFAULT]
# Tiempo de baneo (10 minutos por defecto, recomiendo más)
bantime = 1h

# Ventana de tiempo para contar intentos
findtime = 10m

# Intentos antes de banear
maxretry = 5

# IPs que nunca se banean (tu IP, localhost)
ignoreip = 127.0.0.1/8 ::1 TU_IP_FIJA

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 24h

[hestia-iptables]
enabled = true
filter = hestia
action = hestia[name=HESTIA]
logpath = /var/log/hestia/auth.log
maxretry = 5
bantime = 12h

[exim-iptables]
enabled = true
filter = exim
action = hestia[name=MAIL]
logpath = /var/log/exim4/mainlog
maxretry = 5
findtime = 1h
bantime = 12h

Reiniciar Fail2ban

systemctl restart fail2ban

# Verificar que funciona
fail2ban-client status

Desbanear IP

Si te baneas accidentalmente:

# Desde otro servidor o consola de emergencia
fail2ban-client unban 1.2.3.4

# O unban de todo
fail2ban-client unban --all

Añadir jail para WordPress

Crea /etc/fail2ban/filter.d/wordpress.conf:

[Definition]
failregex = ^<HOST> .* "POST /wp-login.php
            ^<HOST> .* "POST /xmlrpc.php
ignoreregex =

Añade a /etc/fail2ban/jail.local:

[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/apache2/*access.log
          /var/log/nginx/*access.log
maxretry = 5
findtime = 5m
bantime = 1h

Asegurar SSH

SSH es el objetivo principal de ataques de fuerza bruta.

Cambiar puerto SSH

Edita /etc/ssh/sshd_config:

# Cambiar de 22 a otro puerto (ej: 2222)
Port 2222

Actualiza el firewall antes de reiniciar:

# Añadir nuevo puerto
v-add-firewall-rule ACCEPT 2222 tcp 0.0.0.0/0 "SSH nuevo puerto"

# Reiniciar SSH
systemctl restart sshd

# Probar conexión en NUEVA terminal antes de cerrar la actual
ssh -p 2222 usuario@servidor

# Si funciona, eliminar regla del puerto 22
v-delete-firewall-rule [ID_REGLA_PUERTO_22]

Deshabilitar login root

# En /etc/ssh/sshd_config
PermitRootLogin no

Crea un usuario sudo primero:

# Crear usuario
adduser admin

# Añadir a sudo
usermod -aG sudo admin

# Probar acceso antes de deshabilitar root

Autenticación por clave SSH

# En tu ordenador local, generar clave
ssh-keygen -t ed25519 -C "[email protected]"

# Copiar clave al servidor
ssh-copy-id -p 2222 usuario@servidor

# Verificar que funciona con clave
ssh -p 2222 usuario@servidor

# Deshabilitar login por contraseña (en /etc/ssh/sshd_config)
PasswordAuthentication no

Configuración SSH recomendada

# /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers tuusuario admin

Autenticación de dos factores (2FA)

HestiaCP soporta 2FA para el panel de administración.

Activar 2FA

  1. Inicia sesión en HestiaCP
  2. Haz clic en tu nombre de usuario (arriba derecha)
  3. Haz clic en Edit User
  4. Busca la sección Two-Factor Authentication
  5. Haz clic en Enable 2FA
  6. Escanea el código QR con tu app (Google Authenticator, Authy, etc.)
  7. Introduce el código para verificar
  8. Guarda los códigos de respaldo en lugar seguro

Apps recomendadas para 2FA

AppPlataformaCaracterística
AuthyiOS, Android, DesktopBackup en la nube
Google AuthenticatoriOS, AndroidSimple, sin cuenta
1PasswordTodasIntegrado con gestor
BitwardenTodasOpen source

Recuperar acceso si pierdes 2FA

Si pierdes acceso al 2FA:

# Deshabilitar 2FA por CLI
v-delete-user-2fa admin

Necesitas acceso SSH al servidor.

Seguridad gestionada para ti

El VPS HestiaCP Administrado incluye configuración de seguridad optimizada, monitorización 24/7 y actualizaciones automáticas de seguridad.

Ver VPS Seguro

Cambiar puerto del panel HestiaCP

El puerto 8083 es conocido. Cambiarlo reduce ataques automatizados.

Cambiar puerto

# Cambiar a puerto personalizado (ej: 2083)
v-change-sys-port 2083

Actualizar firewall

# Añadir nuevo puerto
v-add-firewall-rule ACCEPT 2083 tcp 0.0.0.0/0 "Panel HestiaCP"

# Opcional: eliminar regla del 8083

Acceder al nuevo puerto

https://tudominio.com:2083

O mejor, configura un subdominio con SSL:

  1. Crea subdominio panel.tudominio.com
  2. Apúntalo al servidor
  3. Configura proxy reverso a localhost:2083
  4. Accede por https://panel.tudominio.com

Proteger servicios web

Headers de seguridad

Añade a la configuración de Nginx/Apache:

# Headers de seguridad para Nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" always;

Ocultar versiones

# En nginx.conf
server_tokens off;
# En apache2.conf
ServerTokens Prod
ServerSignature Off

Proteger WordPress

Medidas específicas para WordPress:

  1. Cambiar prefijo de tablas (durante instalación)
  2. Limitar intentos de login (plugin Limit Login Attempts)
  3. Deshabilitar XML-RPC si no lo usas:
// En functions.php o plugin
add_filter('xmlrpc_enabled', '__return_false');
  1. Deshabilitar editor de temas/plugins:
// En wp-config.php
define('DISALLOW_FILE_EDIT', true);
  1. Cambiar URL de login (plugin WPS Hide Login)

Proteger directorios sensibles

En .htaccess o configuración Nginx:

# Bloquear acceso a wp-config.php
location ~ /wp-config\.php$ {
    deny all;
}

# Bloquear acceso a .htaccess
location ~ /\.ht {
    deny all;
}

# Bloquear acceso a archivos de backup
location ~ \.(sql|bak|old|orig)$ {
    deny all;
}

Seguridad de bases de datos

MySQL no debe ser accesible externamente

Verifica que MySQL solo escucha en localhost:

# Verificar binding
grep bind-address /etc/mysql/mariadb.conf.d/50-server.cnf

Debe mostrar bind-address = 127.0.0.1.

Contraseñas seguras

HestiaCP genera contraseñas automáticamente, pero si creas manualmente:

# Generar contraseña segura
openssl rand -base64 24

Usuarios con privilegios mínimos

Cada sitio debería tener su propio usuario de base de datos con acceso solo a su base de datos.

HestiaCP hace esto automáticamente al crear bases de datos por usuario.

Actualizaciones automáticas de seguridad

Habilitar unattended-upgrades

# Instalar si no está
apt install unattended-upgrades

# Configurar
dpkg-reconfigure unattended-upgrades

Edita /etc/apt/apt.conf.d/50unattended-upgrades:

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}";
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
    "${distro_id}ESM:${distro_codename}-infra-security";
};

// Reiniciar automáticamente si es necesario
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

Actualizar HestiaCP

# Ver versión actual
v-list-sys-hestia-updates

# Actualizar HestiaCP
v-update-sys-hestia

Script de actualización semanal

Crea /root/scripts/weekly-update.sh:

#!/bin/bash
apt update
apt upgrade -y
apt autoremove -y
v-update-sys-hestia

Añade al cron:

# Cada domingo a las 4:00
0 4 * * 0 /root/scripts/weekly-update.sh >> /var/log/weekly-update.log 2>&1

Monitorización de seguridad

Logs importantes

LogRutaQué buscar
Auth/var/log/auth.logIntentos SSH fallidos
Fail2ban/var/log/fail2ban.logIPs baneadas
HestiaCP/var/log/hestia/Logins al panel
Nginx/var/log/nginx/Errores 4xx, 5xx
Apache/var/log/apache2/Errores y accesos

Comandos útiles de monitorización

# Intentos de login fallidos SSH
grep "Failed password" /var/log/auth.log | tail -20

# IPs más baneadas hoy
grep "Ban" /var/log/fail2ban.log | grep $(date +%Y-%m-%d) | awk '{print $NF}' | sort | uniq -c | sort -rn | head

# Peticiones sospechosas a web
grep -E "(wp-login|xmlrpc|admin)" /var/log/nginx/access.log | tail -20

# Conexiones actuales por IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head

Alertas por email

Configura logwatch para reportes diarios:

apt install logwatch

# Configurar email
echo "MailTo = [email protected]" >> /etc/logwatch/conf/logwatch.conf
echo "Detail = Med" >> /etc/logwatch/conf/logwatch.conf

Monitorización incluida

El VPS HestiaCP Administrado incluye monitorización proactiva de seguridad. Detectamos y bloqueamos amenazas antes de que afecten tu sitio.

Ver VPS Administrado

Checklist de seguridad

Checklist de seguridad para servidor HestiaCP

Configuración inicial (hacer una vez)

  • Cambiar puerto SSH (de 22 a otro)
  • Deshabilitar login root por SSH
  • Configurar autenticación por clave SSH
  • Cambiar puerto del panel HestiaCP
  • Activar 2FA para usuarios admin
  • Configurar Fail2ban con tiempos de baneo largos
  • Whitelist de IPs de administración
  • Deshabilitar MySQL remoto

Configuración por sitio

  • SSL/HTTPS activo
  • Headers de seguridad configurados
  • WordPress hardening (si aplica)
  • Permisos de archivos correctos (755 dirs, 644 files)
  • Usuario de base de datos separado

Mantenimiento regular

  • Actualizaciones de sistema (semanal)
  • Actualizar HestiaCP cuando haya versión
  • Revisar logs de Fail2ban
  • Verificar backups funcionan
  • Rotar contraseñas (trimestral)

Preguntas frecuentes

¿HestiaCP es seguro por defecto?

HestiaCP incluye firewall y Fail2ban, pero la configuración por defecto es conservadora. Para producción, necesitas ajustar tiempos de baneo, cambiar puertos estándar y añadir 2FA.

¿Cómo me desbaneo si me bloqueo?

Necesitas acceso alternativo: consola de emergencia del proveedor VPS, otra IP, o acceso físico. Luego ejecuta `fail2ban-client unban TU_IP`.

¿Debo bloquear todo el tráfico excepto puertos específicos?

Depende. Para un servidor web estándar, permite solo 80, 443, SSH (puerto personalizado) y panel (puerto personalizado). Bloquea todo lo demás.

¿ClamAV es necesario?

ClamAV escanea archivos en busca de malware. Consume recursos pero es útil si aceptas uploads de usuarios. Para blogs simples, puedes prescindir.

¿Cómo protejo contra DDoS?

HestiaCP no tiene protección DDoS. Para eso necesitas Cloudflare (gratis para básico) o servicios especializados. El firewall solo ayuda contra ataques de bajo volumen.

¿Es seguro usar FTP?

FTP transmite credenciales en texto plano. Usa SFTP (SSH File Transfer Protocol) que va cifrado. HestiaCP soporta ambos.

¿Qué hago si creo que me hackearon?

No entres en pánico. Desconecta el servidor, revisa logs, busca cambios recientes, restaura desde backup limpio y cambia todas las contraseñas.

¿ModSecurity vale la pena?

ModSecurity es un WAF que protege contra ataques web. Requiere configuración cuidadosa para evitar falsos positivos. Para WordPress, plugins como Wordfence son más fáciles.

Conclusión

La seguridad es un proceso continuo, no una configuración única. Los pasos más importantes son:

  1. Cambiar puertos por defecto (SSH, panel)
  2. Configurar Fail2ban agresivamente (baneos largos)
  3. Usar autenticación fuerte (claves SSH + 2FA)
  4. Mantener todo actualizado
  5. Monitorizar logs regularmente

Si la seguridad te parece abrumadora, el VPS HestiaCP Administrado de Avantys incluye configuración de seguridad optimizada, actualizaciones automáticas y monitorización 24/7. Nos encargamos de la seguridad para que tú te centres en tu negocio.


Guías relacionadas


Parte de la guía principal
Volver a VPS HestiaCP Administrado

VPS HestiaCP Administrado

Tu servidor HestiaCP con soporte técnico profesional. Nos encargamos de la administración para que tú te dediques a tus clientes.

Ver Planes HestiaCP

VPS HestiaCP Administrado

La potencia de un VPS con el panel HestiaCP, montado y gestionado por nosotros.

Ver VPS gestionado
// Boletín

Suscríbete al boletín

Guías nuevas, sin spam. Cancela cuando quieras.