AntiBrut - это GRPC сервер для защиты от bruteforce атак с поддержкой White/Black листов, написанный на Go.
По умолчанию используется алгоритм Leaky Bucket (https://ru.wikipedia.org/wiki/Алгоритм_текущего_ведра).
White/Black листы, а также настройки лимитирования, хранятся в БД Sqlite3.
Бакеты хранятся в памяти (по умолчанию), но можно переключиться также на Sqlite3.
Делается запрос на /check
с указанием логина, пароля и IP адреса.
По каждому этому значению проверяется заполнение ведра. Если хотя бы одно ведро переполнено, то в ответе вернется false
, в остальных случаях вернется true
.
Перед самой проверкой бакетов, происходит проверка IP на присутствие в белый и черных списках.
По умолчанию для логина установлен лимит - 10 запросов в минуту, для пароля - 100 запросов в минуту (защита от обратного brutforce), для IP - 1000 запросов в минуту.
Редактирование этих значений производится в таблице limitations
.
Есть несколько вариантов для запуска приложения:
- С помощью go install:
go install github.com/romsar/antibrut/cmd/antibrut
antibrut run
- Скомпилировать из исходников и запустить через Docker:
git clone github.com/romsar/antibrut
cd antibrut
make run
- Скачать и запустить скомпилированный файл.
Конфигурация производится с помощью переменных окружения. Для удобства, можно задавать их через .env файл - при запуске приложение будет загружать переменные окружения из него.
ENV параметр | Описание | Значение по умолчанию |
---|---|---|
ANTIBRUT_GRPC_ADDRESS | Хост и порт GRPC сервера | :9090 |
ANTIBRUT_PRUNE_DURATION | Количество времени, после которого бакеты считаются устаревшими и удаляются. Если указать "0", то удаление неактуальных бакетов производиться не будет. Указывается в виде числа и единицы измерения (s (секунды), m (минуты), h (часы). | 1h |
ANTIBRUT_RATE_LIMITER_DRIVER | Механизм хранения бакетов. Может быть sqlite и inmem. | inmem |
ANTIBRUT_SQLITE_DSN | DSN для подключения к SQLite3. | file::memory:?cache=shared&_foreign_keys=on |
Существует также интерфейс для командой строки, который позволяет сбрасывать бакеты и управлять черным/белым списком.
Введите antibrut tool
для просмотра раздела помощи CLI.
AntiBrut тестируется с помощью Unit и интеграционных тестов.
make test
make integration-test
make tests #for both
Для работы интеграционных тестов необходимо установить Docker.