Skip to content

GRPC сервер для защиты от bruteforce атак с поддержкой White/Black листов.

Notifications You must be signed in to change notification settings

romsar/antibrut

Repository files navigation

AntiBrut

AntiBrut - это GRPC сервер для защиты от bruteforce атак с поддержкой White/Black листов, написанный на Go.

По умолчанию используется алгоритм Leaky Bucket (https://ru.wikipedia.org/wiki/Алгоритм_текущего_ведра).

White/Black листы, а также настройки лимитирования, хранятся в БД Sqlite3.

Бакеты хранятся в памяти (по умолчанию), но можно переключиться также на Sqlite3.

Go Go Report Card

Workflow

Делается запрос на /check с указанием логина, пароля и IP адреса.

По каждому этому значению проверяется заполнение ведра. Если хотя бы одно ведро переполнено, то в ответе вернется false, в остальных случаях вернется true.

Перед самой проверкой бакетов, происходит проверка IP на присутствие в белый и черных списках.

По умолчанию для логина установлен лимит - 10 запросов в минуту, для пароля - 100 запросов в минуту (защита от обратного brutforce), для IP - 1000 запросов в минуту.

Редактирование этих значений производится в таблице limitations.

Установка и запуск

Есть несколько вариантов для запуска приложения:

  1. С помощью go install:
go install github.com/romsar/antibrut/cmd/antibrut

antibrut run
  1. Скомпилировать из исходников и запустить через Docker:
git clone github.com/romsar/antibrut

cd antibrut

make run
  1. Скачать и запустить скомпилированный файл.

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

Конфигурация производится с помощью переменных окружения. Для удобства, можно задавать их через .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

CLI

Существует также интерфейс для командой строки, который позволяет сбрасывать бакеты и управлять черным/белым списком. Введите antibrut tool для просмотра раздела помощи CLI.

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

AntiBrut тестируется с помощью Unit и интеграционных тестов.

make test
make integration-test
make tests #for both

Для работы интеграционных тестов необходимо установить Docker.

About

GRPC сервер для защиты от bruteforce атак с поддержкой White/Black листов.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages