Una medida básica para mejorar la seguridad de WordPress es cambiar la URL de acceso al panel de administración. Por defecto es la misma para todas las instalaciones y por tanto  el objetivo de principal de la mayoría de ataques a nuestra web.

Veamos como llevar a cabo esta tarea

Consideraciones previas

A primera vista, cambiar la url de acceso parece una tarea sencilla. Para acceder mediante una url de nuestra elección, solo tenemos que crear la redirección adecuada. Pero eso no resuelve el problema. Todavía nos falta bloquear el acceso mediante /wp-admin y wp-login.php, o no habremos hecho nada, excepto complicarnos la vida.

Se trata de alterar una funcionalidad básica, sin tocar el núcleo de WordPress. Si lo hacemos, en el mejor de los casos las actualizaciones serán complicadas, y podemos tener problemas con el funcionamiento de nuestro sitio.

No es fácil, pero es posible hacerlo.


Ocultar wp-admin con un plugin

Aunque evito utilizar plugins en la medida de lo posible, creo que estamos ante una excepción que confirma la regla. En esta ocasión recomiendo usar un plugin con eficacia demostrada. 

Si disponemos de alguna solución de seguridad como por ejemplo AIO WP Security, solo tenemos que ir a la opción correspondiente en el apartado de fuerza bruta y escribir el slug deseado por ejemplo solo-para-mi, activarlo y guardar la configuración. 

AIO se encargará de todo por nosotros. A partir de ese momento entraremos a través de la nueva URL y /wp-admin y wp-login.php no serán accesibles desde Internet 

Si nuestra solución de seguridad para WordPress no incorpora esta funcionalidad, odemos utilizar un plugin específico como WPS Hide Login.

No lo he probado, pero he visto varios análisis que lo recomiendan. Teniendo en cuenta las instalaciones activas y las valoraciones, parece un buen candidato.

Ocultar wp-admin mediante codigo

Esta es una opción que nos dará el mismo resultado, sin necesidad de instalar un plugin. Estos son los pasos a seguir

1. Añadimos el slug de administracion a wp-config.php

define('WP_ADMIN_DIR', 'solo-para-mi');
define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . WP_ADMIN_DIR);

2. En el functions. php de nuestro tema hijo añadiremos las siguientes funciones:

//sustituye wp-admin por ​el nuevo slug
add_filter('site_url', 'wpadmin_filter', 10, 3);
function wpadmin_filter( $url, $path, $orig_scheme ) {
   $old = array( "/(wp-admin)/");
   $admin_dir = WP_ADMIN_DIR;
   $new = array($admin_dir);
   return preg_replace( $old, $new, $url, 1);
}

//bloqueamos acceso a wp-admin con 404
add_action('login_form','redirect_wp_admin');
function redirect_wp_admin(){
   $redirect_to = $_SERVER['REQUEST_URI'];
   if(count($_REQUEST)> 0 && array_key_exists('redirect_to', $_REQUEST)){
      $redirect_to = $_REQUEST['redirect_to'];
      $check_wp_admin = stristr($redirect_to, 'wp-admin');
      if($check_wp_admin){wp_safe_redirect( '404.php' );}
   }
}

//bloqueamos wp-login.php con 404
add_action( 'init', 'force_404', 1 );
function force_404() {
   $requested_uri = $_SERVER["REQUEST_URI"];
   if (strpos( $requested_uri, '/wp-login.php') !== false ) {
      status_header( 404 );
      nocache_headers();
      include( get_query_template( '404' ) );
      die();
   }
}

3.  Modificaremos nuestro .htaccess añadiendo las líneas

<IfModule mod_rewrite.c>
   RewriteRule ^solo-para-mi/(.*) wp-admin/$1?%{QUERY_STRING} [L]
</IfModule>

Siguiendo estos pasos solo tenemos que sustituir solo-para-mi por el slug que deseemos y con ello habremos cambiado las url de acceso a nuestro panel de administración. 

La solución no es mía, pero cumple con los requisitos y es la que más me ha gustado de las que he visto.


Ocultar wp-admin mediante contraseña

Esta solución no utiliza código PHP y aunque no bloquea el acceso al área de administración, solicita una contraseña adicional con lo cual tenemos una capa extra de seguridad en WordPress.

Haremos lo siguiente:

1. Nos conectamos a la consola del servidor y creamos un archivo de contraseñas

sudo apt-get install apache2-utils
sudo htpasswd -c /ruta/hasta/archivo/.htpasswd nombre-de-usuario

2. Crearemos un archivo .htaccess con el siguiente contenido y lo subimos a la carpeta /wp-admin

AuthName "Acceso Restringido"
AuthType Basic
AuthUserFile /ruta/hasta/archivo/.htpasswd
require valid-user

<FilesMatch “\.(css|js|jpg|jpeg|gif|png)$”>
   Order Allow,Deny
   Allow from All
   Satisfy Any
</FilesMatch>

<Files admin-ajax.php>
   Order Allow,Deny
   Allow from All
   Satisfy Any
</Files>

A partir de ese momento el acceso a la carpeta wp-admin exigirá autentificacion con el usuario y la contraseña definidos en el punto 1. Se permite el acceso libre a los  archivos auxiliares: css, js e imágenes. También se permite el acceso libre al archivo admin-ajax.php necesario para la funcionalidad AJAX en WordPress.

No hemos ocultado la url por defecto, pero se lo ponemos más dificil a quien intente saltarse nuestra seguridad de WordPress


Ajustes de cache

Solo nos queda impedir que se guarde en cache la nueva página de acceso. Si hemos utilizado un plugin, posiblemente hayamos visto el aviso.

Como hacerlo depende de nuestro plugin de cache. Si usais Cache Enabler, esta funcionalidad ya está soportada. 

La expresion regular  /.*\/solo-para-mi​​​​​​evitará que se guarden en cache las url que termien en el nuevo slug. Podemos aprender más sobre las expresiones regulares y probar otras variantes aquí

Conclusión

Podemos estar seguros de que la mayoria de las visitas a wp-admin serán malintencionadas, por tanto el nivel de paranoia aceptable es reforzar todo lo posible la seguridad de WordPress. 

Hemos visto varias formas de ponérselo un poco más difícil a los hackers. Mi recomendación es hacerlo mediante un plugin, sobre todo si nuestra solución de seguridad lo incorpora.

Sin embargo, sea cual sea la implementacion que elijamos, no nos limitemos a ella. Debemos complementarla con otras medidas de seguridad y sobre todo hacer regularmente copias de seguridad.




0 0 votes
Valoración del artículo
Suscribir
Notificar de
guest
0 Comentarios
Inline Feedbacks
View all comments