v2.2.5 Source Available Go Linux/FreeBSD Daemon/Docker/K8s

Від одного VPS
до розподіленого флоту —
один бінарник, нульові накладні витрати

Розподілений двигун обробки подій безпеки для будь-якого 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.

↓ Встановити GitHub
nginx / Apache / Traefik / Caddy / HAProxy / LiteSpeed access.log
Profile (формат логу · маппінг полів · тип сервера)
TailReader × N потоків (inotify · підтримка logrotate)
Parser (ngx_http_realip · CF-Connecting-IP · XFF ланцюжок)
Whitelist (IP · CIDR · UA · верифікація DNS)
WAF (рушій правил · pass / drop / tag)
Tracker (стан IP · ring buffer · лічильники rate)
Scorer (8 детекторів · лінійний decay)
threats.log
Fail2Ban → бан через iptables
8
Поведінкових детекторів
3
Топології · bare-metal · Docker · K8s
11
Родин ботів
Плагіни · будь-яка мова · exec+JSON
2
Архітектури (amd64 · arm64)
~16 МБ
Один бінарник · arm64 готовий

Будь-який сервер. Будь-який проксі. Реальний IP.

Шість серверів підтримується нативно — nginx працює без налаштування. Кожен інший сервер вмикається одним рядком профілю. Працює за будь-яким проксі або Cloudflare — завжди фіксує реального нападника, а не CDN чи балансувальник.

6
Профілів серверів
1
Рядок конфігу
0
Regex писати
Без налаштування
nginx
default parser

nginx combined log format працює з коробки — профіль не потрібен.

Один рядок
Apache
profile: "apache"

Стандартний CLF — змін на сервері не потрібно.

Один рядок
Traefik
profile: "traefik"

Стандартний access log (CLF) — налаштування не потрібне.

Один рядок
LiteSpeed / OpenLiteSpeed
profile: "litespeed"

Apache CLF за замовчуванням — змін на сервері не потрібно.

Плагін
Caddy
profile: "caddy"

Потребує xcaddy + плагін transform-encoder для CLF-виводу.

rsyslog
HAProxy
profile: "haproxy-http"

Потребує option httplog у haproxy.cfg + rsyslog для запису у файл.

За проксі? Реальний IP завжди доходить до детектора.
Cloudflare
Traefik · Caddy · HAProxy · nginx
ваш сервер
ArxSentinel
XFF chain unwrapped CF-Connecting-IP ngx_http_realip trusted proxy CIDR реальний нападник · завжди

Блокуй відомі атаки до детекторів

pass — явний білий список

Правила обчислюються першими. Правило pass, що збіглося, обриває весь пайплайн — healthcheck'и, внутрішні IP та довірені боти пропускаються миттєво, без зайвих перевірок.

drop — жорстке блокування

SQLi, path traversal, сигнатури сканерів — запити, що збіглися, відсікаються на вході і не доходять до скорера. Стан не виділяється, детектори не обробляють заздалегідь поганий трафік.

tag — маркування та продовження

Підозрілий, але неоднозначний трафік отримує мітку та додавання до рахунку, потім іде далі у pipeline. Комбінуй WAF-сигнали з поведінковими детекторами для корельованих рішень про бан.

Власні поля

Розширяй простір правил власними полями http.* — дві зміни в Go, без перекомпіляції ядра. Додай версію TLS, довжину тіла запиту або будь-яке поле з твого джерела логів.

8 детекторів — один score

Кожен детектор додає очки до рахунку IP. Score загасає лінійно за час observation_window — жодних хибних банів від старого трафіку.

Probe

Запити до чутливих шляхів: /.env, /.git/config, /.aws/credentials, /wp-config.php, /phpinfo.php, адмін-панелі, резервні архіви та ще 30+. Активна розвідка — спрацьовує негайно на першому запиті.

+25 за запит

Rate anomaly

Більше 100 запитів за 60 секунд з одного IP. Виявляє DDoS-зондування, агресивні сканери вразливостей, спалахи перебору облікових даних та скрепери, що намагаються триматися нижче статичних обмежень.

+25

Suspicious User-Agent

Регістронезалежне порівняння підрядків з вбудованими списками: сканери (Nuclei, sqlmap...), грабери (Scrapy, HTTrack...) та клієнти автоматизації (python-requests, curl...). Легко розширюється через конфіг.

+15 до +40

Bruteforce

Більше 60% відповідей — 404 за мінімум 10 запитів. Типова сигнатура інструментів перебору шляхів (dirbuster, gobuster, ffuf). min_requests запобігає хибним спрацьовуванням.

+30

Sequential crawler

П'ять і більше послідовно пронумерованих URL поспіль — /page/1, /page/2, /article/100... Характерна ознака автоматичних скреперів, що дампують цілі розділи сайту.

+20

No-asset bot

Завантажує сторінки, але запитує CSS, JS або зображення менше ніж у 10% випадків — за мінімум 3 переглядів. Реальний браузер завжди завантажує ресурси; markup-only боти пропускають статику.

+20

URL overflow / WAF bypass

URL довший за 2048 символів або який містить відомі ключові слова обходу WAF: bypass, shell, cmd, eval, exec... Спрямований на переповнення буфера та ін'єкції коду.

+30

Bad Bot Blocklist

Порівнює User-Agent (та опційно Referer) із community-maintained списком ~685 відомих поганих ботів: скрепери, SEO-краулери, спам-боти, сканери вразливостей. Список оновлюється щодня. Засновано на nginx-ultimate-bad-bot-blocker — проекті Mitchell Krog та його команди.

+60

Легітимний трафік ніколи не блокується

Автоматична верифікація

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

Запис подій загроз у лог-файл класичного формату Fail2Ban. Жодної нової інфраструктури — вивід за замовчуванням, і досі найшвидший шлях до робочого бану на будь-якому Linux-хості.

Cloudflare WAF

Додання IP загроз до Cloudflare IP List та блокування на краю мережі — без iptables, без host firewall. Пакетні операції, асинхронний polling, автоматичне TTL-закінчення та cross-instance dedup.

nginx

Запис заблокованих IP у простий blocklist-файл з автоматичним TTL-закінченням та атомарним записом. arxsentinel лише пише файл; ви підключаєте його до nginx як вам зручно. Опціональна reload-команда.

MikroTik RouterOS v7

Керування firewall address-list RouterOS через REST API. TTL-базований auto-unban, безпечне видалення лише власних записів arxsentinel, працює на CHR та ARM-маршрутизаторах.

Файервол OpenWrt через ubus

Блокування IP на роутері OpenWrt через ubus (uhttpd-mod-ubus) — без SSH, без exec. Пакетна правка UCI + один reload файервола за цикл; TTL рахує сам плагін, а не nftables-таймаути.

REST API OPNsense

Блокування IP на файерволі OPNsense через нативний REST API (alias_util) — без пакетування, зміни застосовуються негайно до pfctl-таблиці. Незалежний point add/delete на подію, активний TTL-sweep.

Надсилайте напряму у SIEM, який у вас вже є

Grafana Loki

Пряме надсилання сирих і скорованих подій у Grafana Loki через Push API. Будь-яке поле — stream-label (job, severity, stream), батчинг з gzip, опціональний mTLS. Для читабельності у платформі рекомендовано JSON-envelope.

Splunk HEC

Пересилання в HTTP Event Collector Splunk з токен-автентифікацією. JSON-режим, мультиіндекс, gzip-батчинг, опціональний mTLS. Події індексуються одразу при перетині вердиктом порога — окремий log shipper не потрібен.

Datadog Logs API

Надсилання в 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(): жодного центрального списку фабрик, фреймворк знаходить їх за іменем. Збирайте пайплайн із ролей, а не з внутрішніх хуків.

Будь-яка мова, Go не потрібен

Протокол 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 всередині потоку

Один потік може визначати кілька pipeline, кожен із власними inputs, процесорами rule-engine / WAF, детекторами та sink'ами — наприклад, один pipeline стежить за /api/* із суворим WAF-шлюзом, інший — за /admin/* з іншими порогами детекторів, обидва всередині одного конфіга потоку. Prometheus отримує лейбл pipeline на всіх векторах.

Кореляція pipeline через tracker_group

Pipeline'и з однаковим значенням tracker_group ділять один IP-state трекер: зловмисник, що промацує ваш API та адмін-панель, накопичує один спільний score замість двох окремих, перетинаючи поріг бану швидше, ніж будь-який pipeline спіймав би сам. Опустіть tracker_group (або залиште порожнім) — і буде повна ізоляція.

Впишеться в те, як ви вже розгортаєте.

Довільний формат логів

Немає підходящого профілю? Опишіть власний regex з іменованими групами або переключіться на JSON-парсинг — без перекомпіляції. Будь-який формат, що захоплює IP, timestamp, метод, шлях, статус і байти, підключається до повного пайплайну виявлення.

Профілі серверів

Готові профілі для популярних серверів. Перевизначайте позиції полів, формати дат та правила роздільників для кожного джерела логу без зміни ядра.

Docker Compose sidecar

Розгортається поруч із будь-яким контейнеризованим HTTP-сервером через спільний том логів — без змін у контейнері застосунку. Готові docker-compose.yml та конфіг у deploy/examples/docker/. Метрики Prometheus доступні на :9117.

Kubernetes DaemonSet

Один pod на вузол читає host-логи через hostPath. Включено Helm-чарт з довідкою по values та інтеграцією Prometheus Operator. Підтримується також sidecar-топологія для managed-кластерів без доступу до host-логів.

Offline config validation

Запустіть `arxsentinel validate` щоб перевірити весь конфіг перед деплоєм. Topology-aware валідатор моделює реальний потік даних та ловить зламаний дріт, використовуючи статичні plugin manifests — без live трафіку.

Pluggable queue backends

