Per bloquejar els intents fallits recurrents d'inici de sessió a WordPress, per exemple per evitar atacs de força bruta, pots fer-ho amb Fail2ban. Aquesta eina sol estar instal·lada per defecte a la majoria de panells com ara HestiaCP, i per fer-ho caldrà crear el fitxer de definició.
El camí per defecte és "/etc/fail2ban/filter.d/", de manera que pots utilitzar un editor de text per SSH per crear el fitxer de la manera següent (l'editor vi, per exemple):
# vi /etc/fail2ban/filter.d/wordpress.conf
Hauràs d'incloure la definició següent:
[Definition]
failregex = ^<HOST> .* "POST .*wp-login.php
^<HOST> .* "POST .*xmlrpc.php
Un cop creat, hauràs d'indicar al fitxer que utilitza fail2ban per configurar les jails els paràmetres per a la nova definició de WordPress. Per tant, modifica el fitxer mitjançant un editor de text:
# vi /etc/fail2ban/jail.conf
I afegeix al final els valors següents:
[wordpress]
enabled = true
filter = wordpress
port = http,https
action = iptables-multiport[name=wordpress, port="http,https", protocol=tcp]
logpath = /var/log/apache2/domains/*error.log
maxretry = 10
findtime = 600
bantime = 7200
Com es pot observar, a logpath s'indica el camí dels registres d'errors de HestiaCP dels dominis amb un * perquè separa els registres dels dominis. Per tant, pots modificar el camí per indicar que en revisi un en particular o un altre camí dels registres.
A HestiaCP, una altra manera de fer-ho seria crear individualment jails només per als dominis que vulguis.
Finalment, torna a carregar la configuració de fail2ban perquè la modificació es faci efectiva mitjançant l'ordre següent:
# systemctl reload fail2ban.service
Per verificar que funciona correctament, executa l'ordre següent, que mostra les jails que estan actives:
# fail2ban-client status
Després pots provar-ho fent intents fallits i consultar les IP blocades per la jail de WordPress:
# fail2ban-client status wordpress
Per desblocar una IP blocada per aquesta jail, l'ordre seria la següent:
# fail2ban-client set wordpress unbanip DIRECCIONIP
Els passos següents només són necessaris per utilitzar Cloudflare
Per utilitzar Cloudflare com a CDN amb Fail2Ban cal utilitzar l'API que proporciona Cloudflare, perquè, si no es configura d'aquesta manera, continuarà permetent l'accés a la IP que hauria d'haver estat blocada. També seria possible utilitzar la "Real IP" per bloquejar els intents, però en aquest cas només s'indicarà el procediment per a l'API v4 de Cloudflare.
Hauràs d'afegir el fitxer següent a la ubicació de fail2ban dins d'action.d; a HestiaCP ja està creat per defecte:
# vi /etc/fail2ban/action.d/cloudflare.conf
En el cas de HestiaCP, pots modificar-lo només per introduir els cfuser i cftoken obtinguts de Cloudflare des de l'enllaç https://dash.cloudflare.com/profile/api-tokens. El contingut seria el següent:
# Obtenir la Cloudflare API key: https://dash.cloudflare.com/profile/api-tokens utilitzar la Global API Key
# Codis d'error de l'API de CloudFlare: https://www.cloudflare.com/docs/host-api.html#s4.2
[Definition]
# Opció: actionstart
# Notes.: ordre executada a petició en el primer bloqueig (o en iniciar Fail2Ban si actionstart_on_demand està establert a false).
# Valors: CMD
actionstart =
# Opció: actionstop
# Notes.: ordre executada en aturar la jail (o en finalitzar Fail2Ban)
# Valors: CMD
actionstop =
# Opció: actioncheck
# Notes.: ordre executada una vegada abans de cada ordre actionban
# Valors: CMD
actioncheck =
# Opció: actionban
# Notes.: ordre executada en blocar una IP. Tingues en compte que
# l'ordre s'executa amb els permisos de l'usuari de Fail2Ban.
# Etiquetes: <ip> adreça IP
# <failures> nombre d'errors
# <time> marca de temps unix del moment del bloqueig
# Valors: CMD
#
# API v1
#actionban = curl -s -o /dev/null https://www.cloudflare.com/api_json.html -d 'a=ban' -d 'tkn=<cftoken>' -d 'email=<cfuser>' -d 'key=<ip>'
# API v4
actionban = curl -s -o /dev/null -X POST -H 'X-Auth-Email: <cfuser>' -H 'X-Auth-Key: <cftoken>' \ -H 'Content-Type: application/json' -d '{ "mode": "block", "configuration": { "target": "ip", "value": "<ip>" } }' \ https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules
# Opció: actionunban
# Notes.: ordre executada en desblocar una IP. Tingues en compte que
# l'ordre s'executa amb els permisos de l'usuari de Fail2Ban.
# Etiquetes: <ip> adreça IP
# <failures> nombre d'errors
# <time> marca de temps unix del moment del bloqueig
# Valors: CMD
#
# API v1
#actionunban = curl -s -o /dev/null https://www.cloudflare.com/api_json.html -d 'a=nul' -d 'tkn=<cftoken>' -d 'email=<cfuser>' -d 'key=<ip>'
# API v4
actionunban = curl -s -o /dev/null -X DELETE -H 'X-Auth-Email: <cfuser>' -H 'X-Auth-Key: <cftoken>' \ https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules/$(curl -s -X GET -H 'X-Auth-Email: <cfuser>' -H 'X-Auth-Key: <cftoken>' \ 'https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules?mode=block&configuration_target=ip&configuration_value=<ip>&page=1&per_page=1' | cut -d'"' -f6)
[Init]
# Nom de la jail al teu fitxer jail.local per defecte = [jail name]
name = default
# Opció: cfuser
# Notes.: Substituir <cfuser> a actionban i actionunban amb cfuser pel valor següent
# Valors: El teu compte d'usuari de CloudFlare
cfuser = user@mail.com
# Opció: cftoken (Global API Key)
# Notes.: Substituir <cftoken> a actionban i actionunban amb cftoken pel valor següent
# Valors: La teva CloudFlare API key
cftoken = TU_API_KEY
Després indica al fitxer jail.local la nova acció:
# vi /etc/fail2ban/jail.local
També hauràs de modificar-lo per incloure-la a la jail pertinent del servei Web utilitzat al servidor. Si utilitzes el panell HestiaCP, afegeix l'acció a la jail creada de Wordpress:
[wordpress]
enabled = true
filter = wordpress
port = http,https
action = cloudflare
# iptables-multiport[name=wordpress, port="http,https", protocol=tcp]
logpath = /var/log/apache2/domains/*error.log
maxretry = 10
findtime = 600
bantime = 7200
Finalment, reinicia el servei fail2ban:
# systemctl restart fail2ban
Esperem haver-te ajudat amb aquest tutorial. L'has provat? Deixa'ns els teus comentaris! 🙂
Recorda, si tens consultes sobre aquesta o qualsevol altra qüestió relacionada amb els teus servidors a Clouding, no dubtis a escriure a soporte@clouding.io Som al teu costat per al que necessitis!