Розподілений двигун обробки подій безпеки для будь-якого HTTP-сервера — і не тільки
Розумний, універсальний, розподілений рушій безпеки: поведінкова детекція замість статичних правил, будь-яке джерело логів на вході, будь-який пункт призначення на виході, будь-яка мова для власних плагінів. Масштабуйтесь від одного VPS до розподіленого флоту — збирайте події на одній машині, скоруйте на іншій, баньте на третій — через вбудовану шифровану мережу вузлів. Bare-metal, Docker Compose або Kubernetes DaemonSet.
Вісім поведінкових детекторів скорують патерни — зондування, аномалії частоти запитів, співвідношення bruteforce, послідовний краулінг — замість звірки зі статичними сигнатурами. Легітимні краулери верифікуються через rDNS/fDNS і ніколи не скоруються.
Будь-яке джерело логів на вході (файл, stdin, syslog, HTTP push/pull у 9 форматах вендорів), будь-який пункт призначення на виході (Fail2Ban, Cloudflare WAF, файерволи MikroTik/OpenWrt/OPNsense, Loki/Splunk/Datadog), будь-яка мова для власного плагіна через exec+JSON.
Один процес обслуговує N незалежних потоків логів, кожен зі своїм pipeline джерел, детекторів і sink'ів — від одного nginx vhost до флоту edge-вузлів, без запуску окремого процесу на кожен сайт.
Збирайте на одній машині, скоруйте на іншій, баньте на третій — через вбудовану шифровану QUIC/TLS 1.3 мережу вузлів з Ed25519-ідентичністю та TOFU-піннінгом. Без брокера повідомлень, без log shipper'а, без VPN.
Шість серверів підтримується нативно — nginx працює без налаштування. Кожен інший сервер вмикається одним рядком профілю. Працює за будь-яким проксі або Cloudflare — завжди фіксує реального нападника, а не CDN чи балансувальник.
nginx combined log format працює з коробки — профіль не потрібен.
Стандартний CLF — змін на сервері не потрібно.
Стандартний access log (CLF) — налаштування не потрібне.
Apache CLF за замовчуванням — змін на сервері не потрібно.
Потребує xcaddy + плагін transform-encoder для CLF-виводу.
Потребує option httplog у haproxy.cfg + rsyslog для запису у файл.
Правила обчислюються першими. Правило pass, що збіглося, обриває весь пайплайн — healthcheck'и, внутрішні IP та довірені боти пропускаються миттєво, без зайвих перевірок.
SQLi, path traversal, сигнатури сканерів — запити, що збіглися, відсікаються на вході і не доходять до скорера. Стан не виділяється, детектори не обробляють заздалегідь поганий трафік.
Підозрілий, але неоднозначний трафік отримує мітку та додавання до рахунку, потім іде далі у pipeline. Комбінуй WAF-сигнали з поведінковими детекторами для корельованих рішень про бан.
Розширяй простір правил власними полями http.* — дві зміни в Go, без перекомпіляції ядра. Додай версію TLS, довжину тіла запиту або будь-яке поле з твого джерела логів.
Кожен детектор додає очки до рахунку IP. Score загасає лінійно за час observation_window — жодних хибних банів від старого трафіку.
Запити до чутливих шляхів: /.env, /.git/config, /.aws/credentials, /wp-config.php, /phpinfo.php, адмін-панелі, резервні архіви та ще 30+. Активна розвідка — спрацьовує негайно на першому запиті.
Більше 100 запитів за 60 секунд з одного IP. Виявляє DDoS-зондування, агресивні сканери вразливостей, спалахи перебору облікових даних та скрепери, що намагаються триматися нижче статичних обмежень.
Регістронезалежне порівняння підрядків з вбудованими списками: сканери (Nuclei, sqlmap...), грабери (Scrapy, HTTrack...) та клієнти автоматизації (python-requests, curl...). Легко розширюється через конфіг.
Більше 60% відповідей — 404 за мінімум 10 запитів. Типова сигнатура інструментів перебору шляхів (dirbuster, gobuster, ffuf). min_requests запобігає хибним спрацьовуванням.
П'ять і більше послідовно пронумерованих URL поспіль — /page/1, /page/2, /article/100... Характерна ознака автоматичних скреперів, що дампують цілі розділи сайту.
Завантажує сторінки, але запитує CSS, JS або зображення менше ніж у 10% випадків — за мінімум 3 переглядів. Реальний браузер завжди завантажує ресурси; markup-only боти пропускають статику.
URL довший за 2048 символів або який містить відомі ключові слова обходу WAF: bypass, shell, cmd, eval, exec... Спрямований на переповнення буфера та ін'єкції коду.
Порівнює User-Agent (та опційно Referer) із community-maintained списком ~685 відомих поганих ботів: скрепери, SEO-краулери, спам-боти, сканери вразливостей. Список оновлюється щодня. Засновано на nginx-ultimate-bad-bot-blocker — проекті Mitchell Krog та його команди.
Googlebot, Bingbot, Яндекс, DuckDuckBot, GPTBot та ще 6 родин верифікуються через зворотний + прямий DNS. Легітимні краулери ніколи не отримують очків. Фейкові боти отримують штраф. Надійні краулери можна матчити за User-Agent лише (`ua_only`, без DNS) та надати per-bot detector exemptions (`exempt_detectors`) щоб легітимна автоматизація ніколи не була покарана.
Додайте IP офісу, VPN-підмережі (CIDR), сервіси моніторингу, SEO-інструменти за підрядком User-Agent або URL-шляху. Зміни застосовуються по SIGHUP.
Усі зміни конфігурації — білі списки, ваги детекторів, пороги — застосовуються миттєво по SIGHUP. Без перезапуску. IP-стан і DNS-кеш зберігаються.
Запис подій загроз у лог-файл класичного формату Fail2Ban. Жодної нової інфраструктури — вивід за замовчуванням, і досі найшвидший шлях до робочого бану на будь-якому Linux-хості.
Додання IP загроз до Cloudflare IP List та блокування на краю мережі — без iptables, без host firewall. Пакетні операції, асинхронний polling, автоматичне TTL-закінчення та cross-instance dedup.
Запис заблокованих IP у простий blocklist-файл з автоматичним TTL-закінченням та атомарним записом. arxsentinel лише пише файл; ви підключаєте його до nginx як вам зручно. Опціональна reload-команда.
Керування firewall address-list RouterOS через REST API. TTL-базований auto-unban, безпечне видалення лише власних записів arxsentinel, працює на CHR та ARM-маршрутизаторах.
Блокування IP на роутері OpenWrt через ubus (uhttpd-mod-ubus) — без SSH, без exec. Пакетна правка UCI + один reload файервола за цикл; TTL рахує сам плагін, а не nftables-таймаути.
Блокування IP на файерволі OPNsense через нативний REST API (alias_util) — без пакетування, зміни застосовуються негайно до pfctl-таблиці. Незалежний point add/delete на подію, активний TTL-sweep.
Пряме надсилання сирих і скорованих подій у Grafana Loki через Push API. Будь-яке поле — stream-label (job, severity, stream), батчинг з gzip, опціональний mTLS. Для читабельності у платформі рекомендовано JSON-envelope.
Пересилання в HTTP Event Collector Splunk з токен-автентифікацією. JSON-режим, мультиіндекс, gzip-батчинг, опціональний mTLS. Події індексуються одразу при перетині вердиктом порога — окремий log shipper не потрібен.
Надсилання в Datadog Logs API v2 по HTTPS — вибір регіонального intake-URL (US, EU, AP1, AP2, UK1, US3, US5, US2 Gov) і довільні ddtags. Gzip-батчинг, опціональний mTLS, працює паралельно з вашими Datadog log-пайплайнами.
Source / Sink / Detector / Processor / Executor — компактний Go-інтерфейс у pkg/plugin/. Плагіни реєструють себе в init(): жодного центрального списку фабрик, фреймворк знаходить їх за іменем. Збирайте пайплайн із ролей, а не з внутрішніх хуків.
Протокол exec+JSON: сабпроцес читає JSON-об'єкт події з stdin і пише JSON-відповідь у stdout. Розширюйте детектори, додавайте sink чи executor мовою Python, Bash або чим завгодно, що вміє читати байтовий потік — ArxSentinel бере на себе життєвий цикл сабпроцесу (запуск, проводку stdin/stdout, завершення).
П'ять постачальних executor-плагінів — Cloudflare, MikroTik, OpenWrt, OPNsense, nginx — і три щойно додані observability-sink (Loki, Splunk, Datadog) використовують ті самі публічні інтерфейси, що й зовнішній автор плагіна. Жодного внутрішнього fast-path, жодного привілейованого доступу: працює для вбудованих — працює і для ваших.
Один процес стежить за N незалежними джерелами логів через streams: — кожен має власний трекер, scorer, стан whitelist та threat-лог. Падіння чи повільне сканування в одному потоці не зачіпає інші. Зворотна сумісність: класичний конфіг з одним файлом (general.log_file) автоматично обгортається в один безіменний потік (stream="" у метриках), міграція не потрібна.
Один потік може визначати кілька pipeline, кожен із власними inputs, процесорами rule-engine / WAF, детекторами та sink'ами — наприклад, один pipeline стежить за /api/* із суворим WAF-шлюзом, інший — за /admin/* з іншими порогами детекторів, обидва всередині одного конфіга потоку. Prometheus отримує лейбл pipeline на всіх векторах.
tracker_groupPipeline'и з однаковим значенням tracker_group ділять один IP-state трекер: зловмисник, що промацує ваш API та адмін-панель, накопичує один спільний score замість двох окремих, перетинаючи поріг бану швидше, ніж будь-який pipeline спіймав би сам. Опустіть tracker_group (або залиште порожнім) — і буде повна ізоляція.
Немає підходящого профілю? Опишіть власний regex з іменованими групами або переключіться на JSON-парсинг — без перекомпіляції. Будь-який формат, що захоплює IP, timestamp, метод, шлях, статус і байти, підключається до повного пайплайну виявлення.
Готові профілі для популярних серверів. Перевизначайте позиції полів, формати дат та правила роздільників для кожного джерела логу без зміни ядра.
Розгортається поруч із будь-яким контейнеризованим HTTP-сервером через спільний том логів — без змін у контейнері застосунку. Готові docker-compose.yml та конфіг у deploy/examples/docker/. Метрики Prometheus доступні на :9117.
Один pod на вузол читає host-логи через hostPath. Включено Helm-чарт з довідкою по values та інтеграцією Prometheus Operator. Підтримується також sidecar-топологія для managed-кластерів без доступу до host-логів.
Запустіть `arxsentinel validate` щоб перевірити весь конфіг перед деплоєм. Topology-aware валідатор моделює реальний потік даних та ловить зламаний дріт, використовуючи статичні plugin manifests — без live трафіку.
Буферизація подій executor через in-memory, file-based (bbolt), Redis — або transport-чергу, розтягнуту між машинами через шифровану мережу вузлів. Виберіть per executor для bare-metal, single-host, Kubernetes або мультивузлових схем.
Маршрутизація подій загроз між незалежними pipelines за назвою — один pipeline може детектувати, інший примусити, повністю decoupled. А тепер та сама іменована черга може закінчуватися на іншій машині: Distributed NCS.
Той самий бінарник стає колектором, детектором чи респондером — лише через конфіг, з'єднуючись вбудованою шифрованою event-мережею. Єдиний інструмент у своєму класі з вбудованим у двигун транспортом подій безпеки між вузлами: без брокера повідомлень, без log shipper'а, без ієрархії агент-сервер, без VPN.
QUIC на одному UDP-порту, завжди TLS 1.3, Ed25519-ключі вузла генеруються при першому старті, TOFU-пінінг fingerprints як у SSH. Взаємна автентифікація до першої події — чужинець на вашому порту не отримає нічого.
Кожен колектор прокидає в один спільний per-IP score. Атакувальник, що промацує веб-шар, API та auth-сервіс, накопичує сумарний score на детекторі — і перетинає поріг бану раніше, ніж його впіймав би будь-який сервіс поодинці.
Прокидайте сирі розпарсені записи всередину для центральної детекції, скоровані вердикти назовні для enforcement — або обидва потоки у ваш SIEM. Префільтруйте на edge — і нехай рахунок за інжест визначають загрози, а не обсяг трафіку.
Кожна документована топологія — агрегація edge-флоту, змішана маршрутизація на nginx + MikroTik/OpenWrt/OPNsense респондери — проганяється як справжній мультиконтейнерний тест при кожному merge. Діаграми в доках виконувані.
Читає з будь-якого джерела логів. Записує загрози в будь-який приймач. Fail2Ban залишається варіантом за замовчуванням — тепер одним із багатьох.
Приклади input-конфігів
type: file · path: /var/log/nginx/access.log
type: syslog · addr: udp://0.0.0.0:5514 · без спільного тому
type: http · protocol: plain|cloudflare|firehose|pubsub|loki|otlp|azure|splunk|ndjson
protocol: loki і protocol: splunk тут означають прийом логів, вже
оформлених у форматі Loki push API чи Splunk HEC — це не пов'язано з Grafana Loki / Splunk HEC
у списку Outputs вище, які, навпаки, надсилають події на ці платформи.
40+ готових рецептів у 14 категоріях: усі підтримувані сервери (nginx, Apache, Caddy, Traefik, HAProxy, LiteSpeed), усі виконавці (Cloudflare, MikroTik, OpenWrt, OPNsense), усі observability-приймачі (Loki, Splunk, Datadog), CMS-специфічні probe-шляхи (WordPress, Laravel, Drupal) та інше. Індекс у cookbook/CookBook.uk.md — кожен рядок веде просто до робочого *.yaml.
5 категорій рецептів постачаються з повним Docker Compose-стеком — Cloudflare, nginx executor, syslog, MikroTik, Fail2Ban — плюс окрема директорія Kubernetes. Не лише конфіг ArxSentinel, а весь референсний деплой.
3 повноцінних робочих приклади multi-node Distributed NCS у cookbook/distributed-ncs/ — базовий, edge aggregation та mixed routing. Ті самі топології, що описані в гайді вище, перевірені реальними multi-container CI-прогонами під час кожного merge.
Пакет робить все сам: бінарник, systemd unit, Fail2Ban config та системний користувач.
# Працює на Debian, Ubuntu, Fedora, RHEL, AlmaLinux, Rocky Linux, Arch Linux # Скрипт сам визначає дистрибутив та архітектуру (amd64 / arm64) curl -fsSL https://raw.githubusercontent.com/mr-addams/arxsentinel/main/scripts/get.sh | sudo bash
Скрипт завантажує потрібний пакет з GitHub Releases, встановлює через системний менеджер пакетів, перевіряє наявність fail2ban, автоматично визначає шлях до access.log та запускає сервіс.
# Потрібен Go 1.26+ git clone https://github.com/mr-addams/arxsentinel cd arxsentinel sudo ./scripts/install.sh sudo systemctl enable --now arxsentinel
# Docker — дистроблес-образ (~12 МБ), uid 65532, amd64 + arm64 docker run -d \ -v /var/log/nginx/access.log:/var/log/nginx/access.log:ro \ -v /var/log/arxsentinel:/var/log/arxsentinel \ -p 127.0.0.1:9117:9117 \ ghcr.io/mr-addams/arxsentinel:latest
Метрики Prometheus доступні на :9117/metrics одразу після запуску.
Docker Compose та Kubernetes (Helm DaemonSet) — докладні посібники:
README.docker.md ·
Kubernetes (Helm) README
# Нативний бінарник — 386 / amd64 / arm / arm64. Окремий інсталятор + rc.d-сервіс. fetch https://github.com/mr-addams/arxsentinel/releases/latest/download/arxsentinel_<version>_freebsd_<arch>.tar.gz tar xzf arxsentinel_<version>_freebsd_<arch>.tar.gz cd arxsentinel_<version>_freebsd_<arch> sudo sh install.sh sysrc arxsentinel_enable=YES service arxsentinel start
Створює системного користувача arxsentinel, встановлює rc.d-сервіс і засіває конфіг із прикладу (при повторному запуску наявний конфіг не перезаписується).
Запускаєте веб-сервер у podman на FreeBSD? Повний посібник — драйвер сховища, налаштування firewall, особливості контейнерної мережі:
FreeBSD Deployment Cookbook
/etc/arxsentinel/config.yaml та вкажіть шлях до access.log. nginx працює без профілю. Для Apache, Traefik, Caddy, HAProxy або LiteSpeed вкажіть parser.profile з назвою сервера. Конфіг перезавантажується по SIGHUP — перезапуск не потрібен.
Записування IP загроз прямо в набори IP-правил AWS WAF. Інтегрується з існуючими групами WAF — не потребує Lambda або кастомної інфраструктури.
Парсинг auth-логів sshd (syslog/journald) і скоринг brute-force / credential-stuffing патернів виділеними детекторами — той самий pipeline скорингу та executor'ів, що вже використовується для HTTP.
Відправлення загроз у Telegram, Slack та PagerDuty — з вбудованою дедубліцією та rate-limiting, щоб спалах ніколи не затопив канал.