Всем привет! С вами Михаил, DevOps-инженер из Nixys. Эта статья — заключительная часть серии о создании почтового сервера с чистого поля. Вы можете почитать первую и вторую части по ссылкам.

Сегодня мы подробно рассмотрим процесс настройки почтового сервера с использованием Docker и таких компонентов, как Exim4, Dovecot, PostfixAdmin и RainLoop. Наша цель — создать полностью функциональный и масштабируемый почтовый сервер, который легко управляется благодаря контейнеризации.

Ещё мы обсудим, как Docker упрощает процесс развёртывания, управления зависимостями и взаимодействия между компонентами

Преимущества использования Docker

Использование Docker для настройки почтового сервера даёт много плюсов:

  • Легкость развертывания: все компоненты запускаются в изолированных контейнерах, что позволяет легко развернуть сервер на любом сервере или виртуальной машине, независимо от основной операционной системы. С Docker вы сможете быстро развернуть необходимые сервисы и избежать сложностей, связанных с установкой и конфигурацией программного обеспечения на хостовой системе.

  • Масштабируемость: Docker позволяет легко масштабировать вашу систему по мере роста нагрузки. Например, вы сможете увеличить количество экземпляров Dovecot для обработки большего количества IMAP-соединений или настроить балансировку нагрузки для Exim4, чтобы распределять почтовый трафик между несколькими серверами.

  • Управление зависимостями: контейнеризация решает проблемы с управлением зависимостями. Все необходимые библиотеки и пакеты для каждого сервиса включены в контейнеры, что предотвращает конфликты и упрощает обновление и миграцию приложений. Каждая компонента будет работать в изолированной среде, которая будет полностью контролироваться вами.

Обзор контейнеров

Теперь давайте рассмотрим основные компоненты, которые будут запускаться в нашем docker-compose файле.

Если вы хотите применить эту конфигурацию на своем сервере, вы можете склонировать готовый репозиторий.

Многие из сервисов, описанных ниже, собираются из Dockerfile'ов, написанных вручную. Подробное описание каждого шага сборки выходит за рамки этой статьи, поэтому мы сосредоточимся на наиболее значимых частях.

Взять готовые конфигурации сборок контейнеров можно из этого репозитория в GitHub.

Основные идеи docker-compose файла:

  1. Одна подсеть для всех контейнеров с четким разделением по IP-адресам. Это упрощает управление сетевыми взаимодействиями между контейнерами и позволяет более чётко контролировать маршрутизацию и доступ к сервисам.

  2. Общий префикс названия проекта. Использование префикса для всех контейнеров позволяет легко идентифицировать и управлять ресурсами, связанными с конкретным проектом. Это особенно важно при работе с несколькими проектами на одном сервере.

  3. Все файлы, необходимые для работы почтового сервера, находятся в одной директории с docker-compose.yml. Это упрощает управление конфигурацией и делает проект более переносимым. Вы можете легко перенести его на другой сервер или поделиться с коллегами.

  4. Синхронизация времени всех контейнеров с серверным временем. Корректная синхронизация времени важна для обеспечения согласованности логов, правильной работы сертификатов и предотвращения проблем с аутентификацией.

  5. Автоматическое восстановление контейнеров. Все контейнеры настроены на автоматическое восстановление в случае сбоя. Это обеспечивает устойчивость системы и снижает время простоя.

  6. Один общий .env файл, используемый для всех контейнеров. Этот файл содержит все ключевые переменные окружения: имена баз данных, пароли и версии программного обеспечения. Использование общего .env файла упрощает настройку и управление проектом, делая его более гибким и удобным для обновления.

Такой подход позволяет создавать надёжную, масштабируемую и легкую в управлении инфраструктуру почтового сервера. В следующих разделах мы подробно рассмотрим каждый из компонентов, входящих в состав нашего почтового сервера, и их взаимодействие между собой.


Exim4

Exim4 — это мощный и гибкий почтовый сервер (MTA — Mail Transfer Agent), который отвечает за отправку, получение и маршрутизацию электронной почты. Он широко используется благодаря своей гибкости и возможности тонкой настройки под различные сценарии использования.

Установка и базовая настройка

Exim4 запускается в Docker-контейнере, что обеспечивает его изоляцию от других процессов и упрощает управление зависимостями. Основные шаги по установке и настройке Exim4 выполняются в Dockerfile. Этот файл содержит инструкции по установке Exim4, его зависимости, а также копирует конфигурационные файлы, которые необходимы для работы сервера.

Для успешной интеграции Exim4 с другими сервисами, такими как Dovecot (обработка почтовых ящиков), Rspamd (фильтрация спама) и ClamAV (антивирусная проверка), нужно правильно настроить конфигурацию. Это обеспечит корректную доставку и обработку писем.

