antibruteforce

module
v0.0.0-...-ca0d4d1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 31, 2020 License: MIT

README

Anti brute-force gRPC web service

Build Status codecov Go Report Card

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

Содержание

  1. Описание
  2. Конфигурирование Rate Limiter-а
  3. Сборка и запуск проекта
  4. CLI-админка

1. Описание

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

  • не более N попыток в T1 единицу времени для данного логина;
  • не более M попыток в T2 единицу времени для данного пароля (защита от обратного brute-force);
  • не более K попыток в T3 единицу времени для данного IP.

Для подсчета и ограничения частоты запросов, использовался алгоритм leaky bucket. Реализовано множество bucket-ов, по одному на каждый логин/пароль/ip. Bucket-ы храниться в памяти, для каждого из типов bucket-ов (логин/пароль/ip) предусмотрено время "протухания" expire_time. Реализован Bucket GC, который запускается с интервалом времени gc_time и отслеживает "протухшие" бакеты и удаляет их из памяти, что позволяет избежать утечек памяти.

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

White/black листы содержат списки адресов сетей, которые обрабатываются более простым способом: Если входящий ip в whitelist, то сервис безусловно разрешает авторизацию; Если - в blacklist, то отклоняет.

2. Конфигурирование Rate Limiter-а

Для того, чтобы ограничить частоту попыток авторизации для конкретного типа bucket'a, например, логина, необходимо перейти в раздел конфигурации rate_limiter -> login.

  • rate - количество попыток
  • interval - интервал времени, на котором действует ограничение. Величина соотвествует типу time.Duration
  • expire_time - интервал времени, через который bucket считается "протухшим". Величина так же соотвествует типу time.Duration

Конфигурация для типов bucket'ов пароля и ip представляет идентичную стркутуру.

3. Сборка и запуск проекта

Docker

Сборка и запуск контейнеров:

git clone https://github.com/teploff/antibruteforce.git
make docker_run

Остановка и удаление контенеров:

make docker_stop

Binary file

Сборка сервиса:

git clone https://github.com/teploff/antibruteforce.git
make build

Запуск сервиса:

make run

Прогонка тестов:

make test

Прогона линтеров:

make lint

4. CLI-админка

Сборка и запуск c опции help:

make build_cli
./cli -help

Полное описание опции help для CLI:

Конфигурирование

Если необходимо указать явно destination адрес до anti brute-force сервиса, необходимо запускать binary-файл с флагом --dest

./cli --dest 192.168.130.132:80

Запуск команд

Команду можно запускать по полному имени, например:

./cli reset_bucket_by_login teploff

Так и по ее alias:

./cli rbl teploff

Полное описание команд можно увидеть выше или в разделе "COMMANDS", вызвав опцию --help или -h при запуске binary-файла.

Directories

Path Synopsis
cmd
internal
app
infrastructure/logger
Package logger provides logger functionality (using zap logger instead).
Package logger provides logger functionality (using zap logger instead).
tests
tools

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL