autoescrita Olá, Habr! Sou Sasha Fedoseev, desenvolvedor júnior de Python na Selectel. Há alguns anos, quando nossa empresa começou a crescer de maneira especialmente rápida, enfrentamos um problema. Todos os tipos de spammers inescrupulosos
Por que decidimos lutar contra eles? Pois bem, o mail é enviado de contas, o que há de errado nisso ... Porém, do ponto de vista de um provedor de nuvem, existem razões pelas quais ainda vale a pena parar a “multiplicação” de spammers.
Por que lutar contra spammers?
Eles estragam IPs brancos
Para enviar algum tipo de e-mail para fora, é necessário que a máquina virtual possua um endereço IP. Os "IPs" brancos são um recurso bastante limitado, por isso é importante para nós entendermos que eles são ocupados por usuários decentes, não por spammers. Este último provoca uma proibição de IP por parte de grandes serviços de e-mail: o "endereço IP" está na lista negra e nem sempre podemos entender isso. Só quando transferimos esse IP para outro cliente que precisa enviar e-mail, e no final ele não pode fazer isso. Remover um IP de um ban é um processo bastante difícil, então é melhor simplesmente não chegar lá.
Efeito Vizinho Barulhento
Não é incomum que os spammers implantem muitas máquinas de spam. E os usuários que têm o azar de estar no mesmo host de virtualização podem se machucar. É desagradável.
Ocupa endereço IP e tempo de CPU
Por que a Selectel precisa de tais clientes, se em seu lugar podem haver bons usuários interessados na qualidade de nossos serviços e que gastam seu poder no desenvolvimento de seus negócios?
Problemas de reputação
Nenhum provedor vai gostar se disserem sobre ele que ele se divorciou de spammers e ele negocia com isso.
Como era antes
Desde o início, o antispam era manual: o problema era tratado pela equipe de suporte técnico, que analisava cada incidente. O suporte técnico carregava todo esse fardo para si. Além disso, os administradores revisaram periodicamente os registros para se certificar de que 10 contas não foram registradas por um spammer e isso é apenas uma coincidência: 10 usuários diferentes registrados ao mesmo tempo.
É claro que tal sistema é bastante ineficaz. Primeiro, há um atraso inaceitavelmente longo entre identificar um spammer e bani-lo. Em segundo lugar, os funcionários de suporte técnico podem gastar seu tempo de trabalho com mais eficiência. Então começamos a procurar outras opções.
Possíveis soluções para o problema
Registro por documentos
Isso assustaria os spammers, mas tornaria a integração muito mais difícil para clientes respeitáveis. Além disso, a equipe de suporte teria que passar por todos os registros. Não parece o trabalho mais agradável. E a presença de um arquivo jpg não é uma garantia da existência de um documento real.
Resumindo: decidimos não arranjar "papel, por favor" e recusamos essa opção.
Encerrar a capacidade de enviar e-mail para clientes
Foi possível avisar a todos os clientes que não oferecemos suporte para envio de e-mail do Word. Mas, talvez, seja estranho. Os usuários que não enviam spam perderiam seus recursos padrão e familiares. Eles nem mesmo seriam capazes de manter uma correspondência postal válida e com certeza ficariam tristes por causa disso.
Conclusão: não queríamos privar os clientes de alguns recursos obviamente necessários e forçá-los a procurar soluções "paralelamente".
Crie um portal para enviar e-mails
Em geral, o Mail Gateway é o servidor pelo qual passam todas as mensagens. Ele é capaz de analisar e-mails e decidir se esta ou aquela carta é spam. No caso de um provedor de infraestrutura como a Selectel, seria correto enquadrar isso como um serviço. Mas tal solução requer uma equipe de desenvolvimento separada, suporte e desenvolvimento constantes.
Resumindo: a criação de tal serviço não estava nos planos da empresa no momento da decisão.
Use um serviço de terceiros
Também consideramos essa opção, mas encontramos mais de um argumento contra ela. Primeiro, a integração com um serviço de terceiros é uma tarefa técnica não trivial. Em segundo lugar, nos colocaríamos em uma situação em que dependemos de algum tipo de serviço externo. Enfim, aumentaria o preço dos nossos serviços, porque teríamos que levar em conta o custo do serviço externo. E eu não gostaria de fazer isso, é claro.
Resumindo: o uso de um serviço externo poderia afetar o custo de nossos serviços, mas não poderíamos ir nessa.
Em geral, descartamos todas as opções acima, então decidimos fazer nosso próprio sistema antispam.
50 tons de um spammer
Se quisermos identificar spammers de forma independente entre os usuários, precisamos determinar por quais critérios fazer isso.
Vale a pena atentar para as características comportamentais do usuário e analisar o tráfego:
→ data de registro da conta. Se ela foi registrada há 5 minutos e já entrou no campo de visão do antispam, é altamente provável que a conta tenha sido criada exclusivamente para fins de spam.
→ nome do e-mail. Todos chamamos endereços postais para que o nome tenha algum significado (o nome da empresa ou o sobrenome do remetente). Se o nome for indistinto e parecer suspeito, este é um argumento bastante forte a favor da proibição.
→ meios de pagamento.Se for um cartão descartável ou PayPal, essa conta também é suspeita.
→ geolocalização do endereço IP durante o registro. A esmagadora maioria dos clientes da Selectel são da Rússia e dos países da CEI. Se outro usuário se registrou no ensolarado Brasil ou Marrocos (esses países são tradicionalmente os mais spammers), isso é motivo de preocupação. Você também pode verificar o código do país e o número do telefone com as informações obtidas na geolocalização do endereço IP.
→ nome de usuário. Se o nome de usuário parece que ele passou os dedos aleatoriamente pelo teclado, isso é suspeito, concordo.
Acrescentarei que descartamos imediatamente a análise de tráfego no nível L7. Afinal, isso significaria que precisamos abrir cada e-mail e "ler" o que está nele. Tal abordagem, talvez, pudesse ser oferecida por uma empresa grande e influente como o Google, estabelecendo uma análise semântica do conteúdo da correspondência e impondo um NDA e advogados. Mas essa opção não nos convém.
Mas já é possível trabalhar com informações no nível L4: é impessoal e se expressa em várias métricas. Aqui podemos ver o número de endereços para os quais a correspondência é enviada de nossos endereços IP e o tamanho das informações transmitidas . É lógico que os spammers geralmente têm um banco de dados muito grande de endereços para os quais enviam cartas.
Como resultado, decidimos que a complexidade de todos esses critérios é suficiente para tomar uma decisão suficientemente fundamentada se o spammer está na nossa frente ou não.
Conceito de solução
Avaliação da conta
Decidimos automatizar o processo de avaliação dos usuários com base nos critérios listados - de acordo com o modelo de rating, uma espécie de “índice de confiança”. Não lemos correspondência, mas pesamos envelopes e analisamos as métricas do tráfego público que sai da nuvem.
Como funciona. Desde o início, quando um usuário se inscreve, ele recebe a classificação mais alta possível igual a 100 pontos. Inicialmente, confiamos em todos e acreditamos que todos os nossos clientes funcionarão normalmente e não enviarão spam.
Em seguida, o usuário passa por uma cadeia de verificações. Cada verificação reprovada será refletida na avaliação final do usuário na forma de penalidades. Estabelecemos seu tamanho com base em nossa experiência com spammers.
Em primeiro lugar, normalmente prestamos atenção à geolocalização do endereço IP: se corresponde ao país de onde vem a maioria dos spammers. Temos uma lista desses países, que reabastecemos periodicamente. Em seguida, "executamos" o novo usuário no restante dos filtros que mencionei acima. Como resultado, temos a pontuação final da conta, que guardamos para uso posterior no serviço antispam.
Pesar os envelopes e ver os endereços IP
Nosso equipamento de rede é capaz de fornecer métricas de tráfego público usando o protocolo Netflow. Isso inclui pacotes SMTP, bytes SMTP, o número de fluxos SMTP e o número de endereços IP para cada endereço de origem. Coletaremos todas essas métricas no Netflow Collector. Este último irá formatá-los um pouco para um uso mais conveniente, e então, com a ajuda de serviços auxiliares chamados buscadores NetClick, eles entrarão no Clickhouse para uso posterior em anti-spam.
Gótico
Os desenvolvedores do Selectel têm uma pequena tradição: chamamos os serviços de autoria própria pelos nomes de personagens do universo Hunter x Hunter. Daí o nome - em homenagem ao herói do mangá Goto.
O Antispam consiste em duas partes e está escrito em Go. A primeira parte do serviço é chamada Gotoh-fetcher. Ele está empenhado em obter os dados das métricas de tráfego mencionadas que chegam até nós via Netflow em vários leitores Clickhouse. Esses dados vão para o núcleo do Gotoh-fetcher para processamento. Lá, eles são formatados em um formato mais conveniente e enviados ao redator do Redis para redação posterior. Isso conclui o trabalho do Gotoh-fetcher.
Em seguida, o Gotoh-inspector, que faz jus ao seu nome, começa a trabalhar. Ele desempenha o papel de um tomador de decisões, um juiz. Para onde vai o inspetor Gotoh? Ele procura no Redis os dados que buscou no Gotoh-fetcher.
Depois de receber os dados, nosso "inspetor" começa a fazer as verificações. Primeiro, ele verá se o limite de qualquer métrica foi excedido. Se não, então uma verificação adicional não faz sentido - o Gotoh-inspector exclui esta parte dos dados da consideração.
Se os limites forem excedidos para pelo menos uma métrica, primeiro veremos se o cliente tem uma tag confiável. Foi introduzido especialmente para separar spammers e usuários que enviam correio normal, simplesmente em grandes quantidades. A tag de confiança de um usuário pode aparecer somente depois de falar com especialistas da Selectel.
Temos que ter certeza de que estamos lidando com uma pessoa de uma empresa real, que está apenas enviando correspondência comercial normal, é uma grande quantidade. Se houver uma tag confiável, geramos um incidente no Clickhouse e não consideramos mais esse dado. Porém, caso o cliente não possua tag, continuamos a “investigação”.
Olhamos para a classificação e aqui começa a diversão. A pontuação tem dois limites. O primeiro é o limite de confiança. Se, de acordo com os resultados da verificação, a conta recebeu uma boa classificação, então simplesmente enviaremos o incidente para Clickhouse e esqueceremos dele. Em geral, não há mais nada a ver com um usuário com boa pontuação.
Se a pontuação for inferior ao limite de confiança, verificamos se está longe do limite de proibição. Dois limites são necessários para uma avaliação mais justa. Se a pontuação for boa, não baniremos o usuário, mas se a avaliação suscitar dúvidas, examinaremos o número de incidentes associados a esta conta.
Se uma conta cair na zona intermediária, quando sua classificação for menor que o limite de confiança, mas maior que o limite de proibição, o sistema enviará um alerta para o chat para o oficial de serviço. Eles, por sua vez, verificarão manualmente se o spam está sendo enviado da conta ou da máquina virtual.
Se a classificação nem chega aos limites do banimento, então tudo é muito simples: a conta é banida, porque temos motivos suficientes para acreditar que estamos diante de um violador.
Resultado
É assim que criamos nosso sistema antispam simples. Surge a pergunta: ficou melhor?
A imagem acima mostra a quantidade de alertas desde o lançamento deste serviço no início de 2020. O número de alertas no pico foi de mais de 60.000.
Com o anti-spam manual, simplesmente não podíamos processar tamanha quantidade de informações - uma grande quantidade de dados passou por nós. E agora podemos trabalhar de alguma forma com esses dados, analisá-los.
Observamos o número total de alertas recebidos para todas as quatro métricas de tráfego que analisamos. Vamos dar uma olhada no gráfico de cada métrica.
Número de bytes enviados
Esta é a métrica mais numerosa em termos de número de alertas. Em geral, este gráfico é bastante semelhante ao anterior, pois esses alertas formam quase que completamente a imagem de alertas de spam. Aqui a lógica é simples: quanto mais e-mail é enviado de uma conta, mais rápido ele entra no campo de visão do antispam e mais alertas serão gerados para ele.
Número de pacotes SMTP
Existe uma conexão entre esta métrica e a anterior. Mas por que analisamos o número de bytes e pacotes separadamente? Porque houve casos em que foi gerado um alerta para a conta pelo número de pacotes, mas não pelo número de bytes. Por exemplo, uma conta de spam envia muitas letras pequenas, cada uma delas enviada em um pacote separado - nesse caso, um alerta é gerado com base no número de pacotes.
Número de endereços IP de destino
Este gráfico não é fácil de analisar, mas pode ser uma fonte adicional de informações. Em cada conta, o spamming é organizado de forma diferente: alguém envia IP para 10 ou 100 endereços diferentes, e alguém envia para 10 endereços fixos e não cai no campo de visão do antispam de acordo com esta métrica.
Número de streams SMTP abertos simultaneamente
A métrica mais "impopular" - os alertas chegam com pouca frequência. Se nas ilustrações anteriores havia milhares na escala Y, aqui estão centenas. Aqui, aparentemente, os spammers ainda são ressegurados e não enviam e-mail de um grande número de conexões abertas. Embora o gráfico não seja representativo à primeira vista, ele realmente ajuda a entender melhor como o spam pode ser enviado.
Conclusão
É claro que esse sistema pode ser aprimorado e planejamos aprimorá-lo no futuro. Mas agora ele se mostra com bastante eficácia no trabalho.
Por exemplo, nunca banimos um usuário respeitável. E se isso acontecer (bom, e se alguém tiver um projeto universitário relacionado a listas de mala direta), então tudo é reversível. Se você perceber que sua conta Selectel foi banida (o motivo do bloqueio será indicado em sua conta), basta escrever para o suporte técnico. Veremos o que influenciou o rebaixamento da classificação e como você pode evitá-lo no futuro. Esta não é uma proibição vitalícia.
Também falei sobre nosso sistema antispam na Selectel DevTalks. Se você quiser assistir a palestra, aqui está o link .