mailcow dttb: спам-фикс, SSL, апдейт 2026-05c, BIMI+подпись, Roundcube, сбор почты
- фикс входящего спама: No-SNAT на OpenWrt (видел все письма как 10.0.0.1) - SSL mail-портов: cert из NPM + cron-синхрон на Proxmox - апдейт mailcow 2026-01 -> 2026-05c; урок: forward-zone unbound обязателен (RKN режет рекурсию) - логотип UI, BIMI-SVG (Tiny PS) + хостинг, HTML-подпись - Roundcube на /rc (bind-mount, public_html) - внешний сбор почты Яндексом (IMAP/POP3) - snippets: sync-mailcow-cert.sh, dttb-mail-branding/ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
---
|
||||
date: 2026-06-27
|
||||
type: claude-session
|
||||
session_id: cf0fcbca-45e5-4c86-9af4-0126868e3b68
|
||||
started: 2026-06-26T20:32:39.557Z
|
||||
ended: 2026-06-27T19:12:31.306Z
|
||||
messages: 7
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, TaskOutput, TaskStop, ToolSearch, Workflow, Write, mcp__ccd_session__spawn_task]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://gethomepage.dev/widgets/services/nextcloud/ если все мои сервисы собрать
|
||||
|
||||
## Запрос
|
||||
|
||||
https://gethomepage.dev/widgets/services/nextcloud/ если все мои сервисы собрать как думаешь?
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Готово. `dash.dttb.ru` → 200, закоммичено.
|
||||
|
||||
## Группа «OpenWrt роутеры» — все 10
|
||||
|
||||
Веерный скан vault (6 читателей по регионам + сведение) собрал все OpenWrt-роутеры. Пингую каждый по NetBird с дашборда:
|
||||
|
||||
**Онлайн (7):** Дом, Sergey, Lipki, Benelux, НИИКН-VM101, Бужарово Сев.лес, Знаменское-3
|
||||
**Down (3):** Olivier (Canal+), Переделки (vault помечал «возможно offline с 08.05»), Красногорск
|
||||
|
||||
Каждая плитка — статус + клик на LuCI. Домашний мониторю по LAN `10.0.0.1` (его NetBird-адрес не отвечает).
|
||||
|
||||
|
||||
---
|
||||
*Автосохранено из session [`cf0fcbca`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/cf0fcbca-45e5-4c86-9af4-0126868e3b68.jsonl) — 7 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, TaskOutput, TaskStop, ToolSearch, Workflow, Write, mcp__ccd_session__spawn_task*
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
date: 2026-06-27
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T20:05:18.062Z
|
||||
messages: 2
|
||||
tools: [Bash]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Подтвердилось — вот корень:
|
||||
|
||||
**`@zone[0] name=lan masq=1`** — на LAN-зоне роутера включён masquerade. Входящее письмо идёт `WAN:25 → DNAT → 10.0.0.107`, пакет уходит в LAN-зону, и из-за `masq=1` роутер подменяет source на свой `10.0.0.1`. Поэтому mailcow видит `10.0.0.1` вместо реального IP отправителя — отсюда RDNS_NONE + HFILTER_HOSTNAME_UNKNOWN на всём и R_SPF_FAIL для строгих.
|
||||
|
||||
То есть это **не про `support@`** — бьёт по всем входящим сервера. `support@` просто новый: Bayes не выучил ham, и
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 2 сообщ., тулы: Bash*
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
date: 2026-06-27
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T20:09:48.676Z
|
||||
messages: 3
|
||||
tools: [Bash, Edit, Read]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Готово. Записал корень и фикс в [mailcow-dttb.md](projects/dttb/mailcow-dttb.md) (auto-sync на code-server закоммитит).
|
||||
|
||||
## Итог
|
||||
|
||||
**Причина:** на домашнем роутере `10.0.0.1` LAN-зона была с `masq=1` — входящая почта `WAN:25 → 10.0.0.107` SNAT'илась в `10.0.0.1`, и сервер видел этот адрес как отправителя **всех** писем. Отсюда `RDNS_NONE + HFILTER_HOSTNAME_UNKNOWN` (+10.5) на каждом входящем. Новый `support@` тонул, старый ящик вытягивал обученный Bayes.
|
||||
|
||||
**Сделано:** точечное правило `No-SNAT-to
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 3 сообщ., тулы: Bash, Edit, Read*
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
date: 2026-06-27
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T20:55:10.007Z
|
||||
messages: 5
|
||||
tools: [Bash, Edit, Read, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Готово по обоим фронтам.
|
||||
|
||||
## SSL (твоя задача)
|
||||
Сертификат на почтовых портах был просрочен с 2 июня — клиенты IMAP/SMTP на него и ругались. Заменил на свежий из NPM (до 1 авг), поставил авто-синхрон cron'ом, чтобы не повторилось. Все порты (25/465/587/993/995) отдают валидный cert. Web был в порядке.
|
||||
|
||||
→ как соберёшься — кинь письмо с Яндекса на `support@dttb.ru`, проверю score (это с прошлой задачи про спам).
|
||||
|
||||
## MEMORY.md (по требованию хука)
|
||||
Индекс памяти раздулся до ~28.8 КБ (близко к лимиту
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 5 сообщ., тулы: Bash, Edit, Read, Write*
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
date: 2026-06-28
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T21:26:28.486Z
|
||||
messages: 5
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Готово. mailcow обновлён и проверен.
|
||||
|
||||
## Что сделано
|
||||
- **Снапшот** `pre_update_20260627` (откат: `qm rollback 107 pre_update_20260627`) — удали через недельку стабильной работы.
|
||||
- **Обновление `2026-01` → `2026-05c`** через `./update.sh -f`. Перед запуском откатил локальные правки конфигов (иначе merge-конфликт), после — проверил.
|
||||
- **SSL уцелел**: наш cert (до 1 авг) на всех портах, cron-синхрон жив.
|
||||
- **forward-zone unbound (8.8.8.8) убрал осознанно**: новый unbound резолвит рекурсивно, а forw
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 5 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write*
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
date: 2026-06-28
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T21:42:49.450Z
|
||||
messages: 6
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Готово — логотип `dttb` стоит.
|
||||
|
||||
## Что сделал
|
||||
- Поставил монограмму в оба слота mailcow (`MAIN_LOGO` + `MAIN_LOGO_DARK` в Redis) — она на странице входа и в шапке интерфейса.
|
||||
- Взял **PNG**, а не SVG: в твоём SVG текст нарисован шрифтом `SG`, а когда mailcow грузит логотип как `<img>`, кастомный шрифт недоступен → «dttb» отрисовался бы дефолтным шрифтом. В PNG начертание уже впечёно в растр — выглядит точно как задумано.
|
||||
- Ужал 2048→1024 (лимит mailcow 1920), вес 54 КБ.
|
||||
|
||||
## Проверь
|
||||
Открой https:
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 6 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write*
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
date: 2026-06-28
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T21:55:59.940Z
|
||||
messages: 7
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Сделал, что можно без твоего участия. Итог по двум частям:
|
||||
|
||||
## 1. BIMI (лого у отправителя в инбоксе)
|
||||
✅ Собрал валидный SVG (конверт, профиль **SVG Tiny PS** — без шрифта, поэтому годен; монограмма со шрифтом `SG` для BIMI не подходит)
|
||||
✅ Захостил публично: https://mail.dttb.ru/bimi/dttb.svg (проверено из интернета — 200, `image/svg+xml`)
|
||||
✅ DMARC у тебя `p=quarantine` — BIMI принимает
|
||||
|
||||
**Осталась 1 DNS-запись** — её сам не добавлю (API Spaceweb требует сессию панели, токена нет). Добавь в `vps.sw
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 7 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write*
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
date: 2026-06-28
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T22:08:38.835Z
|
||||
messages: 9
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Готово. Чиню честно: **это была моя ошибка** — при апдейте я убрал forward-zone из unbound, посчитав её устаревшей. На деле она load-bearing: рекурсивный DNS на твоём провайдере режется RKN, поэтому без forward postfix перестал резолвить домены отправителей и отбивал всё входящее (`450 Domain not found`). Несколько секунд после апдейта работало из кеша — это меня и обмануло.
|
||||
|
||||
## Что сделано
|
||||
- Вернул `forward-zone → 8.8.8.8/1.1.1.1` в unbound + рестарт.
|
||||
- Проверил: unbound резолвит, postfix прини
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 9 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write*
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
date: 2026-06-28
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T22:27:19.545Z
|
||||
messages: 9
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Готово — **Roundcube поставлен и работает.**
|
||||
|
||||
## Как зайти
|
||||
**https://mail.dttb.ru/rc/** — логин полным адресом + пароль (напр. `support@dttb.ru` / `1qaz!QAZ`). Скин Elastic, заголовок «dttb Mail». Вход проверил — работает.
|
||||
|
||||
## Что под капотом
|
||||
- Контейнер Roundcube рядом с mailcow, отдаётся **родным nginx на `/rc`** — без нового поддомена и без записи в Spaceweb DNS (wildcard `*.dttb.ru` у тебя нет, иначе пришлось бы тебя просить добавить запись).
|
||||
- Своя БД, IMAP/SMTP к mailcow внутри docker-сети
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 9 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write*
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
date: 2026-06-28
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T22:37:55.277Z
|
||||
messages: 10
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Всё на стороне mailcow готово: `:995` (POP3S) и `:993` (IMAPS) открыты из интернета, cert валиден, у всех ящиков dttb доступ по imap/pop3 включён. Делать надо **в самом Яндексе** — он будет подключаться к `mail.dttb.ru` и забирать почту.
|
||||
|
||||
## В Яндекс.Почте
|
||||
Настройки (⚙️) → **Все настройки** → **«Сбор почты с других ящиков»** → добавить ящик.
|
||||
|
||||
Если попросит вручную указать сервер:
|
||||
|
||||
| Параметр | Значение |
|
||||
|---|---|
|
||||
| Протокол | **POP3** (сборщик Яндекса работает по POP3) |
|
||||
| Сервер | `mail.dttb.r
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 10 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write*
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
date: 2026-06-28
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T22:40:38.301Z
|
||||
messages: 11
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, ToolSearch, WebSearch, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Проверил — я был неправ про «только POP3». Актуально: **сборщик Яндекса работает по IMAP и даже использует его по умолчанию.**
|
||||
|
||||
## IMAP-сбор — параметры (на нашей стороне всё готово)
|
||||
| Параметр | Значение |
|
||||
|---|---|
|
||||
| Протокол | **IMAP** |
|
||||
| Сервер | `mail.dttb.ru` |
|
||||
| Порт | `993` |
|
||||
| Шифрование | **SSL вкл.** |
|
||||
| Логин | полный адрес, напр. `support@dttb.ru` |
|
||||
| Пароль | пароль ящика |
|
||||
|
||||
В Яндексе: ⚙️ → Все настройки → «Сбор почты с других ящиков» → ввести адрес+пароль (сервер подхватится сам,
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 11 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, ToolSearch, WebSearch, Write*
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
date: 2026-06-28
|
||||
type: claude-session
|
||||
session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c
|
||||
started: 2026-06-27T19:43:29.595Z
|
||||
ended: 2026-06-27T22:42:29.835Z
|
||||
messages: 12
|
||||
tools: [AskUserQuestion, Bash, Edit, Read, ToolSearch, WebSearch, Write]
|
||||
tags: [claude, session]
|
||||
---
|
||||
|
||||
# https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Запрос
|
||||
|
||||
https://mail.dttb.ru/domainadmin/ можешь найти креды
|
||||
|
||||
## Итог (последний ответ Claude, до 500 симв.)
|
||||
|
||||
Сохранено в [mailcow-dttb.md](projects/dttb/mailcow-dttb.md) — раздел «Внешний сбор почты (Яндекс и др.)»: параметры IMAP/POP3, что Яндекс-сборщик по умолчанию IMAP, разница протоколов и обратное направление (Sync job с Яндекса).
|
||||
|
||||
Заодно за эту сессию в той же заметке уже зафиксировано всё:
|
||||
- фикс входящего спама (SNAT на роутере)
|
||||
- SSL mail-портов + авто-синхрон cert из NPM
|
||||
- апдейт mailcow `2026-05c` + **урок про обязательный forward-zone unbound**
|
||||
- логотип UI, BIMI + подпись
|
||||
- Roundcube на `
|
||||
|
||||
---
|
||||
*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 12 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, ToolSearch, WebSearch, Write*
|
||||
Reference in New Issue
Block a user