Bloquear el acceso al panel de administración WP

Bloquear el acceso al panel de administración WP


Existen muchas formas de bloquear el acceso al panel de administración de WordPress. Aquí te mostraré una de las más efectivas y que requiere un mínimo de conocimientos para poder implementarla.

Cómo lo hacemos?

Si eres el único que ingresa al panel de administración de tu WordPress o lo hace un número limitado de personas este artículo te servirá, ya que el bloqueo lo realizaremos por IP.

Para esto, deberemos editar el archivo .htaccess de la carpeta wp-admin e ingresaremos las siguientes lineas:

<LIMIT GET> 
   order deny,allow 
   deny from all 
   allow from ACA-VA-TU-IP
</LIMIT> 

<files .htaccess> 
   order allow,deny 
   deny from all 
</files>

Lo que hacemos con este código es básicamente denegar el acceso a TODOS al panel de administración EXCEPTO a las IPs que agregues con el comando allow from.

Si quieres agregar más IPs, sólo debes agregar una nueva linea allow from EL-IP.

La segunda parte del código es para que no se pueda acceder desde fuera del servidor al archivo .htaccess.

Guardan los cambios y lo suben nuevamente a la carpeta wp-admin de su WordPress.

Para comprobar que funciona, pueden ingresar un IP que no sea el suyo y acceder al panel de administración. Verán como arroja un error 403 de prohibición de acceso.

Otra forma de comprobarlo es ingresando por algún proxy online, lo cual provocará el mismo error.


Y si tengo configurado Cloudflare?

Bueno, no desesperes. También hay una solución para eso.

Al tener configurado Cloudflare en nuestro sitio, el IP con el cual ingresamos al mismo no es el real sino que es de Cloudflare al trabajar como Proxy inverso. Esto quiere decir que el archivo .htaccess no nos servirá para este caso.

Entonces cómo hacemos para obtener nuestro IP y luego bloquear el acceso al panel de administración?

Muy fácil, utilizaremos un poco de código PHP.

Manos a la obra

En este caso, deberemos editar el archivo index.php de la carpeta wp-admin.

Insertaremos el siguiente código luego de la linea “<?php“:

function ObtenerIP(){
   $ip = "";
   if(isset($_SERVER)){
      if (!empty($_SERVER['HTTP_CLIENT_IP'])){
         $ip=$_SERVER['HTTP_CLIENT_IP'];
      }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
         $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
      }else{
         $ip=$_SERVER['REMOTE_ADDR'];
      }
   }else{
      if (getenv('HTTP_CLIENT_IP')){
         $ip = getenv('HTTP_CLIENT_IP');
      }elseif(getenv('HTTP_X_FORWARDED_FOR')){
         $ip = getenv( 'HTTP_X_FORWARDED_FOR' );
      }else{
         $ip = getenv( 'REMOTE_ADDR' );
      }
   }
   if(strstr($ip,',')){
      $ip = array_shift(explode(',',$ip));
   }
   return $ip;
}
$elip = ObtenerIP();

if($elip != "ACA-VA-TU-IP"){
header('HTTP/1.0 403 Forbidden');
exit;
}

Lo que hace este código es saber el IP del visitante incluso si navega a través de un proxy, luego revisa el IP. Si este no es igual al que esta entre comillas, dirige al visitante a una página de error 403.

Si necesitas ingresar más IPs para permitir el acceso al panel de administración, sólo debes incluirlas de la siguiente forma:

$elip != "IP-1" | $elip != "IP-2" | $elip != "IP-3"

Quedando así:

if($elip != "IP-1" | $elip != "IP-2" | $elip != "IP-3"){
header('HTTP/1.0 403 Forbidden');
exit;
}

Para que confirmes como va el código, pondré una imagen de mi archivo (sin mi IP obviamente).