## v1.2.14: выбор сайта маскировки по результатам скана + снос, который не обрывается * **Появилось меню маскировки.** Сначала один скан подсети (~250 обращений к 443 соседних адресов), потом выбор: номер из найденного, `0` — ввести адрес вручную, Enter — автоподбор. Отдельно для **REALITY** (найденное или свой) и отдельно для **XHTTP/MTProto** (найденное, свой или известный сайт — список известных расширен Microsoft, AMD, Intel, NVIDIA). Если XHTTP/MTProto не выбраны, второго меню не будет. Отключить меню: `--auto-sni`. * **Исправлено: `kit local uninstall` обрывался на середине.** `kit` запускает наши команды с `set -e`, и подсчёт чужих сайтов nginx (`find | grep | wc -l`, где grep не находит ничего и возвращает 1) убивал скрипт сразу после остановки служб — файлы и `/usr/local/bin/kit` оставались, поэтому `kit help` продолжал работать. Теперь снос выполняется с отключённым `set -e` и все подобные конвейеры защищены; проверка после сноса это подтверждает списком, если что-то осталось. ## v1.2.13: вопросов после показа доступов нет, и никакой работы для невыбранных протоколов * **Все вопросы — до установщика.** Раньше после установки (когда на экране уже были данные входа в панель) скрипт спрашивал про ping, автообновления, порт SSH и пароль root — доступы терялись в потоке вопросов. Теперь спрашиваем всё заранее, а действия выполняем после установки; последнее, что видит человек, — доступ к панели, подписка и QR-код. * Автор тянет подписки «-awg» и «-tg» (наследие установок kit < 1.1) всегда — теперь только если AmneziaWG или MTProto выбраны. * Наши команды помнят выбор: установщик пишет список протоколов в `/etc/kit/kl-protos`, и `kit local site` не синхронизирует ответ Hysteria2, если Hysteria2 не ставился (раньше он это делал и выдавал предупреждение про отсутствующий Hysteria2). ## v1.2.12: не сканируем соседей, когда они не нужны * Автор подбирал сайты-соседи для XHTTP и MTProto **всегда**, когда маскировка доверенная («панель по IP») и всё висит на 443 — независимо от того, выбраны ли эти протоколы. При установке одного REALITY это давало ~250 обращений к чужим адресам впустую. Теперь скан идёт только если XHTTP или MTProto выбраны; иначе имена SNI2/SNI3 берутся из общего списка сайтов автора (как и раньше при неудаче скана). # Что нового в сборке форка Здесь записи о наших версиях. Файл автора (`CHANGELOG.md`) мы не трогаем — так обновления автора не конфликтуют с нашими записями. ## v1.2.6: вопросы при установке * **README.md переписан целиком:** убрано авторское описание с его командой установки, добавлены актуальная команда, флаги, таблица протоколов, список сайтов-заглушек, команды `kit` и `kit local`, канал обновлений и оговорки. Две картинки — наши (`manuals/assets/fork-banner.svg` и `manuals/assets/script-3x-ui-local.svg`, терминал собран из настоящего вывода скрипта). * Шов в README больше не нужен (`tools/fork_apply.py`): файл наш целиком, как `kit-local.sh`. ## v1.2.11: снос знает про kit-limit и находит свои службы сам * В списке сноса не было `kit-limit.service` и `kit-limit.timer` (юнит «общий лимит трафика» из kit) — его создаёт установка, а `kit local uninstall` его не убирал. Из-за этого после сноса оставался работающий таймер, который раз в 5 минут дёргал уже удалённый `kit` и падал. * Теперь снос берёт список служб **и из явного перечня, и по шаблонам `x-ui*`/`kit*`** из systemd — новая служба, добавленная автором позже, не останется незамеченной. Проверка после сноса ищет по тем же шаблонам и показывает всё найденное. * Флаг `--clean` у установщика использует тот же список. ## v1.2.10: убран мусор в выводе установщика * В шапке `scripts/3x-ui-local.sh` один из флагов потерял `#` и **при каждом запуске печаталось `--dry-run: command not found`** (до `set -e` — потому и не роняло установку, но выглядело как ошибка). Исправлено, заодно выровнены строки справки. * В релизный гейт добавлена проверка, которая такое ловит: холостой прогон установщика, чей вывод в stderr содержит «command not found / syntax error / bad substitution», релиз не собирается. ## v1.2.9: снос действительно убирает всё, повторная установка после сноса * Список удаляемого в `kit local uninstall` собран заново **по коду установщика** и дополнен тем, чего не хватало: `/usr/local/lib/kit-sub`, `/root/kit-backup-*` и `/root/x-ui-before-*` (копии kit), `/var/log/kit-install-check.log`, `/usr/bin/x-ui.new`, строка `include kit-stream.conf` в `nginx.conf`, симлинки в `sites-enabled`/`streams-enabled`, файл автообновлений безопасности, пользователь `kit-sub`. Из-за пропущенных файлов установщик после сноса отказывался ставить заново («3X-UI уже установлена»). * После сноса печатается проверка **теми же условиями, что у установщика**, и список того, что осталось на диске — вместо бодрого «удалено» вслепую. * Флаг `--reset-ssh`: снести и наш ssh-дроп-ин (порт возвращается к системному). По умолчанию SSH не трогаем. * У установщика появился флаг **`--clean`**: убрать прошлую установку и поставить заново. Если установщик всё-таки упал на «уже установлена», в подсказке прямо сказано запустить с `--clean`. ## v1.2.8: доступ к панели в конце установки и снос сервера из меню * В конце установки (перед подпиской) печатается **доступ к панели 3X-UI**: адрес, логин и пароль из файла `/root/3x-ui.txt` — раньше это было видно только в общем потоке вывода установщика. * **`kit local uninstall`** — снос установки целиком: панель и служба `x-ui`, ядро Xray, службы и файлы kit (`kit-sub`, автообновление, cron), конфиги nginx и сайт-заглушка, сертификаты (acme.sh), наши правки системы (правило ICMP, обновления безопасности), наши бэкапы и файл с данными панели. Правила ufw для 80/443 снимаются, ответ на ping возвращается. Спрашивает подтверждение словом «удалить», есть `--dry-run`. **SSH не трогается** — ни порт, ни конфиги, ни правила для него: иначе легко потерять доступ к серверу. В главном меню `kit` появился пункт **10. Удалить всё установленное**. ## v1.2.7: имя 3X-UI_autoVPS, справка kit help, подписка с QR, живые кнопки на заглушках * **Сборка называется `3X-UI_autoVPS`** (было `3X-UI KIT`): баннер сервера — `Hacker 07` в том же стиле, новое имя в справке, версии, описаниях служб и в имени профиля в клиенте. В файлах автора это сделано швами (`tools/fork_apply.py`), поэтому обновление автора правки не затирает. * **Совместимость шапки релиза.** В подписанном `SHA256SUMS` этого релиза шапка пишется **двумя строками** (старая и новая), а проверка на сервере принимает обе. Иначе уже установленные серверы отказались бы ставить обновление: они сверяют точный вид строки. Со следующего релиза останется только новое имя. * Убрано дублирование подсказки «Дальше обязательно» при смене порта SSH: она печаталась и установщиком, и командой `kit local ssh`. * **`kit help` — полный справочник по категориям**: пользователи, подключения и порты, маскировка и сайт, проверка и починка, обслуживание и обновление, защита сервера (наш слой). Раньше `kit help` показывал короткий список автора и не упоминал наши команды. Чтобы справка не отставала молча, добавлена проверка `tools/check-help.sh`: она сверяет справку с диспетчером команд и встроена в сборку релиза (`tools/release.sh`). * У сайтов-заглушек все ссылки и кнопки **живые**: нажатие открывает окно «раздел в разработке, приносим извинения» (закрыть — кнопкой, кликом мимо окна или Esc). Никаких внешних запросов: скрипт и стили внутри страницы. * В самом конце установки (после всех проверок) печатается то, что нужно сохранить: **подписка с QR-кодом** и ссылки по протоколам — авторской командой `kit user link <имя> --all`, поэтому вывод совпадает с тем, что показывает `kit` потом. Отключается флагом `--no-sub`. * Набор по умолчанию — **REALITY + AmneziaWG-3.1** (самый совместимый минимум); ответ «все» ставит полный набор автора. Умолчание задаётся в одном месте (`DEFAULT_PROTOS`). * **Сайт-заглушка переделан на ИТ-тематику:** десять правдоподобных сайтов (дата-аналитика, DevOps, мониторинг, разработка, аудит, ИТ-поддержка, колокейшн, заметки про Linux, бэкапы, документация) вместо авторских «кофеен и пекарен». Ставится случайный, конкретный — `kit local site 7`, список — `kit local site --list`. Команда обновляет и файл для nginx, и копию страницы внутри подключения Hysteria2 (`kit net masq on`): если менять файл вручную, 443/tcp и UDP-порт начнут отвечать разными страницами — это заметно снаружи. * Обёртка спрашивает, **какие протоколы ставить** (нумерованный список, `1,3,11` или «все», Enter — набор автора): невыбранные протоколы не создаются вообще — ни подключения в панели, ни записей в nginx, ни ссылок в подписке. Список и умолчание взяты из самого установщика (`ALL_PROTOS`/`DEFAULT_PROTOS`), передаётся его же флагом `--protocols`, так что поведение не расходится с авторским. Свой `--protocols` можно задать флагом — тогда вопроса не будет. * Обёртка `scripts/3x-ui-local.sh` теперь спрашивает, а не решает за вас: закрывать ли ответ на ping, включать ли автообновления безопасности, **менять ли порт SSH** (Enter — оставить текущий, число — перевести на него; мусор и занятый порт переспрашивает), менять ли пароль root. Маскировку и домен, как и раньше, спрашивает установщик автора. * Смена порта SSH никогда не закрывает прежний порт сама: сначала добавляется новый, затем скрипт печатает две команды — проверить вход во втором окне и закрыть прежние (`kit local ssh --close-old`). * Запуск без флагов = «одна команда, дальше вопросы». Флаг `--yes` — наоборот, ничего не спрашивать (для автоматизации): ping закрывается, автообновления включаются, порт SSH и пароль не трогаются. * Флаг `--harden` теперь действительно существует (раньше он уходил установщику автора неизвестным параметром и ронял установку): закрыть ping и включить автообновления без вопросов. * `--dry-run` показывает, что именно будет спрошено или сделано по умолчанию. ## v1.2.5: суммы релиза в формате, который понимает kit * Исправлена ошибка нашего релизного конвейера: на Windows `sha256sum` пишет суммы как `hash *файл`, а `kit` на сервере сверяет имя строго (`$2 == "файл"`) — то есть `kit update` отклонил бы релизы v1.2.1–v1.2.4 как «в подписанном списке нет такого файла». Теперь `tools/release.sh` приводит список к POSIX-виду (`hash файл`) **до** подписи. * `scripts/3x-ui-local.sh` принимает оба формата, чтобы не спотыкаться о суммы, собранные на другой машине. * Проверка теперь повторяет логику самого `kit`: подпись `SHA256SUMS` + строгая сверка имени каждого файла из подписанного списка (а не только `sha256sum -c`, который звёздочку прощает). ## v1.2.4: проверка релиза отдельной командой * Флаг `--verify-only`: скачать релиз, проверить подпись `SHA256SUMS` и SHA256 установщика и выйти — можно проверить канал на сервере, ничего не устанавливая. * Порядок шагов изменён: проверка подписи теперь идёт до предполётных проверок и до любых изменений на сервере, чтобы чужой код не запускался раньше проверки. ## v1.2.3: установка одной командой (`scripts/3x-ui-local.sh`) * Один скрипт на чистом VPS: проверка сервера → скачивание нашего релиза → проверка подписи `SHA256SUMS` и SHA256 самого установщика → установщик автора (панель 3X-UI, протоколы, сайт-заглушка, маскировка, сертификат, подписка, ufw) → наши дополнения → проверка. * По умолчанию досыпает: закрыть ответ на ping (правилом ufw), включить обновления безопасности, `kit fix` (время и безопасные починки), в конце `kit check` и сводку `kit local hardening`. Отключается флагами `--no-harden`, `--no-time`, `--no-check`. * Второй порт SSH — только по явному флагу `--ssh-port N`: прежний порт продолжает работать, закрытие — отдельным шагом `kit local ssh --close-old N`. Автоматически доступ не запираем. * Все флаги установщика автора (`--domain`, `--sni`, `--panel-on`, `--host`, `--restore` …) передаются как есть; есть `--dry-run` (план без изменений) и `--help`. * Публичный ключ форка вшит в обёртку — подпись проверяется до запуска чужого кода; при смене ключа обновляется и здесь, и в `kit`. ## v1.2.2: команды защиты сервера (поведение из StressOzz/vps-setup) * Новые команды `kit local`: `ssh <порт>` (добавить порт SSH), `ssh --close-old` (закрыть прежние порты), `ping off|on` (не отвечать на ICMP echo), `passwd [--generate]` (сменить пароль), `upgrades on|off|status` (автообновления безопасности), `hardening` (сводка по защите сервера). * Сделано безопаснее, чем в источнике: конфиг sshd проверяется через `sshd -t` **до** перезапуска, новый порт сначала открывается в ufw, прежний порт продолжает работать до отдельного шага `--close-old`, у правок есть `--dry-run`, а копии изменённых файлов остаются в `/root/kit-local-backup-<дата>/` (не в `/tmp`). * `apt full-upgrade` из источника не выполняется: вместо него включаются обновления безопасности (только security, без самовольной перезагрузки) — это не затрагивает закреплённые версии панели и ядра, которые ставятся не из apt. * Учтён Ubuntu 24.04: если SSH слушает systemd (`ssh.socket`), порт добавляется socket-drop-in'ом, а закрытие старых портов не делается автоматически — там ошибка запирает доступ к серверу. * Ping отключается правилом ufw (`before.rules`), а не общесистемным `icmp_echo_ignore_all`: видно в `ufw status`, отменяется одной командой и не глушит ICMP для внутренних интерфейсов. ## v1.2.1: сборка форка поверх 3X-UI_autoVPS 1.2 * Источник файлов и обновлений — свой репозиторий Gitea: установка и `kit update` берут релиз оттуда, а подпись релиза проверяется ключом форка. Авторский ночной апдейт приходит в наш канал, поэтому наши доработки не стираются ночью. * Дополнения форка живут отдельным файлом `/usr/local/lib/kit/kit-local.sh` и подключаются одной строкой: `kit local help | version | channel | seams | masking`. * Наш файл едет в том же подписанном релизе, что и код автора: он входит в `SHA256SUMS`, проверяется по подписи и обновляется вместе с `kit`. * Швы в коде автора описаны в `tools/fork_apply.py` (источник правды), синхронизация с автором и проверки — `tools/fork-sync.sh`. Основа — 3X-UI_autoVPS 1.2 (панель 3X-UI v3.9.0, ядро Xray v26.6.27). Что нового у автора — в `CHANGELOG.md`.