Commit Graph
54 Commits
Author SHA1 Message Date
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 77f98da99a v1.2.10: убран мусор в выводе установщика + гейт на строки-сироты 2026-10-12 22:40:05 +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 a1ce2f1c54 kit help: полный справочник по категориям + проверка, что справка не отстала от команд 2026-10-12 21:21:21 +03:00
hacker07 6b497b047d Робот ежесуточной синхронизации с автором + workflow Gitea Actions (расписание 03:30)
Синхронизация с автором / sync (push) Successful in 2s
2026-10-12 21:10:32 +03:00
hacker07 96823d74f1 README переписан целиком (команда, флаги, протоколы, заглушки, команды, канал) + свои картинки 2026-10-12 20:42:07 +03:00
hacker07 ca5a57db55 v1.2.6: заглушка №1 — дата-аналитика вместо хостинга; гейт по переводам строк выше проверки коммита 2026-10-12 20:37:50 +03:00
hacker07 628130992d LF во всех файлах релиза + гейт в release.sh (CR ломает суммы и запуск на сервере) 2026-10-12 20:31:20 +03:00
hacker07 0f31fc1739 docs: шапка README с предупреждением о форке + пояснение в FORK.md
CI / check (push) Canceled after 0s
2026-10-12 20:01:01 +03:00
hacker07 70e2a499c7 v1.2.5: суммы релиза в POSIX-виде (без звёздочки) — kit сверяет имя строго 2026-10-12 19:40:04 +03:00
hacker07 2e875aaa2f v1.2.3: установка одной командой (3x-ui-local.sh) — релиз из нашего канала + защита сервера 2026-10-12 19:36:00 +03:00
hacker07 80258f1d45 fork: полный набор швов + свои записи о версии (FORK-CHANGELOG.md) 2026-10-12 19:04:01 +03:00
hacker07 7b30cd9b23 fork: швы поверх upstream 1.2 — источник Gitea, ключ подписи форка, версия 1.2.1 2026-10-12 19:03:16 +03:00
hacker07 45b8d1c783 fork: инструменты сборки и локальные дополнения (швы, синхронизация с автором) 2026-10-12 15:16:32 +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 f7a8475c88 kit-sub: Connection: keep-alive и ALPN http/1.1, как у nginx
На ответах, после которых соединение остаётся открытым, – «Connection: keep-alive»,
перед закрытием – «Connection: close» (раньше заголовка не было вовсе). На своём TLS
(--multi-port) kit-sub соглашается на ALPN http/1.1, как nginx без http2; клиент,
предложивший только h2, получает соединение без ALPN. Тесты – в kitsub_http_test.py.
2026-10-06 17:03:57 +03:00
maxdmitrov 220d82c01e kit-sub: на мусорную строку запроса – «HTTP/1.1 400 Bad Request», как у nginx
Python считал такой запрос HTTP/0.9 и отвечал одним телом, без строки статуса и
заголовков. Теперь ошибки разбора запроса идут со строкой статуса HTTP/1.1,
Server: nginx и Connection: close. Тесты – в tools/test/kitsub_http_test.py.
2026-10-06 17:02:34 +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 972757ed75 kit net: перезапуск ядра Xray, если правка на ходу закрыла порт; kit check видит упавшее ядро и UDP
Панель 3.9.0 меняет подключение через API ядра: старое удаляет, а новое с маскировкой
Hysteria2 ядро 26.6.27 не принимает, и 443/udp закрывается (kit net masq on, kit net fp,
kit net on). Теперь после правки kit сверяет порты и при нужде перезапускает ядро
(server/restartXrayService, запасной путь – systemctl restart x-ui).

kit check: процесс Xray (дочерний у x-ui) и порты всех включённых подключений,
TCP и UDP отдельно (nginx на 443/tcp больше не считается за Hysteria2). kit fix
перезапускает ядро. Тест: tools/test/kit_ports_test.py.
2026-10-06 16:50:04 +03:00
maxdmitrov 159c1b271d Hysteria2: отдельный установщик убран из 1.2, на его месте заглушка
scripts/hysteria2.sh остаётся в подписанном релизе: старая `hy2 update`
скачает его, сверит SHA256, запустит `__update_binary`, получит код 1
с подсказкой и не заменит команду hy2. Заглушка ничего не удаляет и не
останавливает. Hysteria2 по-прежнему входит в основную установку.

Убраны мануал hysteria2.md и его картинки, проверка одинаковых ключей
kit/hy2 в release.sh и CI, строка Hysteria в check-upstream.sh.
2026-10-06 16:10:07 +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 da07108a83 core-compat: mihomo и sing-box – только с проверкой SHA256
Если GitHub не прислал digest архива, клиенты больше не ставятся без проверки:
скрипт останавливается с понятной ошибкой. Сумму можно закрепить вручную
(MIHOMO_SHA256, SINGBOX_SHA256), формат – 64 hex.
2026-10-06 15:43:30 +03:00
maxdmitrov 42be16a5a2 kit-sub: ответы по HTTP/1.1, как у nginx
В режиме --multi-port kit-sub отвечал строкой статуса HTTP/1.0 и «Server: nginx »
с пробелом. Теперь protocol_version = HTTP/1.1, заголовок Server без хвоста;
на ответы, после которых соединение закрывается (ошибки разбора, POST и т. п.),
добавлен Connection: close. Тест: tools/test/kitsub_http_test.py.
2026-10-06 15:42:30 +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 635c909426 Откат 28a7917: формат sing-box для Karing и Hiddify не применяется клиентами (Karing игнорирует правила, Hiddify не показывает серверы) 2026-10-06 14:12:41 +03:00
maxdmitrov 8e2215f9f4 kit net split: Karing и Hiddify получают конфиг sing-box с правилами (route, dns без утечек, наборы .srs через VPN); kit net split check сверяет и наборы sing-box; тесты 2026-10-06 13:58:01 +03:00
maxdmitrov c1710d10d5 kit-sub: JSON-подписка с Content-Type text/plain определяется по телу и получает encryption none; RecursionError ловится; интеграционные тесты 2026-10-06 13:28:48 +03:00
maxdmitrov 81ae0337b4 kit-sub: JSON-подписка панели – vless без encryption получает none (обе формы, непустое не трогаем) 2026-10-06 13:25:14 +03:00
maxdmitrov 73bbaadd48 kit net split: маршрутизация для Happ (заголовок Routing) и JSON-подписки Xray через настройки панели, kit net split apply; проверено клиентами Mihomo и Xray 2026-10-06 11:16:20 +03:00
maxdmitrov d74ef02d65 kit net split: правила только приложениям на ядре Mihomo (Karing и другие на sing-box получают подписку прежней) 2026-10-05 23:10:15 +03:00
maxdmitrov a8a4aae6b3 kit net split: полный список популярных иностранных сервисов, проверка GEOSITE и GEOIP по базе, прощающий разбор файла, проверка прав на файл 2026-10-05 21:54:28 +03:00
maxdmitrov 3ea6c0c868 kit net split: раздельная маршрутизация в Clash-подписке (rules.yaml, без утечек DNS), в копию и восстановление; kit backup работает не только из /; понятное сообщение при отказе панели 2026-10-05 21:46:51 +03:00
maxdmitrov 1c71ff5c24 tools/core-compat.sh: проверка нового ядра Xray клиентами Mihomo и sing-box с подменой ядра и возвратом; check-upstream показывает версии клиентов 2026-10-05 18:15:45 +03:00
maxdmitrov 2e40b85fd4 tools/check-upstream.sh: сравнение закреплённых версий с последними релизами 2026-10-04 01:48:13 +03:00
maxdmitrov d751093bbd kit panel update: проверенная версия панели без смены ядра и настроек, откат при сбое; kit fix возвращает проверенное ядро; предупреждения о версии панели; tools/release.sh сверяет суммы 2026-10-04 01:42:55 +03:00
099117c2a7 1.1.1: kit check и kit fix, заголовки Happ, безопасная загрузка ядра, инструкция XKeen
- kit check и kit fix: проверка служб, сертификата, подписки, сайта маскировки, прав на файлы; безопасная починка
- kit-sub: пропускает заголовки Happ (Routing и др.) до клиентов
- ядро Xray: запасная загрузка через зеркало только с проверкой SHA256, tools/release.sh сверяет суммы с официальными
- установка со своим доменом: при отказе Let's Encrypt предлагается самоподписанный сертификат
- README: инструкция XKeen, команды kit, новый баннер; правки инструкций и changelog

Co-authored-by: xlok1e <124461726+xlok1e@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 16:47:12 +03:00
maxdmitrov 49b27f380a chore: права на выполнение tools/release.sh
CI / check (push) Canceled after 0s
2026-10-02 21:44:26 +03:00
maxdmitrovandClaude Sonnet 5.5 1775c0cd95 1.1: единый релиз – генератор для роутера, README и changelog вместе
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 14:26:32 +03:00
maxdmitrovandClaude Sonnet 5.5 e09f137c98 Генератор: одна страница для Keenetic (Xray, Mihomo) и OpenWrt (Nikki), оформление KV
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 14:10:35 +03:00
Claude 0a19858efa 1.1: подписанное автообновление, kit backup и --restore, случайная заглушка
- kit update ставит только релизы, у которых SHA256SUMS подписан ключом автора
  (ssh-keygen -Y verify), версия внутри подписи совпадает, файлы сошлись с хешами;
  откат на старую версию запрещён; после обновления проверяется подписка, иначе возврат
- автообновление: systemd-таймер раз в сутки ночью со случайной задержкой,
  kit update --manual / --auto, журнал /var/log/kit-update.log
- hy2 update тоже проверяет подпись
- tools/release.sh: проверка версий и хеша установщика 3X-UI, SHA256SUMS и подпись
- kit backup и 3x-ui.sh --restore: архив 600, строгая проверка архива, конфиги nginx
  и kit-sub собираются заново, смена IP в подключениях
- сайт-заглушка: случайный из шести шаблонов внутри скрипта
- zashboard закреплён на v3.29.1, короткие тире и 192.168.x.x в текстах и картинках
- CI: ключ подписи одинаковый в kit и hy2, проверка подписи релиза
- CHANGELOG, README, инструкция, SECURITY.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7GrBSRPVXhrz3RAprWDnt
2026-09-30 19:15:19 +00:00
itsnotkubrick de2a3e10c9 Репозиторий переименован в 3X-UI_KIT — новые ссылки 2026-09-27 19:45:34 +03:00