IOC Mail Server — руководство администратора, 0.1.0 MVP

1. Установка
Запустите единый EXE. Выберите отдельные каталоги программы и данных. По умолчанию:
  C:\Program Files\IOC Mail Server
  C:\ProgramData\IOC-Mail\Data
Можно выбрать D:\IOC-Mail\Data. Каталог должен быть пустым или принадлежать
IOC Mail. UNC и reparse points мастер не принимает. Перенос данных через GUI
и сетевое хранилище в этой версии не реализованы.

Укажите реальный домен, hostname (например mail.company.kz), публичный IP,
email администратора в основном домене и пароль не короче 12 символов.
Пароль не передаётся аргументом процесса и не пишется в конфигурацию.
В БД хранится PBKDF2-SHA256, 600000 итераций, случайная соль.

Служба: IOCMail / IOC Mail Server Service. Учётная запись NT SERVICE\IOCMail,
автозапуск; Windows SCM повторно запускает её после сбоя. Доступ к каталогу
данных ограничен SYSTEM, администраторами и SID службы.

Приложение в трее открывает WebMail/Admin, запускает, останавливает и
перезапускает службу с запросом UAC. Оно не требуется для работы сервера.
Отдельный Desktop Admin Tool не реализован: полноценная панель доступна в браузере.

2. Первый вход
Откройте https://localhost:8443/admin/. Порт 8443 привязан только к loopback.
WebMail и удалённая админка используют https://<hostname>/ на TCP 443.
Первый сертификат самоподписанный. Это не сертификат Let's Encrypt.
Импортируйте доверенный PFX с приватным ключом и цепочкой через «SSL / TLS».
Перезапустите службу для применения. ACME, автообновление сертификата,
отдельный импорт CRT+KEY: Not implemented.

3. DNS и доставляемость
В «Домены и DNS» создайте домен и откройте DNS Wizard. Мастер выдаёт:
  A/AAAA hostname → публичный IP
  MX 10 hostname
  SPF с mx и ip4/ip6
  mail._domainkey.<domain> с отдельным RSA 2048 public key
  _dmarc.<domain> с p=quarantine
Создайте dmarc@<domain> до публикации rua. Private key никогда не показывается
в веб-интерфейсе. Для длинного DKIM TXT DNS-провайдер может требовать
разбиение на несколько строк в кавычках в пределах ОДНОЙ записи.

PTR задаёт владелец IP/VPS. Он должен указывать на hostname. Обратная A/AAAA
запись должна совпадать с IP. Мастер действительно запрашивает DNS, но сравнивает
записи буквально: иной корректный SPF/DMARC может показываться как warning.
Изменения DNS не публикуются автоматически.

После DNS, PTR и TLS проверьте доступность TCP 25 снаружи и исходящего TCP 25.
Неудачное соединение не доказывает блокировку именно интернет-провайдером.
Автоматическая внешняя проверка портов: Not implemented.
Включите «Внешняя отправка» в «Сеть и лимиты» и перезапустите службу.
Доставка идёт напрямую по MX, с opportunistic STARTTLS; при неверном TLS
сертификате получателя письмо откладывается. Private MX адреса блокируются.
Поддержка smarthost, SMTP AUTH к relay и MTA-STS/DANE: Not implemented.
Репутация IP/домена и приём внешними сервисами не гарантируются программой.

4. Ящики и роли
SuperAdmin управляет всем сервером. DomainAdmin видит свой домен и может
создавать только обычные ящики своего домена. User имеет доступ только
к собственным письмам. API применяет те же ограничения.
Квота в байтах; 0 — unlimited. Поиск SQLite FTS5 индексирует отправителя,
получателя, тему и текстовую часть (до 200000 символов). HTML-only текст и
текст вложений не индексируются.
«Удаление» ящика отключает его и отзывает сессии/API keys; письма сохраняются.
Алиасы — на существующие локальные ящики, несколько адресатов допускаются.
Catch-all, внешняя forwarding, правила и ограниченные рассылочные группы отсутствуют.

5. Безопасность и фильтрация
SMTP 25 принимает внешнюю почту только для существующих локальных адресатов.
465 и 587 требуют авторизации. AUTH на всех портах доступен только после TLS.
Envelope From и единственный MIME From должны совпадать с аккаунтом отправителя.
STARTTLS очищает предыдущее состояние протокола.

