Usando e configurando a API CrowdSec local

Se esta é a primeira vez que você vê nossos posts, então vamos dizer algumas palavras sobre o projeto. CrowdSec é uma ferramenta de código aberto usada para detectar e bloquear endereços IP maliciosos com base em padrões locais de comportamento. Também é possível conectar listas de banimento, tanto locais, geradas independentemente, quanto gerais, que são criadas coletivamente por todos os usuários do CrowdSec. Você pode ler mais sobre isso em nossos artigos anteriores.



Na versão CrowdSec 1.x, implementada uma API local que pode ser acessada tanto pelo aplicativo cliente quanto pelo usuário via linha de comando, inclusive para máquinas remotas.

O que ele pode fazer?



Nossa API local faz várias coisas. Em primeiro lugar, permite que os bouncers funcionem plenamente, o que protege a tranquilidade do seu servidor ou máquina. E também é por meio da API que é feita a contabilização e o acompanhamento das decisões tomadas pelo sistema.



Quais são as soluções? Em primeiro lugar, trata-se de um bloqueio por endereço IP ou toda uma gama de endereços, se o ataque for massivo. Também pode levar em conta o nome de usuário ou qualquer outro parâmetro que você deseja configurar. Para que isso funcione, o segurança só precisa ter nossa chave API gerada no lado do servidor do CrowdSec.



Por meio da API, você pode gerenciar soluções e cenários, enviar notificações do sistema para o administrador, configurar alertas e assim por diante. Como deve ser, a API é o único ponto de entrada do administrador para a infraestrutura do sistema. Em versões anteriores do CrowdSec, muitas coisas, os mesmos seguranças, eram configurados manualmente "no local", o que não era muito conveniente.



Primeiros passos usando a API



Vamos supor que o CrowdSec esteja instalado e você tenha um cliente de linha de comando (CLI). Sua próxima etapa é a autenticação da API.



Para fazer isso, você precisa gerar uma chave de segurança. A maioria dos seguranças oferecidos no hub CrowdSec tem um script de instalação pronto que fará isso por você, mas se você quiser instalar tudo manualmente, para obter a chave, digite:



cscli bouncers add BouncerdeTest







Depois de receber a chave, você precisa coletar o Configuração do bouncer:







se você precisar registrar a máquina, poderá fazê-lo de duas maneiras diferentes. O mais fácil é usar o seguinte comando:



cscli machines add MachinedeTest –auto











Esta ação irá gerar um login e uma senha para você em um arquivo de configuração yaml que você pode usar.







Isso funciona se você estiver trabalhando localmente no mesmo computador. Se você estiver em uma máquina remota, precisará registrar seu servidor de API da seguinte maneira:



cscli lapi register -u <api_url>







Depois disso, você precisa verificar se a máquina foi adicionada ao servidor local onde implantamos a API. Isso pode ser feito com a seguinte linha:



cscli machines validate MachinedeTest







Para exibir uma lista de carros cadastrados, basta executar o comando:







Usando a API com seguranças



Agora, uma simples solicitação HTTP é suficiente para se conectar por meio da API. Isso é suficiente para o trabalho local. Se estamos falando sobre máquinas remotas, recomendamos habilitar HTTPS.







Em relação às chamadas de API do bouncer, você tem 2 métodos disponíveis:



Modo de solicitação (getDecisions) O



modo de solicitação permite que o bouncer envie solicitações de API para obter informações sobre decisões tomadas em intervalos de IP específicos, endereços de IP específicos, nomes de usuário e assim por diante.



Veja como chamar a API (usando Curl) para solicitar informações sobre o IP bloqueado:



curl -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions?ip=98.65.32.47







Como você pode ver, passamos a chave API e chamamos o parâmetro? Ip para especificar o endereço IP do qual queremos receber informações.



Obteremos a resposta de retorno no formato JSON, por exemplo:



[{"duration":"2h25m47.212560128s","id":1023,"origin":"cscli","scenario":"manual 'ban' from '939972095cf1459c8b22cc608eff85daEb4yoi2wiTD7Y3fA'","scope":"Ip","type":"ban","value":"1.2.3.4"}]







Você também pode usar o parâmetro? Range para especificar o intervalo da rede ou, se preferir, usar o par de parâmetros escopo + valor para solicitar informações sobre um nome de usuário específico, ID da sessão e assim por diante.



curl -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions?scope=username&value=korben







Existe outra opção. Este é o



modo de streaming (getDecisionsStream)



O modo de streaming funciona de maneira um pouco diferente, mais simples porque permite que o segurança busque soluções existentes ou novas em intervalos regulares.



Quando o bouncer está em execução, você pode obter as soluções ativas e também as que acabaram de ser removidas chamando a API com o parâmetro? Startup "true", por exemplo:



curl -s -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions/stream?startup=true







Ao definir o parâmetro? Startup como false, você só receberá novas soluções recebidas depois que o bouncer foi iniciado.



{
  "deleted": null,
  "new": [
    {
      "duration": "3h59m57.641708614s",
      "id": 2410,
      "origin": "cscli",
      "scenario": "manual 'ban' from '939972095cf1459c8b22cc608eff85daEb4yoi2wiTD7Y3fA'",
      "scope": "Ip",
      "type": "ban",
      "value": "3.3.3.4"
    }
  ]
}

      
      





Se nenhuma solução foi adicionada, a resposta retornará "nulo":




{
  "deleted": null,
  "new": null
}

      
      





Use a API por meio do Watcher (agente cscli ou CrowdSec)



Conforme mencionado na introdução, você precisará fornecer à API um ID de computador e uma senha. O uso de certas funções API (POST / DELETE) ou (GET) é feito principalmente por meio da interface de linha de comando ou do agente CrowdSec, mas nada impede que você trabalhe com ele diretamente.







Por exemplo, para remover uma ou mais soluções para um IP específico, faça o seguinte: Após executar este comando, você receberá uma linha em resposta que informa quantas soluções foram removidas. Para aqueles que procuram se aprofundar no código-fonte, o repositório CrowdSec no Github tem código escrito em Go que mostra como conectar e usar a API.



curl -X DELETE "https://localhost:8080/v1/decisions?ip=98.65.32.47" -H "accept: application/json"



















Todos os métodos de API estão disponíveis aqui.



Total



Como você pode ver, a API CrowdSec local é bastante fácil de aprender e usar em conjunto com seguranças. Os últimos são escritos em Go e são adaptáveis ​​às suas necessidades específicas. Bouncers prontos podem ser baixados aqui . Também escrevemos bouncers especiais para trabalhar com Nginx, WordPress, HAProxy, iptables, nftables ou até mesmo firewalls de nuvem Amazon (AWS) e Google (Network FW e Cloud Armor). Suas fontes também podem ser encontradas no Github . Também temos bouncers para LUA e PHP .



E, claro, você pode encontrar todas as informações adicionais, fontes, links úteis e manuais ainda não publicados no Habré no site oficial do CrowdSec .



All Articles