Конфигурация для взаимодействия с другими компонентами

В конфигурации Exim4 объявляется только подключение к Rspamd, остальные же сервисы настраиваются самостоятельно.

Основные компоненты Dockerfile:

  1. Переменная ARG EXIM_VERSION: эта переменная задает версию Exim4, которую вы хотите установить. Перед установкой рекомендуется проверить доступные версии на официальном сайте Exim и выбрать самую актуальную, чтобы использовать последние обновления и исправления безопасности.

  2. Запуск контейнера от пользователя vmail: контейнер Exim4 запускается под пользователем vmail. Это повышает безопасность и управляемость, так как пользователь vmail имеет ограниченные права доступа, что снижает риск нарушения безопасности системы.

  3. Подготовка конфигураций в директории ./volumes/etc/exim4: все конфигурационные файлы Exim4 должны быть заранее подготовлены и размещены в указанной директории. Так вы сможете легко редактировать и обновлять конфигурации без необходимости пересобирать контейнер.

  4. Создание директории для логов: директория ./volumes/var/log/exim используется для хранения логов Exim4. Логи являются важным инструментом для мониторинга работы почтового сервера и отладки проблем.

Exim4 в docker-compose.yml

В docker-compose.yml Exim4 настроен следующим образом:

services:
  exim:
    build:
      context: build/exim/
      args:
        - EXIM_GID=${EXIM_GID:-500}
        - EXIM_GROUP=${EXIM_GROUP:-vmail}
        - EXIM_USER=${EXIM_USER:-vmail}
        - EXIM_UID=${EXIM_UID:-500}
    container_name: ${COMPOSE_PROJECT_NAME}-exim4
    ports:
      - "25:25"     # SMTP - основной порт для отправки почты
      - "465:465"   # SMTPS - безопасный SMTP с TLS
      - "587:587"   # SMTP - альтернативный порт для отправки почты, часто используется клиентами
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./volumes/var/mail:/var/mail:rw
      - ./volumes/etc/exim4:/etc/exim4
      - ./volumes/etc/ssl:/etc/exim4/ssl
      - ./volumes/var/log/exim:/var/log/exim:rw
      - ./volumes/var/run/dovecot:/var/run/dovecot:rw
    env_file:
      - .env
    restart: always
    networks:
      lan:
        ipv4_address: ${PROJECT_IP_MASK}.3

Эта конфигурация обеспечивает гибкую и надёжную работу Exim4 в составе почтового сервера, интегрируя его с другими необходимыми сервисами.


Dovecot

Dovecot — это высокопроизводительный почтовый сервер, который обеспечивает доступ к почтовым ящикам через протоколы IMAP и POP3. Он широко используется благодаря своей безопасности и гибкости настройки.

Интеграция с Exim4

Ключевая задача при настройке Dovecot — обеспечить его взаимодействие с Exim4. После того как Exim4 доставляет письмо, Dovecot отвечает за его хранение и доступ пользователям. Интеграция этих двух сервисов обеспечивает полную функциональность почтового сервера.

Установка и базовая настройка

Для установки и настройки Dovecot используется Dockerfile, где задаются версии и зависимости, необходимые для его корректной работы. Dovecot предоставляет пользователям доступ к почтовым ящикам, позволяя им получать и управлять электронной почтой через клиенты, поддерживающие IMAP и POP3.

Основные компоненты Dockerfile:

  1. Версия Dovecot: для установки Dovecot используется версия из официального репозитория Pigeonhole. Этот репозиторий также включает плагин Sieve, который добавляет функциональность фильтрации почты.

  2. Работа от пользователя vmail: контейнер Dovecot работает от имени пользователя vmail, что повышает безопасность системы. Этот пользователь обладает минимальными привилегиями, необходимыми для работы почтового сервера.

  3. Конфигурационные файлы: все конфигурационные файлы Dovecot должны быть заранее подготовлены и размещены в директории ./volumes/etc/dovecot. Это позволяет легко управлять настройками сервера и поддерживать их в актуальном состоянии.

  4. Директория для логов: Логи работы Dovecot хранятся в директории ./volumes/var/log/dovecot. Они являются важным инструментом для мониторинга и диагностики работы почтового сервера.

Dovecot в docker-compose.yml

Dovecot представлен в docker-compose.yml следующим образом:

services:
  dovecot:
    container_name: ${COMPOSE_PROJECT_NAME}-dovecot
    ports:
      - "993:993"  # SSL/IMAP
      - "995:995"  # SSL/POP3
    build:
      context: build/dovecot/
      args:
        - vmail_gid=${EXIM_GID:-500}
        - VMAIL_GROUP=${EXIM_GROUP:-vmail}
        - VMAIL_USER=${EXIM_USER:-vmail}
        - vmail_uid=${EXIM_UID:-500}
        - dovecot_branch=release-${DOVECOT_VERSION}
        - dovecot_tag=${DOVECOT_VERSION}
        - pigeonhole_branch=${pigeonhole_branch:-release-0.5.20}
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./volumes/var/mail:/var/mail:rw
      - ./volumes/etc/dovecot:/etc/dovecot
      - ./volumes/etc/ssl:/etc/dovecot/ssl
      - ./volumes/var/log/dovecot:/var/log/dovecot:rw
      - ./volumes/var/run/dovecot:/var/run/dovecot:rw
    env_file:
      - .env
    restart: always
    networks:
      lan:
        ipv4_address: ${PROJECT_IP_MASK}.4

Эта конфигурация обеспечивает стабильную и безопасную работу Dovecot, обеспечивая доступ к почтовым ящикам пользователей с использованием защищённых протоколов.


PostfixAdmin

PostfixAdmin — это удобный веб-интерфейс для управления почтовыми доменами и учетными записями, который значительно облегчит администрирование почтового сервера.

PostfixAdmin позволяет эффективно управлять почтовыми доменами и учетными записями через простой и интуитивно понятный веб-интерфейс. С его помощью можно добавлять новые домены, создавать почтовые ящики, устанавливать квоты, а также выполнять другие задачи, связанные с управлением почтовым сервером.

Установка и базовая настройка

В Dockerfile для PostfixAdmin описаны шаги по установке и настройке веб-интерфейса, а также его интеграция с базой данных PostgreSQL. Этот интерфейс предоставляет администраторам возможность легко создавать и управлять виртуальными почтовыми доменами и учетными записями, что упрощает управление почтовой инфраструктурой.

PostfixAdmin в docker-compose.yml

services:
  postfixadmin:
    build:
      context: build/postfixadmin/
    container_name: ${COMPOSE_PROJECT_NAME}-postfixadmin
    env_file:
      - .env
    ports:
      - "8080:80"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./volumes/var/mail:/var/mail:rw
      - ./volumes/etc/postfixadmin/config.inc.php:/var/www/html/config.local.php:ro
      - ./volumes/etc/postfixadmin/dbconfig.inc.php:/var/www/dbconfig.inc.php:ro
      - ./volumes/etc/dovecot:/etc/dovecot
      - ./volumes/scripts/postfixadmin:/var/www/scripts:rw
      - ./volumes/etc/ssl:/etc/dovecot/ssl
    networks:
      lan:
        ipv4_address: ${PROJECT_IP_MASK}.5
    restart: always
    environment:
      POSTFIXADMIN_DB_TYPE: ${POSTFIXADMIN_DB_TYPE}
      POSTFIXADMIN_DB_HOST: ${POSTFIXADMIN_DB_HOST}
      POSTFIXADMIN_DB_USER: ${POSTFIXADMIN_DB_USER}
      POSTFIXADMIN_DB_NAME: ${POSTFIXADMIN_DB_NAME}
      POSTFIXADMIN_DB_PASSWORD: ${POSTFIXADMIN_DB_PASSWORD}

PostfixAdmin в данной конфигурации позволяет эффективно управлять почтовым сервером, предоставляя администратору удобные инструменты для настройки и обслуживания почтовых доменов и учетных записей.


RainLoop

RainLoop — это современный веб-клиент для работы с электронной почтой, который позволяет пользователям легко управлять своей почтой через браузер.

Интеграция с Dovecot

RainLoop должен быть настроен для работы с Dovecot, что обеспечит пользователям возможность отправлять и получать электронные письма через удобный веб-интерфейс. Эта интеграция позволяет создать единое и простое в использовании решение для работы с почтой, не требующее установки дополнительных приложений на стороне клиента.

Установка и базовая настройка

RainLoop в Dockerfile настроен для беспрепятственной работы в контейнере. Включена интеграция с Dovecot, что обеспечивает доступ пользователей к их почтовым ящикам через веб-интерфейс. Эта настройка позволяет RainLoop работать как легковесный и эффективный клиент, предоставляющий полноценный функционал для управления электронной почтой.

RainLoop в docker-compose.yml

services:
  rainloop:
    build:
      context: build/rainloop/
    container_name: ${COMPOSE_PROJECT_NAME}-rainloop
    env_file:
      - .env
    ports:
      - "8800:8888"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./volumes/rainloop/data:/rainloop/data:rw
    networks:
      lan:
        ipv4_address: ${PROJECT_IP_MASK}.6
    restart: always

RainLoop как веб-клиент предоставляет удобный интерфейс для работы с почтой, легко интегрируясь с остальными компонентами почтового сервера, что делает его отличным выбором для пользователей, предпочитающих работать с почтой через веб-браузер.


PostgreSQL

PostgreSQL — это мощная реляционная база данных, используемая в данном проекте для хранения данных, необходимых для работы PostfixAdmin.

Использование в качестве базы данных для PostfixAdmin

PostgreSQL играет ключевую роль, выступая в качестве базы данных для PostfixAdmin. Для корректной работы PostfixAdmin необходимо убедиться, что все параметры подключения к базе данных настроены в соответствии с конфигурацией PostgreSQL, которая указана в .env файле. Это включает в себя соответствие имени базы данных, имени пользователя и пароля, используемых в обеих системах.

Установка и настройка

В рамках Docker Compose PostgreSQL настроен для работы в связке с другими контейнерами, такими как PostfixAdmin, обеспечивая надежное и эффективное хранение данных. Docker обеспечивает изоляцию базы данных, что позволяет избежать конфликтов с другими сервисами и упрощает управление зависимостями.

PostgreSQL в docker-compose.yml

services:
  postgresql:
    image: postgres:${POSTGRES_VERSION}
    container_name: ${COMPOSE_PROJECT_NAME}-postgresql
    volumes:
      - ./volumes/var/lib/postgresql/data:/var/lib/postgresql/data:rw
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    env_file:
      - .env
    restart: always
    networks:
      lan:
        ipv4_address: ${PROJECT_IP_MASK}.2
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

PostgreSQL обеспечивает надёжное хранение данных и является критическим компонентом для PostfixAdmin, обеспечивая сохранность и доступность всех почтовых доменов и учетных записей.


Redis

Redis — это высокопроизводительная система управления базами данных в памяти, используемая для кэширования данных и повышения производительности системы. В нашей конфигурации Redis применяется для хранения данных, связанных с фильтрацией спама и другими задачами.

Установка и настройка

Redis настраивается через Docker Compose, что упрощает его развертывание и интеграцию с другими компонентами системы. В данном случае Redis будет использоваться для хранения данных, необходимых для работы системы фильтрации спама Rspamd и других приложений.

Redis в docker-compose.yml

services:
  redis:
    image: redis:${REDIS_VERSION}
    container_name: ${COMPOSE_PROJECT_NAME}-redis
    env_file:
      - .env
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./volumes/var/lib/redis:/data:rw
    networks:
      lan:
        ipv4_address: ${PROJECT_IP_MASK}.7
    restart: always

Redis обеспечивает быструю и надежную работу кэширования данных, что является критически важным для поддержания высоких показателей производительности почтового сервера. Правильная настройка Redis в Docker Compose позволяет легко интегрировать его с другими компонентами системы и обеспечивать стабильную работу всего почтового сервера.


Rspamd

Rspamd — это мощная система фильтрации спама, предназначенная для защиты вашей почты от нежелательных сообщений и фишинговых атак.

Интеграция с Exim4 для фильтрации спама

Rspamd должен быть интегрирован с Exim4, чтобы обрабатывать и фильтровать почту, проходящую через почтовый сервер. Важным аспектом интеграции является настройка Rspamd для работы с ClamAV, что позволяет дополнительно проверять почту на вирусы и вредоносные вложения. Эта интеграция обеспечивает комплексную защиту от спама и угроз.

Установка и настройка

В Dockerfile для Rspamd настроены все необходимые зависимости и конфигурации, которые обеспечивают его корректную работу в контейнере. Это включает установку самого Rspamd и настройку его базовых параметров.

Основные компоненты Dockerfile:

  1. Подготовка настроек: все конфигурационные файлы должны быть подготовлены внутри директории /etc, которая расположена вместе с Dockerfile.

  2. Конфигурационные файлы: все настройки должны быть размещены в директории ./volumes/etc/rspam.

  3. Логи: создайте директорию для хранения логов в ./volumes/var/log/rspam.

Rspamd в docker-compose.yml