ClamAV входит в поставку. FreshClam загружает базы автоматически, затем каждые
6 часов. Журналы: Data\antivirus\freshclam.log и clamd.log.
Дождитесь Ready. Если загрузка недоступна, SMTP возвращает временный 451.
Не выдаётся фиктивный clean при ошибке сканера. Сканируются MIME и архивы
с ограничениями ClamAV; превышение scan-limit помечается подозрительным.
Сервис наблюдает за clamd и перезапускает его при завершении.

Антиспам MVP: частичная SPF-проверка, криптографическая проверка DKIM, простые
эвристики текста/URL, лимиты IP/пользователя/домена. SPF macros, a/mx CIDR,
DMARC enforcement, DNSBL/RBL, URI reputation, Bayesian и greylisting отсутствуют.
Эти ограничения нельзя считать полноценной антиспам-защитой коммерческого сервера.
Лимиты считаются на принятые попытки сообщений, а не на каждую копию получателю.

После 5 ошибок входа с IP за 10 минут блокировка длится 30 минут и сохраняется
в SQLite. Успешный вход не очищает чужие неудачные попытки с того же IP.
За NAT это может затронуть нескольких сотрудников.
2FA и whitelist/blacklist IP в этой версии отсутствуют.

Карантин доступен SuperAdmin. Выпуск вируса заблокирован. Выпуск спама/опасного
расширения требует чистого повторного сканирования и доставляет ТОЛЬКО локальным
получателям. Уведомления администратора о карантине по email пока отсутствуют.
Не доверяйте MIME HTML: WebMail показывает его только в sandbox iframe,
блокирует скрипты и внешние ресурсы. Вложения выдаются как скачивание.

6. Очередь, логи и настройки
Очередь хранится в SQLite; тело — неизменяемый .eml. Повторная отправка с
экспоненциальной задержкой, до 10 попыток. После окончательной ошибки локальному
отправителю создаётся уведомление. Это не полный RFC 3464 DSN.
Доставка SMTP имеет обычную семантику at-least-once: авария после ответа
получателя 250, но до фиксации статуса, может привести к повторной отправке.
Кнопки Hold, Release, Retry, Delete не изменяют активный статус sending.

Audit содержит время UTC, actor, IP, действие, данные изменения. Пароли не
логируются. Текущий общий срок хранения audit — 90 дней; ClamAV логи — до 5 MB
с ротацией. Полные протокольные transcript logs не сохраняются.
После смены портов и TLS требуется перезапуск. Firewall автоматически
настраивается только установщиком для стандартных почтовых портов.
Локальная админка должна оставаться доступной при смене остальных портов.

7. Резервные копии и восстановление
Кнопка «Создать резервную копию» использует SQLite Backup API и согласованный
снимок записей; включает .eml, настройки, TLS, DKIM и БД. Архив содержит секреты,
не зашифрован и хранится в защищённой ACL папке Data\backups.
Копирование блокирует изменения на время операции: это решение для небольшого MVP.
Расписание, шифрование backup, сеть, restore GUI: Not implemented.

Офлайн восстановление (администратор Windows):
  Остановите службу и значок в трее.
  Сохраните отдельно текущий полный Data.
  Создайте отдельный пустой Data-каталог и извлеките туда доверенный архив.
  Не смешивайте mail.db с WAL/SHM от другой базы; используйте чистый каталог.
  Примените те же ACL для NT SERVICE\IOCMail, SYSTEM, Administrators.
  Укажите этот каталог при установке/повторной настройке и запустите службу.
  Проверьте ящики, TLS, DNS и антивирус.
Резервная копия включает также сессии/API keys; после восстановления отзовите
старые API keys и смените необходимые пароли.

8. Удаление
Используйте Windows «Установленные приложения» → IOC Mail Server.
Удаление останавливает и удаляет службу, Firewall rule и автозапуск трея.
Вопрос «Сохранить почтовые данные и настройки?» по умолчанию имеет ответ «Да».
Для удаления данных требуется второе явное подтверждение точного каталога.
Занятые исполняемые файлы могут потребовать перезагрузку Windows.

9. Границы готовности
Установщик не подписан. Не выполнены независимый аудит, нагрузочные испытания,
полная матрица Windows, реальные Gmail/Yandex/Mail.ru delivery tests,
испытания чистой установки/удаления/перезагрузки в VM и полная IMAP совместимость.
Не разворачивайте эту предварительную сборку как готовый коммерческий сервис.
