Skip to content

razielsd/antibruteforce

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AntiBruteforce

codecov Go Report Card GitHub go.mod Go version

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

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

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

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

API

  • /api/user/allow - проверка возможности авторизации
  • /api/whitelist - получить белый список IP адресов или адрес подсети
  • /api/whitelist/add - добавить в белый список IP или адрес подсети
  • /api/whitelist/remove - удалить из белого списка IP или адрес подсети
  • /api/blacklist - получить черный список IP адресов или адрес подсети
  • /api/blacklist/add - добавить в черный список IP или адрес подсети
  • /api/blacklist/remove - удалить из черного списка IP или адрес подсети
  • /api/bucket/drop/login - удалить логин из бакета (сбросить счетчик авторизаций для данного логина)
  • /api/bucket/drop/pwd - удалить пароль из бакета
  • /api/bucket/drop/ip - удалить IP из бакета

Подробнее в swagger

Мониторинг

API содержит несколько методов для мониторинга приложения:

  • /mertics - метрики приложения для prometheus
  • /health/liveness - k8s liveness probe
  • /health/readiness - k8s readiness probe

CLI

Для запуска локально стоит использовать bin/abf, в docker - bin/abfc

abf [command]

Available Commands:
blacklist   Show/add/remove blacklist
bucket      Drop bucket by login, password or ip
completion  generate the autocompletion script for the specified shell
help        Help about any command
server      Run service
version     Show version
whitelist   Show/add/remove whitelist

Сборка

  • make build - собирает сервис локально
  • make build-img - собирает образ для докера
  • make run - запускает сервис локально
  • make run-img - запускает сервис в докере
  • make lint - запуск линтера
  • make test - запуск тестов, без интеграционных
  • make test-int - запуск тестов, включая интеграционные
  • make test-e2e - запуск e2e-тестов
  • make test-img, make test-int-img, make test-e2e-img - те же тесты, но запускаются в докере.

Также есть таргеты test-int-coverage, test-coverage, test100 они используются для запуска на CI.

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

Для конфигурации сервиса используются переменные окружения:

  • ABF_ADDR - адрес, на котором принимать подключения, значение по умолчанию: 0.0.0.0:8080
  • ABF_RATE_LOGIN - кол-во попыток авторизации в минуту для логина, значение по умолчанию: 10
  • ABF_RATE_PWD - кол-во попыток авторизации в минуту для пароля, значение по умолчанию: 100
  • ABF_RATE_IP - кол-во попыток авторизации в минуту для IP, значение по умолчанию: 1000
  • ABF_WHITELIST - белый список ip/подсетей, пример: 192.168.1.10,10.10.1.0/24
  • ABF_BLACKLIST - черный список ip/подсетей, пример: 192.168.1.10,10.10.1.0/24
  • ABF_LOG_LEVEL - Уровень логирования, возможные значения: DEBUG, INFO, WARN, ERROR, значение по умолчанию - DEBUG

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

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

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

Для работы используется пакет time/rate, в котором реализован алгоритм token bucket

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

Для запуска локально необходимо выполнить команды в директории с проектом:

  • make build - собрать сервис
  • make run - запуск сервиса

Для запуска в докере необходимо выполнить команды в директории с проектом:

  • make build-img - собрать сервис
  • make run-img - запуск сервиса

Тестирование

  • Сервис покрыт тестами, core-функционал на 100%
  • Есть интеграционные тесты - в рамках теста поднимается сервер и тестируется логика работы.
  • Есть e2e тесты - проверяется, что все endpoint доступны, cli - работает.

About

Anti bruteforce service

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages