Utilizamos SSO y, desde hace unos días, algunos de nuestros miembros han reportado no poder acceder a su cuenta con el siguiente error:
Hay un problema con su cuenta. Póngase en contacto con el administrador del sitio.
Pensé que esto podría deberse a un problema que reporté anteriormente, así que verifiqué si su dirección IP estaba en las Direcciones IP Filtradas: una de ellas sí lo estaba… pero no las de los demás.
Después de activar verbose sso logging, pedí a otros usuarios que intentaran de nuevo y los registros (/logs) indican que su dirección IP está bloqueada:
Registro detallado de SSO: La dirección IP está bloqueada xxx.xxx.xxx.xxx
Sin embargo, he verificado dos veces y la dirección IP no aparece bajo Direcciones IP Filtradas. También verifiqué directamente en la tabla screened_ip_addresses de PostgreSQL y no hay ninguna entrada para esa dirección IP.
Se me están acabando las ideas… ¿Hay otra sección para bloquear direcciones IP en la que deberíamos investigar? ¿O las direcciones IP se agregan a las Direcciones IP Filtradas por un tiempo muy breve y nunca logro atraparlas después del informe (cuestión de unas pocas horas)?
Para aclarar, nunca agregamos direcciones IP manualmente a las Direcciones IP Filtradas; parecen agregarse automáticamente cuando cerramos la cuenta de alguien a través de la API (ver enlace anterior) y no hemos podido evitar que esto ocurra utilizando el parámetro documentado block_ip: false.
El problema de que las IPs se añadan a las IPs filtradas es uno separado de lo que intento reportar aquí. Estamos viendo que miembros no bloqueados por las IPs filtradas no pueden iniciar sesión en su cuenta mediante SSO, supuestamente porque “la dirección IP está bloqueada”.
¿Hay otros lugares además de las IPs filtradas que puedan bloquear direcciones IP en los que debería investigar?
Parece que estás llamando a la función «eliminar como spammer», lo que bloqueará automáticamente la dirección IP y la dirección de correo electrónico. Creo que deberías revisar ese código. Quieres una «eliminación normal» según la interfaz de usuario, no «eliminar como spammer».
Eso puede ser cierto, pero la forma en que estamos eliminando usuarios se está discutiendo aquí.
No estoy seguro de si esto es un problema separado, pero noté que la columna “Coincidencias” en la sección de Direcciones IP filtradas muestra 0 coincidencias en todas las entradas. Revisé la exportación de esa tabla y confirma que todas las direcciones IP tienen 0 coincidencias. Sin embargo, cada día vemos que usuarios son bloqueados por dirección IP al intentar iniciar sesión (mediante SSO).
No obstante, al revisar los Correos electrónicos filtrados, ¡la mayoría tienen una coincidencia! Y también hay una columna de dirección IP allí… así que pensé que había encontrado al culpable, pero ninguna de las direcciones IP que están siendo bloqueadas aparece allí tampoco.
Esto es de hace unos minutos de nuestros /logs:
Aquí está la búsqueda de Direcciones IP filtradas:
También revisé los Correos electrónicos filtrados y ni la dirección IP ni la dirección de correo electrónico de la cuenta que acaba de ser bloqueada al intentar iniciar sesión aparecen allí.
Creo que he encontrado el problema aquí (al final, el problema estaba de nuestro lado), pero hay algunos errores que reportar. Aunque no es una pila tecnológica con la que me sienta cómodo, espero que alguien pueda echar un vistazo más detallado.
En primer lugar, la causa. Al examinar directamente la tabla de base de datos screened_ip_addresses, descubrí que estaba bloqueando dos bloques completos que no debería (176.59.0.0/16 y 109.252.0.0/16). Honestamente, no sé cómo se añadieron y esas dos entradas estaban allí desde febrero. ¿Hay algún botón en el administrador de Discourse para bloquear un bloque completo /16 de una sola vez!?
De todos modos, eso probablemente sea el culpable de mi problema inicial. Aún quedan algunos problemas que el equipo de Discourse podría querer investigar, ya que eso es lo que hizo que esto fuera especialmente difícil de resolver:
Esas rangos bloqueados no aparecen listados en las IPs filtradas por alguna razón. Tuve que buscar directamente en la base de datos para encontrarlos. Sin embargo, usar la búsqueda con “176.59” o “109.252” sí los muestra. ¿Existe algún límite de resultados aplicado en /admin/logs/screened_ip_addresses?
En la exportación, aparecen como 176.59.0.0 y 109.252.0.0, es decir, no muestran información de bloque. Esto es cierto incluso para los rangos predeterminados (127.0.0.0/8, 10.0.0.0/8, etc.); no se muestra ninguna máscara en el archivo de exportación.
Aunque estas entradas han estado bloqueando usuarios, tienen un valor de match_count de 0 y last_match_at está vacío (para toda la tabla). ¿Es esto intencional? Probablemente no se quiera contar todas las coincidencias de allow, pero si los bloqueos no se cuentan, estas columnas no parecen ser utilizadas ni necesarias. O quizás el inicio de sesión a través de SSO no está activando esas coincidencias?
Una vez más, debo decirte que estoy bastante seguro de que estás llamando a “eliminar como spammer” desde la API. Si hay suficientes eliminaciones de spammers provenientes de direcciones IP relacionadas, la prohibición de la dirección IP comienza a ampliarse automáticamente. Estoy bastante convencido de que eso es lo que estás viendo aquí.
Y esto, sí. Quizás la razón por la que tu lista de IPs filtradas es tan grande es porque has estado “eliminando como spammer” durante mucho tiempo. No quieres eso.
Quieres “Eliminar solo”, no “Eliminar y bloquear”, pero casi todo lo que has publicado indica que estás llamando a “Eliminar y bloquear” a través de la API.
El problema no fue el punto final utilizado, sino los parámetros, ya que la API espera que los booleanos sean las cadenas ‘true’ o ‘false’, y no lo sabía.
Aún hay otros errores que encontré mencionados anteriormente, y no sé si deben ser abordados. De lo contrario, esto puede cerrarse. Gracias.