Proteger tu blog WordPress con Cloudflare y Fail2ban

0
999
cloudflare main logo
Logotipo de Cloudflare

En esta entrada os voy a proponer proteger WordPress con Cloudflare y Fail2ban, vuestra web o blog basada en WordPress protegida con herramientas totalmente gratuitas y sin necesidad de utilizar plugins en WordPress.

Para empezar a proteger WordPress con Cloudflare y Fail2ban, necesitaremos una cuenta en cloudflare.com, Cloudflare es un proveedor de servicios de Internet con una gran focalización en la seguridad, pues la mayoría de sus servicios están orientados a las redes y la seguridad de las mismas. Si queréis saber más sobre Cloudflare, os dejo la siguiente entrada en la que podréis saber la IP real de vuestros visitantes cuándo usáis el proxy de Cloudflare.

En este caso vamos a usar las softwares Apache2 y fail2ban conjuntamente con la capa gratuita de Cloudflare. Una vez tenemos nuestra cuenta abierta y nuestro DNS configurado, tendremos que crear una clave API. Para ello desde «Overview» iremos al menú lateral derecho y clicaremos en «Get your API token». Seleccionaremos «Create token» y «Create custom token».

El token a crear necesitará los permisos de edición para la zona «Firewall Services», también podemos rellenar la «Zone Resources» si queremos acotar sobre qué zona queremos aplicar el token, en caso de que tengamos varias o incluso filtrar la dirección IP que tiene permitido utilizar dicho token. También podremos definir un tiempo de vida del token. Guardamos el token en un lugar seguro, posteriormente lo utilizaremos.

Para configurar el servidor web apache2, en nuestra configuración de nuestro host virtual ubicada en /etc/apache2/sites-availables/ tendremos que habilitar la siguiente opción:

<VirtualHost *:443>
        ServerAdmin victor.gz@localhost
        ServerName sysadm.es
        ServerAlias www.sysadm.es
        ...........
        RemoteIPHeader CF-Connecting-IP
        ...........
</VirtualHost>

Habilitamos el módulo de apache mediante:

root@vm0000001:/etc/apache2# a2enmod remoteip

Después creamos el fichero /etc/apache2/conf-available/remoteip.conf con la siguiente información:

RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22
RemoteIPTrustedProxy 103.31.4.0/22
RemoteIPTrustedProxy 141.101.64.0/18
RemoteIPTrustedProxy 108.162.192.0/18
RemoteIPTrustedProxy 190.93.240.0/20
RemoteIPTrustedProxy 188.114.96.0/20
RemoteIPTrustedProxy 197.234.240.0/22
RemoteIPTrustedProxy 198.41.128.0/17
RemoteIPTrustedProxy 162.158.0.0/15
RemoteIPTrustedProxy 104.16.0.0/13
RemoteIPTrustedProxy 104.24.0.0/14
RemoteIPTrustedProxy 172.64.0.0/13
RemoteIPTrustedProxy 131.0.72.0/22
RemoteIPTrustedProxy 2400:cb00::/32
RemoteIPTrustedProxy 2606:4700::/32
RemoteIPTrustedProxy 2803:f800::/32
RemoteIPTrustedProxy 2405:b500::/32
RemoteIPTrustedProxy 2405:8100::/32
RemoteIPTrustedProxy 2a06:98c0::/29
RemoteIPTrustedProxy 2c0f:f248::/32

El listado de IP’s de Cloudflare los podemos obtener de aquí:

Habilitamos la configuración y recargamos la configuración de apache2:

root@vm0000001:/etc/apache2# a2enconf remote-ip && systemctl reload apache2

El siguiente paso es instalar el programa fail2ban

root@vm0000001:/etc/apache2# apt-get install fail2ban

Crearemos el siguiente fichero /etc/fail2ban/filter.d/wordpress.conf con el contenido:

[Definition]
failregex = ^<HOST> .* "POST .*wp-login.php
            ^<HOST> .* "POST .*xmlrpc.php
ignoreregex =

También el fichero /etc/fail2ban/jail.d/wordpress.conf

[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/apache2/sysadm.es/access.log
maxretry = 3
findtime = 600
action = cloudflare-token

Para finalizar tendremos que editar el fichero/etc/fail2ban/action.d/cloudflare-token.conf, vamos al final del fichero y descomentamos las siguientes partes:

# Declare your Cloudflare Authorization Bearer Token in the [DEFAULT] section of your jail.local file.

# The Cloudflare <ZONE_ID> of hte domain you want to manage.
#
cfzone = aquí_nuestra_id_de_zona_cloudflare

# Your personal Cloudflare token.  Ideally restricted to just have "Zone.Firewall Services" permissions.
#
cftoken = aquí_nuestro_token_creado_anteriormente

# Target of the firewall rule.  Default is "ip" (v4).
#
cftarget = ip

# The firewall mode Cloudflare should use.  Default is "block" (deny access).
# Consider also "js_challenge" or other "allowed_modes" if you want.
#
cfmode = block

# The message to include in the firewall IP banning rule.
#
notes = Fail2Ban <name>

[Init?family=inet6]
cftarget = ip6

Tendremos que rellenar el fichero con nuestra ID de zona de Cloudflare y el token creado anteriormente. Para obtener la ID de zona, desde el panel principal de Cloudflare, en el menú lateral derecho veremos claramente nuestra «Zone ID». Reiniciamos el servicio de fail2ban y ya estará listo.

root@vm0000001:/etc/apache2# service fail2ban restart

Ahora simplemente nos queda testearlo, pondremos varias veces la contraseña de forma erronea, a la tercera fail2ban nos baneará, aunque la API de cloudflare tardá más, podemos comprobar a través de la shell que efectivamente, fail2ban nos ha baneado:

root@vm0000001:/etc/fail2ban# fail2ban-client status wordpress
Status for the jail: wordpress
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     5
|  `- File list:        /var/log/apache2/sysadm.es/access.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   95.127.40.67
root@vm0000001:/etc/fail2ban#

A los pocos segundos podremos comprobar que cloudflare nos ha bloqueado el acceso.

Si comprobamos el dashboard de cloudflare también veremos el registro:

En el apartado de «Security», «WAF», «Tools» tendremos la opción desbloquear la IP. Hasta aquí la entrada de hoy. Prometo ser más constante con el blog y traer nuevo contenido, altamente enfocado al Cloud de Azure.

¡Hasta la próxima!

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí