[Информационная безопасность, Системное администрирование, Сетевые технологии] Использование и настройка локального API CrowdSec
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Если вы впервые видите наши посты, то скажем пару слов о проекте. CrowdSec — это инструмент с открытым исходным кодом, который используется для обнаружения и блокировки вредоносных IP-адресов на основе локальных шаблонов поведения. Также возможно подключение бан-листов, причем как локальных, сформированных самостоятельно, так и общих, которые создаются всеми пользователями CrowdSec коллективно. Подробнее вы можете почитать об этом в наших предыдущих статьях.
В версии CrowdSec 1.x реализовал локальный API, к которому может обращаться как клиент приложения, так и пользователь через командную строку, в том числе и на удаленные машины.
Что он умеет?
Наш локальный API делает несколько вещей. Прежде всего, он позволяет полноценно работать баунсерам, которые берегут покой вашего сервера или машины. А также именно через API ведется учет и мониторинг за принятыми системой решениями.
Что за решения? Прежде всего, это блокировка по IP-адресу или целому диапазону адресов, если атака имеет массированный характер. Также может учитываться имя пользователя или вообще любой другой параметр, который вы захотите настроить. Чтобы все это работало, у баунсера просто должен быть ключ нашего API, который сгенерирован на серверной стороне CrowdSec.
Через API можно управлять решениями и сценариями, push-уведомлениями от системы администратору, настраивать оповещения и так далее. Как и должно, API — единая точка входа администратора к инфраструктуре системы. В ранних версиях CrowdSec многие вещи, те же баунсеры, настраивались вручную «по месту», что было не слишком удобно.
Начинаем пользоваться API
Предположим, что CrowdSec установлен и у вас есть клиент командной строки (CLI). Ваши последующий шаг — аутентификация в API.
Для этого вам необходимо сгенерировать ключ баунсера. У большинства баунсеров, предлагаемых на хабе CrowdSec, есть готовый инсталл-сценарий, который сделает за вас, но если вы хотите все установить в ручную, то для получения ключа введите:
cscli bouncers add BouncerdeTest
После получения ключа вам надо собрать конфиг баунсера:
Если нужно зарегистрировать машину, вы можете сделать это двумя разными способами. Самый простой — использовать следующую команду:
cscli machines add MachinedeTest –auto
Это действие сгенерирует для вас логин и пароль в файле конфигурации yaml, который вы затем сможете использовать.
Это работает для случая, если вы работаете локально на одном компьютере. Если же вы находитесь на удаленной машине, вам нужно зарегистрировать свой сервер API следующим образом:
cscli lapi register -u <api_url>
После надо проверить, добавилась ли машина на локальном сервере, где у нас развернут API. Сделать это можно следующей строкой:
cscli machines validate MachinedeTest
Чтобы вывести список зарегистрированных машин просто выполните команду:
Использование API с баунсерами
Теперь для соединения через API достаточно обычного HTTP-запроса. Этого достаточно для локальной работы. Если же речь идет об удаленных машинах, рекомендуем включить HTTPS.
Что касается вызовов API из баунсера, у вас есть 2 доступных метода:
Режим запроса (getDecisions)
Режим запроса позволяет баунсеру отправлять запросы API для получения информации о решениях, принятых в отношении определенных диапазонов IP-адресов, отдельных IP-адресов, имен пользователей и так далее.
Вот как вызвать API (с помощью Curl), чтобы запросить информацию о заблокированном IP:
curl -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions?ip=98.65.32.47
Как видите, мы передаем ключ API и вызываем параметр ?ip, чтобы указать IP-адрес, по которому мы хотим получить информацию.
Возвращаемый ответ мы получим в формате JSON, например:
[{"duration":"2h25m47.212560128s","id":1023,"origin":"cscli","scenario":"manual 'ban' from '939972095cf1459c8b22cc608eff85daEb4yoi2wiTD7Y3fA'","scope":"Ip","type":"ban","value":"1.2.3.4"}]
Вы также можете использовать параметр ?range, чтобы указать диапазон сети, или, если хотите, использовать пару параметров scope+value для запроса информации о конкретном имени пользователя, идентификаторе сеанса и так далее.
curl -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions?scope=username&value=korben
Есть еще один вариант. Это
Потоковый режим (getDecisionsStream)
Потоковый режим работает несколько иначе, проще, поскольку он позволяет баунсеру извлекать существующие или новые решения через равные промежутки времени.
Когда баунсер запущен, вы можете получить активные решения, а также только что удаленные, вызвав API с параметром ?Startup «true», например:
curl -s -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions/stream?startup=true
Установив для параметра ?startup значение «false» вы будете получать только новые решения, полученные после запуска баунсера.
{
"deleted": null,
"new": [
{
"duration": "3h59m57.641708614s",
"id": 2410,
"origin": "cscli",
"scenario": "manual 'ban' from '939972095cf1459c8b22cc608eff85daEb4yoi2wiTD7Y3fA'",
"scope": "Ip",
"type": "ban",
"value": "3.3.3.4"
}
]
}
Если решение не было добавлено, в ответ вернется «null»:
{
"deleted": null,
"new": null
}
Используйте API через Watcher (cscli или агент CrowdSec)
Как упоминалось во введении, вам нужно будет предоставить API идентификатор компьютера и пароль. Использование определенных функций API (POST/DELETE) или (GET) в основном осуществляется через интерфейс командной строки или агент CrowdSec, но ничто не мешает вам работать с ним напрямую.
Например, чтобы удалить одно или несколько решений, касающихся определенного IP, сделайте следующее:
curl -X DELETE "https://localhost:8080/v1/decisions?ip=98.65.32.47" -H "accept: application/json"
После выполнения этой команды в ответ вы получите строку, которая сообщит, сколько решений было удалено.
Для тех, кто хочет начать работу на более глубоком уровне с исходниками, в репозитории CrowdSec на Github есть код, написанный на Go, который показывает, как подключиться и использовать API.
Все методы API доступны здесь.
Итого
Как видите, локальный API CrowdSec довольно легко изучить и начать использовать в связке с баунсерами. Последние написанны на Go и адаптируемы к вашим конкретным потребностям. Готовые баунсеры можно скачать тут. Также нами написаны специальные баунсеры для работы с Nginx, WordPress, HAProxy, iptables, nftables или даже с облачными межсетевыми экранами Amazon (AWS) и Google (Network FW и Cloud Armor). Их исходники также можно найти на Github. Еще у нас есть баунсеры на LUA и PHP.
И, конечно же, всю дополнительную информацию, исходники, полезные ссылки и еще не опубликованные на Хабре мануалы вы можете найти на официальном сайте CrowdSec.
===========
Источник:
habr.com
===========
Похожие новости:
- [Java, Kotlin, Управление проектами, Бизнес-модели, 1С] Как мы пытаемся автоматизировать учет рабочего времени по проектам для простых рабочих
- [Информационная безопасность, Облачные сервисы] Если не хватает NSX Edge: как клиенты нашего облака переезжают в сервис NGFW
- [Системное администрирование, Софт] SaaS и ALEPIZ: мониторинг и управление инфраструктурой
- [Веб-аналитика, Повышение конверсии, Аналитика мобильных приложений, Конференции] Всем привет! Уже сегодня Митап по продуктовой аналитике — Аnalytics Meetup: deliver value for custos
- [Системное администрирование, Браузеры, Софт, IT-компании] Microsoft прекратит поддержку приложения Internet Explorer 11 в Windows 10 с июня 2022 года
- [Системное администрирование, Kubernetes] Антипаттерны деплоя в Kubernetes. Часть 1 (перевод)
- [JavaScript, API] DINS JS EVENING (online): параллелизм в вебе и есть ли жизнь после закрытия вкладки
- [Информационная безопасность, Браузеры, Софт, IT-компании] Firefox представил новую архитектуру безопасности браузера с изоляцией сайтов
- [Криптография, Сетевые технологии, I2P, Стандарты связи] Доступ к сайту по ключу. Защита от непрошеных гостей в I2P
- [Анализ и проектирование систем, Проектирование и рефакторинг, Интерфейсы, API, Agile] Разрабатывайте системы с открытой архитектурой
Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_sistemnoe_administrirovanie (Системное администрирование), #_setevye_tehnologii (Сетевые технологии), #_crowdsec, #_baunsery (баунсеры), #_zaschita (защита), #_filtratsija_ip (фильтрация IP), #_api, #_rabota_s_api (работа с API), #_zaschita_serverov (защита серверов), #_zaschita_virtualnyh_mashin (защита виртуальных машин), #_blog_kompanii_crowdsec (
Блог компании CrowdSec
), #_informatsionnaja_bezopasnost (
Информационная безопасность
), #_sistemnoe_administrirovanie (
Системное администрирование
), #_setevye_tehnologii (
Сетевые технологии
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 05:42
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Если вы впервые видите наши посты, то скажем пару слов о проекте. CrowdSec — это инструмент с открытым исходным кодом, который используется для обнаружения и блокировки вредоносных IP-адресов на основе локальных шаблонов поведения. Также возможно подключение бан-листов, причем как локальных, сформированных самостоятельно, так и общих, которые создаются всеми пользователями CrowdSec коллективно. Подробнее вы можете почитать об этом в наших предыдущих статьях. В версии CrowdSec 1.x реализовал локальный API, к которому может обращаться как клиент приложения, так и пользователь через командную строку, в том числе и на удаленные машины. Что он умеет? Наш локальный API делает несколько вещей. Прежде всего, он позволяет полноценно работать баунсерам, которые берегут покой вашего сервера или машины. А также именно через API ведется учет и мониторинг за принятыми системой решениями. Что за решения? Прежде всего, это блокировка по IP-адресу или целому диапазону адресов, если атака имеет массированный характер. Также может учитываться имя пользователя или вообще любой другой параметр, который вы захотите настроить. Чтобы все это работало, у баунсера просто должен быть ключ нашего API, который сгенерирован на серверной стороне CrowdSec. Через API можно управлять решениями и сценариями, push-уведомлениями от системы администратору, настраивать оповещения и так далее. Как и должно, API — единая точка входа администратора к инфраструктуре системы. В ранних версиях CrowdSec многие вещи, те же баунсеры, настраивались вручную «по месту», что было не слишком удобно. Начинаем пользоваться API Предположим, что CrowdSec установлен и у вас есть клиент командной строки (CLI). Ваши последующий шаг — аутентификация в API. Для этого вам необходимо сгенерировать ключ баунсера. У большинства баунсеров, предлагаемых на хабе CrowdSec, есть готовый инсталл-сценарий, который сделает за вас, но если вы хотите все установить в ручную, то для получения ключа введите: cscli bouncers add BouncerdeTest После получения ключа вам надо собрать конфиг баунсера: Если нужно зарегистрировать машину, вы можете сделать это двумя разными способами. Самый простой — использовать следующую команду: cscli machines add MachinedeTest –auto Это действие сгенерирует для вас логин и пароль в файле конфигурации yaml, который вы затем сможете использовать. Это работает для случая, если вы работаете локально на одном компьютере. Если же вы находитесь на удаленной машине, вам нужно зарегистрировать свой сервер API следующим образом: cscli lapi register -u <api_url> После надо проверить, добавилась ли машина на локальном сервере, где у нас развернут API. Сделать это можно следующей строкой: cscli machines validate MachinedeTest Чтобы вывести список зарегистрированных машин просто выполните команду: Использование API с баунсерами Теперь для соединения через API достаточно обычного HTTP-запроса. Этого достаточно для локальной работы. Если же речь идет об удаленных машинах, рекомендуем включить HTTPS. Что касается вызовов API из баунсера, у вас есть 2 доступных метода: Режим запроса (getDecisions) Режим запроса позволяет баунсеру отправлять запросы API для получения информации о решениях, принятых в отношении определенных диапазонов IP-адресов, отдельных IP-адресов, имен пользователей и так далее. Вот как вызвать API (с помощью Curl), чтобы запросить информацию о заблокированном IP: curl -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions?ip=98.65.32.47 Как видите, мы передаем ключ API и вызываем параметр ?ip, чтобы указать IP-адрес, по которому мы хотим получить информацию. Возвращаемый ответ мы получим в формате JSON, например: [{"duration":"2h25m47.212560128s","id":1023,"origin":"cscli","scenario":"manual 'ban' from '939972095cf1459c8b22cc608eff85daEb4yoi2wiTD7Y3fA'","scope":"Ip","type":"ban","value":"1.2.3.4"}] Вы также можете использовать параметр ?range, чтобы указать диапазон сети, или, если хотите, использовать пару параметров scope+value для запроса информации о конкретном имени пользователя, идентификаторе сеанса и так далее. curl -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions?scope=username&value=korben Есть еще один вариант. Это Потоковый режим (getDecisionsStream) Потоковый режим работает несколько иначе, проще, поскольку он позволяет баунсеру извлекать существующие или новые решения через равные промежутки времени. Когда баунсер запущен, вы можете получить активные решения, а также только что удаленные, вызвав API с параметром ?Startup «true», например: curl -s -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions/stream?startup=true Установив для параметра ?startup значение «false» вы будете получать только новые решения, полученные после запуска баунсера. {
"deleted": null, "new": [ { "duration": "3h59m57.641708614s", "id": 2410, "origin": "cscli", "scenario": "manual 'ban' from '939972095cf1459c8b22cc608eff85daEb4yoi2wiTD7Y3fA'", "scope": "Ip", "type": "ban", "value": "3.3.3.4" } ] } Если решение не было добавлено, в ответ вернется «null»: {
"deleted": null, "new": null } Используйте API через Watcher (cscli или агент CrowdSec) Как упоминалось во введении, вам нужно будет предоставить API идентификатор компьютера и пароль. Использование определенных функций API (POST/DELETE) или (GET) в основном осуществляется через интерфейс командной строки или агент CrowdSec, но ничто не мешает вам работать с ним напрямую. Например, чтобы удалить одно или несколько решений, касающихся определенного IP, сделайте следующее: curl -X DELETE "https://localhost:8080/v1/decisions?ip=98.65.32.47" -H "accept: application/json" После выполнения этой команды в ответ вы получите строку, которая сообщит, сколько решений было удалено. Для тех, кто хочет начать работу на более глубоком уровне с исходниками, в репозитории CrowdSec на Github есть код, написанный на Go, который показывает, как подключиться и использовать API. Все методы API доступны здесь. Итого Как видите, локальный API CrowdSec довольно легко изучить и начать использовать в связке с баунсерами. Последние написанны на Go и адаптируемы к вашим конкретным потребностям. Готовые баунсеры можно скачать тут. Также нами написаны специальные баунсеры для работы с Nginx, WordPress, HAProxy, iptables, nftables или даже с облачными межсетевыми экранами Amazon (AWS) и Google (Network FW и Cloud Armor). Их исходники также можно найти на Github. Еще у нас есть баунсеры на LUA и PHP. И, конечно же, всю дополнительную информацию, исходники, полезные ссылки и еще не опубликованные на Хабре мануалы вы можете найти на официальном сайте CrowdSec. =========== Источник: habr.com =========== Похожие новости:
Блог компании CrowdSec ), #_informatsionnaja_bezopasnost ( Информационная безопасность ), #_sistemnoe_administrirovanie ( Системное администрирование ), #_setevye_tehnologii ( Сетевые технологии ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 05:42
Часовой пояс: UTC + 5