Seguridad htaccess: Proteger wp-login.php y wp-admin

Seguridad Htaccess WordPress

WordPress es hoy por hoy el CMS más utilizado de internet, así que no es de extrañar que esté en el punto de mira de gente que no tiene otra cosa que hacer que intentar joder a los demás y, también sea dicho, de algunos que lo hacen con buenas intenciones. En este tutorial vamos a aprender a proteger con contraseña el acceso a dos de los objetivos más frecuentes en los ataques a WordPress: wp-loing.php y todo el directorio wp-admin. Utilizaremos el archivo .htaccess (servidores Apache).

Instrucciones

He dividido el proceso en cinco pasos. El más complicado es el primero pero una vez hecho los demás son muy sencillos.

  1. Proteger el directorio wp-admin con contraseña
  2. Permitir las solicitudes ajax
  3. Permitir solicitudes de imágenes, css y javascript dentro de wp-admin
  4. Proteger el archivo wp-loing.php
  5. Solución de errores 404 y redirección infinita

Proteger el directorio wp-admin con contraseña

Si tienes cPanel, busca la opción “Directorios Protegidos con contraseña”:

Al hacer clic aquí, llegamos a una pantalla que nos pide que seleccionemos un directorio. Navega hasta wp-admin, seleccionalo y llegarás a una pantalla como esta:

Marca la casilla “Protege este directorio con contraseña”. En “Nombra este directorio protegido” pon el texto que quieras que aparezca cuándo se pida la contraseña en el navegador; puedes poner lo que quieras. Dale a “Salvar”. Entonces crea un usuario y una contraseña y pulsa sobre el botón “Crear/modificar usuario autorizado”. Al intentar ir a wp-admin ahora aparecerá una ventana emergente donde deberás ingresar el usuario y contraseña que hayas creado. Por ejemplo, en Chrome tiene este aspecto:

Lo que ha hecho este proceso ha sido crear un archivo passwd con las credenciales del usuario y crear un archivo .htaccess en el directorio wp-admin con el siguiente contenido:

AuthType Basic
AuthName "HeyHey!"
AuthUserFile "/home/user/.htpasswds/public_html/wp-admin/passwd"
require valid-user

La ruta que ves en AuthUserFile es la ruta hacia el archivo que contiene las credenciales. La ubicación exacta puede variar de un servidor a otro y si quieres puedes establecer una ubicación diferente y mover el archivo a esa ubicación. Si no tienes cPanel y tienes otro software, lo siento pero no lo voy a cubrir en este tutorial, es imposible cubrirlos todos. Pero vamos a ver un método manual bastante fácil:

  1. Genera el arhivo passwd en este generador online.
  2. Sube el archivo a la ubicación que desees, preferiblemente fuera del directorio public_html
  3. Crea el archivo .htaccess dentro del directorio wp-admin e introduce las mismas líneas anteriores cambiando el valor de AuthUserFile por la ruta dónde hayas subido el archivo passwd
  4. Listo!

Si lo prefieres, desde la línea de comandos puedes crear el archivo htpasswd con:

# Utiliza -c para crear el achivo y añadir user1
htpasswd -c /home/account/.htpasswd user1
# Si el archivo ya existe, puedes añdir usuarios así (Si user2 ya existe podrás actualizar la contraseña):
htpasswd /home/account/.htpasswd user2

Ya tenemos el directorio wp-admin protegido con contraseña.

Permitir solicitudes Ajax

El API Ajax de WordPress se ejecuta en el archivo wp-admin/admin-ajax.php. Hemos bloqueado el acceso a todo el directorio wp-admin, así que cualquier plugin, tema o widget que utilice el API Ajax en el frontend dejará de funcionar. Para solucionarlo podemos permitir sólo las solicitudes a admin-ajax.php. Abre el archivo .htaccess en wp-admin generado en el paso anterior e introduce estas líneas al comienzo:

<Files admin-ajax.php>
	Order allow,deny
	Allow from all
	Satisfy any
</Files>

Permitir solicitudes a imágenes, css y javascript

Las imágenes, archivos CSS y javascript localizados bajo el directorio wp-admin, aunque raro, pueden ser utilizados en el frontend por algunos temas o plugins. Si estás en este caso y quieres que todo siga funcionando deberá crear un archivo .htaccess en wp-admin/css/, wp-admin/js/ y wp-admin/images/ con el siguiente contenido:

Order allow,deny
Allow from all
Satisfy any

En estos directorios no hay nada más que archivos css, js y de imágenes respectivamente. No obstante, si quieres afinar más por si las moscas, puedes poner una regla <File> según el directorio y los tipos de archivos. Por ejemplo, en el directorio wp-admin/js/ podrías poner el siguiente .htaccess para permitir sólo solicitudes a archivos con extensión .js:

<Files ~ "\.(js)$">
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

Proteger el archivo wp-login.php

Como ya tenemos creado un usuario válido y el archivo con sus credenciales, para proteger el archivo wp-login.php basta con abrir el arhivo .htaccess del directorio raíz dónde esté instalado WordPress y añadir al comienzo del todo lo siguiente:

<files wp-login.php>
    AuthType Basic
    AuthName "HeyHey!"
    AuthUserFile "/home/user/.htpasswds/public_html/wp-admin/passwd"
    require valid-user
</files>

Recuerda cambiar la ruta AuthUserFile por la tuya.

Solución al error 404 o redirección infinita

Después de hacer todo esto es frecuente que aparezcan errores 404 (No encontrado) y bucles de redirecciones infinitas cuándo se intenta acceder a wp-loing.php o algunas partes de wp-admin. Para solucionarlo abre el archivo .htaccess del directorio raíz dónde está instalado WordPress y pon esta línea al comienzo, antes de cualquier otra instrucción:

ErrorDocument 401 default

Ahora sí, ya está todo listo. Comprueba que todo marche y a disfrutar!!!!

¿Es realmente útil?

Cuándo se trabaja con plataformas web Open Source se habla mucho de seguridad. Aunque sean probadas por miles, incluso millones de usuarios, una aplicación web nunca es 100% segura. Y ser Open Source significa que el código puede ser visto por cualquiera, así que los agujeros de seguridad son más fácilmente descubiertos que en aplicaciones propietarias dónde sólo tu y tu equipo tenéis acceso al código fuente.

Bloquear el acceso a zonas sensibles del sitio mediante contraseña a nivel de servidor es tan sólo una barrera más que, aunque no infalible, se lo pondrá más difícil a quién intente colarse con malas intenciones. En WordPress, wp-login.php y wp-admin son las dos ubicaciones más utilizadas por los ataques de fuerza bruta (Brute Force Attacks) y su bloqueo es realmente útil contra este tipo de ataques. Así se recoge en los consejos para prevención de ataques Brute Force en la propia documentación de WordPress.

Los ataques Brute Force son muy habituales, ya que son muy simples y fácilmente programables. Tras bloquear el acceso a wp-login.php y wp-admin con contraseña puede que veas como se reduce la carga de tu servidor. Si es así, es muy probable que esa carga se debiera a ataques constantes de este tipo.

Sin embargo, creo que no es viable para todos los portales ni para todo el mundo. Hay que tener muy claro lo que se está haciendo y, sobre todo, las implicaciones que puede tener en el frontend. Por ejemplo, en portales basados en WordPress que permitan el registro de usuarios, habrá que implementar un sistema de registro, acceso y de perfiles alternativo al utilizado por defecto por WordPress y vigilar muy bien que no se generan enlaces a wp-login.php ni a wp-admin que terminen lanzando errores del servidor a un usuario normal. ¿Te imaginas que hay un enlace en el perfil de usuario, haga click y termine con un error del sevidor? Has machado la experiencia del usuario en tu web.

Valora el contenido con estrellitas:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 5,00 de 5)

No Responses

Deja un comentario

Hola, ¿en qué te puedo ayudar? escribeme tu consulta de producto o servicio :)

Conversa conmigo en WhatsApp