Bonjour, Habr! Je suis Sasha Fedoseev, développeur junior Python chez Selectel. Il y a quelques années, lorsque notre entreprise a commencé à croître particulièrement rapidement, nous avons été confrontés à un problème. Toutes sortes de spammeurs peu scrupuleux
Pourquoi avons-nous décidé de les combattre? Eh bien, le courrier est envoyé à partir de comptes, qu'est-ce qui ne va pas avec ça ... Cependant, du point de vue d'un fournisseur de cloud, il y a des raisons pour lesquelles il vaut toujours la peine d'arrêter la "multiplication" des spammeurs.
Pourquoi lutter contre les spammeurs
Ils gâtent les adresses IP blanches
Pour envoyer une sorte de courrier à l'extérieur, il est nécessaire que la machine virtuelle ait une adresse IP. Les «adresses IP» blanches sont une ressource plutôt limitée, il est donc important pour nous de comprendre qu'elles sont occupées par des utilisateurs décents, pas des spammeurs. Ces derniers provoquent une interdiction IP de la part des grands services de messagerie: «l'adresse IP» est sur liste noire, et on ne peut même pas toujours le comprendre. Seulement lorsque nous transférons une telle adresse IP à un autre client qui a besoin d'envoyer du courrier, et à la fin, il ne peut pas le faire. Supprimer une adresse IP d'une interdiction est un processus assez difficile, il est donc préférable de ne pas y arriver.
Effet voisin bruyant
Il n'est pas rare que les spammeurs déploient de nombreuses machines de spam. Et les utilisateurs qui ont la malchance d'être sur le même hôte de virtualisation peuvent être blessés. C'est désagréable.
Prend l'adresse IP et le temps CPU
Pourquoi Selectel a-t-il besoin de tels clients, si à leur place il peut y avoir de bons utilisateurs qui s'intéressent à la qualité de nos services et consacrent leur pouvoir au développement de leur entreprise?
Problèmes de réputation
Aucun fournisseur ne l'aimera s'il dit à son sujet qu'il a divorcé de spammeurs et qu'il en fait le commerce.
Comme c'était avant
Dès le départ, l'antispam était manuel: le problème était traité par le support technique, qui analysait chaque incident. Le support technique a porté toute cette charge sur lui-même. De plus, les administrateurs revoyaient périodiquement les enregistrements pour s'assurer que 10 comptes n'étaient pas enregistrés par un spammeur et ce n'est qu'une coïncidence: 10 utilisateurs différents enregistrés en même temps.
Il est clair qu'un tel système est plutôt inefficace. Premièrement, il y a un délai inacceptable entre l'identification d'un spammeur et son interdiction. Deuxièmement, les employés du support technique peuvent utiliser leur temps de travail plus efficacement. Nous avons donc commencé à chercher d'autres options.
Solutions possibles au problème
Enregistrement par documents
Cela effraierait les spammeurs, mais rendrait l'intégration beaucoup plus difficile pour des clients respectables. En outre, le personnel de soutien devrait passer par chaque enregistrement. Cela ne semble pas le travail le plus agréable. Et la présence d'un fichier jpg n'est pas une garantie de l'existence d'un vrai document.
Conclusion: nous avons décidé de ne pas organiser «papier, s'il vous plaît» et avons refusé cette option.
Fermer la possibilité d'envoyer des e-mails pour les clients
Il était possible d'avertir tous les clients que nous ne prenons pas du tout en charge l'envoi de courrier à partir du mot. Mais, peut-être, ce serait étrange. Les utilisateurs qui n'envoient pas de spam perdraient leurs fonctionnalités standard et familières. Ils ne seraient même pas en mesure de maintenir une correspondance postale fonctionnelle et seraient certainement tristes à cause de cela.
Conclusion: nous ne voulions pas priver les clients de certaines capacités manifestement nécessaires et les forcer à chercher des solutions «à côté».
Créer une passerelle pour envoyer des e-mails
En général, la passerelle de messagerie est le serveur par lequel tous les messages passent. Il est capable d'analyser le courrier et de décider si telle ou telle lettre est du spam. Dans le cas d'un fournisseur d'infrastructure comme Selectel, il serait correct de le définir comme un service. Mais une telle solution nécessite une équipe de développement séparée, un support et un développement constants.
Conclusion: la création d'un tel service ne figurait pas dans les plans de l'entreprise au moment de la décision.
Utiliser un service tiers
Nous avons également envisagé cette option, mais avons trouvé plus d'un argument contre elle. Premièrement, l'intégration avec un service tiers est une tâche technique non triviale. Deuxièmement, nous nous placerions dans une situation où nous dépendons d'une sorte de service extérieur. Enfin, cela augmenterait le prix de nos services, car il faudrait prendre en compte le coût du service externe. Et je n'aimerais pas faire ça, bien sûr.
Bottom line: l' utilisation d'un service externe pourrait affecter le coût de nos services, mais nous ne pouvions pas y aller.
En général, nous avons rejeté toutes les options ci-dessus, nous avons donc décidé de créer notre propre système antispam.
50 nuances de spammeur
Si nous voulons identifier indépendamment les spammeurs parmi les utilisateurs, nous devons déterminer par quels critères le faire.
Il convient de prêter attention aux caractéristiques comportementales de l'utilisateur et d'analyser le trafic:
→ date d'enregistrement du compte. S'il a été enregistré il y a 5 minutes, et est déjà entré dans le champ de vision de l'antispam, il est fort probable que le compte ait été créé exclusivement à des fins de spam.
→ nom de l'e-mail. Nous appelons tous des adresses postales pour que le nom ait une signification (le nom de l'entreprise ou le nom de l'expéditeur). Si le nom est indistinct et semble suspect, c'est un argument assez fort en faveur de l'interdiction.
→ moyens de paiement.S'il s'agit d'une carte jetable ou PayPal, un tel compte est également suspect.
→ géolocalisation de l'adresse IP lors de l'inscription. L'écrasante majorité des clients de Selectel sont originaires de Russie et des pays de la CEI. Si un autre utilisateur s'est enregistré sous le soleil du Brésil ou du Maroc (ces pays sont traditionnellement les plus spammeurs), cela est préoccupant. Vous pouvez également comparer le code du pays et le numéro de téléphone aux informations obtenues à partir de la géolocalisation de l'adresse IP.
→ nom d'utilisateur. Si le nom d'utilisateur semble avoir passé au hasard ses doigts sur le clavier, c'est suspect, d'accord.
J'ajouterai que nous avons immédiatement écarté l'analyse du trafic au niveau L7. Après tout, cela signifierait que nous devons ouvrir chaque e-mail et «lire» ce qu'il contient. Une telle approche pourrait peut-être être offerte par une grande entreprise influente comme Google, mettant en place une analyse sémantique du contenu du courrier et imposant une NDA et des avocats. Mais cette option ne nous convient pas.
Mais il est déjà possible de travailler avec des informations au niveau L4: elles sont impersonnelles et s'expriment en plusieurs métriques. Ici, nous pouvons regarder le nombre d'adresses auxquelles le courrier est envoyé à partir de nos adresses IP, et la taille des informations transmises . Il est logique que les spammeurs disposent généralement d'une très grande base de données d'adresses à laquelle ils envoient des lettres.
En conséquence, nous avons décidé que la complexité de tous ces critères était suffisante pour prendre une décision suffisamment motivée si le spammeur est devant nous ou non.
Concept de solution
Évaluation du compte
Nous avons décidé d'automatiser le processus d'évaluation des utilisateurs en fonction des critères énumérés - selon le modèle de notation, une sorte d '«indice de confiance». Nous ne lisons pas le courrier, mais nous pesons les enveloppes et analysons les métriques du trafic public qui sort du cloud.
Comment ça fonctionne. Dès le début, lorsqu'un utilisateur s'inscrit, on lui attribue la note la plus élevée possible égale à 100 points. Au départ, nous faisons confiance à tout le monde et pensons que tous nos clients travailleront normalement et n'enverront pas de spam.
Ensuite, l'utilisateur passe par une chaîne de contrôles. Chaque échec de vérification sera reflété dans la note finale de l'utilisateur sous forme de pénalités. Nous avons établi leur taille sur la base de notre expérience avec les spammeurs.
Tout d'abord, nous prêtons généralement attention à la géolocalisation de l'adresse IP: si elle correspond au pays d'origine de la majorité des spammeurs. Nous avons une liste de ces pays, que nous reconstituons périodiquement. Ensuite, nous «exécutons» le nouvel utilisateur à travers le reste des filtres que j'ai mentionnés ci-dessus. En conséquence, nous avons le score final du compte, que nous sauvegardons pour une utilisation ultérieure dans le service antispam.
Pesez les enveloppes et affichez les adresses IP
Notre équipement réseau est capable de fournir des métriques de trafic public en utilisant le protocole Netflow. Il s'agit notamment des paquets SMTP, des octets SMTP, du nombre de flux SMTP et du nombre d'adresses IP pour chaque adresse source. Nous collecterons toutes ces métriques dans Netflow Collector. Ces derniers les formateront un peu pour une utilisation plus pratique, puis, à l'aide de services auxiliaires appelés fetchers NetClick, ils entreront dans le Clickhouse pour une utilisation ultérieure dans l'anti-spam.
Goth
Les développeurs Selectel ont une petite tradition: nous appelons les services auto-écrits par les noms des personnages de l'univers Hunter x Hunter. D'où le nom - en l'honneur du héros du manga Goto.
L'antispam se compose de deux parties et est écrit en Go. La première partie du service s'appelle Gotoh-fetcher. Il est engagé dans la prise des données des métriques de trafic mentionnées qui nous parviennent via Netflow dans plusieurs lecteurs Clickhouse. Ces données sont envoyées au noyau Gotoh-fetcher pour traitement. Là, ils sont formatés dans un format plus pratique et envoyés à l'écrivain Redis pour une écriture ultérieure. Ceci conclut le travail du Gotoh-fetcher.
Ensuite, Gotoh-inspector, qui porte bien son nom, se met au travail. Il joue le rôle d'un décideur, d'un juge. Où va Gotoh-inspector? Il se tourne vers Redis pour les données qu'il a extraites du récupérateur Gotoh.
Après avoir reçu les données, notre «inspecteur» commence à passer les contrôles. Tout d'abord, il verra si la limite pour une métrique a été dépassée. Sinon, une vérification supplémentaire n'a pas de sens - Gotoh-inspector exclut cette partie des données de la considération.
Si les limites sont dépassées pour au moins une métrique, nous voyons d'abord si le client a une balise de confiance. Il a été spécialement introduit pour séparer les spammeurs et les utilisateurs qui envoient du courrier normal, simplement en grande quantité. La balise de confiance d'un utilisateur ne peut apparaître qu'après avoir discuté avec les spécialistes Selectel.
Nous devons nous assurer que nous avons affaire à une personne d'une vraie entreprise qui envoie simplement du courrier professionnel normal, il y en a beaucoup. S'il existe une balise de confiance, nous générons un incident dans Clickhouse et ne considérons plus cette donnée. Mais, si le client n'a pas de tag, nous continuons "l'enquête".
Nous regardons la note, et ici le plaisir commence. La notation a deux limites. Le premier est la limite de confiance. Si, selon les résultats de la vérification, le compte a reçu une bonne note, nous enverrons simplement l'incident à Clickhouse et l'oublierons. En général, il n'y a rien d'autre à voir avec un utilisateur avec un bon score.
Si le score est inférieur à la limite de confiance, alors nous regardons s'il est loin de la limite d'interdiction. Deux limites sont nécessaires pour une évaluation plus juste. Si le score est bon, nous n'interdirons pas l'utilisateur, mais si la note soulève des questions, nous examinerons le nombre d'incidents associés à ce compte.
Si un compte tombe dans la zone intermédiaire, lorsque sa note est inférieure à la limite de confiance, mais supérieure à la limite d'interdiction, le système enverra une alerte au chat à l'officier de service. À leur tour, ils vérifieront manuellement si le spam est envoyé depuis le compte ou la machine virtuelle.
Si la note n'atteint même pas les limites de l'interdiction, alors tout est assez simple: le compte est banni, car nous avons suffisamment de raisons de croire que nous sommes confrontés à un contrevenant.
Résultat
C'est ainsi que nous avons créé notre système antispam simple. La question se pose: est-ce que ça s'est amélioré?
L'image ci-dessus montre le nombre d'alertes depuis le lancement de ce service début 2020. Le nombre d'alertes au sommet était de plus de 60 000.
Avec l'anti-spam manuel, nous ne pouvions tout simplement pas traiter une telle quantité d'informations - une grande quantité de données nous a échappé. Et maintenant, nous pouvons en quelque sorte travailler avec ces données, les analyser.
Nous avons examiné le nombre total d'alertes arrivant pour les quatre mesures de trafic que nous avons analysées. Jetons un coup d'œil au graphique de chaque métrique.
Nombre d'octets envoyés
Il s'agit de la métrique la plus nombreuse en termes de nombre d'alertes. En général, ce graphique est assez similaire au précédent, car ces alertes forment presque entièrement l'image des alertes spam. Ici, la logique est simple: plus il y a de mail envoyé depuis un compte, plus vite il entre dans le champ de vision de l'antispam et plus les alertes seront générées pour lui.
Nombre de paquets SMTP
Il existe un lien entre cette métrique et la précédente. Mais pourquoi analysons-nous le nombre d'octets et de paquets séparément? Parce qu'il y avait des cas où une alerte était générée pour le compte par le nombre de paquets, mais pas par le nombre d'octets. Par exemple, un compte de spam envoie de nombreuses petites lettres, dont chacune est envoyée dans un paquet séparé - dans ce cas, une alerte est générée en fonction du nombre de paquets.
Nombre d'adresses IP de destination
Ce graphique n'est pas facile à analyser, mais il peut être une source d'information supplémentaire. Sur chaque compte, le spam est organisé différemment: quelqu'un envoie des IP à 10 ou 100 adresses différentes, et quelqu'un envoie à 10 fixes et ne rentre pas dans le champ de vision de l'antispam selon cette métrique.
Nombre de flux SMTP ouverts simultanément
La métrique la plus «impopulaire» - les alertes pour elle arrivent rarement. Si dans les illustrations précédentes il y en avait des milliers sur l'échelle Y, ici il y en a des centaines. Ici, apparemment, les spammeurs sont toujours réassurés et n'envoient pas de courrier à partir d'un grand nombre de connexions ouvertes. Bien que le graphique ne soit pas représentatif à première vue, il permet en fait de mieux comprendre comment le spam peut être envoyé.
Conclusion
Bien entendu, ce système peut être amélioré et nous prévoyons de l’améliorer à l’avenir. Mais maintenant, il se montre assez efficacement au travail.
Par exemple, nous n'avons jamais banni un utilisateur respectable. Et si cela se produit (enfin, que se passe-t-il si quelqu'un a un projet universitaire lié aux listes de diffusion), alors tout est réversible. Si vous constatez que votre compte Selectel a été banni (la raison du blocage sera indiquée dans votre compte), il vous suffit d'écrire au support technique. Nous verrons ce qui a influencé la dégradation de la note et comment vous pouvez l'éviter à l'avenir. Ce n'est pas une interdiction à vie.
J'ai également parlé de notre système antispam chez Selectel DevTalks. Si vous souhaitez regarder la conférence, voici le lien .