Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • World
  • Пользователи
  • Группы
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • По умолчанию (Darkly)
  • Нет скина
Collapse

База знаний (кластер NBICS)

  1. Главная
  2. Mailcow
  3. Справочник по установке, настройке и эксплуатации Mailcow

Справочник по установке, настройке и эксплуатации Mailcow

Запланировано Прикреплена Закрыта Перенесена Mailcow
2 Сообщения 1 Posters 2 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • A Не в сети
    A Не в сети
    Admin
    написал отредактировано
    #1

    Справочник по установке, настройке и эксплуатации Mailcow (Пункты 1–100)

    Установка и Docker

    1. Команда sudo docker compose pull скачивает все необходимые Docker-образы, указанные в файле docker-compose.yml, без запуска контейнеров.
    2. Команда sudo docker compose up -d скачивает образы (если их нет), создает и запускает все контейнеры Mailcow в фоновом режиме.
    3. Команда sudo docker compose down останавливает и удаляет все контейнеры и сети Mailcow, но сохраняет тома с данными.
    4. Команда sudo docker compose down -v полностью удаляет все контейнеры, сети и тома (включая все письма и базу данных).
    5. sudo docker compose ps показывает статус всех контейнеров Mailcow (работает/остановлен).
    6. sudo docker compose logs --tail=200 <имя_контейнера> показывает последние 200 строк логов указанного контейнера (например, nginx-mailcow, php-fpm-mailcow).
    7. Конфликт портов — самая частая проблема при запуске Mailcow, когда порт уже занят другим сервисом (nginx, apache).
    8. Ошибка address already in use означает, что порт, который пытается занять контейнер, уже используется другим процессом на хосте.
    9. Для тестового запуска Mailcow можно временно остановить системный Nginx командой sudo systemctl stop nginx.
    10. Чтобы Nginx не запускался автоматически, используется команда sudo systemctl disable nginx.
    11. Статус контейнера Healthy означает, что он не просто запущен, но и успешно прошел внутренние проверки работоспособности.
    12. Статус Started / Running означает, что процесс контейнера запущен, но его функциональность может быть еще не готова (например, база данных инициализируется).
    13. Конфликт Docker-сетей возникает, когда подсеть, которую пытается создать Mailcow, уже используется другой сетью Docker.
    14. Ошибка Pool overlaps with other one on this address space решается изменением подсети в переменной IPV4_NETWORK в файле .env.
    15. Для смены подсети Mailcow нужно изменить третий октет в IPV4_NETWORK (например, с 172.22.1 на 172.22.2).
    16. В качестве гарантированно свободной подсети можно использовать диапазон 10.0.0.0/24 (установив IPV4_NETWORK=10.0.0).
    17. Файл .env в директории /opt/mailcow-dockerized является основным конфигурационным файлом Mailcow.
    18. MAILCOW_HOSTNAME в файле .env — это полное доменное имя (FQDN) вашего почтового сервера (например, mail.domain.tld).
    19. Переменная HTTP_PORT в .env задает порт на хосте, который будет слушать веб-интерфейс Mailcow по HTTP.
    20. Переменная HTTPS_PORT в .env задает порт на хосте для HTTPS-интерфейса Mailcow.
    21. Если HTTPS_PORT закомментирован, Mailcow использует стандартный порт 443.
    22. SKIP_LETS_ENCRYPT=y в .env отключает встроенный ACME-клиент Mailcow, что необходимо при использовании внешнего прокси и Certbot.
    23. HTTP_REDIRECT=y заставляет Mailcow принудительно перенаправлять все HTTP-запросы на HTTPS.
    24. Переменная ADDITIONAL_SERVER_NAMES указывает дополнительные доменные имена, на которые должен отвечать веб-интерфейс Mailcow.
    25. TZ=Europe/Moscow задает часовой пояс для контейнеров Mailcow.
    26. DBPASS и DBROOT — автоматически сгенерированные пароли к базе данных MySQL/MariaDB.
    27. При изменении файла .env необходимо перезапустить Mailcow: sudo docker compose down && sudo docker compose up -d.

    Обратный прокси (Reverse Proxy)

    1. При использовании внешнего обратного прокси (например, Nginx) Mailcow должен слушать на нестандартных портах (например, 8080 и 8443).
    2. Внешний Nginx принимает трафик на стандартных портах 80 и 443 и перенаправляет его на внутренние порты Mailcow.
    3. Ключевой заголовок для Mailcow при работе за прокси: proxy_set_header X-Forwarded-Proto https;.
    4. Он сообщает Mailcow, что исходный запрос был по HTTPS, даже если внутри он идет по HTTP.
    5. Для работы с Certbot в конфиге Nginx обязательно должен быть блок server для порта 80.
    6. Certbot для проверки домена использует временную директорию location /.well-known/acme-challenge/.
    7. После успешного получения сертификата Certbot автоматически модифицирует конфиг Nginx, добавляя настройки SSL.
    8. Ошибка "if directive is not allowed here" возникает, когда Certbot добавляет неправильный редирект в конфиг Nginx.
    9. Правильный редирект HTTP -> HTTPS в Nginx выглядит так: return 301 https://$host$request_uri;.
    10. Для проксирования HTTPS-трафика внешний Nginx должен иметь свой собственный валидный SSL-сертификат (от Certbot).
    11. Конфиг внешнего Nginx должен быть разделен на два блока server: для порта 80 (редирект) и для порта 443 (прокси).
    12. В блоке для порта 443 обязательно должна быть директива proxy_pass http://127.0.0.1:8087; (или ваш внутренний порт).
    13. При использовании внешнего прокси встроенный HTTPS-порт Mailcow (например, 8443) остается неиспользуемым для внешнего трафика.

    Решение проблем с запуском и подключением

    1. Ошибка "Waiting for SQL..." в логах php-fpm-mailcow означает, что контейнер ждет готовности базы данных MySQL.
    2. Это нормально для первого запуска и может длиться несколько минут, пока MySQL инициализируется.
    3. Логи mysql-mailcow показывают прогресс инициализации базы данных и момент, когда она готова к подключениям (ready for connections).
    4. Ошибка HTTP 502 Bad Gateway от Nginx означает, что Nginx не может связаться с бэкендом (PHP-FPM).
    5. Самоподписанный сертификат вызывает предупреждение браузера "Недействительный сертификат" или "Ваше соединение не защищено".
    6. Ошибка "Циклическое перенаправление" в Firefox при доступе по HTTP возникает из-за принудительного редиректа Mailcow на HTTPS.
    7. Ошибка в Chrome "Этот сайт не может обеспечить безопасное подключение" возникает из-за проблем с SSL/TLS рукопожатием.
    8. Команда sudo nginx -t проверяет синтаксис конфигурационных файлов Nginx и указывает на ошибки.
    9. Ошибка "conflicting server name" в логах Nginx означает, что одно и то же доменное имя объявлено в двух разных конфигурационных файлах.
    10. Ошибка "protocol options redefined" возникает, когда настройки SSL определены в нескольких блоках server для одного порта.
    11. Ошибка "duplicate extension" в mime.types означает, что одно расширение файла определено дважды и не критична.
    12. Для диагностики занятости порта используется команда sudo ss -tuln | grep <порт>.
    13. Для определения процесса, занимающего порт, используется sudo lsof -i :<порт>.
    14. Устаревший синтаксис listen ... http2 в Nginx рекомендуется заменить на отдельную директиву http2 on;.
    15. Если после изменения портов в .env контейнер не запускается, нужно проверить, свободны ли эти порты.
    16. При ручном исправлении конфига Nginx после Certbot, все настройки SSL должны быть только в блоке для порта 443.
    17. Доступ к веб-интерфейсу по http://домен:8087 приведет к редиректу на HTTPS и может вызвать циклическую ошибку.
    18. Доступ по https://домен:8443 работает напрямую к Mailcow, но с предупреждением о самоподписанном сертификате.
    19. Прямой доступ к внутренним портам Mailcow следует использовать только для отладки.

    PTR, DNS и репутация

    1. PTR-запись связывает IP-адрес с доменным именем и критически важна для репутации почтового сервера.
    2. PTR-запись настраивается у хостинг-провайдера, а не в DNS-зоне домена у регистратора.
    3. Стандартные PTR от провайдера (например, 95-31-38-30.broadband.corbina.ru) вредят репутации почтового сервера.
    4. Правильный PTR должен указывать на почтовый хостнейм (например, mail.other5.nbics.net).
    5. Для идеальной работы необходима связка FCrDNS: PTR и A-запись должны указывать друг на друга.
    6. Отсутствие правильного PTR — одна из главных причин попадания писем в спам.
    7. Проверить PTR можно командой dig -x <IP-адрес> или на сайте mxtoolbox.com.
    8. Если провайдер не дает настроить PTR, необходимо использовать внешний SMTP-релей или сменить хостера.
    9. MX-запись должна указывать на почтовый хост (например, mail.other5.nbics.net), у которого есть A-запись.
    10. Ошибка {No A Record} для MX-хоста — критична. Почта не будет доставляться.
    11. SPF-запись (TXT) определяет, какие серверы имеют право отправлять почту от имени домена.
    12. Проверить SPF можно на mxtoolbox.com или с помощью dig TXT домен.tld.
    13. Пример правильной SPF-записи: v=spf1 mx a ip4:ВАШ_IP -all.
    14. DKIM-запись — это цифровая подпись писем. Ключ генерируется в Mailcow и добавляется как TXT-запись.
    15. DMARC-запись (TXT для _dmarc.домен.tld) определяет политику обработки писем, не прошедших SPF/DKIM.
    16. Отсутствие DMARC-записи снижает доверие к домену и мешает внедрению BIMI.
    17. Отчеты mxtoolbox показывают, что ваш IP не находится в черных списках (RBL) — это хороший знак.
    18. Статус "Ok OK" для всех RBL означает чистую репутацию IP-адреса.
    19. Домашние IP-адреса (из пулов Билайна, Ростелекома) непригодны для серьезного почтового сервера из-за PTR и блокировок портов.
    20. IP от специализированных дата-центров (как dedic-center.ru) имеют лучшую исходную репутацию.

    Управление и функциональность

    1. В Mailcow по умолчанию нет самостоятельной регистрации пользователей.
    2. Новые почтовые ящики создаются администратором в веб-интерфейсе (Mail Setup → Mailboxes).
    3. Логин администратора по умолчанию: admin, пароль: moohoo.
    4. При первом входе необходимо сменить пароль администратора.
    5. Mailcow можно использовать как SMTP-сервер для внешних приложений (например, Element/Synapse).
    6. Для этого создается специальный почтовый ящик (например, noreply@domain.tld), чьи данные указываются в настройках приложения.
    7. При регистрации пользователя в стороннем сервисе, письмо подтверждения отправляется с этого спец-ящика на личную почту пользователя.
    8. Такие транзакционные письма не считаются спамом при правильной настройке аутентификации домена (SPF, DKIM, DMARC).

    Общие вопросы и сравнения

    1. Установка почтового сервера — сложная задача, требующая знаний Linux, DNS и сетевых технологий.
    2. Настройка правильных DNS-записей (A, MX, PTR, SPF, DKIM, DMARC) — самый важный и сложный этап.
    3. Почтовый сервер состоит из нескольких компонентов: MTA (Postfix), MDA/IMAP (Dovecot), антиспам (Rspamd), веб-интерфейс (SOGo).
    4. YunoHost — это простая платформа для хостинга приложений (включая почту), идеальна для новичков.
    5. Mailcow — это профессиональное, мощное Docker-решение, сфокусированное только на почте.
    6. Помимо Mailcow и YunoHost, существуют другие open-source решения: iRedMail, Mail-in-a-Box, Modoboa.
    7. iRedMail — один из старейших и проверенных почтовых дистрибутивов.
    8. Mail-in-a-Box нацелен на максимальную простоту и автоматизацию.
    9. Modoboa — это гибкая панель управления для Postfix и Dovecot.
    10. Выбор решения зависит от опыта и целей: YunoHost для хобби, Mailcow/iRedMail для бизнеса.
    11. Для надежной корпоративной почты "из коробки" проще использовать Google Workspace или Microsoft 365.
    12. Свой сервер требует постоянного мониторинга, обновлений и борьбы со спамом.
    13. Самостоятельный почтовый сервер дает полный контроль над данными, но требует значительных временных затрат на поддержку.
    1 ответ Последний ответ
    0
    • A Не в сети
      A Не в сети
      Admin
      написал отредактировано
      #2

      Справочник по установке, настройке и эксплуатации Mailcow (Пункты 101–200)

      Docker и управление контейнерами

      1. docker compose exec <имя_контейнера> <команда> позволяет выполнить команду внутри работающего контейнера.
      2. Пример: sudo docker compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} проверяет подключение к базе данных.
      3. Контейнер nginx-mailcow выступает в роли обратного прокси внутри стека Mailcow для всех веб-сервисов.
      4. Контейнер php-fpm-mailcow обрабатывает PHP-логику веб-интерфейса Mailcow.
      5. Контейнер mysql-mailcow (MariaDB) хранит все настройки, домены, пользователей и пароли.
      6. Контейнер dovecot-mailcow отвечает за доставку писем в ящики пользователей (IMAP/POP3).
      7. Контейнер postfix-mailcow — это MTA (Mail Transfer Agent), принимающий и отправляющий почту.
      8. Контейнер rspamd-mailcow — мощная система фильтрации спама и проверки писем.
      9. Контейнер clamd-mailcow — антивирус, проверяющий вложения на вредоносный код.
      10. Контейнер unbound-mailcow — локальный DNS-резолвер для повышения производительности и безопасности.
      11. Контейнер redis-mailcow используется для кэширования и очередей задач.
      12. Контейнер sogo-mailcow предоставляет веб-почту (Roundcube) и CalDAV/CardDAV функционал.
      13. Контейнер acme-mailcow автоматически получает и обновляет SSL-сертификаты Let's Encrypt.
      14. Контейнер watchdog-mailcow отслеживает состояние других контейнеров и перезапускает упавшие.
      15. Контейнер netfilter-mailcow управляет правилами файервола внутри Docker-сети.

      Проблемы с сетью и портами

      1. Ошибка failed to bind host port for 0.0.0.0:443: address already in use означает, что порт 443 занят.
      2. Для освобождения порта 443 нужно остановить сервис, который его занимает (nginx, apache, другой Docker-контейнер).
      3. При использовании внешнего прокси порты 80 и 443 на хосте должны принадлежать прокси, а не Mailcow.
      4. В этом случае в файле .env нужно указать альтернативные порты для Mailcow, например HTTP_PORT=8080 и HTTPS_PORT=8443.
      5. Команда sudo ss -tulpn | grep 443 показывает все процессы, использующие порт 443 с их PID.
      6. Если порт занят процессом с PID 1 (systemd), значит служба настроена на системном уровне.
      7. После изменения портов в .env может потребоваться полный перезапуск: docker compose down && docker compose up -d.
      8. Конфликт портов может возникнуть не только с внешними сервисами, но и с другими контейнерами Docker.
      9. Для просмотра всех Docker-сетей используется команда docker network ls.
      10. Для детальной информации о сети: docker network inspect <имя_сети>.
      11. Стандартная сеть Docker bridge использует подсеть 172.17.0.0/16, что может конфликтовать с Mailcow.
      12. Если несколько проектов Docker Compose используют одинаковые подсети, возникает конфликт.
      13. Решение конфликта сетей — изменить IPV4_NETWORK в .env на уникальный диапазон.

      Настройка внешнего Nginx (Reverse Proxy)

      1. Внешний Nginx должен быть настроен на проксирование трафика на внутренние порты Mailcow.
      2. Для HTTP-трафика: proxy_pass http://127.0.0.1:8080; (если HTTP_PORT=8080).
      3. Для HTTPS-трафика: proxy_pass http://127.0.0.1:8080; также, так как SSL терминируется на внешнем Nginx.
      4. Заголовок proxy_set_header X-Forwarded-Proto https; критически важен для правильной работы Mailcow за прокси.
      5. Без этого заголовка Mailcow будет думать, что все запросы идут по HTTP, и пытаться редиректить на HTTPS.
      6. Заголовок proxy_set_header Host $host; сохраняет оригинальное имя хоста при проксировании.
      7. Заголовок proxy_set_header X-Real-IP $remote_addr; передает реальный IP-адрес клиента.
      8. Для поддержки WebSocket (нужен SOGo для уведомлений) необходимы настройки:
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
      9. Директива client_max_body_size 0; отключает ограничение на размер загружаемых файлов (важно для вложений).
      10. В конфиге внешнего Nginx должен быть отдельный блок server для порта 80 с редиректом на HTTPS.
      11. Редирект делается директивой return 301 https://$host$request_uri;.
      12. Без этого редиректа пользователи, заходящие по HTTP, будут видеть ошибки или страницу Mailcow без стилей.

      Certbot и SSL-сертификаты

      1. Certbot — это клиент Let's Encrypt для автоматического получения и обновления SSL-сертификатов.
      2. Команда sudo certbot --nginx автоматически получает сертификат и настраивает Nginx.
      3. При первом запуске Certbot создает временный файл в /.well-known/acme-challenge/ для проверки домена.
      4. Для этого порт 80 должен быть открыт и доступен из интернета.
      5. Если Certbot находит существующий сертификат, он предлагает опции: переустановить или обновить.
      6. Выбор 2: Renew & replace the certificate гарантирует получение свежего сертификата и обновление конфига.
      7. Certbot автоматически добавляет в конфиг Nginx строки ssl_certificate и ssl_certificate_key.
      8. Также добавляются include /etc/letsencrypt/options-ssl-nginx.conf; и ssl_dhparam....
      9. Ошибка "We were unable to restart web server" означает, что Certbot не смог перезапустить Nginx из-за ошибок в конфиге.
      10. В этом случае нужно исправить конфиг Nginx вручную и выполнить sudo certbot install --cert-name <домен>.
      11. Сертификаты Let's Encrypt действительны 90 дней, Certbot автоматически их обновляет через cron/systemd timer.
      12. После обновления сертификата Nginx перезагружается для применения новых сертификатов.

      Диагностика и отладка

      1. sudo docker compose logs -f <контейнер> позволяет следить за логами в реальном времени (аналог tail -f).
      2. sudo docker compose logs --tail=50 mysql-mailcow показывает последние 50 строк логов MySQL.
      3. Лог-сообщение mariadbd: ready for connections. означает, что MySQL готов к работе.
      4. Циклическое повторение Waiting for SQL... в логах PHP-FPM указывает на проблемы с подключением к MySQL.
      5. Ошибка connect() failed (111: Connection refused) в логах Nginx означает, что бэкенд (PHP-FPM) не отвечает.
      6. Команда sudo docker compose restart <контейнер> перезапускает конкретный контейнер.
      7. sudo docker compose restart nginx-mailcow перезапускает только Nginx, что полезно после изменения конфигов.
      8. Проверка доступности порта изнутри контейнера: docker exec -it <контейнер> nc -zv 127.0.0.1 <порт>.
      9. Для проверки DNS внутри контейнера: docker exec -it <контейнер> dig google.com.
      10. Логирование ошибок PHP можно включить в конфигурации PHP-FPM, монтируя файл логов.
      11. Все контейнеры Mailcow используют один и тот же внутренний часовой пояс из переменной TZ.

      Настройка DNS и почтовые протоколы

      1. Помимо веб-интерфейса, Mailcow использует стандартные почтовые порты: 25 (SMTP), 465 (SMTPS), 587 (Submission).
      2. IMAP (для чтения почты) работает на портах 143 (STARTTLS) и 993 (SSL/TLS).
      3. POP3 (устаревший протокол) работает на портах 110 и 995.
      4. Sieve (для фильтрации почты) работает на порту 4190.
      5. Для нормальной работы почты эти порты должны быть открыты в файерволе сервера.
      6. Проверить доступность порта извне можно на mxtoolbox.com (Diagnostics -> SMTP Test).
      7. При использовании внешнего прокси, почтовые порты должны быть открыты напрямую на сервере (прокси их не трогает).
      8. SUBMISSION_PORT=587 в .env позволяет изменить стандартный порт для отправки почты клиентами.
      9. SMTPS_PORT=465 — порт для устаревшего SMTPS (не путать с STARTTLS на порту 587).
      10. IMAPS_PORT=993 и POP3S_PORT=995 — защищенные версии протоколов доступа к почте.
      11. Для каждого добавленного почтового домена нужно настроить отдельные DNS-записи (MX, SPF, DKIM, DMARC).
      12. DKIM-ключи генерируются отдельно для каждого домена в панели Mailcow.
      13. Селектор DKIM по умолчанию в Mailcow — dkim (запись выглядит как dkim._domainkey.domain.tld).
      14. DMARC-политика p=quarantine рекомендована для начальной настройки, p=reject — для полной защиты.
      15. Адрес для DMARC-отчетов (rua=mailto:...) должен существовать и быть доступным.

      Безопасность

      1. Встроенный watchdog (USE_WATCHDOG=y) автоматически перезапускает упавшие контейнеры.
      2. WATCHDOG_NOTIFY_EMAIL позволяет настроить отправку уведомлений о проблемах на email.
      3. WATCHDOG_NOTIFY_BAN включает уведомления о забаненных IP-адресах.
      4. WATCHDOG_EXTERNAL_CHECKS=n отключает внешние проверки на open relay (по умолчанию выключено).
      5. Переменная SKIP_CLAMD=n включает антивирус ClamAV (рекомендуется, но требует ресурсов).
      6. SKIP_SOGO=n включает веб-почту SOGo (рекомендуется оставить включенным).
      7. SKIP_FTS=n включает полнотекстовый поиск в Dovecot (полезно, но нагружает сервер).
      8. FTS_HEAP=128 ограничивает память для индексации писем (можно увеличить при наличии ресурсов).
      9. FTS_PROCS=1 ограничивает количество процессов индексации (можно увеличить на мощных серверах).
      10. ALLOW_ADMIN_EMAIL_LOGIN=n запрещает администраторам входить в почтовые ящики пользователей без пароля.
      11. ACL_ANYONE=disallow запрещает создание общих папок для всех аутентифицированных пользователей.
      12. ENABLE_SSL_SNI=n отключает поддержку отдельных сертификатов для разных доменов (если не нужно).
      13. ENABLE_IPV6=false отключает IPv6 (если не настроен на сервере).

      Почтовые ящики и квоты

      1. MAILDIR_GC_TIME=7200 определяет время (в минутах) хранения удаленных ящиков в корзине (здесь 5 дней).
      2. MAILDIR_SUB=Maildir — стандартное имя директории для хранения писем в формате Maildir.
      3. SOGO_EXPIRE_SESSION=480 — время сессии в веб-почте SOGo в минутах (480 = 8 часов).
      4. SOGO_URL_ENCRYPTION_KEY — ключ шифрования для URL в SOGo (генерируется автоматически).
      5. DOVECOT_MASTER_USER и DOVECOT_MASTER_PASS — мастер-аккаунт для доступа к любым ящикам (использовать осторожно).
      6. LOG_LINES=9999 — количество сохраняемых строк логов в Redis для каждого сервиса.
      7. SPAMHAUS_DQS_KEY — ключ для Spamhaus Data Query Service (если ваш IP в заблокированной ASN).

      API и автоматизация

      1. Mailcow имеет полноценный REST API для управления доменами, ящиками, алиасами и настройками.
      2. Для использования API нужно создать ключ в разделе Access → API и разрешить доступ с нужных IP (API_ALLOW_FROM).
      1 ответ Последний ответ
      0
      Ответить
      • Ответить, создав новую тему
      Авторизуйтесь, чтобы ответить
      • Сначала старые
      • Сначала новые
      • По количеству голосов


      • Войти

      • Login or register to search.
      Powered by NodeBB Contributors
      • Первое сообщение
        Последнее сообщение
      0
      • Категории
      • Последние
      • Метки
      • Популярные
      • World
      • Пользователи
      • Группы