Два дня назад мы собирали WAF из деталей: Coraza + OWASP CRS, SecLang-конфиги, час тюнинга исключений. Путь рабочий, но конструкторный — он предполагает, что вы готовы читать чужие правила и править их руками. У Chaitin Tech ставка противоположная: их SafeLine — self-hosted WAF «как продукт»: панель управления, semantic-движок детекта вместо regex-правил и ноль конфигурации на старте. Ниже — что он ловит из коробки, чем бесплатная редакция отличается от Pro, кому он подходит больше Coraza — и как устроена программа, по которой за статью вроде этой дают платную Pro-лицензию бесплатно.
Содержание
Открыть содержание
Проблема: сигнатуры против обфускации
Классический WAF-детект — это regex-сигнатуры по сырым кускам запроса: ModSecurity и CRS гоняют строки параметров через сотни правил вида «найти union select». Плюс подхода — прозрачность: каждое правило видно и правится. Минус — вечная гонка вооружений. Пейлоад ' OR 1=1-- матчится тривиально, но %27%20OR%202%3E1, спрятанный в кодировке или разбитый комментариями SEL/**/ECT, — уже нет. Ответ сигнатурного мира — больше правил на больше вариантов записи, и каждая новая сигнатура тащит риск ложного срабатывания на легитимном тексте. В статье про Coraza это проявилось как дилемма paranoia level: выше уровень — шире охват и больше false positives.
Semantic-анализ меняет точку приложения усилий: не «искать подстроку», а «понять запрос». Движок парсит HTTP-параметры в структуры — условный SQL-AST для инъекций — и ищет признаки атаки уже в структуре. Обфускация меняет байты, но не смысл: %27 и ' для парсера одно и то же.
Что такое SafeLine
SafeLine — self-hosted WAF от Chaitin Tech, китайской компании, выросшей из attack-defense-команд. Открытый репозиторий собрал 22 800+ звёзд, на сайте Chaitin отчитываются за 700 000+ установок. Продукт живёт не в коде репозитория, а в docker-образах: официальный инсталлер поднимает целый стек.
Что внутри:
- tengine — форк nginx, data plane: терминирует трафик, слушает 80/443;
- detector — тот самый semantic-движок: tengine отправляет ему запрос и ждёт вердикт;
- mgt — консоль управления на порту 9443: сайты, правила, журнал атак;
- postgres и пара сервисных контейнеров — события, конфигурация, rate limit.
Детект заявлен не только шире, но и тише: собственный бенчмарк Chaitin на 33 669 образцах даёт ModSecurity (PL1) 69,7% детекта при 17,6% false positives, а SafeLine в режиме Balance — 71,7% при 0,07%. Цифры вендорские, воспринимайте соответственно, но порядок разрыва по FP совпадает с логикой подхода: когда срабатывание привязано к структуре, а не к подстроке, «похожий на SQL» текст в тикете почти не ловится.
Помимо сигнатурного детекта из коробки работают bot protection со встроенной JS-challenge и CAPTCHA, dynamic protection — шифрование HTML/JS при каждой выдаче, rate limiting против HTTP flood, auth challenge (пароль перед доступом к сайту) и Web ACL.
Честная оговорка: «open source» тут условен. В репозитории — инсталлер, compose-файл и обвязка; сам движок детекта поставляется закрытым образом из реестра Chaitin. «Бесплатно навсегда» — да; аудируемый код, как у Coraza или ModSecurity, — нет.
Бесплатная редакция против Pro
Бесплатная редакция (в репозитории — Community, на странице тарифов — Personal) не ограничена по времени. Платная линейка: Lite за $10/мес, Pro за $100/мес, выше — Ultimate «по запросу».
| Personal — $0 | Lite — $10/мес | Pro — $100/мес | |
|---|---|---|---|
| Приложения | до 10 | до 20 | без лимита |
| Semantic-детект | ✓ | ✓ | ✓, мощнее + продвинутые конфиги |
| Гео-блок, threat intel, уведомления Discord/Telegram | — | ✓ | ✓ |
| Экспорт журнала атак | — | ✓ | ✓ |
| Кастомная страница блока, LB апстримов, master-slave | — | — | ✓ |
| Поддержка ARM | — | — | ✓ |
Кому чего хватает: Personal закрывает сценарий «блог, пет-проект, два-три внутренних сервиса» — движок и детект те же. Lite покупают ради гео-блока и уведомлений. Pro — уже прод с командой: несколько узлов, синхронизация конфигов, кастомные страницы. Для личного сайта честной нужды в Pro нет — кроме, разве что, ARM-сервера: на ARM бесплатная редакция не работает вовсе.
SafeLine против Coraza: когда какой
| Coraza + CRS | SafeLine | |
|---|---|---|
| Форма | движок-библиотека, слой в вашем прокси | продукт: свой реверс-прокси + панель |
| Правила | SecLang, CRS, полный контроль | закрытый движок, настройка из UI |
| Порог входа | знать SecLang, тюнить исключения | пять минут, ноль правил |
| Прозрачность | open source | ядро закрыто, образы вендора |
| Ресурсы | один контейнер, ~150–200 МБ | стек из ~6 контейнеров, от 1 ГБ RAM |
| Куда встраивается | Caddy, Traefik, Envoy, HAProxy, Go | только собственный прокси SafeLine |
| ARM | ✓ | только платные редакции |
Выбор сводится к вопросу «кто у вас отвечает за WAF». Если разработчик, у которого уже стоит Caddy или Traefik и который хочет WAF-слой внутри существующей инфраструктуры, — Coraza. Если времени и expertise нет, а защитить сайт надо сегодня, — SafeLine снимает вопрос конфигурации целиком. Они и не конкуренты за одно место: SafeLine заменяет связку «прокси + WAF», Coraza — только WAF внутри неё.
Что нужно, чтобы завести SafeLine перед приложением
Требования скромные: Linux x86_64, Docker 20.10.14+, compose v2, 1 CPU / 1 ГБ RAM / 5 ГБ диска и поддержка SSSE3 — последнее отсекает часть самых дешёвых VPS, проверьте заранее: lscpu | grep ssse3.
Официальный инсталлер — одна команда под root:
bash -c "$(curl -fsSLk https://waf.chaitin.com/release/latest/manager.sh)" -- --en
Он скачает compose-файл и .env в /data/safeline, поднимет стек и в конце напечатает адрес консоли https://<IP>:9443 и сгенерированный пароль. Ручной путь — три шага, если хотите видеть, что именно крутится:
mkdir -p /data/safeline && cd /data/safeline
wget https://waf.chaitin.com/release/latest/compose.yaml
cat > .env <<'EOF'
SAFELINE_DIR=/data/safeline
IMAGE_TAG=latest
MGT_PORT=9443
POSTGRES_PASSWORD=замените-меня
SUBNET_PREFIX=172.22.222
IMAGE_PREFIX=chaitin
REGION=-g
EOF
docker compose up -d
Дальше — консоль. Защищаемый сайт добавляется через UI: Applications → Add application, указываете домен и адрес апстрима — например app:80 для контейнера рядом или 127.0.0.1:8080 для сервиса на хосте. SafeLine пропишет server-блок в tengine и начнёт принимать трафик на 80/443. Остаётся направить DNS на хост с WAF — для локальной проверки хватит строки в /etc/hosts.
Как проверить, что всё работает
Три curl, как в прошлый раз:
curl -i http://ваш-домен/ # 200 — приложение отвечает
curl -i "http://ваш-домен/?id=1%20OR%201%3D1--" # 403 — SQLi, страница блока SafeLine
curl -i "http://ваш-домен/?q=%3Cscript%3Ealert(1)%3C%2Fscript%3E" # 403 — XSS
Каждый блок сразу виден в Attack Logs консоли: тип атаки, IP, география, тело запроса и — главное преимущество панели перед grep по JSON-логам Coraza — воспроизведение запроса одной кнопкой. Там же в один клик включаются bot protection и dynamic protection: первый же заход покажет JS-challenge вместо страницы.
Бюджет ресурсов проверяется docker stats: полный стек укладывается в гигабайт — уже не «контейнер на 150 МБ», но и не enterprise-appliance.
Pro-лицензия за статью: Content Contributor Program
Теперь крючок, из-за которого эта статья существует. Chaitin раздаёт Pro-лицензии за контент — Content Contributor Program:
- Формат — любой оригинальный материал: туториал, нагрузочный тест, разбор фичи, сравнительный обзор, интеграция со сторонними платформами;
- Площадки — Medium, Dev.to, Substack, личный блог, YouTube, X, LinkedIn, Reddit;
- Награды — Silver: 3 месяца Pro, Gold: 6 месяцев; уровень присваивают по качеству материала и охвату площадки;
- Подача — опубликовали, отправили ссылку: DM пользователю Carrie в официальном Discord SafeLine или на [email protected];
- Ограничение — лицензия строго для личного использования; перепродажа и коммерческое использование запрещены.
Чек-лист подачи: написать туториал (можно по этой статье) → опубликовать у себя → зайти в Discord SafeLine → отправить Carrie ссылку в личные сообщения → дождаться решения. Платить не нужно ничего: Pro-ключ просто приходит в личку.
Дисклеймер, который я обязан сделать: эта статья подана в программу. Chaitin не видел текст до публикации и не влиял на редакцию — порядок такой: пишешь что думаешь, потом отправляешь ссылку. Денег программа не платит, и сама лицензия не вечна: через 3–6 месяцев Pro либо продлевается новым контентом, либо откатывается в бесплатную редакцию — конфигурации и данные при этом остаются на месте.
Итог
SafeLine — «WAF за пять минут» для тех, кому тюнинг Coraza/CRS не по зубам или просто не нужен: один инсталлер, панель, semantic-движок, ноль правил — и бесплатная редакция без срока. Цена простоты — закрытое ядро и стек на гигабайт памяти против одного прозрачного контейнера. Выбор честный: контроль — Coraza, скорость — SafeLine. А Pro при желании тоже становится бесплатной — ценой одной честной статьи.