En su día escribí este hilo en mi cuenta de Mastodon que da unas pinceladas rápidas de lo que hice, pero ya que tengo un blog y tengo varios artículos sobre mantenimiento en Mastodon, he pensado que lo mejor sería documentarlo todo para el resto de admins.


Recientemente se han registrado varias cuentas de SPAM en mi nodo de Mastodon y he decidido poner solución a ello. En su día escribí este hilo en mi cuenta de Mastodon que da unas pinceladas rápidas de lo que hice, pero ya que tengo un blog y tengo varios artículos sobre mantenimiento en Mastodon, he pensado que lo mejor sería documentarlo todo para el resto de admins.

En este caso, me he encontrado que muchas de las IPs de origen del registro de la cuenta era procedente de Bangladesh. Lo que he visto también es que los proveedores eran diferentes, así que habrá que buscar entre varios proveedores.

Buscando información necesaria

Para buscar toda la información necesaria utilizaremos la herramienta ipinfo de la que hemos hablado anteriormente en el blog:

ipinfo: muestra toda la información de una IP
ipinfo es una versión oficial CLI de la web ipinfo.io que ofrece una base de datos muy grande con una API conectada para consultar todo tipo de información sobre una IP.

Lo primero que haremos será guardar las IPs de proveedores, podemos hacerlo desde el apartado Preferencias - Moderación - Reglas IP seleccionar y copiar las IP en un fichero de texto. Otra opción, es mirar el endpoint de la API de Mastodon de nuestro nodo:

💡
Si accedes a la URL https://[URL_TU_NODO]/api/v1/admin/ip_blocks verás todas las IPs bloqueadas en tu nodo.

Desde la API de Mastodon nos permite descargar las IP bloqueadas en formato JSON por lo que nos puede ser útil para un script en NodeJS o Python por ejemplo.

Otra opción que tenemos para mostrar el listado, es acceder a nuestro nodo de Mastodon a través de SSH y en el directorio donde se encuentra la instalación de Mastodon ejecutar el siguiente comando:

RAILS_ENV=production ./bin/tootctl ip_blocks export

Este comando nos exportará un listado en texto plano para poder utilizarlo en nuestro script que más adelante que haremos en Bash.

Tienes más información en la documentación oficial de Mastodon:

ip_blocks API methods
Disallow certain IP address ranges from signing up.

Ahora ya tenemos un fichero con las IPs que hemos bloqueado en nuestro nodo. Algo parecido a esto:

103.31.179.112
103.55.42.128
103.109.238.0
103.139.9.96
...
💡
Revisa bien el fichero, que no ninguna IP contenga la mascara de red en CIDR.

Ahora con este fichero y usando ipinfo buscaremos la organización a la que pertenece cada IP con el siguiente comando:

cat ficheroIPs | ipinfo -f org

Esto nos mostrará algo similar a esto:

203.190.14.173,AS58768 Daffodil Online Ltd.
203.190.13.173,AS58768 Daffodil Online Ltd.
103.55.42.128,AS133980 BPS COMMUNICATION AND SERVICES PRIVATE LIMITED
103.189.158.59,AS139009 Windstream Communication Limited
...

Podemos hacer el script un poco más profesional, haciendo un count de cuantas veces aparece el mismo ASN y así tener un listado de ASN más completo:

cat ipsblock | ipinfo -f org | tr "," " " |  awk  '{print $2}' | sort -n | uniq -c | sort -n

La salida será algo así:

      2 AS23923
      2 AS55836
      2 AS58689
      2 AS58768
      4 AS7552
      4 AS9829
      6 AS63969

Podemos guardar el listado en un fichero para trabajar luego con él:

cat ipsblock | ipinfo -f org | tr "," " " |  awk  '{print $2}' | sort -n | uniq -c | sort -n > asn

La web ipinfo.io ofrece mucha información interesante y si tenemos acceso a la API de pago que tienen podemos hacerlo todo por consola, pero es un poco cara para tener acceso a los rangos de IP de un ASN.

De todas formas, en la web podemos buscar los ASN de la siguiente forma:

https://ipinfo.io/[ASN]

Y nos mostrará lo siguiente, por ejemplo probando el primero de mi listado AS58768 estos son los datos que podemos ver:

Tendremos que guardar el listado de NETBLOCK que tienen en otro fichero para posteriormente utilizarlo para bloquear todos los rangos en Mastodon.

Bloquear rangos de IP desde CLI en Mastodon

Ahora que ya hemos identificado todos los rango de IP de todas las ASN que hemos obtenido anteriormente es hora de bloquear.

Para bloquear de forma masiva todos los rangos de IP de los diferentes proveedores donde nos han llegado SPAM, lo haremos utilizando este comando:

RAILS_ENV=production ./bin/tootctl ip_blocks add [RANGO_IP] --severity=[REGLA]

Donde:

  • [RANGO_IP] será los rangos de IP que hemos guardado en un fichero y que utilizaremos luego para hacer el bloqueo masivo. Deben de estar línea por línea de la siguiente forma:
103.140.116.0/24
103.140.117.0/24
203.190.10.0/24
203.190.11.0/24
203.190.12.0/23
203.190.12.0/24
203.190.13.0/24
203.190.14.0/24
203.190.15.0/24
203.190.8.0/21
  • [REGLA] en la interfaz web de Mastodon aquí tenemos tres opciones:
    • Limitar el registro, que para el comando utilizaremos el valor sign_up_requires_approval.
    • Bloquear los registros, que para el comando utilizaremos el valor sign_up_block.
    • Bloquear el acceso, que para el comando utilizaremos no_access.
💡
Para este tutorial utilizaremos la opción no_access, que puedes cambiar sin problema en el script de más abajo.

Ahora que ya sabemos que comando ejecutar para bloquear los rangos de IP y como es el funcionamiento, escribiremos el siguiente script en bash para hacer un bucle que lea el fichero de los rangos línea por línea y ejecute el bloqueo:

#!/bin/bash
# by t3rr0rz0n3

while read range
do
        echo "Block range $range"
        RAILS_ENV=production ./bin/tootctl ip_blocks add $range -c "Block SPAM by Script" --severity=no_access

done < ../scripts/asnlist

Deberemos de tener un fichero llamado asnlist con todo el listado de ASN que queremos bloquear en nuestro nodo.

El resultado será algo así:

Block range 103.106.118.0/24
Added 1, skipped 0, failed 0
Block range 103.106.119.0/24
Added 1, skipped 0, failed 0
Block range 103.124.251.0/24
Added 1, skipped 0, failed 0
Block range 103.126.23.0/24
Added 1, skipped 0, failed 0
Block range 103.143.148.0/24
Added 1, skipped 0, failed 0
Block range 103.147.182.0/24
Added 1, skipped 0, failed 0
...

Y luego si vamos al apartado de Preferencias - Moderación - Reglas IP podremos ver que están bloqueadas:


Más sobre ./voidNull

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación