Сервис предназначен для борьбы с подбором паролей при авторизации в какой-либо системе.
Сервис вызывается перед авторизацией пользователя и может либо разрешить, либо заблокировать попытку авторизации.
Предполагается, что сервис используется только для server-server, т.е. скрыт от конечного пользователя.
- /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
Для запуска локально стоит использовать 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
- запускает сервис локальноm 7354 ake 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:8080ABF_RATE_LOGIN
- кол-во попыток авторизации в минуту для логина, значение по умолчанию: 10ABF_RATE_PWD
- кол-во попыток авторизации в минуту для пароля, значение по умолчанию: 100ABF_RATE_IP
- кол-во попыток авторизации в минуту для IP, значение по умолчанию: 1000ABF_WHITELIST
- белый список ip/подсетей, пример: 192.168.1.10,10.10.1.0/24ABF_BLACKLIST
- черный список ip/подсетей, пример: 192.168.1.10,10.10.1.0/24ABF_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 - работает.