Protegendo seu WordPress de ataques
Este sitio al que está accediendo es una instalación de la Wordpress. Me gusta la facilidad de la misma.
WordPress es muy bueno en la producción de un blog rápidamente en un VPS o Cloud, pero su facilidad es también su mayor defecto.
Qué sencillo es tener un sitio web con él, All dies sind Dinge, die ich gesehen habe, und ich glaube, sogar Sie haben gesehen.
Una vez que se descubre una falla, un hacker travieso será capaz de utilizar este defecto en millones de sitios web en todo el mundo, para publicar archivos, enviar correos electrónicos e incluso crear sitios web falsos dentro de un dominio. Todas estas son cosas que he visto y creo que incluso tú has visto.
Una de las cosas que más me molesta de WordPress es su mecanismo de autenticación y ejecución XML-RPC. Son fuentes constantes de ataque de fuerza bruta.
Basta con echar un vistazo a los últimos 10 líneas en este archivo de registro de la mía (tomado en tiempo real desde este servidor mientras se escribe este artículo sin el uso de ningún mecanismo de protección).
Junio 8 21:09:39 host wordpress(xxxxxxx.com.br)[1010]: Error de autenticación para gestao_click de 196.41.127.26 Junio 8 21:09:40 host wordpress(xxxxxxx.com.br)[1791]: Error de autenticación para el invitado de 196.41.127.26 Junio 8 21:09:41 host wordpress(xxxxxxx.com.br)[9892]: Error de autenticación para ricardo_pereira de 196.41.127.26 Junio 8 21:10:15 host wordpress(zzzzzzzzz.com.br)[6490]: Intento de autenticación XML-RPC para el administrador de usuarios desconocidos de 86.167.111.66 Junio 8 21:11:38 host wordpress(www.zzzzzzzzz.com.br)[1011]: Error de autenticación para alexacolemanmkdef desde 5.135.164.126 Junio 8 21:11:38 host wordpress(www.zzzzzzzzz.com.br)[6490]: Error de autenticación para alexia_dias de 5.135.164.126 Junio 8 21:11:39 host wordpress(www.zzzzzzzzz.com.br)[5620]: Error de autenticación para beatriz_seomarketing de 5.135.164.126 Junio 8 21:11:40 host wordpress(www.zzzzzzzzz.com.br)[6489]: Error de autenticación para bianca_oblige de 5.135.164.126 Junio 8 21:11:41 host wordpress(www.zzzzzzzzz.com.br)[1010]: Error de autenticación para celioedu desde 5.135.164.126 Junio 8 21:11:42 host wordpress(www.zzzzzzzzz.com.br)[9893]: Error de autenticación para celeste_pinto de 5.135.164.126
Sólo por estas líneas se puede ver que hay una actividad intensa de tratar de autenticarse en las instalaciones de WordPress existentes, prácticamente uno por segundo.
Para mitigar estos intentos de invasión constante, Utilizo hace unos años la fórmula de incluir las direcciones IP de estas solicitudes en los filtros de firewall, bloqueando completamente el acceso al servidor que proviene de estos. Esto reduce drásticamente estos intentos. Inicialmente hice esto manualmente, manejar los registros y agregar las IP más insistentes, pero luego descubrí un guión que lo hizo automáticamente: O Fail2Ban.
Fail2Ban
el Fail2Ban es un script para un demonio que monitorea registros y prohíbe IPs. Con él es posible analizar los registros de cualquier software que tenga autenticación como WordPress y de los errores actuales incluyen las IP de origen en los filtros en el firewall.
Es muy fácil de usar y está disponible en varios repositorios para diferentes distribuciones de Linux.
A continuación le mostraré cómo hacer una instalación y configuración usando Centos 8 junto con el firewalld
Instalando os recursos necessários
Las líneas a continuación instalan todos los elementos necesarios.
$ sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm $ sudo rpm -ql epel-release $ sudo dnf instalar firewalld fail2ban -y
A partir de este punto ya debería tener fail2ban instalado y también el cortafuegos.
NOTA: Si está utilizando el shell desde una conexión SSH, es necesario añadir el puerto de conexión a zona pública para que no termines activando el cortafuegos y bloqueando el acceso remoto.
Para ello, utilice el comando:
$ sudo systemctl start firewalld && sudo firewall-cmd –;zone=public –;add-port=22/tcp –;permanent && sudo firewall-cmd –;zone=public –;add-service=https –;permanent && sudo firewall-cmd –;zone=public –;add-service=http –;permanent && sudo firewall-cmd –;Recargar
Si todo está bien estarás con el cortafuegos activo en este momento y con los puertos 80, 443 y 22 liberados a la zona pública.
Ahora vamos a activar los servicios para que siempre comiencen junto con el sistema.
$ sudo systemctl enable fail2ban $ sudo systemctl habilitar firewalld
WPFail2Ban
Como estamos hablando de WordPress no voy a mostrar cómo configurar fail2ban para leer los registros del servidor web y prohibir IPs de ellos. Hay una manera mucho más simple de hacer esto usando un plugin apropiado. el WPFail2Ban. Sólo tiene que instalarlo y listo.
Con WPFail2Ban instalado y sin cambiar ninguna configuración, agregará todos los errores de intento de inicio de sesión al archivo de Syslog del sistema predeterminado que en el caso de CentOS es el /var/log/messages
.
En mi instalación, No utilifié los ajustes indicados en el manual de WPFail2Ban, incluso porque no había Filtros Indicado.
Lo primero que hay que hacer es crear un filtro para Fail2Ban. Vamos a crear un archivo de filtro en /etc/fail2ban/filter.d/wordpress.conf
.
Las siguientes líneas suponen que no hay ningún otro archivo de configuración para su uso con WordPress. Soy un devoto de Vim, pero usa el editor que prefieras.
$ sudo vim /etc/fail2ban/filter.d/wordpress.conf
Agregue las siguientes líneas:
Filtro Fail2Ban para errores de autenticación de worpdpress
#
[Incluye]
antes de common.conf
[Definición, Año Nuevo]
_daemon de wordpress failregex - %(__prefix_line)sAuthentication failure for .* De $
^%(__prefix_line)sBloqueo de autenticación bloqueado para .* De $
^%(__prefix_line)intento de autenticación sXML-RPC para unknown.* de $
^%(__prefix_line)sBloqueo de enumeración de usuarios bloqueados desde $
^%(__prefix_line)sPingback solicitado de $
ignoreregex ?
# Notas del DEV:
#
# Autor, Año Nuevo: Marcos Regis
No voy a entrar en los detalles de las líneas, sólo que están preparados para capturar la mayoría de los errores de autenticación que el motor WPFail2Ban enviará al archivo de registro.
El siguiente paso es definir qué acción se realizará cuando fail2ban encuentre una entrada que coincida con cualquiera de los valores predeterminados definidos en el archivo de configuración.
Todas estas acciones se definen en los archivos de configuración del directorio /etc/fail2ban/action.d/ y por lo que propone este artículo estamos interesados en los archivos firewallcmd*. En mi experiencia, había un establecimiento que incluía la P.I. en la zona –;zona de caída la forma en que quería, así que creé un archivo de acción. Debajo del contenido de un archivo firewallcmd-drop.conf.
# /etc/fail2ban/action.d/firewallcmd-drop.conf
[Incluye]
antes de firewallcmd-common.conf
[Definición, Año Nuevo]
actionstart =
actionstop =
actioncheck =
actionban = firewall-cmd --zone=drop --add-source=<ip>
actionunban = firewall-cmd --zone=drop --remove-source=<ip>
El siguiente paso es crear la entrada que activará el filtro y la. Para hacer esto,, crear o editar el archivo /etc/fail2ban/jail.local y añadir las siguientes líneas:
# Filtrar para intentos de inicio de sesión en WordPress [WordPress] enabled - true logpath - /var/log/messages action - firewallcmd-drop
A partir de este punto todo está preparado para iniciar el servicio. Tan pronto como Fail2Ban se inicia y si ya hay entradas en los registros que coinciden con el patrón que se buscará, verá que las direcciones IP se agregan a la lista de bloqueo en el firewall.
$ sudo systemctl start fail2ban
Para ver las direcciones IP bloqueadas en el tipo de firewall firewall-cmd –;list-all –;zone-drop, verás una salida que parece:
Soltar (Activo)
Objetivo: DROP icmp-block-inversión: sin interfaces:
Fuentes: 223.225.107.45 111.231.227.35 139.99.156.158 149.202.70.189 162.241.200.235 167.71.111.16 178.254.11.154 18.228.33.11 223.225.10.190 45.119.212.93 62.210.178.229 68.183.134.134 69.163.163.220 80.211.174.81 103.57.84.227 159.65.128.55 91.134.248.230 165.22.107.13 208.97.188.13 188.240.208.26
Servicios:
Puertos:
Protocolos:
Mascarada: sin puertos de reenvío:
puertos de origen:
icmp-blocks:
reglas ricas:
Y eso es todo. Si tiene comentarios sobre el contenido, sentirse a gusto. Espero que esto te ayude tanto como a mí..
Abrazos.