Seguridad en WordPress

Social
Como seguramente ya sabes, WordPress se ha convertido en la plataforma preferida en casi todo el mundo para desarrollar un sitio web. Su flexibilidad y la cantidad de plugins disponibles la hacen poder adaptarse a cualquier cosa que se nos imagine. Al ser tan popular, también, es más probable recibir ataques buscando acceder a nuestro panel de control, para añadir SPAM, robar datos, etc.Así que aunque parezca que tu contraseña es segura, y no hace falta nada más, es totalmente lo contrario. En algunos sitios webs que tengo alojados, recibimos cientos de ataques diarios, y no siempre por el mismo lugar. Así que vamos a ver que podemos hacer para proteger nuestros sitios web de los ataques mas frecuentes, y tener los puntos clave bien claros.

1. Actualizaciones

Dejar un WordPress o sus plugins desactualizados es casi una garantía de que tu sitio se puede hackear. Cada día se descubren muchos agujeros de seguridad, y hacen que tu sitio sea vulnerable, y explotado por cualquiera con algo de conocimientos. Con la herramienta WPScan se pueden realizar auditorias de cualquier sitio WordPress, para que ver que agujeros de seguridad existen, y con enlaces a como explotarlos. Así que, algo que cuesta tan poco, mejor tenerlo al día.
Podemos activar que se realicen todas las actualizaciones de manera automática, ya que por defecto solo se realizan las menores. Si no has hardcodeado algún plugin o tema, y crees que al realizar las actualizaciones tu sitio no se va a romper, es muy buena opción. Tan solo hay que añadir esta linea al archivo wp-config.php:

define( ‘WP_AUTO_UPDATE_CORE’, true );

También existe algún plugin que permite tener todo actualizado, incluso los plugins. Hace tiempo que no se actualiza pero funciona, y parece ser totalmente fiable: Es Automatic Updater, y una vez instalado, es tan sencillo como seleccionar si queremos actualizar automáticamente plugins, temas, y la plataforma; con actualizaciones mayores o menores, etc.

2. Acceso seguro

Para empezar, lo más importante es usar una contraseña totalmente segura para acceder al panel de WordPress. Si podemos deshabilitar o eliminar el usuario Admin, y usar otro cualquier mejor (hay que evitar usar el nombre de la web, root, admin, etc.) Para generar contraseñas seguras puedes usar apg en Linux, o un generador online como este.

Otra parte muy importante es cambiar la URL de acceso al panel. Todos los WordPress utilizan nombredelsitio/wp-admin para acceder, asi que todos las botnets intentar atacar por esa URL: si la cambiamos, se lo ponemos un poco más dificil. Existen varios plugins para realizar esto, pero yo prefiero incluirlo en el archivo .htaccess (hay que tener activado el modulo rewrite de Apache):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^PANEL/?user@computer$ /wp-login.php [QSA,L]
RewriteCond %{THE_REQUEST} ^(.*)?wp-login\.php(.*)$
RewriteCond %{HTTP_REFERER} !^(.*)PANEL/?$
RewriteRule ^(.*)user@computer$ – [R=404,L]
</IfModule>

Donde dice PANEL, seria la nueva URL para acceder al panel de control.

3. Desactiva XML-RPC

Quizás no te suene, pero XML-RPC es un protocolo que se usa para acceder a WordPress y alguna de sus funciones, como Jetpack, desde los servidores de Automattic. Es como una versión antigua de SOAP.
Si no necesitas realizar Pingbacks, actualizar tu sitio desde este protocolo, o mirar datos de Jetpack, puedes simplemente deshabilitarlo, para hacerlo puedes usar algun plugin o app. Por ejemplo, en WP Cerber, tienes que ir a la pestaña Endurecer, y marcar la opción Desactivar XML-RPC .
Si quieres seguir manteniendo Jetpack, puedes entrar a la configuración del mismo, y la pestaña seguridad (Security) y activar la opción “Bloquea actividad de registro sospechosa”.

Estos ataques también pueden causar una ralentización en el servidor. Para ello podemos utilizar una regla para ModSecurity (si no sabes lo que es, mira este post -> Protege tu servidor Linux desde cero)
Con esta regla, si obtenemos 5 consultas o más, elimina la conexión a 120s de esa IP. Además, disminuye la cuenta por 2 cada 60 segundos:

ModSecurity – USAGE:

SecAction “phase:1,id:400000,t:none,pass,nolog,initcol:global=global,initcol:ip=%{remote_addr}”
SecRule REQUEST_URI “/xmlrpc\.php” “id:400001,nolog,drop,chain,phase:1,setvar:ip.ddos=+1,deprecatevar:ip.ddos=2/60,expirevar:ip.ddos=120”
SecRule IP:DDOS “@gt 5” “nolog”

 

4. Instala un WAF y configúralo

Si en tu servidor no tienes un Web Application Firewall como ModSecurity, puedes instalar un plugin que realice funciones similares.
Con la mayoría de ellas, puedes bloquear la IP desde la cual se intente acceder a tu sitio con fuerza bruta, bloquear acceso a archivos PHP directamente, bloquear peticiones POST sin referencia en la cabecera HTTP, etc.

Yo suelo utilizar Sucuri Security  yCerber Security con muchas opciones. Suelo activarme los logs por email para monitorizar fácilmente la cantidad de ataques y por donde vienen, para aplicar las correcciones pertinentes.
Otros que también funcionan muy bien son  Wordfence, o NinjaFirewall. Todos ellos son gratuitos y muy faciles de configurar desde la misma interfaz de WordPress.

Puedes ver una comparativa con algunos WAF en esta dirección -> https://geekflare.com/wordpress-waf/

Configurando Cerber Security

Para bloquear correctamente la mayoría de ataques a tu WordPress, hay que configurar algunas opciones básicas:

Por ejemplo, el cambio de URL para acceder al panel de administración es muy importante, puedes hacerlo desde el .htaccess como explicaba en el punto 2, o desde el mismo Cerber Security, en la opción Personalizar URL de acceso. Recuerda activar también la opción Disable dashboard redirection, o sino no servirá de nada.
También recomiendo activar la opción Desactivar wp-login.php, para que de un error 404 al intentar acceder directamente.

Una configuración realmente segura, es utilizar las Whitelist. Si tu proveedor de Internet te proporciona una IP fija, y casi siempre vas a acceder desde ella, puedes añadirla a la Whitelist (Listas de acceso, añadir IP a Whitelist), y endurecer mucho más las reglas, por ejemplo, activando Usuarios inexistentes: que bloquea la IP inmediatamente al intentar iniciar sesión con un nombre de usuario inexistente, y limitando los intentos de inicio de sesión a una sola vez. Eso si, cuidado si accedes desde otra localización y te equivocas de nombre de usuario.

 

De momento, estos son los 4 puntos más importantes para proteger tu WordPress de ataques externos. ¿Tu añadirías algún punto más? ¡Dímelo en los comentarios!

Y si te ha gustado… ¡comparte!

Xavi Gonzalez Autor

Técnico en explotación de sistemas informáticos y Técnico Superior de Administración de sistemas en red y de Desarrollo de Aplicaciones Web. Actualmente como Responsable técnico y desarrollador web en Egardata Informàtica, en Terrassa.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.