Skip to content

node-accelerator v3.7: FW_MODE=strict|open|skip (совместимость с 3x-ui) - #15

Merged
jestivald merged 1 commit into
jestivald:mainfrom
kewldan:v3.7-fw-mode
Jul 2, 2026
Merged

node-accelerator v3.7: FW_MODE=strict|open|skip (совместимость с 3x-ui)#15
jestivald merged 1 commit into
jestivald:mainfrom
kewldan:v3.7-fw-mode

Conversation

@kewldan

@kewldan kewldan commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Зачем

protect.sh всегда ставил allowlist-файрвол (policy drop: всё, кроме SSH/сервисных/node-agent портов, блокируется). Для Remnawave node это норма — порты известны заранее. На 3x-ui inbound-порты создаются из панели динамически → strict-файрвол молча резал панель и inbound'ы.

Что сделано

FW_MODE=strict|open|skip (protect.sh)

  • strict (дефолт, прежнее поведение) — блокировать все не перечисленные порты;
  • open — вся защита (flag-drop / анти-спуф / SYN+UDP-flood / SSH-бан / CrowdSec / автобаны) активна, но не перечисленные порты не блокируются (policy accept + catch-all accept). Анти-скан автобан не ставится («закрытых» портов нет — meter банил бы легитимные коннекты к inbound-портам), node-port правила тоже (на 3x-ui NODE_PORT может оказаться чьим-то inbound'ом);
  • skip — nftables не трогаем вообще (CrowdSec/ctguard — по своим флагам) + печатается инструкция, как закрыть порты вручную (модулем / голым nft-allowlist'ом / ufw). При найденной ранее установленной na_filter интерактивно предлагает её снять.

UX

  • Интерактивный прогон задаёт вопрос: блокировать / не блокировать / пропустить.
  • Автодетект 3x-ui (x-ui.service / /usr/local/x-ui / x-ui в PATH): дефолт вопроса сдвигается на open + громкий warn; strict при найденном 3x-ui тоже ругается.
  • Неинтерактивно дефолт прежний (strict) — существующие Remnawave-прогоны не меняются.
  • FW_MODE персистится в protect.conf / protect.installed (ре-ран помнит выбор, ENV переопределяет).

Сопутствующее

  • diagnose.sh: fw_mode в --json; осознанный skipinfo, а не WARN «защита не стоит»; активная таблица в open подписывается честно.
  • fleet-sync/блоклисты живут в сетах na_filter → при skip пропускаются громко; ctguard независим.
  • CI: DRY_RUN FW_MODE=open/skip на матрице дистрибутивов (реальный nft -c), отказ на кривом FW_MODE.
  • apply-smoke.sh: полный apply-path всех трёх режимов под set -u (policy drop/accept, отсутствие анти-скана и node-port в open, отсутствие артефактов файрвола в skip).
  • README (фичи, ENV-таблица, пример 3x-ui), CHANGELOG v3.7, NA_VERSION=3.7.

Проверено

  • bash -n по всем скриптам — чисто.
  • bash tests/apply-smoke.sh — OK (strict/open/skip).
  • Сгенерированные rulesets просмотрены глазами (strict идентичен прежнему выводу).

Заметки к релизу

  • .minisig-подписи модулей инвалидированы правками — пересоздать при релизе по RELEASING.md.
  • Примеры NA_REF=v3.6 в README/install.sh не трогал: тег v3.7 ещё не существует.

🤖 Generated with Claude Code

…-ui (v3.7)

Раньше protect.sh всегда ставил allowlist-файрвол (policy drop) — норма для
Remnawave node, но на 3x-ui inbound-порты создаются из панели динамически, и
strict молча резал панель и inbound'ы. Теперь:
- strict (дефолт, прежнее поведение) — блок всех не перечисленных портов;
- open — вся защита (flag-drop/анти-спуф/флуд-лимиты/SSH-бан/CrowdSec) без
  блокировки прочих портов; анти-скан автобан и node-port правила не ставятся;
- skip — nftables не трогаем (только CrowdSec) + инструкция, как закрыть
  порты вручную; предлагает снять ранее установленную na_filter.

Интерактивный прогон спрашивает режим; найден 3x-ui → предлагается open +
громкий warn. FW_MODE персистится (protect.conf, protect.installed).
diagnose: fw_mode в --json, осознанный skip = info, а не WARN.
CI: DRY_RUN open/skip + отказ на кривом FW_MODE; apply-smoke: все три режима.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jestivald

Copy link
Copy Markdown
Owner

Смержено в main через релизную ветку #16 (авторство коммита сохранено) и выпущено как v3.7. Спасибо за отличный PR — дефолты не тронуты, смоук на все три режима, персист и honest-diagnose сделаны ровно как надо. 👍

Сверху доехал один догоняющий коммит: в open неперечисленные порты (динамические inbound'ы, ради которых режим и существует) уходили в catch-all accept совсем без анти-флуда — per-IP SYN-rate/conn-limit/UDP-rate собираются per-port и покрывали только TCP_PORTS/UDP_PORTS. Теперь catch-all в open даёт им те же per-IP лимиты (сверх лимита — транзитный drop пакета, не бан, чтобы не словить ложные баны на легитимных inbound'ах). Плюс пересозданы .minisig и поднят NA_REF в примерах.

CI 6/6 зелёный, тег v3.7 — latest.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants