From 5c17e4f3d6691cb6771f9e5315545d8734495928 Mon Sep 17 00:00:00 2001 From: gilfanovr Date: Sun, 11 Oct 2026 20:58:55 +0300 Subject: [PATCH] =?UTF-8?q?fr1:=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=20=D0=9C=D0=B0=D1=80=D1=83?= =?UTF-8?q?=D1=81=D0=B5=D0=B9=20=D0=B4=D0=B5=D0=BC=D0=BE=D0=BD=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20(nginx,=20LE,=20sshd,=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C,=20audit);=20=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=8C=20DNS-=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- servers/fr1.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/servers/fr1.md b/servers/fr1.md index e2862ff..6ee407f 100644 --- a/servers/fr1.md +++ b/servers/fr1.md @@ -15,7 +15,7 @@ - ⚠️ **Группа `docker` = root-эквивалент.** `docker:x:988:rus,tgclaude` — любой её член монтирует `/` в контейнер и делает что угодно от рута (этим же способом чистились root-овы файлы 2026-09-08). Поэтому «у `tgclaude` нет sudo» **не** означает ограничения прав на хосте. - Вход с Mac: `ssh rus-161` (алиас в `~/.ssh/config`) → ключ `~/.ssh/id_161_97_93_252` (ed25519). - root-доступ по SSH закрыт; для root изнутри — `sudo -i`. -- Пользователь `marusia-tunnel` (uid 1002, с 2026-10-11) — **только обратный SSH-туннель** от rpi для вебхука Маруси (`stacks/astra-marusia/`). Shell `/usr/sbin/nologin`, пароль заблокирован, групп кроме своей нет. `~/.ssh/authorized_keys` принадлежит root (сам пользователь его не поменяет), ключ с `restrict,port-forwarding,permitlisten="127.0.0.1:18788"`. Ограничения продублированы в sshd: `/etc/ssh/sshd_config.d/70-marusia-tunnel.conf` (`Match User`: `AllowTcpForwarding remote`, `PermitListen 127.0.0.1:18788`, `PermitOpen none`, `PermitTTY no`, `MaxSessions 0`, только publickey). Туннель поднят с rpi 2026-10-11 (`astra-marusia-tunnel.service`), входит с `46.199.208.45`, отпечаток ключа `SHA256:XMUGNzoDstNGNJQ0yCZ6KLJ6zx8DIKHUbBH/s7oIBS4`. При входе logind поднимает `systemd --user` + `(sd-pam)` под этим пользователем — это норма PAM-сессии, оболочки нет. Домашний каталог 750 (дефолт Ubuntu 24.04): из-под `rus` ключ не прочитать, только через sudo. +- ~~Пользователь `marusia-tunnel`~~ — удалён 2026-10-11 вместе со всей интеграцией с Марусей (отменена владельцем): пользователь и `/home/marusia-tunnel`, `sshd_config.d/70-marusia-tunnel.conf`, запись в `AllowUsers`, vhost `astra.ruzzy.dev` (`sites-available/astra.ruzzy.dev.conf`, ссылка `zz-…`, `conf.d/marusia-webhook.conf`), сертификат LE `astra.ruzzy.dev`, `~rus/marusia-audit/`. Скрипт демонтажа — `~rus/marusia-removal.sh`, копии удалённого — `/root/marusia-removed-20261011/` (root 700). nginx/sshd перезагружались после успешных `-t`; проверено: git/mon открываются, SSH-вход работает. - **Пуш-ключ `metrics-push@rpi`** (с 2026-10-11) в `~rus/.ssh/authorized_keys` с `restrict,command="/home/rus/bin/pushgw-ingest rpi"`: этим ключом домашняя малина может только залить метрики в pushgateway — шелла, форвардинга и pty нет. Бэкап прежнего файла — `~/.ssh/authorized_keys.bak-20261011`. ## SSH (`/etc/ssh/sshd_config.d/00-hardening.conf`) @@ -28,10 +28,10 @@ PubkeyAuthentication yes KbdInteractiveAuthentication no ChallengeResponseAuthentication no MaxAuthTries 3 -AllowUsers rus tgclaude marusia-tunnel +AllowUsers rus tgclaude ``` Через socket-activation (`ssh.socket`), слушает `0.0.0.0:22` и `[::]:22`. -- `marusia-tunnel` дописан в `AllowUsers` 2026-10-11 (было `rus tgclaude`), бэкап — `00-hardening.conf.bak-20261011-171345`. ⚠️ Новому пользователю SSH нужен и здесь: без строки в `AllowUsers` sshd отказывает молча, клиент видит просто `Permission denied`. +- `marusia-tunnel` был в `AllowUsers` 2026-10-11 (для туннеля Маруси), убран в тот же день вместе с интеграцией; бэкап исходного — `00-hardening.conf.bak-20261011-171345`. - Проверено под root 2026-10-11: `50-cloud-init.conf` содержит `PasswordAuthentication yes`, но эффективное значение — `no` (`00-hardening` читается первым); `sshd -T` → `permitrootlogin no`, `passwordauthentication no`. ⚠️ То же «держится на порядке файлов»: переименуй `00-hardening` во что-то после `50-`, и вход по паролю включится. - Отпечатки host-ключей: ED25519 `SHA256:M5J9nH+svyA3+beD7ZllUn1tayMMO2cxw/t3Z/kj6KU`, ECDSA `SHA256:fMZEytu7XI3W+Mzo4WQ6WZHDn0nYiagtbKb4JyUIX5w`, RSA `SHA256:53olW/dhoPclFgp8X6OWh0euoOfSmwXWZb6c026OGAw`. @@ -109,11 +109,7 @@ backend=systemd banaction=ufw - vhost `/etc/nginx/sites-available/mon.ruzzy.dev.conf` → проксирует на Grafana (`127.0.0.1:3000`), HTTPS-редирект, websocket. - vhost'ы `share.ruzzy.dev.conf` и `www.ruzzy.dev.conf` — статика с **общим** корнем `/var/www/share.ruzzy.dev` (`autoindex off`, `try_files $uri =404`, `server_tokens off`), у каждого свой сертификат. Используется для раздачи клиентских конфигов OpenVPN — сейчас там `marina-de.ovpn`, `masha-de.ovpn`. - vhost `default` — catch-all `server_name _`, `listen 80 default_server`, отдаёт дефолтную страницу `/var/www/html/index.nginx-debian.html`. На `:443` `default_server` **не задан**, поэтому TLS-запрос с неизвестным SNI попадает на первый по алфавиту vhost (`git.ruzzy.dev`) и получает его сертификат. Так отвечают и `https://ruzzy.dev`, и `https://fr1.ruzzy.dev` — своих vhost'ов и сертификатов у них нет, браузер видит несовпадение имени (проверено 2026-10-11). -- vhost `astra.ruzzy.dev` (с 2026-10-11) — вебхук Маруси для разговорного сервиса на rpi, конфиг в репо `stacks/astra-marusia/`. Только `POST /marusia/webhook/…` → `127.0.0.1:18788/webhook/…` (SSH-туннель от rpi, см. пользователя `marusia-tunnel`), остальное — 404. Зона `limit_req` `marusia_webhook` в `/etc/nginx/conf.d/marusia-webhook.conf` (1 r/s, burst 5, 429); тело до 64k, таймауты 1s/5s/5s. - - ⚠️ Ссылка называется `sites-enabled/zz-astra.ruzzy.dev.conf`, а не по имени домена: иначе она встала бы по алфавиту раньше `git` и перехватила ответ на неизвестный SNI. Новые vhost'ы на букву раньше `g` подключать с тем же расчётом. - - ⚠️ Секрет вебхука — часть URL. Для location выключен access log, а `error_log /var/log/nginx/marusia-webhook.error.log crit`: на уровне `error` nginx пишет туда строку запроса с секретом (502 при упавшем туннеле, срабатывание `limit_req`). Повышать уровень лога нельзя. - - ⚠️ access log выключен **только в этом vhost**. Запрос к `/marusia/webhook/<секрет>` на другом имени (`ruzzy.dev`, `fr1.ruzzy.dev`, голый IP) обработает vhost `git` и запишет секрет в общий `access.log`. Так 2026-10-11 там оказалась строка от превью ссылок Telegram (`TelegramBot`, 149.154.161.220) — правда, с пустым секретом: ссылку из ТЗ оборвало на `<`. Вывод: настоящий URL вебхука не вставлять в Telegram и чаты вообще — превью откроет его само. - - Проверено 2026-10-11: `18788` слушает только `127.0.0.1` (sshd `marusia-tunnel`), снаружи 8788/18788 закрыты; GET → 403, неверный секрет → 404, верный секрет с чужим skill/user → 403 (проверял rpi), `/` → 404; путь с секретом в `access.log*`/`error.log*` не встречается; прочие vhost'ы отвечают как до работ. +- vhost `astra.ruzzy.dev` (вебхук Маруси) — **удалён 2026-10-11** вместе с сертификатом. ⚠️ DNS-запись `astra.ruzzy.dev` (CNAME → fr1.ruzzy.dev) у регистратора — удалить вручную; пока она есть, запросы к этому имени отвечает vhost `git` с чужим сертификатом. - Сертификаты LE: `mon`, `git`, `share`, `www`, `astra` (с 2026-10-11, `certbot certonly --nginx`, продление тем же таймером). `cam.ruzzy.dev` удалён 2026-09-08 вместе с ipcam. ## Мониторинг (`~/monitoring`, stack в репо `stacks/monitoring/`) @@ -266,8 +262,7 @@ backend=systemd banaction=ufw - `~tgclaude/.openclaw-auth-profile-secrets` — права **777** на каталоге для секретов (сейчас пуст), стоит `chmod 700`. - Не решено, нужны ли на fr1: `~rus/backups` (5.4 ГБ архивов с выведенного de1) и спящий openclaw (947 МБ дерева + 2.0 ГБ состояния + образ-снимок 1.55 ГБ). - Страховочные файлы, оставленные после работ: `~rus/imgbot-repo-pre-merge-20260908-133444.tar.gz` (369 КБ), `~rus/imgbot-legacy-archive-rows-20260908.json` (808 КБ), `~rus/gitea/docker-compose.yml.bak-20260908`. -- ⛔ **Интеграция с Марусей отменена владельцем 2026-10-11:** туннель с rpi выключен, `astra.ruzzy.dev/marusia/…` никуда не ведёт. На fr1 ещё остались: vhost `astra.ruzzy.dev` (`/etc/nginx/conf.d/marusia-webhook.conf`), `/etc/ssh/sshd_config.d/70-marusia-tunnel.conf`, `marusia-tunnel` в `AllowUsers` и сам пользователь, DNS `astra.ruzzy.dev`, `~rus/marusia-audit/` — убрать (нужен sudo). Было: **Вебхук Маруси: fr1 и туннель готовы, интеграция не завершена** (2026-10-11). Осталось за владельцем и rpi: приватный навык в VK, `MARUSIA_SKILL_ID` в env на rpi, URL `https://astra.ruzzy.dev/marusia/webhook/<секрет>` в настройках навыка, проверка в отладчике VK и на настоящей колонке (`stacks/astra-marusia/README.md`). -- Снимок `nginx -T`, `sshd -T`, `ss -lntp` до работ над вебхуком лежит в `~rus/marusia-audit/` (600) — на случай отката; удалить, когда интеграция устоится. +- ⏳ DNS-запись `astra.ruzzy.dev` (остаток отменённой интеграции с Марусей) — удалить у регистратора. Всё остальное на fr1 демонтировано 2026-10-11. - ⚠️ Описания **других** серверов не сверялись: `servers/de1.md` и `servers/ru1.md` датируются временем до вывода de1, так что могут врать. ## Как это описание поддерживается