Seguridad en wp-admin de wordpress con htaccess
Introducimos unas medidas extra de seguridad en wp-admin de wordpress con htaccess, de Apache.
Existen varias alternativas para implementar medidas extra de seguridad en una instalación del CMS Worpress, siendo uno de los ataques mas detectados, en intento de acceso no autorizado al panel de administración. Si el atacante consigue acceder a nuestro panel con métodos de fuerza bruta o con reenvío de la contraseña por ejemplo, tendría todo el control de nuestro blog. Por tanto, debemos intentar implementar métodos de seguridad en wp-admin de wordpress con htaccess, por ejemplo, u otros métodos que nos puedan ayudar a mantener nuestros blogs mas seguros.
Nunca estamos seguros al 100%
Es conveniente recordar que ninguna de ellas por separado o todas aplicadas al mismo tiempo son 100% eficaces frente a ataques malintencionados. Pero si es verdad, que cuantas mas opciones de seguridad incorporemos en nuestros desarrollos en general, mas difícil lo tendrán aquellos que deseen atacar nuestros desarrollos, y wordpress en particular.
Las principales opciones que disponemos:
La utilización de plugins suites de seguridad como Wordfence Security, o plugins que ocultan o redireccionan la ruta del panel de login como Hidden WP Admin, y otras muchas opciones. También podemos modificar directivas en el archivo .htaccess y .htpasswd. O implementar funciones de control del acceso admin en el propio código php.
Si se decide por la instalación de alguno de los plugins existentes, desde el propio panel de administración de wordpress se pueden buscar e instalar de forma fácil. Accediendo a su configuración, ajustamos los parámetros deseados. Existe suficiente documentación de referencia en los plugins para realizar su configuración sin problemas.
Pero en este artículo nos vamos a centrar en la opción de aplicar las directivas en un archivo .htaccess junto a otro archivo .htpasswd, elaborándolos en nuestro editor de código favorito y subiéndolo al servidor mediante FTP, por ejemplo.
Creamos el archivo .htpasswd
Lo primero que necesitamos es crear el archivo htpasswd, el cual va ha contener los datos de acceso, el nombre de usuario y la contraseña, esta última de forma encriptada. Para el ejemplo que vamos a desarrollar, utilizaremos el nombre de usuario «admin» y la clave «123456«. El la web htpasswd generator lo podemos generar, copiamos el código, lo pegamos en nuestro editor de código y grabamos el archivo.
Código del archivo .htpasswd:
admin:$apr1$SU6oBoWW$RIqybwUpbTa5dWOFgedvf.
Creamos el archivo .htaccess para la raíz
El siguiente paso será crear el archivo .htaccess en el editor de código, para la raíz de la instalación de nuestro WordPress, con el siguiente contenido:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # cambio ruta admin RewriteRule ^mi_admin$ http://www.mi_blog/wp-admin [NC,L] # Desabilitamos hotlinking de imagenes RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mi_blog.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ – [NC,F,L] </IfModule> # Proteccion de autorizacion para wp-login.php <Files wp-login.php> AuthType Basic AuthName "Esta accediendo a un area privada. Ingrese sus credenciales:" AuthUserFile "mi_ruta/.htpasswd" Require valid-user </Files> # Denegacion de acceso para wp-config.php <Files wp-config.php> Order allow,deny Deny from all </Files> # Control pagina de error ErrorDocument 401 default ErrorDocument 403 default # Denegar file browsing Options All -Indexes # Denegar a Apache servir archivos .ht* <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> <Files .htaccess> Order allow,deny Deny from all </Files> # END WordPress
Creamos el archivo .htaccess para la la carpeta /wp-admin/
El siguiente archivo .htaccess lo grabamos en la raíz de la carpeta /wp-admin/ dentro de la instalación del blog:
# BEGIN WordPress Admin # Proteccion para el directorio wp-admin AuthType Basic AuthName "Esta accediendo a un area privada. Ingrese sus credenciales:" AuthUserFile "mi_ruta/.htpasswd" Require valid-user #order deny,allow #deny from all #allow from xxx.xxx.xxx.xxx # Permitir Solicitudes Ajax en wp-admin/admin-ajax.php <Files admin-ajax.php> Order allow,deny Allow from all Satisfy any </Files> # Permitir Solicitudes Post en wp-admin/admin-post.php <Files admin-post.php> Order allow,deny Allow from all Satisfy any </Files> # Solicitudes de imagenes, css y js <Files "\.(css|js|jpg|jpeg|gif|png)$"> Order allow,deny Allow from all Satisfy any </Files> # Denegar a Apache servir archivos .ht* <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> <Files .htaccess> Order allow,deny Deny from all </Files> # END WordPress Admin
Los archivos .htaccess debemos subirlos, mediante FTP con Filezilla por ejemplo, a la raíz de nuestra instalación de wordpress, el otro archivo .htaccess dentro de la carpeta /wp-/admin/, y el archivo .htpasswd en una carpeta externa a dicha instalación, de forma que no sea accesible. La ruta de .htpasswd debe ser la ruta interna del sistema de archivos del servidor. Este punto es importante, ya que de no ser así no localizaría Apache el archivo.
Comprobando el resultado
Una vez subidos los dos archivos, ya disponemos de un extra de seguridad en wp-admin de wordpress con htaccess, y podemos empezar a probar las nuevas directivas de seguridad, accediendo al panel de administración, obteniendo la siguiente ventana:
Si por cualquier motivo, introducimos mal los datos, bien por error o bien por estar intentando acceder de forma malintencionada, obtendríamos la siguiente ventana:
Obtenemos una ventana con un mensaje de error 401, que nos indica que, aunque el recurso es correcto, existe la dirección web, se requiere autorización, y bien no se ha dado o es incorrecta, por lo que el recurso no se puede visualizar. Comprobamos por tanto que esta forma de implementar seguridad en wp-admin de wordpress con htaccess puede sernos de utilidad ante ataques malintencionados.
En el artículo donde configuro una máquina virtual debian con el entorno de virtualización VirtualBox se puede ampliar información sobre la configuración de Apache y PHP:
Debian VirtualBox – LAMP Web Server, SSL, Alias, FTP y Virtualhost.
Un saludo, Antonio Horrillo.