Commit Graph
79 Commits
Author SHA1 Message Date
hacker07 d127a92785 v1.2.19: extra объявлена пустой (set -u валил установку) + правило в FORK.md 2026-10-13 23:59:29 +03:00
hacker07 d0bfb2dc38 v1.2.18: свой домен из меню не подменяется запасным сайтом (не перезаписывать выбор, не проверять TLS своего домена) 2026-10-13 23:52:02 +03:00
hacker07 73754dbc01 v1.2.17: меню маскировки первым (меню автора не перебивает) + исправление ask_yes 2026-10-13 23:39:50 +03:00
hacker07 c261d27b80 v1.2.16: возвращён ask_yes; гейт на «определение раньше вызова» 2026-10-13 23:34:02 +03:00
hacker07 4a9e452e3e v1.2.15: меню 9/10/11, снос с добивкой, меню маскировки как просил, быстрый скан, швы пересобраны (63 шва, воспроизведение побайтово) 2026-10-13 23:20:18 +03:00
hacker07 9aa93fad37 v1.2.14: меню выбора сайта маскировки по скану + снос не обрывается на set -e 2026-10-13 22:52:33 +03:00
hacker07 143b41c84e v1.2.13: вопросы до установки (доступы в самом конце) + гейты по выбранным протоколам 2026-10-13 22:38:23 +03:00
hacker07 01662ff039 v1.2.12: не сканировать соседей по подсети, если XHTTP и MTProto не выбраны 2026-10-13 22:33:23 +03:00
hacker07 0daaf65b5c v1.2.11: снос убирает kit-limit и находит свои службы по шаблонам 2026-10-12 22:55:04 +03:00
hacker07 77f98da99a v1.2.10: убран мусор в выводе установщика + гейт на строки-сироты 2026-10-12 22:40:05 +03:00
hacker07 6fb7d6c59c v1.2.9: снос убирает всё (список по коду установщика) + проверка после сноса + флаг --clean у установщика 2026-10-12 22:35:57 +03:00
hacker07 6323c28533 v1.2.8: доступ к панели в конце установки; kit local uninstall + пункт 10 в меню (SSH не трогает) 2026-10-12 22:26:47 +03:00
hacker07 8d470f3eb1 3X-UI_autoVPS: баннер Hacker 07, новое имя вместо 3X-UI KIT, терпимая шапка релиза; -дублирование подсказки SSH; робот без --apply 2026-10-12 21:30:39 +03:00
hacker07 7cc7e684d5 v1.2.7: в конце установки — подписка, QR-код и ссылки по протоколам (--no-sub); расписание возвращено на 03:30
Синхронизация с автором / sync (push) Successful in 1s
2026-10-12 21:16:00 +03:00
hacker07 4ed9c5ceb5 v1.2.6: обёртка спрашивает про ping, автообновления, порт SSH и пароль 2026-10-12 20:14:07 +03:00
hacker07 70e2a499c7 v1.2.5: суммы релиза в POSIX-виде (без звёздочки) — kit сверяет имя строго 2026-10-12 19:40:04 +03:00
hacker07 934077c56f v1.2.4: флаг --verify-only и проверка подписи до всех предполётных проверок 2026-10-12 19:37:36 +03:00
hacker07 2e875aaa2f v1.2.3: установка одной командой (3x-ui-local.sh) — релиз из нашего канала + защита сервера 2026-10-12 19:36:00 +03:00
hacker07 c83fde40e4 v1.2.2: команды защиты сервера (ssh/ping/passwd/upgrades/hardening из vps-setup, безопаснее) 2026-10-12 19:24:18 +03:00
hacker07 7b30cd9b23 fork: швы поверх upstream 1.2 — источник Gitea, ключ подписи форка, версия 1.2.1 2026-10-12 19:03:16 +03:00
maxdmitrov 018d9cefa2 --restore: файлы настроек копии – только печатные ASCII, нулевой байт больше не выключает проверку
Нулевой байт в kit.env, install-result.env или kit-backup.env заставлял GNU grep считать
файл двоичным и молчать: safe_env «проходил», а bash при «.» выкидывал нулевые байты
и выполнял остальное (лишние имена вроде PATH и KIT_CLI_URL).

- проверка архива отклоняет три файла настроек с байтами вне 0x20–0x7E и \n (и больше 64 КиБ),
  3x-ui.txt – не UTF-8 или с управляющими символами (кроме \n и \t), больше 1 МиБ;
  проверяются все записи с таким именем, в том числе повторные;
- safe_env: сначала tr – только печатные ASCII и \n, затем grep -a под LC_ALL=C;
- grep -a там, где kit и установщик читают свои файлы настроек (kit.sh: замена токена API);
- отрицательные тесты: \0, \r, \x1b, \x80, \xff в начале, в середине, в конце, отдельной строкой
  и в значении в каждом из трёх файлов, повторная запись в архиве, 3x-ui.txt.
