El 403 Forbidden no es un WordPress «caído». El servidor recibió la petición y se negó a servirla. En la práctica suele ser un permiso de archivo, un .htaccess que deniega, una carpeta sin índice, o una IP que el firewall marcó. En Conexcol el hosting Linux es un sitio elástico con cPanel; Imunify360 mira el tráfico. Eso no es una acusación contra tu cuenta: es una regla que a veces se dispara sola, sobre todo tras muchos intentos de wp-login.php.
No empieces por «me hackearon». Empieza por permisos, por el .htaccess y por si el 403 es para todo el mundo o solo desde tu red.
Qué vas a tener al terminar
El recurso abriendo, o la certeza de si es un archivo, una regla o una IP, para no dar vueltas en el ticket.
1. ¿Es todo el sitio o una URL?
Prueba el home, una entrada, /wp-admin y un archivo estático (/wp-includes/images/w-logo-blue.png o una imagen tuya en uploads). Si el PNG abre y el PHP no, no es «el servidor apagado»: es una regla sobre scripts o sobre el administrador.
Prueba también con el celular fuera del Wi‑Fi de la oficina (datos). Si en el celular entra y en el computador no, la IP de la oficina puede estar en una lista. Eso apunta a firewall, no a un tema de WordPress.
2. Permisos: 755 y 644, no 777
En el Administrador de archivos de cPanel (o por FTP), la raíz de WordPress y las carpetas van en 755. Los archivos, 644. wp-config.php a veces se deja en 600 o 640. 777 no es la solución: abre de más y, en muchos servidores, el propio panel o Imunify lo tratan como riesgo.
Si alguien «arregló» un 403 poniendo 777 a wp-content, revierte eso. El 403 puede volver, o aparecer otro síntoma, y el sitio queda peor.
3. El .htaccess
Igual que en el error 500: renombra .htaccess a .htaccess.bak y recarga. Si el 403 desaparece, dentro del archivo había un Deny from all, un Require all denied, una protección de hotlink mal copiada o una regla de un plugin de seguridad que se quedó a medias.
No pegues recetas de foros con RewriteRule contra wp-admin si no las entiendes. Una regla pensada para «bloquear XML-RPC» a veces bloquea el administrador entero.
Cuando el sitio vuelva, regenera el archivo desde Ajustes → Enlaces permanentes → Guardar cambios.
4. Carpeta sin índice
Si el 403 es solo en una ruta tipo /tienda/ o /blog/ y no hay index.php ni index.html ahí, y el listado de directorios está apagado (lo normal), el servidor no tiene qué mostrar. En WordPress el home no vive en una subcarpeta vacía: vive en la raíz donde está index.php del núcleo. Confirma que no moviste el núcleo a otro sitio y dejaste el document root apuntando a una carpeta vacía.
5. Firewall e Imunify (sin drama)
Imunify360 y reglas de ModSecurity están en el stack del sitio elástico. Un 403 o un «Access denied» después de un plugin que dispara muchos POST, un constructor que guarda cada tres segundos, o un login a prueba y error, puede ser el WAF, no un juicio sobre tu contenido.
No intentes apagar el firewall tú. Si ya comprobaste permisos y .htaccess, y el 403 sigue —sobre todo si es solo desde una IP—, abre el ticket y di:
- el dominio y la URL exacta que da 403;
- si pasa en todos los navegadores y en datos móviles;
- tu IP pública (búscala en el momento, cambia);
- si alguien estuvo en
wp-logina prueba de claves; - una captura de la página de error, no recortada.
Soporte mira listas de IP y registros. A veces se libera una dirección; a veces hay que ajustar una regla. Eso no se hace con un «desactiva Imunify» en el chat.
6. Hotlink y protecciones de cPanel
cPanel → Seguridad → Hotlink Protection. Si alguien la encendió y no puso el propio dominio en la lista, las imágenes (y a veces CSS) dan 403. Si el HTML carga y las fotos no, mira esa pantalla antes de reinstalar el tema.
La privacidad de directorio de cPanel y un .htaccess de protección de carpeta también dan 401 o 403. Si estás protegiendo un staging, es el comportamiento esperado: proteger un directorio con contraseña.
Si no sale
Ticket de soporte técnico, no de facturación. Restaurar a ciegas con JetBackup puede devolver un .htaccess viejo, pero también puede reponer el mismo 403 si la causa es la IP. Mejor el log y la URL.