Coder Social home page Coder Social logo

antibruteforce's Introduction

CI/CD Linters Go Report Card

antibruteforce

Общее описание

Сервис предназначен для борьбы с подбором паролей при авторизации в какой-либо системе.

Сервис вызывается перед авторизацией пользователя и может либо разрешить, либо заблокировать попытку.

Cервис используется только для server-server, т.е. скрыт от конечного пользователя.

Алгоритм работы

Сервис ограничивает частоту попыток авторизации для различных комбинаций параметров, заданных в конфигурационном файле config.yml:

  • не более N = 10 попыток в минуту для данного логина.
  • не более M = 100 попыток в минуту для данного пароля (защита от обратного brute-force).
  • не более K = 1000 попыток в минуту для данного IP (число большое, т.к. NAT).

Для подсчета и ограничения частоты запросов использован например алгоритм GCRA (aka leaky bucket) https://en.wikipedia.org/wiki/Generic_cell_rate_algorithm

Сервис поддерживает множество bucket-ов, по одному на каждый логин/пароль/ip. Сами bucket-ы хранятся в Redis.

White/black листы содержат списки адресов сетей, которые обрабатываются более простым способом:

  • Если входящий IP в whitelist, то сервис безусловно разрешает авторизацию (ok=true);
  • Если в blacklist, то отклоняет (ok=false). White/black листы хранятся в postgresql.

Конфигурация

Конфигурация сервиса находится в файле config/config.yml . Основные параметры конфигурации: N, M, K - лимиты по достижению которых, сервис считает попытку брутфорсом.

Архитектура

Микросервис состоит из GRPC API, базы данных для хранения bucket'ов (Redis), black/white списков (Postgres) и command-line интерфейса взаимодействия с сервисом.

Описание методов API

Попытка авторизации

Запрос:

  • login
  • password
  • ip

Ответ:

  • ok (true/false) - сервис должен возвращать ok=true, если считает что запрос нормальный и ok=false, если считает что происходит bruteforce.

Сброс bucket

Должен очистить bucket-ы соответствующие переданным login и ip.

  • login
  • ip

Добавление IP в blacklist

  • подсеть (IP + маска)

Удаление IP из blacklist

  • подсеть (IP + маска)

Добавление IP в whitelist

  • подсеть (IP + маска)

Удаление IP из whitelist

  • подсеть (IP + маска)

  • Пример подсети: 192.1.1.0/25 - представляет собой адрес 192.1.1.0 с маской 255.255.255.128

Command-Line интерфейс

Реализован command-line интерфейс для ручного администрирования сервиса. Через CLI есть возможность вызвать запрос на проверку login, password и IP, сброс бакета, а так же управлять whitelist/blacklist-ом.

Развертывание

Развертывание микросервиса должно осуществляется командой make up в директории с проектом.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.