---
name: codoceh-vps-edge
description: "VPS-edge семейства codoceh.ru — доступ, rathole+Caddy конфиг, порты, рестарт; для kodoceh-web"
metadata: 
  node_type: memory
  type: project
  originSessionId: b11e39bd-4f6f-47c9-ba7b-680ccf041a5b
  modified: 2026-08-24T07:14:31.238Z
---

**Домен:** `codoceh.ru` (через «c»! в коде местами зашит `kodoceh.ru` — БАГ, поправить на codoceh.ru при go-live). Регистратор reg.ru.

**VPS-edge:** `195.133.147.176` — Debian 12, x86_64, ~375 МБ RAM, swap 1 ГБ, диск 10 ГБ. **Только edge** (Caddy + rathole-server), приложения/БД на mini. Отдельный от zbrcheck-VPS (193.108.113.35).

**Доступ (ЗАХАРДЕНЕНО 2026-06-25, как zemlya):** `ssh root@195.133.147.176` **только по ключу**. `authorized_keys` = ровно ДВА: MacBook `cebers@MacBook-Air-CeBers.local` + mini `ops_dashboard@cebers-mini`. sshd: `PasswordAuthentication no`, `PermitRootLogin prohibit-password`, `KbdInteractive no`, `MaxAuthTries 3` (drop-in `/etc/ssh/sshd_config.d/99-codoceh-hardening.conf`). Парольный вход проверен — отклоняется (`Permission denied (publickey)`). Утёкший root-пароль (был в чате) **ротирован** на случайный (для провайдер-консоли; сбросить можно в панели reg.ru). **UFW** active: разрешены только `22/80/443/2333` (data-порты 14010-13 — loopback, наружу не видны), default deny incoming. **fail2ban** active (jail `sshd`, backend=systemd, ban 1h/5 попыток; `/etc/fail2ban/jail.local`). **Caddy** security-заголовки на всех сайтах: HSTS, X-Content-Type-Options=nosniff, Referrer-Policy, X-Frame-Options=SAMEORIGIN, скрыт Server. curl ставится apt; бинари linux-amd64 качал на маке→scp (с VPS из РФ рвётся).

**Добавлен сервис `claude-sync` (2026-08-24, см. [[claude_config_sync]]):** отдаёт снимок
`CLAUDE.md`+скиллы+память для автосинка на телефон, path закрыт токеном, не паролем. rathole
`server.services.claude-sync` → `127.0.0.1:14015`, Caddy-сайт `claude-sync.codoceh.ru`.

**Стек на VPS:**
- `rathole` 0.5.0 (linux-amd64) → `/usr/local/bin/rathole`, конфиг `/etc/rathole/server.toml`, systemd `rathole-server` (control `0.0.0.0:2333`, сервисы studio/gaechkin/vakhunter/avtero на `127.0.0.1:14010..14013`).
- `caddy` v2.11.4 (static linux-amd64) → `/usr/local/bin/caddy`, конфиг `/etc/caddy/Caddyfile`, systemd `caddy` (user caddy, CAP_NET_BIND_SERVICE, XDG_DATA_HOME=/var/lib/caddy), авто-TLS. Caddyfile: `codoceh.ru`+www→:14010, `gaechkin.`→:14011, `vakhunter.`→:14012, `avtero.`→:14013.
- **rathole token (shared):** `d85b3e70b592d40c80f421da7c4cc716e95e23c38a0f0b45e8155d092c740e9e`.
- Рестарт: `systemctl restart rathole-server|caddy`; правка домена/портов — только в Caddyfile (`caddy reload`) и server.toml.

**На mini (rathole-client):** `~/Services/kodoceh-web/rathole/client.toml` → `195.133.147.176:2333`, экспортит фронты `127.0.0.1:20410..20413`. launchd `local.kodoceh-rathole-client` (KeepAlive), логи `~/Services/shared/logs/kodoceh-rathole-client.log`. Бинарь `/opt/homebrew/bin/rathole` (0.5.0). Проверено: VPS `127.0.0.1:1401x` → mini фронты = 200 (туннель жив).

**ПОЧТА codoceh.ru (2026-06-25, СВОЙ Postfix — отдельно от zbrcheck):** жалоба юзера — magic-link Автероа уходил с `noreply@zbrcheck.ru` (чужой продукт). Поднят СВОЙ почтовик на этом VPS: **Postfix** (send-only, `myhostname=mail.codoceh.ru`, `inet_interfaces=loopback-only`, `mydestination` включает codoceh.ru) + **OpenDKIM** (selector `mail`, `inet:localhost:8891`, signing `*@codoceh.ru`, проверено — заголовок `DKIM-Signature d=codoceh.ru s=mail` вешается). Outbound :25 НЕ заблокирован (RUVDS). Setup-скрипт `/root/codoceh_postfix_setup.sh` (идемпотентный). Тоннель-юзер `tunnel` (forward-only, `restrict,port-forwarding,permitopen="127.0.0.1:25"`, ключ mini id_ed25519). **mini → VPS:25**: launchd `local.codoceh-smtp-tunnel` (autossh `-L 2526:127.0.0.1:25 tunnel@195.133.147.176`, KeepAlive). **Автеро** теперь шлёт через `127.0.0.1:2526`, `AVTERO_SMTP_FROM=noreply@codoceh.ru` (plist, перезагружен bootout/bootstrap). **⚠️ ЖДЁТ DNS юзера в reg.ru** (без них Gmail отбивает `550-5.7.26 unauthenticated`): SPF `@`→`v=spf1 ip4:195.133.147.176 ~all`; DKIM `mail._domainkey`→`v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuCJ9ZRjv555xqm7WOnmxFIsLp7PtB5q9l7EDlFs22f3mjb4DXDSEvOH9qhTuAlDU68e1YcqWajwF+cZCGk4EbqkuPVSepIJKaOF9jW6pz/wLe18jWVVxGZd6vtaIxbS8nUnJOR8XSl/6TUpPEpirpUmRUDqMAQFcJnlFV4X5C+LtVdTbQ9odCTohoHv1OuBf7VACb6mXt9F+gopZne5S9cpacLiAlDxR5Bsf6nnmfulEZl04s0XBh8JYoLBeu5JZMUE0Se4+8xyJzu2V6pFK8qbojKBlOU9emXJYa+1q288CF3mmTcDNR12AP+PMDyAc10jTrg7oOkt6/acF5PwrdwIDAQAB`; DMARC `_dmarc`→`v=DMARC1; p=none; rua=mailto:postmaster@codoceh.ru`. Опц.: PTR 195.133.147.176→mail.codoceh.ru + A `mail`→195.133.147.176. После DNS — DKIM+SPF пройдут (подпись уже валидная). DKIM-ключ на VPS `/etc/opendkim/keys/codoceh.ru/mail.{private,txt}`. Эта же почта = общая для всех продуктов КодоЦех (FROM_NAME различает продукт). **ПОЧТА LIVE (2026-06-25 17:13):** юзер добавил 3 TXT в reg.ru (SPF `@`, DMARC `_dmarc`, DKIM `mail._domainkey`); `opendkim-testkey` = `key OK`. После истечения негативного DNS-кэша Gmail (SOA neg-TTL 10800=3ч) тест-письмо на cebers227@gmail.com → **`status=sent (250 2.0.0 OK ... gsmtp)`** — Gmail принял, SPF+DKIM проходят, доставка в инбокс. Почта `noreply@codoceh.ru` РАБОТАЕТ для всех продуктов. Тест-команда: на mini `smtplib.SMTP("127.0.0.1",2526)`, from `noreply@codoceh.ru`.

**Анти-DDoS хардненг (2026-06-26):** в Caddyfile добавлен global `servers { timeouts { read_header 15s; idle 5m } }` (slowloris) + в сниппет `(sec)` — `request_body { max_size 25MB }`. **НАМЕРЕННО без `write`/`read_body` таймаутов** — порежут стриминг Автероа (LLM-ответ) и загрузку фото/голоса. Полный per-IP rate-limit не делали (нужен plugin `caddy-ratelimit` через xcaddy; app-level лимит 300/мин — первый слой). Бэкап перед правкой: `/etc/caddy/Caddyfile.bak.<ts>`. Применение: правка → `caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile` → `systemctl reload caddy` (НЕ restart). Root-SSH к VPS есть с MacBook (`ssh root@195.133.147.176`, ключ authorized). Проверено: все 5 хостов 200, API/POST-проксирование цело, HSTS на месте.

**СТАТУС (2026-06-25): LIVE.** DNS прописан (reg.ru: A `@`/`*`/`www` → 195.133.147.176, парковка 95.163.244.138 удалена). Caddy выпустил Let's Encrypt. Все по **https 200**: `codoceh.ru` (студия), `www`, `gaechkin/vakhunter/avtero.codoceh.ru`. Грабли при выпуске: пока юзер не удалил парковочные A-записи, LE secondary-validation падал на 95.163.244.138 → апекс не выпускался; после удаления — `systemctl restart caddy` форснул выпуск. В коде `kodoceh.ru`→`codoceh.ru` поправлено (домен через «c»). Эталон-runbook: zbrcheck-VPS [[zbrcheck-vps-access]], zemlya rathole. Локальные конфиги-копии: `/tmp/kstage/edge/`. Связь: [[kodoceh-web-overview]].