services:
  rspam:
    container_name: ${COMPOSE_PROJECT_NAME}-rspam
    restart: unless-stopped
    ports:
      - "11334:11334"
    build:
      context: ./build/rspam
      args:
        RSPAM_gid: 0
        RSPAM_uid: 500
        RSPAM_GROUP: root
        RSPAM_USER: rspamd
        RSPAM_IP: ${PROJECT_IP_MASK}.8
        RSPAM_REDIS_DB: 7
    depends_on:
     - redis
     - clamav
    volumes:
     - /etc/localtime:/etc/localtime:ro
     - /etc/timezone:/etc/timezone:ro
     - ./volumes/var/lib/rspamd:/var/lib/rspamd
     - ./volumes/var/log/rspam:/var/log/rspamd
    environment:
     - REDIS_PASSWORD=${REDIS_PASSWORD}
     - REDIS_PORT=${REDIS_PORT}
     - RSPAM_GROUP=root
     - RSPAM_USER=rspamd
     - RSPAM_enable_password=${RSPAM_enable_password}
     - RSPAM_password=${RSPAM_password}
     - RSPAM_REDIS_DB=7
     - RSPAM_IP=${PROJECT_IP_MASK}.8
     - CLAMAV_IP=${PROJECT_IP_MASK}.9
    networks:
      lan:
        ipv4_address: ${PROJECT_IP_MASK}.8
        aliases:
         - rspam

Rspamd обеспечивает надежную фильтрацию спама и интеграцию с другими компонентами почтового сервера, что делает его неотъемлемой частью системы защиты почты. Убедитесь, что все настройки и интеграции выполнены правильно для достижения максимальной эффективности фильтрации и защиты.


ClamAV

ClamAV — это антивирусное программное обеспечение, используемое для сканирования и защиты почтового сервера от вредоносного ПО. ClamAV интегрируется с Exim4 для проверки входящих писем, обеспечивая их безопасность и защиту от вирусов.

Интеграция с Exim4

ClamAV выполняет антивирусную проверку входящих писем до их доставки пользователям. Эта интеграция позволяет блокировать письма, содержащие вредоносные программы, и таким образом обеспечивает дополнительный уровень защиты для почтового сервера.

ClamAV в docker-compose.yml

services:
  clamav:
    container_name: ${COMPOSE_PROJECT_NAME}-clamav
    image: tiredofit/clamav:latest
    restart: always
    environment:
     - CLAMAV_IP=${PROJECT_IP_MASK}.9
     - DEFINITIONS_UPDATE_FREQUENCY=60
     - SETUP_TYPE=MANUAL
    volumes:
     - /etc/localtime:/etc/localtime:ro
     - /etc/timezone:/etc/timezone:ro
     - ./volumes/var/lib/clamav:/data
    networks:
      lan:
        ipv4_address: ${PROJECT_IP_MASK}.9
        aliases:
         - clamav

ClamAV выполняет регулярное обновление своих вирусных баз данных (определяемых через переменную DEFINITIONS_UPDATE_FREQUENCY), что позволяет ему оставаться актуальным и эффективным в обнаружении новых угроз. Настройка ClamAV в Docker Compose обеспечивает его надежную работу и интеграцию с другими компонентами системы, такими как Exim4, для полноценной защиты почтового сервера.


Переменные окружения .env

1. Переменные для проекта

  • COMPOSE_PROJECT_NAME=mailserver

    • Описание: определяет имя проекта Docker Compose. Это имя будет использоваться в именах контейнеров, сетей и других ресурсов Docker. Например, если имя проекта mailserver, то контейнеры будут именоваться как mailserver-postgresql, mailserver-dovecot и т. д.

  • PROJECT_IP_MASK=172.23.1

    • Описание: задает базовую часть IP-адреса для контейнеров. Например, если значение 172.23.1, то контейнер PostgreSQL может получить IP 172.23.1.2, а другой контейнер — 172.23.1.3. Это упрощает управление статическими IP-адресами внутри Docker сети.

2. Переменные для PostgreSQL

  • POSTGRES_DB=

    • Описание: имя базы данных, которая будет создана при инициализации контейнера PostgreSQL. Эта база данных будет использоваться, например, для хранения данных PostfixAdmin.

  • POSTGRES_USER

    • Описание: имя пользователя, который будет создан в PostgreSQL. Этот пользователь будет использоваться для подключения и управления базой данных mailserver_db.

  • POSTGRES_PASSWORD

    • Описание: пароль для пользователя POSTGRES_USER. Этот пароль необходим для безопасного подключения к базе данных.

  • POSTGRES_VERSION

    • Описание: определяет версию PostgreSQL, которая будет использоваться при создании контейнера. В данном случае это версия 14. Docker использует эту переменную, чтобы загрузить соответствующий образ PostgreSQL.

3. Переменные для PostfixAdmin

  • POSTFIXADMIN_DB_TYPE=pgsql

    • Описание: определяет тип базы данных, которую будет использовать PostfixAdmin. В данном случае используется PostgreSQL (pgsql), но также поддерживаются и другие СУБД, такие как MySQL.

  • POSTFIXADMIN_DB_HOST=172.23.1.2

    • Описание: указывает IP-адрес хоста базы данных для PostfixAdmin. В данном случае это IP-адрес контейнера PostgreSQL.

  • POSTFIXADMIN_DB_USER

    • Описание: имя пользователя базы данных, который будет использоваться PostfixAdmin для подключения к базе данных.

  • POSTFIXADMIN_DB_NAME

    • Описание: имя базы данных, к которой будет подключаться PostfixAdmin.

  • POSTFIXADMIN_DB_PASSWORD

    • Описание: пароль пользователя базы данных, который будет использоваться для подключения PostfixAdmin к базе данных.

