Сервис предназначен для борьбы с подбором паролей при авторизации в какой-либо системе.
Сервис вызывается перед авторизацией пользователя и может либо разрешить, либо заблокировать попытку.
Предполагается, что сервис используется только для server-server, т.е. скрыт от конечного пользователя.
Сервис ограничивает частоту попыток авторизации для различных комбинаций параметров.
Пример настроек по умолчанию:
- не более N = 10 попыток в минуту для данного логина.
- не более M = 100 попыток в минуту для данного пароля (защита от обратного brute-force).
- не более K = 1000 попыток в минуту для данного IP (число большое, т.к. NAT).
Для подсчета и ограничения частоты запросов, используется алгоритм leaky bucket.
Сервис поддерживает множество bucket-ов, по одному на каждый логин/пароль/ip.
Bucket-ы хранятся в памяти сервиса. Дополнительно реализован алгоритм удаление просроченных записей и бакетов целиком.
Сервис поддерживает White/black листы. White/black листы содержат списки адресов сетей, которые обрабатываются более простым способом:
- Если входящий IP в whitelist, то сервис безусловно разрешает безусловно,
- Если - в blacklist, то безусловно отклоняет безусловно.
Микросервис состоит из:
- API HTTP,
- CLI клиента, работающего по интерфейсу grpc,
- базы данных postgres для хранения black/white списков.
http://localhost:8081/auth/?ip=10.10.10.10&login=ids&pass=123
Передача параметров методом GET: ip, login pass
Ответ:
- 1, если считает что запрос нормальный.
- 0, если считает что происходит bruteforce.
http://localhost:8081/reset-bucket/?ip=10.10.10.10&login=ids&pass=123
Должен очистить bucket-ы соответствующие переданным ip, login и ip.
Передача параметров методом GET: ip, login pass.
Возможна передача не всех параметров.
http://localhost:8081/add-black-list/?ip=10.10.10.50&mask=25
Добавить в blacklist подсеть с указанным IP и маской.
Передача параметров методом GET: ip, mask.
http://localhost:8081/add-black-list/?ip=10.10.10.50
Удалить из blacklist подсеть с указанным IP.
Передача параметров методом GET: ip.
http://localhost:8081/add-white-list/?ip=10.10.10.50&mask=25
Добавить в whitelist подсеть с указанным IP и маской.
Передача параметров методом GET: ip, mask.
http://localhost:8081/add-white-list/?ip=10.10.10.50
Удалить из whitelist подсеть с указанным IP.
Передача параметров методом GET: ip.
- Пример подсети: 192.1.1.0/25 - представляет собой адрес 192.1.1.0 с маской 255.255.255.128
- Во время работы сервиса при поступлении очередного IP адреса, сервис проходится по подсетям в черных и белых списках и вычисляет, принадлежит ли IP одной из них.
http://localhost:8081/get-list/?type=w
Получить список подсетей blacklist или whitelist в зависимости от значения параметра type.
"b" - blacklist, "w" - whitelist.
Передача параметров методом GET: type.
Список получаемых значений в формате json:
- "IP": "10.10.10.250",
- "Mask": "25",
- "IPfrom": "10.10.10.128",
- "IPto": "10.10.10.255"
expire-limit - время жизни попытки подключения в секундах (по умолчанию 60)
tick-interval - время в миллисекундах между периодами проверки и удаления просроченных попыток подключений (по умолчанию 500)
[bruteforce-limits]
try-for-login = 10 - лимит по логинам
try-for-pass = 100 - лимит по паролям
try-for-ip = 1000 - лимит по ip адресам
Лимиты по достижению которых, сервис считает попытку брутфорсом.
Реализован command-line интерфейс в виде отдельного запускаемого модуля для ручного администрирования сервиса. CLI сервис работает через GRPC интерфейс.
addb 10.10.10.10/25 - добавление подсети в blacklist
delb 10.10.10.10/25 - удаление подсети в blacklist
addw 10.10.10.10/25 - добавление подсети в whitelist
delw 10.10.10.10/25 - удаление подсети в whitelist
resi 10.10.10.10 - сброс backet по указанному ip адресу
resl ids - сброс backet по указанному login
resp 123 - сброс backet по указанному password
getb - получить список подсетей из blacklist
getw - получить список подсетей из whitelist
Создание исполняемых файлов сервисов выполняется командой make run в директории с проектом.
В директории /bin будут созданы исполняемые файлы сервисов:
- bruteforce - основной сервис anti-bruteforce,
- cli - интерфейс командной строки для управления сервисом.
\configs\config.toml - конфигурация сервиса (по умолчанию).
Развертывание микросервиса с необходимым окружением осуществляться командой make up в директории с проектом.
При выполнении команды будет создано два docker контейнера:
- сервис anti-bruteforce,
- инстанс БД postgres.
Также будет выполнена инициализация БД.
Удаление микросервиса осуществляться командой make down в директории с проектом.
Для выполнения интеграционного тестирования необходимо выполнить команду make integation-test в директории с проектом.
При выполнении команды будут подняты все рабочие сервисы + сервис с алгоритмами тестирования.