El servicio antispam escrito por nosotros mismos Gotoh, o cómo luchamos por la blancura de las direcciones IP

Sistema antispam en Selectel antes de la solución



autoescrita ¡Hola, Habr! Soy Sasha Fedoseev, desarrollador junior de Python en Selectel. Hace unos años, cuando nuestra empresa comenzó a crecer con especial rapidez, nos enfrentamos a un problema. Todo tipo de spammers sin escrúpulos de países calientes comenzaron a interesarse por nuestros recursos . Tenemos configuraciones de máquinas virtuales bastante económicas y qué más necesitan para ser felices.



¿Por qué decidimos luchar contra ellos? Bueno, el correo se envía desde cuentas, qué hay de malo en eso ... Sin embargo, desde el punto de vista de un proveedor en la nube, hay razones por las que todavía vale la pena detener la "multiplicación" de los spammers.



Por qué luchar contra los spammers



Echan a perder las IP blancas



Para enviar algún tipo de correo al exterior, es necesario que la máquina virtual tenga una dirección IP. Las "IP" blancas son un recurso bastante limitado, por lo que es importante que entendamos que están ocupadas por usuarios decentes, no por spammers. Esto último provoca una prohibición de IP por parte de los grandes servicios de correo electrónico: la "dirección IP" está en la lista negra, y ni siquiera siempre podemos entender esto. Solo cuando transferimos dicha IP a otro cliente que necesita enviar correo, y al final no puede hacerlo. Eliminar una IP de una prohibición es un proceso bastante difícil, por lo que es mejor no llegar allí.



Efecto vecino ruidoso



No es raro que los spammers desplieguen muchas máquinas de spam. Y los usuarios que tienen la mala suerte de estar en el mismo host de virtualización pueden resultar perjudicados. Es desagradable.



Ocupa la dirección IP y el tiempo de la CPU



¿Por qué Selectel necesita tales clientes, si en su lugar puede haber buenos usuarios que estén interesados ​​en la calidad de nuestros servicios y gasten su poder en desarrollar su negocio?



Problemas de reputación



A ningún proveedor le gustará que digan de él que se ha divorciado de los spammers y comercia con esto.



Como era antes



Desde el principio, el antispam fue manual: el problema lo solucionó el personal de soporte técnico, que analizó cada incidencia. El soporte técnico cargó con toda esta carga sobre sí mismo. Además, los administradores revisaron periódicamente los registros para asegurarse de que 10 cuentas no fueron registradas por un spammer y esto es solo una coincidencia: 10 usuarios diferentes registrados al mismo tiempo.



Está claro que dicho sistema es bastante ineficaz. En primer lugar, existe un retraso inaceptablemente largo entre la identificación de un spammer y su prohibición. En segundo lugar, los empleados de soporte técnico pueden dedicar su tiempo de trabajo de manera más eficiente. Entonces comenzamos a buscar otras opciones.



Posibles soluciones al problema



Registro por documentos



Esto asustaría a los spammers, pero dificultaría mucho la incorporación de clientes respetables. Además, el personal de apoyo tendría que pasar por todos los registros. No parece el trabajo más agradable. Y la presencia de un archivo jpg no es garantía de la existencia de un documento real.



En pocas palabras: decidimos no organizar "papel, por favor" y rechazamos esta opción.



Cerrar la capacidad de enviar correo a los clientes.



Fue posible advertir a todos los clientes que no admitimos el envío de correo de Word en absoluto. Pero, quizás, resultaría extraño. Los usuarios que no envíen spam perderían sus funciones estándar y familiares. Ni siquiera podrían mantener una correspondencia postal en funcionamiento y definitivamente estarían tristes por esto.



En pocas palabras: no queríamos privar a los clientes de algunas capacidades obviamente necesarias y obligarlos a buscar soluciones "al margen".



Crear una puerta de enlace para enviar correo



En general, Mail Gateway es el servidor a través del cual pasa todo el correo. Es capaz de analizar el correo y decidir si esta o aquella carta es spam. En el caso de un proveedor de infraestructura como Selectel, sería correcto enmarcarlo como un servicio. Pero tal solución requiere un equipo de desarrollo independiente, soporte y desarrollo constantes.



En pocas palabras: la creación de dicho servicio no estaba en los planes de la empresa en el momento de la decisión.



Utilice un servicio de terceros



También consideramos esta opción, pero encontramos más de un argumento en contra. Primero, la integración con un servicio de terceros es una tarea técnica no trivial. En segundo lugar, nos pondríamos en una situación en la que dependemos de algún tipo de servicio externo. Finalmente, aumentaría el precio de nuestros servicios, porque tendríamos que tener en cuenta el costo del servicio externo. Y no me gustaría hacer esto, por supuesto.



En pocas palabras: el uso de un servicio externo podría afectar el costo de nuestros servicios, pero no pudimos hacerlo.



En general, descartamos todas las opciones anteriores, por lo que decidimos crear nuestro propio sistema antispam.



50 sombras de un spammer



Si queremos identificar a los spammers de forma independiente entre los usuarios, debemos determinar con qué criterios hacerlo.



Vale la pena prestar atención a las características de comportamiento del usuario y analizar el tráfico:



fecha de registro de la cuenta. Si se registró hace 5 minutos y ya ha entrado en el campo de visión del antispam, es muy probable que la cuenta se haya creado exclusivamente con fines de spam.



nombre de correo. Todos llamamos direcciones postales para que el nombre tenga algún significado (el nombre de la empresa o el apellido del remitente). Si el nombre es indistinto y parece sospechoso, este es un argumento bastante fuerte a favor de la prohibición.



medio de pago.Si se trata de una tarjeta desechable o de PayPal, dicha cuenta también es sospechosa.



geolocalización de la dirección IP durante el registro. La inmensa mayoría de los clientes de Selectel son de Rusia y los países de la CEI. Si otro usuario se ha registrado en el soleado Brasil o Marruecos (estos países son tradicionalmente los más spammers), esto es motivo de preocupación. También puede verificar el código de país y el número de teléfono con la información obtenida de la geolocalización de la dirección IP.



nombre de usuario. Si el nombre de usuario parece que pasó los dedos al azar sobre el teclado, es sospechoso, de acuerdo.



Agregaré que inmediatamente descartamos el análisis del tráfico en el nivel L7. Después de todo, esto significaría que tenemos que abrir cada correo electrónico y "leer" su contenido. Tal enfoque, tal vez, podría ser ofrecido por una empresa grande e influyente como Google, estableciendo un análisis semántico del contenido del correo e imponiendo una NDA y abogados. Pero esta opción no nos conviene.



Pero ya es posible trabajar con información a nivel L4: es impersonal y se expresa en varias métricas. Aquí podemos ver la cantidad de direcciones a las que se envía el correo desde nuestras direcciones IP y el tamaño de la información transmitida . Es lógico que los spammers suelen tener una base de datos muy grande de direcciones a las que envían cartas.



Como resultado, decidimos que el complejo de todos estos criterios es suficiente para tomar una decisión suficientemente razonada si el spammer está frente a nosotros o no.



Concepto de solución



Calificación de la cuenta



Decidimos automatizar el proceso de evaluación de usuarios según los criterios enumerados, de acuerdo con el modelo de calificación, una especie de "índice de confianza". No leemos el correo, pero pesamos sobres y analizamos métricas del tráfico público que sale de la nube.



Cómo funciona. Desde el principio, cuando un usuario se registra, se le asigna la calificación más alta posible igual a 100 puntos. Inicialmente, confiamos en todos y creemos que todos nuestros clientes trabajarán con normalidad y no enviarán spam.





Luego, el usuario pasa por una cadena de controles. Cada verificación fallida se reflejará en la calificación final del usuario en forma de penalizaciones. Establecimos su tamaño en función de nuestra experiencia con los spammers.



En primer lugar, solemos prestar atención a la geolocalización de la dirección IP: si corresponde al país de donde provienen la mayoría de los spammers. Tenemos una lista de dichos países, que reponemos periódicamente. Luego, "ejecutamos" al nuevo usuario a través del resto de los filtros que mencioné anteriormente. Como resultado, tenemos el puntaje final de la cuenta, que guardamos para su uso posterior en el servicio antispam.



Pesar sobres y ver direcciones IP



Nuestro equipo de red puede proporcionar métricas de tráfico público utilizando el protocolo Netflow. Estos incluyen paquetes SMTP, bytes SMTP, el número de flujos SMTP y el número de direcciones IP para cada dirección de origen. Recopilaremos todas estas métricas en Netflow Collector. Este último los formateará un poco para un uso más conveniente y luego, con la ayuda de servicios auxiliares llamados NetClick fetchers, ingresarán a Clickhouse para su uso posterior en anti-spam.





godo



Los desarrolladores de Selectel tienen una pequeña tradición: llamamos a los servicios autoescritos por los nombres de los personajes del universo Hunter x Hunter. De ahí el nombre, en honor al héroe del manga Goto.



Antispam consta de dos partes y está escrito en Go. La primera parte del servicio se llama Gotoh-fetcher. Se dedica a tomar los datos de las métricas de tráfico mencionadas que nos llegan a través de Netflow en varios lectores de Clickhouse. Estos datos van al núcleo de Gotoh-fetcher para su procesamiento. Allí se formatean en un formato más conveniente y se envían al escritor de Redis para su posterior escritura. Con esto concluye el trabajo del buscador de Gotoh.



Pesar sobres y ver direcciones



A continuación, Gotoh-inspector, que hace honor a su nombre, se pone manos a la obra. Desempeña el papel de un tomador de decisiones, un juez. ¿A dónde va Gotoh-inspector? Busca en Redis los datos que obtuvo del Gotoh-fetcher.



Después de recibir los datos, nuestro "inspector" comienza a realizar las comprobaciones. Primero, verá si se ha excedido el límite de alguna métrica. De lo contrario, la verificación adicional no tiene sentido: Gotoh-inspector excluye esta parte de los datos de la consideración.



Cómo funciona Gotoh-inspector



Si se superan los límites para al menos una métrica, primero vemos si el cliente tiene una etiqueta de confianza. Se introdujo especialmente para separar a los spammers de los usuarios que envían correo normal, simplemente en grandes cantidades. La etiqueta de confianza de un usuario solo puede aparecer después de hablar con los especialistas de Selectel.



Tenemos que asegurarnos de que estamos tratando con una persona de una empresa real que solo envía correo comercial normal, hay mucho. Si hay una etiqueta de confianza, generamos un incidente en Clickhouse y ya no consideramos este dato. Pero, si el cliente no tiene una etiqueta, continuamos con la "investigación".



Miramos la calificación y aquí comienza la diversión. La puntuación tiene dos límites. El primero es el límite de confianza. Si, de acuerdo con los resultados de la verificación, a la cuenta se le asignó una buena calificación, simplemente enviaremos el incidente a Clickhouse y nos olvidaremos de él. En general, no hay nada más que ver con un usuario con buena puntuación.



Si la puntuación es menor que el límite de confianza, entonces miramos si está lejos del límite de prohibición. Se necesitan dos límites para una evaluación más justa. Si la puntuación es buena, no banearemos al usuario, pero si la puntuación genera dudas, analizaremos la cantidad de incidentes asociados con esta cuenta.



Si una cuenta cae en la zona intermedia, cuando su calificación es menor que el límite de confianza, pero mayor que el límite de prohibición, el sistema enviará una alerta al chat al oficial de servicio. Ellos, a su vez, verificarán manualmente si se está enviando spam desde la cuenta o la máquina virtual.



Si la calificación ni siquiera alcanza los límites de la prohibición, entonces todo es bastante simple: la cuenta es prohibida, porque tenemos suficientes razones para creer que nos enfrentamos a un infractor.



Resultado



Así es como creamos nuestro sencillo sistema antispam. Surge la pregunta: ¿ha mejorado?



La imagen de arriba muestra la cantidad de alertas desde el lanzamiento de este servicio a principios de 2020. La cantidad de alertas en el pico fue de más de 60 000.



Con el antispam manual, simplemente no podíamos procesar tal cantidad de información, una gran cantidad de datos nos pasaban. Y ahora podemos trabajar de alguna manera con estos datos, analizarlos.



Observamos el número total de alertas que llegan para las cuatro métricas de tráfico que analizamos. Echemos un vistazo al gráfico de cada métrica.



Número de bytes enviados





Esta es la métrica más numerosa en términos de número de alertas. En general, este gráfico es bastante similar al anterior, porque estas alertas forman casi por completo la imagen de las alertas de spam. Aquí la lógica es simple: cuanto más correo se envíe desde una cuenta, más rápido ingresará al campo de visión del antispam y se generarán más alertas para él.



Cantidad de paquetes SMTP





Existe una conexión entre esta métrica y la anterior. Pero, ¿por qué analizamos la cantidad de bytes y paquetes por separado? Porque hubo casos en los que se generó una alerta para la cuenta por el número de paquetes, pero no por el número de bytes. Por ejemplo, una cuenta de spam envía muchas letras pequeñas, cada una de las cuales se envía en un paquete separado; en este caso, se genera una alerta en función del número de paquetes.



Número de direcciones IP de destino





Este gráfico no es fácil de analizar, pero puede ser una fuente adicional de información. En cada cuenta, el spam se organiza de manera diferente: alguien envía IP a 10 o 100 direcciones diferentes, y alguien envía a 10 fijas y no entra en el campo de visión del antispam según esta métrica.



Número de transmisiones SMTP abiertas simultáneamente





La métrica más "impopular": las alertas llegan con poca frecuencia. Si en las ilustraciones anteriores había miles en la escala Y, aquí son cientos. Aquí, aparentemente, los spammers todavía están reasegurados y no envían correo desde un gran número de conexiones abiertas. Aunque el gráfico no es representativo a primera vista, en realidad ayuda a comprender mejor cómo se puede enviar el spam.



Conclusión



Por supuesto, este sistema se puede mejorar y planeamos mejorarlo en el futuro. Pero ahora se muestra con bastante eficacia en el trabajo.



Por ejemplo, nunca hemos baneado a un usuario respetable. Y si esto sucede (bueno, qué pasa si alguien tiene un proyecto universitario relacionado con listas de correo), entonces todo es reversible. Si ve que su cuenta de Selectel ha sido prohibida (el motivo del bloqueo se indicará en su cuenta), simplemente escriba al soporte técnico. Veremos qué influyó en la rebaja de calificación y cómo puede evitarlo en el futuro. Esta no es una prohibición de por vida.



También hablé sobre nuestro sistema antispam en Selectel DevTalks. Si quieres ver la charla, aquí tienes el enlace .






All Articles