Буферизація подій executor через in-memory, file-based (bbolt), Redis — або transport-чергу, розтягнуту між машинами через шифровану мережу вузлів. Виберіть per executor для bare-metal, single-host, Kubernetes або мультивузлових схем.

Named Channel Switch

Маршрутизація подій загроз між незалежними pipelines за назвою — один pipeline може детектувати, інший примусити, повністю decoupled. А тепер та сама іменована черга може закінчуватися на іншій машині: Distributed NCS.

Збирай будь-де. Детектуй централізовано. Бань на межі.

Той самий бінарник стає колектором, детектором чи респондером — лише через конфіг, з'єднуючись вбудованою шифрованою event-мережею. Єдиний інструмент у своєму класі з вбудованим у двигун транспортом подій безпеки між вузлами: без брокера повідомлень, без log shipper'а, без ієрархії агент-сервер, без VPN.

Колектори — Pi · VPS · NAS · філія (по 12 МБ, лише парсинг)
QUIC / TLS 1.3 · Ed25519-ідентичність вузла · TOFU-пінінг (як у SSH)
Вузол-детектор — 8 детекторів · WAF · whitelist · один спільний IP-score по всіх джерелах
Скоровані вердикти маршрутизуються далі — per pipeline, на різні вузли
Респондери → роутер MikroTik · файервол OpenWrt · файервол OPNsense · nginx blocklist · Cloudflare WAF · Grafana Loki · Splunk HEC · Datadog Logs API (сирий + скорований JSON)

Шифрована мережа з коробки

QUIC на одному UDP-порту, завжди TLS 1.3, Ed25519-ключі вузла генеруються при першому старті, TOFU-пінінг fingerprints як у SSH. Взаємна автентифікація до першої події — чужинець на вашому порту не отримає нічого.

Кореляція між сервісами

Кожен колектор прокидає в один спільний per-IP score. Атакувальник, що промацує веб-шар, API та auth-сервіс, накопичує сумарний score на детекторі — і перетинає поріг бану раніше, ніж його впіймав би будь-який сервіс поодинці.

Сирі чи скоровані — обидва потоки

Прокидайте сирі розпарсені записи всередину для центральної детекції, скоровані вердикти назовні для enforcement — або обидва потоки у ваш SIEM. Префільтруйте на edge — і нехай рахунок за інжест визначають загрози, а не обсяг трафіку.

Доведено CI, а не обіцяно

Кожна документована топологія — агрегація edge-флоту, змішана маршрутизація на nginx + MikroTik/OpenWrt/OPNsense респондери — проганяється як справжній мультиконтейнерний тест при кожному merge. Діаграми в доках виконувані.

Посібник з розподіленої обробки Готові топології

Працює з вашим стеком

Читає з будь-якого джерела логів. Записує загрози в будь-який приймач. Fail2Ban залишається варіантом за замовчуванням — тепер одним із багатьох.

Джерела

nginx Apache Traefik Caddy HAProxy LiteSpeed будь-який лог-файл stdin pipe syslog-приймач HTTP (push/pull)

Приймачі

Fail2Ban Cloudflare WAF MikroTik RouterOS OpenWrt ubus OPNsense REST nginx blocklist exec+JSON stdout JSON Grafana Loki Splunk HEC Datadog Telegram (незабаром)

Приклади 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+ рецептів. Скопіюй. Заповни. Запусти.

Скопіюй, заповни, запусти

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.

Docker і Kubernetes у комплекті

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.

~16 МБ. Працює скрізь.

~16 МБ
Розмір бінарника · arm64
~25 МБ
RAM · конфіг для Pi 3B
>20k
Записів лога/сек · Pi 3B
0
Залежностей рантайму
Загрози рівня Enterprise.
Навіть на залізі Raspberry Pi.
Чистий Go-бінарник — без JVM, без Python, без витоків пам'яті. Запускається нативно на Raspberry Pi 3B (ARM Cortex-A53): ~25 МБ RAM, 22k+ записів лога на секунду — у 20 разів швидше будь-якого реального навантаження на Pi.

Без чорних ящиків. Детермінована оцінка — кожне блокування обґрунтоване й видно в структурованих JSON-логах.
YAML конфіг перезавантаження по SIGHUP JSON логи Prometheus метрики нативний arm64 Raspberry Pi 3B systemd unit

Встановлення за 3 кроки

Пакет робить все сам: бінарник, 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 — перезапуск не потрібен.

Що з'явиться у v2.x

NEXT

AWS WAF executor

Записування IP загроз прямо в набори IP-правил AWS WAF. Інтегрується з існуючими групами WAF — не потребує Lambda або кастомної інфраструктури.

PLANNED

SSH-джерело + детектори

Парсинг auth-логів sshd (syslog/journald) і скоринг brute-force / credential-stuffing патернів виділеними детекторами — той самий pipeline скорингу та executor'ів, що вже використовується для HTTP.

PLANNED

Alert sinks

Відправлення загроз у Telegram, Slack та PagerDuty — з вбудованою дедубліцією та rate-limiting, щоб спалах ніколи не затопив канал.