4. Переменные для Dovecot

  • DOVECOT_VERSION=

    • Описание: указывает версию Dovecot, которая будет использоваться в контейнере.

5. Переменные для Redis

  • REDIS_PASSWORD

    • Описание: пароль для Redis-сервера, который будет использоваться для защиты доступа к данным, хранящимся в Redis. .

  • REDIS_PORT=

    • Описание: порт, на котором Redis будет принимать соединения. По умолчанию Redis использует порт 6379.

  • REDIS_PROTECTED_MODE=yes

    • Описание: включает или отключает защищённый режим (protected mode) в Redis. В защищенном режиме Redis принимает соединения только от localhost. Значение yes означает, что защищенный режим включен.

  • REDIS_VERSION

    • Описание: указывает версию Redis, которая будет использоваться в контейнере. В данном случае это версия 6.

6. Переменные для Rspamd

  • RSPAM_enable_password=yes

    • Описание: указывает, нужно ли использовать пароль для доступа к Rspamd интерфейсу. Значение yes означает, что доступ к интерфейсу будет защищен паролем.

  • RSPAM_password

    • Описание: Пароль, который будет использоваться для доступа к интерфейсу Rspamd.

Этот .env файл централизует и упрощает управление ключевыми настройками проекта. Переменные используются для конфигурирования различных компонентов почтового сервера, таких как PostgreSQL, Redis, Dovecot, PostfixAdmin и Rspamd. Это позволяет легко изменять параметры проекта, просто редактируя .env файл, без необходимости менять настройки в самих конфигурационных файлах Docker Compose.


Алгоритм запуска контейнеров

Для успешного развёртывания и запуска почтового сервера с использованием Docker следуйте приведенным ниже шагам. Эти шаги включают настройку конфигурационных файлов, проверку прав доступа и запуск контейнеров.

1. Клонирование репозитория

Начните с клонирования репозитория, который содержит все необходимые файлы и конфигурации. Используйте следующую команду для клонирования:

git clone https://github.com/nixys/docker-mail-server

2. Настройка Exim4

  1. Перейдите в директорию конфигурации Exim4:

    cd volumes/etc/exim4
    
  2. Отредактируйте основной конфигурационный файл exim.conf, чтобы настроить следующие параметры:

    • основные переменные для вашего домена.

    • параметры подключения к базе данных, используя пароль из файла .env.

    • пути к сертификатам и DKIM ключам.

    • дополнительные ACL (Access Control List) правила, если это необходимо.

  3. Убедитесь, что все изменения сохранены и конфигурация корректна.

3. Настройка Dovecot

  1. Перейдите в директорию конфигурации Dovecot:

    cd volumes/etc/dovecot
    
  2. Отредактируйте файл dovecot-sql.conf для настройки подключения к базе данных, используя параметры из .env.

  3. В файле dovecot.conf настройте следующие параметры:

    • Основные конфигурации для вашего домена.

    • Параметры для SSL сертификатов.

  4. Убедитесь, что все конфигурационные файлы корректны и сохранены.

4. Настройка PostfixAdmin

  1. Перейдите в директорию конфигурации PostfixAdmin:

    cd volumes/etc/postfixadmin
    
  2. Отредактируйте файл dbconfig.inc.php, чтобы настроить подключение к базе данных в соответствии с настройками из .env.

  3. В файле config.inc.php настройте переменные, касающиеся вашего домена, включая параметры для почтового управления и другие опции.

  4. Сохраните все изменения и проверьте их корректность.

5. Настройка Rspamd

  1. Перейдите в директорию конфигурации Rspamd:

    cd build/rspam/etc/local.d
    
  2. Отредактируйте конфигурационные файлы для настройки основных параметров Rspamd. Если вам не требуется изменение функционала, оставьте текущие настройки.

  3. Убедитесь, что все файлы настроены правильно и сохранены.

6. Проверка прав доступа

  1. Проверьте и при необходимости установите корректные права доступа для директории volumes/var/log. Это необходимо для правильной работы Docker Compose.

    chmod -R 755 volumes/var/log
    
  2. Убедитесь, что права доступа установлены корректно и позволяют Docker контейнерам записывать логи.

7. Запуск контейнеров

  1. После настройки всех файлов и проверки прав доступа, запустите контейнеры с помощью Docker Compose:

    docker-compose up -d
    
  2. Убедитесь, что все контейнеры запускаются без ошибок и работают корректно.


