Buenas prácticas generales de seguridad
Antes de tocar configuraciones de servidor, estas son las medidas con mejor relación esfuerzo-beneficio:
- Usa contraseñas seguras y cámbialas regularmente, especialmente la del usuario administrador. Evita reutilizar contraseñas de otros servicios.
- Fuerza el uso de HTTPS (SSL) en todo el sitio para proteger los datos en tránsito y evitar que terceros los intercepten.
- Activa la autenticación de dos factores (2FA) en el acceso al panel de administración; añade una capa extra que bloquea la mayoría de los intentos de acceso automatizado.
- Mantén WordPress, plugins y temas siempre actualizados: la mayoría de los hackeos explotan vulnerabilidades ya conocidas y corregidas en versiones más recientes.
- Instala un plugin de seguridad confiable (como Wordfence o Sucuri) para escaneo de malware, protección contra spam y bloqueo de intentos de fuerza bruta.
- Monitorea tu sitio regularmente con herramientas de análisis para detectar comportamientos anómalos antes de que se conviertan en un problema serio.
- Configura un firewall de aplicación web (WAF) que filtre tráfico malicioso antes de que llegue a WordPress.
- Automatiza tus copias de seguridad para poder restaurar el sitio rápidamente ante cualquier incidente.
- Restringe el acceso a archivos sensibles, como veremos a continuación con
.htaccess.
¿Qué es el archivo .htaccess y por qué es tan útil?
El archivo .htaccess es un archivo de configuración que leen los servidores Apache y LiteSpeed para modificar el comportamiento del servidor en un directorio y sus subdirectorios, sin tocar la configuración global. Es especialmente útil para seguridad porque permite bloquear accesos, forzar HTTPS y ocultar archivos sensibles con unas pocas líneas, sin instalar plugins que consuman recursos.
Antes de copiar reglas de cualquier tutorial, hay un detalle que ahorra horas de depuración: la sintaxis de control de acceso cambió en Apache 2.4. Las directivas Order, Allow from y Deny from son de Apache 2.2 y quedaron obsoletas; hoy solo funcionan si el servidor carga el módulo de compatibilidad mod_access_compat, y la propia documentación de Apache desaconseja mezclarlas con las nuevas porque produce resultados impredecibles. La sintaxis vigente es Require.
| Objetivo | Sintaxis antigua (Apache 2.2) | Sintaxis actual (Apache 2.4) |
|---|---|---|
| Bloquear todo | Order Deny,Allow + Deny from all | Require all denied |
| Permitir todo | Order Allow,Deny + Allow from all | Require all granted |
| Permitir solo una IP | Allow from 203.0.113.5 | Require ip 203.0.113.5 |
Todas las reglas de esta guía usan la sintaxis actual.
Restringir el acceso al panel de administración
Una aclaración importante que muchos tutoriales pasan por alto: la directiva <Directory> no funciona dentro de un archivo .htaccess. Solo es válida en la configuración global del servidor, así que copiar un bloque <Directory> en tu .htaccess produce un error 500 en todo el sitio. Dentro de .htaccess, el contexto ya es el directorio donde está el archivo.
Para limitar el acceso a wp-admin a tu propia IP, crea un archivo .htaccess dentro de la carpeta wp-admin con este contenido:
Require ip 203.0.113.5 Sustituye 203.0.113.5 por tu dirección IP pública. Dos advertencias antes de aplicarlo: si tu conexión doméstica tiene IP dinámica, perderás el acceso al panel cuando cambie, y si otras personas administran el sitio, tendrás que añadir cada una de sus IP. Es una medida excelente para un sitio con un solo administrador y conexión fija; para el resto de los casos, la autenticación de dos factores protege igual sin dejarte fuera.
Bloquear direcciones IP específicas
Si detectas una IP realizando intentos de acceso sospechosos, puedes bloquearla directamente desde .htaccess:
<RequireAll>
Require all granted
Require not ip 203.0.113.25
</RequireAll> Este enfoque sirve como respuesta puntual a un atacante concreto, pero no escala: bloquear a mano las IP de una botnet es una batalla perdida, porque cada intento llega desde una dirección distinta. Para bloqueo masivo y automático conviene usar Fail2Ban a nivel de servidor, explicado en nuestra guía de Fail2Ban contra ataques de fuerza bruta.
Forzar la conexión segura (HTTPS)
Para redirigir automáticamente todo el tráfico HTTP hacia HTTPS y evitar que los datos viajen sin cifrar:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule> Esta misma regla cumple dos funciones a la vez: fuerza SSL y redirige el tráfico no seguro, por lo que no necesitas reglas separadas para cada caso.
Proteger archivos de configuración críticos
El archivo wp-config.php contiene las credenciales de tu base de datos, por lo que debe estar completamente inaccesible desde el navegador:
<Files wp-config.php>
Deny from all
</Files> Restringir el acceso a tipos de archivo específicos
Con la directiva FilesMatch puedes bloquear el acceso directo a archivos según su extensión. Por ejemplo, para impedir que archivos PHP sueltos dentro de carpetas de subida sean ejecutados directamente:
<FilesMatch "\.(php)$">
Order Allow,Deny
Deny from all
</FilesMatch> Esta regla es particularmente útil dentro del directorio wp-content/uploads, un blanco frecuente para subir shells maliciosos disfrazados de imágenes.
Bloquear el acceso desde servidores proxy
Para dificultar que bots que ocultan su origen a través de proxies accedan a tu sitio, puedes usar la directiva SetEnvIf:
SetEnvIf X-Forwarded-For "^.+\..+\..+\..+" DenyAccess
Order Deny,Allow
Deny from env=DenyAccess Desactivar la exploración de directorios
Por defecto, si un directorio no tiene un archivo index.php o index.html, Apache puede mostrar el listado completo de sus archivos a cualquier visitante. Esto se desactiva con:
Options -Indexes Esta es una de las reglas más simples y, al mismo tiempo, más importantes: evita que un atacante descubra la estructura interna de tu sitio simplemente navegando a una carpeta sin index.
Bloquear tráfico desde sitios de referencia (referrer spam)
Si detectas tráfico malicioso o spam proveniente de un sitio específico, puedes bloquearlo según el encabezado Referer:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} example\.com [NC]
RewriteRule .* - [F]
</IfModule> Ejemplo completo combinado
Estas reglas pueden combinarse en un único bloque dentro de tu .htaccess. Un punto de partida razonable para un sitio WordPress típico sería:
# Forzar HTTPS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# Proteger wp-config.php
<Files wp-config.php>
Deny from all
</Files>
# Desactivar exploración de directorios
Options -Indexes
# Bloquear PHP dentro de uploads
<FilesMatch "\.(php)$">
Order Allow,Deny
Deny from all
</FilesMatch> Importante: siempre haz una copia de respaldo de tu .htaccess original antes de editarlo, y prueba los cambios en un entorno de staging si es posible. Una regla mal escrita puede dejar tu sitio inaccesible ("Error 500") hasta que se corrija.
La seguridad de WordPress nunca depende de una sola medida, sino de varias capas trabajando juntas: contraseñas robustas, actualizaciones constantes, un buen plugin de seguridad y, como complemento a nivel de servidor, un archivo .htaccess bien configurado. Ninguna de estas reglas reemplaza a las otras: úsalas en conjunto para reducir significativamente tu superficie de ataque. Si tienes dudas durante la implementación, nuestro equipo de soporte técnico está disponible 24/7 para ayudarte.
Hosting con LiteSpeed, NVMe y soporte 24/7 desde $3/mes.