2026-10-06 18:58:38 +03:00
maxdmitrov 25df91e79a Hysteria2: заглушка байт в байт как у nginx
$(cat …) срезал последний перевод строки, и страница masquerade была на
байт короче той, что отдаёт nginx. Читаю файл целиком (установщик и
kit net masq on), запасная запись страницы – без лишнего перевода строки.
2026-10-06 18:40:01 +03:00
maxdmitrov 387d6ae66e nginx: путь панели и подписки перед сборкой конфига – только буквы, цифры, _ и -
XUI_WEB_BASE_PATH из install-result.env (при --restore – из копии) шёл в
«location ... {» как есть: строка с фигурными скобками добавляла в nginx
чужие директивы. Значение теперь проверяется при --restore (прошлая правка)
и ещё раз там, где собирается nginx: setup_nginx в 3x-ui.sh, kit net panel
и пути подписки в kit.
2026-10-06 18:38:08 +03:00
maxdmitrov 397804faa7 --restore: значения в файлах настроек копии – по формату каждого поля
Имена в kit.env, kit-backup.env и install-result.env проверялись по белому
списку, а значения – нет: MTPROTO_INNER из чужой копии попадал в выражение
sed в kit (флаг e – выполнение команды). Теперь у каждого имени свой формат
(порты – цифры, пути – буквы и цифры, хосты, флаги – допустимые слова),
кавычки – только пустые (''), неверное значение – копия отклоняется.
kit: sed с портом MTProto – только если порт число. Тесты на все поля.
2026-10-06 18:36:48 +03:00
maxdmitrov 5449a73fd8 Заглушка: окончания названий распределены ровнее
«Studio» было в вариантах у девяти тем из двадцати и заканчивало каждое пятое
название. Теперь ни одно окончание не встречается больше чем в двух вариантах
(около 3% названий); тест проверяет, что самое частое окончание – меньше 8%.
2026-10-06 17:06:26 +03:00
maxdmitrov 1aa9a84e96 --restore: копия с пустой папкой сертификата отклоняется до установки
Архив с root/cert/self или root/cert/custom без fullchain.pem/privkey.pem проходил
проверку, ставил 3X-UI и падал на копировании сертификата. Теперь проверка архива
требует оба непустых файла, а для копии со своим сертификатом (BACKUP_SSL=custom) –
папку root/cert/custom. Отрицательные тесты – в tools/test/restore_archive_test.py.
2026-10-06 17:00:59 +03:00
maxdmitrov 25848a24c1 --restore: самоподписанный сертификат, если Let's Encrypt не выдал его на новый IP
Подключения из копии ссылаются на /root/cert/ip, а без файла Xray не стартует,
хотя установщик писал «Готово». Теперь перед запуском панели проверяю файлы
сертификатов из базы; если нет – кладу самоподписанный на тот же путь (только
/root/cert/ip или /root/cert/self) и закрепляю отпечаток в подключениях, как при
обычной установке. Предупреждение – сразу и в блоке «Внимание».

В конце жду процесс Xray: если не поднялся – вместо «Готово» красное сообщение
и код возврата 1. Тест: tools/test/restore_archive_test.py.
2026-10-06 16:58:53 +03:00
maxdmitrov 888a4cb46b Заглушка: случайная страница при установке вместо девяти фиксированных
stub_site собирает страницу из частей: 20 тем (кафе, пекарня, фотограф, заметки,
мастерские, документация и т. п.) × 5 вёрсток = 100 вариантов, плюс случайное
название, подзаголовок, 3 пункта из 5, адрес, палитра, шрифт и скругление.
Без внешних ресурсов, UTF-8. Вымышленный бренд из старых шаблонов убран, в том числе
из запасной страницы kit net masq. Страница сохраняется в /var/www/kit/index.html
в обоих режимах: её показывают nginx и Hysteria2, её берёт kit net masq, её
возвращает --restore. Тест: tools/test/stub_test.py.
2026-10-06 15:54:00 +03:00
maxdmitrov 43835928bb --restore: файлы настроек из копии – только по белому списку имён, без подключения в основной shell
kit-backup.env больше не подключается через «.» в установщике: значения читаются
в подоболочке (env_get). safe_env проверяет имена для каждого файла (kit-backup.env,
install-result.env, kit.env); лишнее имя – «Это не резервная копия 3X-UI KIT…».
RESULT, XUI_ENV, PATH, IFS, KIT_* из архива не принимаются, HOST в kit.env должен
совпадать с адресом копии, порт панели – число. Тест: tools/test/restore_env_test.py.
2026-10-06 15:41:16 +03:00
maxdmitrov 7741f26eb4 Убрана фраза «проверено настоящими клиентами» из changelog, инструкции, комментария и README матрицы 2026-10-06 15:23:34 +03:00
maxdmitrov 7d6f13d315 --restore: адреса из таблицы hosts и link_host меняются при смене IP; проверка панели перебирает http и https, пока панель не ответит 2026-10-06 12:08:36 +03:00
maxdmitrov 3a7b760dfc Тексты: без ссылок на операторов и блокировки в мануале и комментарии установщика 2026-10-05 21:57:06 +03:00
maxdmitrov 3ea6c0c868 kit net split: раздельная маршрутизация в Clash-подписке (rules.yaml, без утечек DNS), в копию и восстановление; kit backup работает не только из /; понятное сообщение при отказе панели 2026-10-05 21:46:51 +03:00
maxdmitrov 31bc2d5480 Установщик: «рекомендуем» у своего домена, без «mihomo» в строке о проекте, без ссылок «открыть в приложении» и без деления протоколов на группы; обновление панели проверяет подключения клиентом и откатывает при сбое; README: отдельная Hysteria2 наравне с 11 протоколами 2026-10-05 18:01:28 +03:00
maxdmitrov 97718bd3e6 Страница подписки: адреса Clash и JSON работают через kit-sub и nginx (с «Авто» и DNS), подключаются при установке и при kit update 2026-10-05 17:48:10 +03:00
maxdmitrov c4e6ed1a5d Ссылки «открыть в приложении» (Karing, Happ) рядом с подпиской: в kit user link и в итоге установки 2026-10-05 17:39:43 +03:00
maxdmitrov e818d22c65 Сертификат домена: до трёх попыток при временных сбоях Let's Encrypt 2026-10-05 17:20:00 +03:00
maxdmitrov 7425c672b8 Правки по независимому аудиту: --restore (сертификат домена, xver при сбое, LINK_HOST), REALITY-2 при панели по домену, резервная копия базы через SQLite, ответы kit-sub как у nginx, меньше параллельность подбора сайта, перемешивание запасных сайтов, нейтральные тексты 2026-10-05 16:51:26 +03:00
maxdmitrov 00319a6655 Панель и подписка по домену или по IP: kit net panel, --panel-on при установке, выбор в диалоге, возврат при --restore 2026-10-05 16:38:41 +03:00
maxdmitrov f22e043902 Тексты: нейтральные формулировки 2026-10-05 16:28:55 +03:00
maxdmitrov 7161ef6fe8 systemd старше 247: установщик останавливается с понятным сообщением (kit-sub без root требует LoadCredential), kit update не трогает юнит 2026-10-05 16:01:52 +03:00
maxdmitrov 21c3ac18c2 DNS: безопасный dns в Clash-подписке (kit-sub), DoH в Xray JSON (kit net dns), AmneziaWG вне автовыбора; проверено клиентами Mihomo и Xray 2026-10-05 16:00:59 +03:00
maxdmitrov 85f3535a1c Hysteria2: ответ страницей сайта на чужой HTTP/3-запрос (masquerade, kit net masq); kit check --deep проверяет и Hysteria2, с повтором при перезапуске ядра 2026-10-04 20:44:45 +03:00
maxdmitrov 844ac083b3 Установщик: соседи для XHTTP и MTProto, повтор итоговой проверки, имена с сомнительными словами не берём; kit net site предупреждает о запасном сайте 2026-10-04 20:41:24 +03:00
maxdmitrov f7ac1ddf49 Установщик: шаги [1/6]–[6/6], выбор маскировки (домен, сосед по подсети, свой сайт), блок ссылок по группам, итог с блоком «Внимание», адрес в ссылках LINK_HOST (домен в ссылках и MTProto), REALITY-2 не ставится по умолчанию, новая заглушка вместо «Welcome to nginx» 2026-10-04 20:28:24 +03:00
maxdmitrov 0a9cce18b6 kit 1.2: меню как у x-ui (kit без аргументов), kit net (протоколы, порты, сайт, отпечаток, вкл/выкл), блок ссылок по группам, kit check --fix, kit update --panel; версия 1.2 2026-10-04 20:20:20 +03:00
maxdmitrov 4246031ff9 Второй REALITY на высоком порту: ставится установщиком, kit reality add для существующих серверов; kit check --deep подписывает XHTTP и порт 2026-10-04 19:57:17 +03:00
maxdmitrov 4b336d7395 --restore: чистка WAL-файлов перед подменой базы (иначе база «битая»), включение таймера общего лимита 2026-10-04 19:39:02 +03:00
maxdmitrov 31db2d30a4 --restore: восстановление из kit backup возвращено (проверка архива, смена IP), будет проверено на чистом сервере 2026-10-04 19:28:32 +03:00
maxdmitrov 88feba6190 Маскировка: свой домен предлагается первым, предупреждение о чужом сайте; три заглушки под облачный сервис; kit sni и kit sni rotate (в том числе --nearby) 2026-10-04 19:03:01 +03:00