Тестирование работы

После запуска контейнеров проведите тесты, чтобы убедиться в правильности работы всей системы:

  1. Отправка писем. Проверьте, что письма успешно отправляются из контейнера с Exim4. Это можно сделать, отправив тестовое письмо и проверив его доставку.

  2. Доступ к веб-интерфейсам.

    • Убедитесь, что веб-интерфейсы PostfixAdmin и RainLoop доступны через браузер.

    • Проверьте возможность входа в административную панель и функциональность под учетной записью пользователя.

  3. Прием почты. Убедитесь, что почта корректно принимается сервером и доставляется в соответствующие почтовые ящики.

  4. Работа Rspamd.

    • Проверьте веб-интерфейс Rspamd для получения информации о письмах.

    • Убедитесь, что данные в Redis обновляются в соответствии с информацией о спаме и фильтрации.

Следуя этим шагам и рекомендациям, вы сможете настроить и запустить почтовый сервер в Docker, а также обеспечить его корректную работу и безопасность.


Заключение

В этой серии статей мы погрузились в мир настройки и управления почтовым сервером, используя Docker-контейнеры, и увидели, как современная контейнеризация может значительно упростить этот процесс. Мы разобрали ключевые компоненты системы, такие как Exim4, Dovecot, PostfixAdmin, RainLoop, PostgreSQL, Rspamd, Redis и ClamAV, и подробно рассмотрели их интеграцию и настройки.

Настройка почтового сервера в Docker требует тщательной подготовки и понимания всех компонентов. Каждый этап, от клонирования репозитория до настройки конфигурационных файлов, играет важную роль в создании стабильной и эффективной почтовой системы.

Итоги серии статей

Эта серия статей — всесторонний обзор процесса настройки почтового сервера с использованием Docker. Мы охватили все ключевые аспекты, включая установку, конфигурацию, безопасность и тестирование. Ещё мы подчеркнули важность контейнеризации как инструмента, который может значительно упростить развертывание и управление сложными системами.

Переход к контейнеризации и использование Docker для настройки почтового сервера открывает новые горизонты для IT-специалистов и системных администраторов. Он позволяет не только повысить гибкость и масштабируемость системы, но и упростить её управление и обновление.

Мы надеемся, что эти статьи стали полезным руководством для вас и помогли лучше понять, как настроить и управлять почтовым сервером. Теперь у вас есть все необходимые знания, чтобы эффективно развернуть, настроить и поддерживать собственный почтовый сервер, который будет надежно работать и обеспечивать высокое качество обслуживания.


Спасибо, что следили за нашей серией статей. Мы были рады поделиться с вами этими знаниями и надеемся, что они будут полезны в вашей практике.

Ждём вас в наших соцсетях: в телеграм-канале DevOps FM, на vc.ru и YouTube.

Комментарии (14)


  1. avg
    11.10.2024 06:49

    https://docs.mailcow.email/
    Все уже написано до нас )


    1. MAXH0
      11.10.2024 06:49

      Конечно. Но мультиплицированние информации в Интернет - основной способ ее продвижения. Если брать стратегию продвижения, то на эту статью нужно еще 5-6 статей "независимых блогеров", которрые для разных целевых аудиторий на разных ресурсах опишут, как они по этому мануалу настроили свои почты и для чего это нужно, когда есть Майл, Гмайл и Яндекс.

      Лично я этот цикл статей считаю одной их редких представителей Хабра-годноты в потоке маркетингового спама.


  1. AdrianoVisoccini
    11.10.2024 06:49

    смотрю на картинку из шапки уже минут 10 и не могу понять, ну как так перспектива может идти, что контейнер сужается К НАМ и расширяется ОТ НАС, это создает ощущение призмообразного контейнера у которого задняя стенка шире ближней.



  1. MAXH0
    11.10.2024 06:49

    Большое спасибо. Важный вопрос в реалиях нынешнего дня.

    Одна просьба - добавить в конце параметры сервера для КОМФОРТНОЙ работы. Не обязательно давать ссылки, но общие границы параметров. Для юзеров %)


  1. Hamletghost
    11.10.2024 06:49

    Хотел заметить что реальность такова, что держать свой почтовый релей (для отправки и приема email через интернет) под силу не только лишь всем: как минимум понадобится хороший чистый статический белый IP (а лучше не один), правильно настроенные DNS, DMARC и все равно какие-то ваши письма будут не доходить к вам или от вас (причем разумеется самые важные и срочные для вашего менеджмента) - нужно будет постоянно вычищать свой релей из различных srbl списков (а попадать он туда будет). Ну и найти хорошее равновесие для правил антиспама тоже та еще задачка не на один день.

    Проще воспользоваться известными сервисами (Я, Mail), они вполне разрешают использовать любой свой домен. И их релеи как правило никто и нигде не блокирует + более/менее адекватный антиспам из коробки


    1. MAXH0
      11.10.2024 06:49

      У их есть ключевой недостаток - вы их не контролируете...

      Проще? Безусловно. Но к сожалению - в нынешних реалиях эта простота хуже воровства. Она ворует свободу.

      Почта является одним из немногих доживших до нынешнего времени действующих мастодонтов того древнего Интернета, еще децентрализованного и федеративного. Отдавая почту на откуп внешним корпорациям вы утрачиваете контроль над информацией.


      1. RoasterToaster
        11.10.2024 06:49

        "У интернета есть ключевой недостаток - вы его не контролируете...

        Проще пользоваться интернетом? Безусловно. Но к сожалению - в нынешних реалиях эта простота хуже воровства. Она ворует свободу.

        Фидо является одним из немногих доживших до нынешнего времени действующих мастодонтов того древнего Интернета, еще децентрализованного и федеративного.

        Отключайтесь от современного интернета. Фидо еще живо, оно ждет вас".

        Шутка, конечно. Если вы апологет свободы, то свой почтовый сервак это почетно, а если вы штудируете этут статью, потому что на mail.ru у вашей конторы кончился бесплатный тариф, а шеф сказал, что надо вот так же, но бесплатно что-то сделать, то об вас просто вытерли ноги.


        1. MAXH0
          11.10.2024 06:49

          По поводут Интернет не совсем согласен. Пока его анализом трафика не превратили в набор чебурнетов он вполне федеративен. Фидо, в нынешних условиях, поставит сисопов в более уязвимое положение чем интернет. Если Фидо - тезис, а интернет - антитезис, то нужен синтез и качественный скачек.

          Что же касается взаимоотношений вас и шефа, то если шеф думает, что дать вам дополнительную нагрузку = бесплатно, то ноги о вас начали вытирать уже давно.


    1. sukharichev
      11.10.2024 06:49

      Если вы не open relay и не в сетях облачных провайдеров, то как правило в srbl не окажетесь. Есть, конечно, уродские держатели таких списков, которые листят непойми за что, а за делистинг просят денег, или он у них вообще не работает, но их мало кто использует.
      Из самого неприятного тут сочетание barracuda central L3, в который пихают всех облачных провайдеров, и глупого местечкового админа, который настраивает его как единственный критерий для discard.
      Пользуясь случаем, призываю никогда не делать факт нахождения сервера в любом одном блек-листе фактором решения спам\не спам. 0.1 балла накинуть можно, но не более.


    1. the_vitas
      11.10.2024 06:49

      Уже не один и не два сервера развернул, везде все прекрасно работает. Ничего нет сложного. Ставил и чангу, и постфикс или екзим, и мдаймон. Ничего особо сложного. Настроек в днс для нормальной работы - это прописать заптси MX, spf и dkim (не обязательно). И все получать вы будете абсолютно все письма отправленные вам. Важнее у прова прописать в реверсной зоне запись PTR, иначе добрая половина серверов отфутболит ваши письма.


  1. Vilos
    11.10.2024 06:49

    И всё-таки...Хабр - торт!...ведь появляются хорошие статьи, нечасто, но бывают!


  1. sukharichev
    11.10.2024 06:49

    Прекрасная статья и отличный набор компонентов, но вот часть про clamav создает ложное впечатление, что он от чего-то защищает. Объективно это очень слабый антивирус.
    https://en.wikipedia.org/wiki/ClamAV#:~:text=Splunk's study concluded ClamAV was,to detect 249%2C696%2F416%2C561 samples.
    То же самое могу сказать про rspamd и другие opensource\free решения. С ними надо закручивать гайки по-максимуму (и терять существенную часть почты на ложноположительных срабатываниях), и спам все равно будет. Для персонального использования это еще может быть приемлемо, для бизнеса - абсолютно нет.
    Еще порекомендовал бы поднимать шлюз на postfix перед exim, потому что тот уж очень бурно развивается, и в нем постоянно находят RCE
    https://www.cvedetails.com/vulnerability-list/vendor_id-10919/product_id-19563/Exim-Exim.html?page=1&cvssscoremin=6&order=1
    А в постфиксе - нет:
    https://www.cvedetails.com/vulnerability-list/vendor_id-8450/product_id-14794/Postfix-Postfix.html?page=1&cvssscoremin=6&order=1
    Ну и файрволлить все по-максимуму.


    1. KonstantinTokar
      11.10.2024 06:49

      А зачем тогда exim?