El área de acceso de administrador a cualquier página web puede ser la puerta a ataques, normalmente realizados por fuerza bruta. Es decir, utilizan un sinfín de distintas combinaciones de nombres de usuario y contraseña para intentar acceder maliciosamente a una web.
Con el fin de restringir lo máximo posible la entrada a estos puntos de entrada vulnerables, te explico cómo limitar el acceso por IP con .htaccess. Aunque voy a centrar la explicación en sitios gestionados con WordPress, los pasos a seguir serán iguales en otros tipos de aplicaciones web, siempre que usen directivas Apache, ya que el archivo .htaccess se aloja en la raíz del sistema de archivos de la página web y la forma de gestionarlo es similar en todos los casos. Tan solo debes tener en cuenta cambiar las rutas por las que correspondan en el caso del proyecto web.
Crear lista blanca de IPs
En tu archivo tendrás que introducir este código, modificando la IP de ejemplo por la que quieras dar acceso:
<Files "wp-login.php"> #wp-login.php es la ruta de acceso al área de administrador de WordPress. Si en tu caso fuera otro archivo, modifícalo.
Order Deny,Allow
Deny from all
# IPs permitidas:
Allow from 127.0.0.1 #IP permitida de ejemplo
#Añade más IPs permitidas únicamente añadiendo a continuación nuevas líneas compuestas de 'Allow from' + 'Dirección IP'
</Files>
Cómo funciona cada parte:
- Files: Permite aplicar reglas específicas a un archivo concreto del servidor, del cual debemos indicar su ruta. Es decir, todo lo que esté después del inicio y el cierre de esta etiqueta afectará al archivo de acceso indicado.
- Order Deny,Allow: Establece que primero se evalúan las reglas de denegación (lista negra) y luego las de permiso (lista blanca).
- Deny from all: Bloquea el acceso desde cualquier dirección IP.
- Allow from [IP]: Permite el acceso únicamente desde las IPs especificadas.
Protección para xmlrpc.php u otras vías de acceso
También es necesario considerar otras vías de acceso que puedan tener los atacantes. En el caso de WordPress, existe el archivo xmlrpc.php, que se usaba hace muchos años para la publicación remota de contenido, pero ahora se encuentra en desuso y es muy usado para ataques de fuerza bruta. Por seguridad, conviene bloquearlo.
#Bloqueo total de seguridad a xmlrpc.php para evitar ataques
<Files "xmlrpc.php">
Order Deny,Allow
Deny from all
</Files>
Ahora bien, cabe destacar que los plugins de Jetpack, como Akismet, utilizan xmlrpc.php, así que si utilizas alguna de sus soluciones debes dar permiso a las IPs que utilizan para usar este archivo. Puedes consultar el listado de IPS que usa Jetpack en jetpack.com/support/how-to-add-jetpack-ips-allowlist
En este caso, el código sería el siguiente:
#Bloqueo de seguridad a xmlrpc.php para evitar ataques
<Files "xmlrpc.php">
Order Deny,Allow
Deny from all
#IPs permitidas, que son el listado de IPs que usa Jetpack para sus plugins
Allow from 122.248.245.244/32
Allow from 54.217.201.243/32
Allow from 54.232.116.4/32
Allow from 192.0.80.0/20
Allow from 192.0.96.0/20
Allow from 192.0.112.0/20
Allow from 195.234.108.0/22
Allow from 192.0.64.0/18
</Files>
#El listado de IPs usadas por Jetpack podría variar con el tiempo, así que revisa en el enlace que te he facilitado el listado actualizado.
Con estas configuraciones, tu web será más segura y robusta. De esta forma, se eliminarán los ataques por fuerza bruta a tu página web y se aliviará bastante la carga del servidor. Además, es una capa de seguridad que no afecta al rendimiento, ya que no requiere el uso de ningún plugin.