Всем привет! С вами Михаил, DevOps-инженер из Nixys. Эта статья — заключительная часть серии о создании почтового сервера с чистого поля. Вы можете почитать первую и вторую части по ссылкам.
Сегодня мы подробно рассмотрим процесс настройки почтового сервера с использованием Docker и таких компонентов, как Exim4, Dovecot, PostfixAdmin и RainLoop. Наша цель — создать полностью функциональный и масштабируемый почтовый сервер, который легко управляется благодаря контейнеризации.
Ещё мы обсудим, как Docker упрощает процесс развёртывания, управления зависимостями и взаимодействия между компонентами
Преимущества использования Docker
Использование Docker для настройки почтового сервера даёт много плюсов:
Легкость развертывания: все компоненты запускаются в изолированных контейнерах, что позволяет легко развернуть сервер на любом сервере или виртуальной машине, независимо от основной операционной системы. С Docker вы сможете быстро развернуть необходимые сервисы и избежать сложностей, связанных с установкой и конфигурацией программного обеспечения на хостовой системе.
Масштабируемость: Docker позволяет легко масштабировать вашу систему по мере роста нагрузки. Например, вы сможете увеличить количество экземпляров Dovecot для обработки большего количества IMAP-соединений или настроить балансировку нагрузки для Exim4, чтобы распределять почтовый трафик между несколькими серверами.
Управление зависимостями: контейнеризация решает проблемы с управлением зависимостями. Все необходимые библиотеки и пакеты для каждого сервиса включены в контейнеры, что предотвращает конфликты и упрощает обновление и миграцию приложений. Каждая компонента будет работать в изолированной среде, которая будет полностью контролироваться вами.
Обзор контейнеров
Теперь давайте рассмотрим основные компоненты, которые будут запускаться в нашем docker-compose
файле.
Если вы хотите применить эту конфигурацию на своем сервере, вы можете склонировать готовый репозиторий.
Многие из сервисов, описанных ниже, собираются из Dockerfile'ов, написанных вручную. Подробное описание каждого шага сборки выходит за рамки этой статьи, поэтому мы сосредоточимся на наиболее значимых частях.
Взять готовые конфигурации сборок контейнеров можно из этого репозитория в GitHub.
Основные идеи docker-compose файла:
Одна подсеть для всех контейнеров с четким разделением по IP-адресам. Это упрощает управление сетевыми взаимодействиями между контейнерами и позволяет более чётко контролировать маршрутизацию и доступ к сервисам.
Общий префикс названия проекта. Использование префикса для всех контейнеров позволяет легко идентифицировать и управлять ресурсами, связанными с конкретным проектом. Это особенно важно при работе с несколькими проектами на одном сервере.
Все файлы, необходимые для работы почтового сервера, находятся в одной директории с
docker-compose.yml
. Это упрощает управление конфигурацией и делает проект более переносимым. Вы можете легко перенести его на другой сервер или поделиться с коллегами.Синхронизация времени всех контейнеров с серверным временем. Корректная синхронизация времени важна для обеспечения согласованности логов, правильной работы сертификатов и предотвращения проблем с аутентификацией.
Автоматическое восстановление контейнеров. Все контейнеры настроены на автоматическое восстановление в случае сбоя. Это обеспечивает устойчивость системы и снижает время простоя.
Один общий
.env
файл, используемый для всех контейнеров. Этот файл содержит все ключевые переменные окружения: имена баз данных, пароли и версии программного обеспечения. Использование общего.env
файла упрощает настройку и управление проектом, делая его более гибким и удобным для обновления.
Такой подход позволяет создавать надёжную, масштабируемую и легкую в управлении инфраструктуру почтового сервера. В следующих разделах мы подробно рассмотрим каждый из компонентов, входящих в состав нашего почтового сервера, и их взаимодействие между собой.
Exim4
Exim4 — это мощный и гибкий почтовый сервер (MTA — Mail Transfer Agent), который отвечает за отправку, получение и маршрутизацию электронной почты. Он широко используется благодаря своей гибкости и возможности тонкой настройки под различные сценарии использования.
Установка и базовая настройка
Exim4 запускается в Docker-контейнере, что обеспечивает его изоляцию от других процессов и упрощает управление зависимостями. Основные шаги по установке и настройке Exim4 выполняются в Dockerfile. Этот файл содержит инструкции по установке Exim4, его зависимости, а также копирует конфигурационные файлы, которые необходимы для работы сервера.
Для успешной интеграции Exim4 с другими сервисами, такими как Dovecot (обработка почтовых ящиков), Rspamd (фильтрация спама) и ClamAV (антивирусная проверка), нужно правильно настроить конфигурацию. Это обеспечит корректную доставку и обработку писем.
Конфигурация для взаимодействия с другими компонентами
В конфигурации Exim4 объявляется только подключение к Rspamd, остальные же сервисы настраиваются самостоятельно.
Основные компоненты Dockerfile:
Переменная
ARG EXIM_VERSION
: эта переменная задает версию Exim4, которую вы хотите установить. Перед установкой рекомендуется проверить доступные версии на официальном сайте Exim и выбрать самую актуальную, чтобы использовать последние обновления и исправления безопасности.Запуск контейнера от пользователя
vmail
: контейнер Exim4 запускается под пользователемvmail
. Это повышает безопасность и управляемость, так как пользовательvmail
имеет ограниченные права доступа, что снижает риск нарушения безопасности системы.Подготовка конфигураций в директории
./volumes/etc/exim4
: все конфигурационные файлы Exim4 должны быть заранее подготовлены и размещены в указанной директории. Так вы сможете легко редактировать и обновлять конфигурации без необходимости пересобирать контейнер.Создание директории для логов: директория
./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:
Версия Dovecot: для установки Dovecot используется версия из официального репозитория Pigeonhole. Этот репозиторий также включает плагин Sieve, который добавляет функциональность фильтрации почты.
Работа от пользователя
vmail
: контейнер Dovecot работает от имени пользователяvmail
, что повышает безопасность системы. Этот пользователь обладает минимальными привилегиями, необходимыми для работы почтового сервера.Конфигурационные файлы: все конфигурационные файлы Dovecot должны быть заранее подготовлены и размещены в директории
./volumes/etc/dovecot
. Это позволяет легко управлять настройками сервера и поддерживать их в актуальном состоянии.Директория для логов: Логи работы 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:
Подготовка настроек: все конфигурационные файлы должны быть подготовлены внутри директории
/etc
, которая расположена вместе с Dockerfile.Конфигурационные файлы: все настройки должны быть размещены в директории
./volumes/etc/rspam
.Логи: создайте директорию для хранения логов в
./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 может получить IP172.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
-
Перейдите в директорию конфигурации Exim4:
cd volumes/etc/exim4
-
Отредактируйте основной конфигурационный файл
exim.conf
, чтобы настроить следующие параметры:основные переменные для вашего домена.
параметры подключения к базе данных, используя пароль из файла
.env
.пути к сертификатам и DKIM ключам.
дополнительные ACL (Access Control List) правила, если это необходимо.
Убедитесь, что все изменения сохранены и конфигурация корректна.
3. Настройка Dovecot
-
Перейдите в директорию конфигурации Dovecot:
cd volumes/etc/dovecot
Отредактируйте файл
dovecot-sql.conf
для настройки подключения к базе данных, используя параметры из.env
.-
В файле
dovecot.conf
настройте следующие параметры:Основные конфигурации для вашего домена.
Параметры для SSL сертификатов.
Убедитесь, что все конфигурационные файлы корректны и сохранены.
4. Настройка PostfixAdmin
-
Перейдите в директорию конфигурации PostfixAdmin:
cd volumes/etc/postfixadmin
Отредактируйте файл
dbconfig.inc.php
, чтобы настроить подключение к базе данных в соответствии с настройками из.env
.В файле
config.inc.php
настройте переменные, касающиеся вашего домена, включая параметры для почтового управления и другие опции.Сохраните все изменения и проверьте их корректность.
5. Настройка Rspamd
-
Перейдите в директорию конфигурации Rspamd:
cd build/rspam/etc/local.d
Отредактируйте конфигурационные файлы для настройки основных параметров Rspamd. Если вам не требуется изменение функционала, оставьте текущие настройки.
Убедитесь, что все файлы настроены правильно и сохранены.
6. Проверка прав доступа
-
Проверьте и при необходимости установите корректные права доступа для директории
volumes/var/log
. Это необходимо для правильной работы Docker Compose.chmod -R 755 volumes/var/log
Убедитесь, что права доступа установлены корректно и позволяют Docker контейнерам записывать логи.
7. Запуск контейнеров
-
После настройки всех файлов и проверки прав доступа, запустите контейнеры с помощью Docker Compose:
docker-compose up -d
Убедитесь, что все контейнеры запускаются без ошибок и работают корректно.
Тестирование работы
После запуска контейнеров проведите тесты, чтобы убедиться в правильности работы всей системы:
Отправка писем. Проверьте, что письма успешно отправляются из контейнера с Exim4. Это можно сделать, отправив тестовое письмо и проверив его доставку.
-
Доступ к веб-интерфейсам.
Убедитесь, что веб-интерфейсы PostfixAdmin и RainLoop доступны через браузер.
Проверьте возможность входа в административную панель и функциональность под учетной записью пользователя.
Прием почты. Убедитесь, что почта корректно принимается сервером и доставляется в соответствующие почтовые ящики.
-
Работа Rspamd.
Проверьте веб-интерфейс Rspamd для получения информации о письмах.
Убедитесь, что данные в Redis обновляются в соответствии с информацией о спаме и фильтрации.
Следуя этим шагам и рекомендациям, вы сможете настроить и запустить почтовый сервер в Docker, а также обеспечить его корректную работу и безопасность.
Заключение
В этой серии статей мы погрузились в мир настройки и управления почтовым сервером, используя Docker-контейнеры, и увидели, как современная контейнеризация может значительно упростить этот процесс. Мы разобрали ключевые компоненты системы, такие как Exim4, Dovecot, PostfixAdmin, RainLoop, PostgreSQL, Rspamd, Redis и ClamAV, и подробно рассмотрели их интеграцию и настройки.
Настройка почтового сервера в Docker требует тщательной подготовки и понимания всех компонентов. Каждый этап, от клонирования репозитория до настройки конфигурационных файлов, играет важную роль в создании стабильной и эффективной почтовой системы.
Итоги серии статей
Эта серия статей — всесторонний обзор процесса настройки почтового сервера с использованием Docker. Мы охватили все ключевые аспекты, включая установку, конфигурацию, безопасность и тестирование. Ещё мы подчеркнули важность контейнеризации как инструмента, который может значительно упростить развертывание и управление сложными системами.
Переход к контейнеризации и использование Docker для настройки почтового сервера открывает новые горизонты для IT-специалистов и системных администраторов. Он позволяет не только повысить гибкость и масштабируемость системы, но и упростить её управление и обновление.
Мы надеемся, что эти статьи стали полезным руководством для вас и помогли лучше понять, как настроить и управлять почтовым сервером. Теперь у вас есть все необходимые знания, чтобы эффективно развернуть, настроить и поддерживать собственный почтовый сервер, который будет надежно работать и обеспечивать высокое качество обслуживания.
Спасибо, что следили за нашей серией статей. Мы были рады поделиться с вами этими знаниями и надеемся, что они будут полезны в вашей практике.
Ждём вас в наших соцсетях: в телеграм-канале DevOps FM, на vc.ru и YouTube.
Комментарии (14)
AdrianoVisoccini
11.10.2024 06:49смотрю на картинку из шапки уже минут 10 и не могу понять, ну как так перспектива может идти, что контейнер сужается К НАМ и расширяется ОТ НАС, это создает ощущение призмообразного контейнера у которого задняя стенка шире ближней.
fobo
11.10.2024 06:49
MAXH0
11.10.2024 06:49Большое спасибо. Важный вопрос в реалиях нынешнего дня.
Одна просьба - добавить в конце параметры сервера для КОМФОРТНОЙ работы. Не обязательно давать ссылки, но общие границы параметров. Для юзеров %)
Hamletghost
11.10.2024 06:49Хотел заметить что реальность такова, что держать свой почтовый релей (для отправки и приема email через интернет) под силу не только лишь всем: как минимум понадобится хороший чистый статический белый IP (а лучше не один), правильно настроенные DNS, DMARC и все равно какие-то ваши письма будут не доходить к вам или от вас (причем разумеется самые важные и срочные для вашего менеджмента) - нужно будет постоянно вычищать свой релей из различных srbl списков (а попадать он туда будет). Ну и найти хорошее равновесие для правил антиспама тоже та еще задачка не на один день.
Проще воспользоваться известными сервисами (Я, Mail), они вполне разрешают использовать любой свой домен. И их релеи как правило никто и нигде не блокирует + более/менее адекватный антиспам из коробки
MAXH0
11.10.2024 06:49У их есть ключевой недостаток - вы их не контролируете...
Проще? Безусловно. Но к сожалению - в нынешних реалиях эта простота хуже воровства. Она ворует свободу.
Почта является одним из немногих доживших до нынешнего времени действующих мастодонтов того древнего Интернета, еще децентрализованного и федеративного. Отдавая почту на откуп внешним корпорациям вы утрачиваете контроль над информацией.
RoasterToaster
11.10.2024 06:49"У интернета есть ключевой недостаток - вы его не контролируете...
Проще пользоваться интернетом? Безусловно. Но к сожалению - в нынешних реалиях эта простота хуже воровства. Она ворует свободу.
Фидо является одним из немногих доживших до нынешнего времени действующих мастодонтов того древнего Интернета, еще децентрализованного и федеративного.
Отключайтесь от современного интернета. Фидо еще живо, оно ждет вас".
Шутка, конечно. Если вы апологет свободы, то свой почтовый сервак это почетно, а если вы штудируете этут статью, потому что на mail.ru у вашей конторы кончился бесплатный тариф, а шеф сказал, что надо вот так же, но бесплатно что-то сделать, то об вас просто вытерли ноги.
MAXH0
11.10.2024 06:49По поводут Интернет не совсем согласен. Пока его анализом трафика не превратили в набор чебурнетов он вполне федеративен. Фидо, в нынешних условиях, поставит сисопов в более уязвимое положение чем интернет. Если Фидо - тезис, а интернет - антитезис, то нужен синтез и качественный скачек.
Что же касается взаимоотношений вас и шефа, то если шеф думает, что дать вам дополнительную нагрузку = бесплатно, то ноги о вас начали вытирать уже давно.
sukharichev
11.10.2024 06:49Если вы не open relay и не в сетях облачных провайдеров, то как правило в srbl не окажетесь. Есть, конечно, уродские держатели таких списков, которые листят непойми за что, а за делистинг просят денег, или он у них вообще не работает, но их мало кто использует.
Из самого неприятного тут сочетание barracuda central L3, в который пихают всех облачных провайдеров, и глупого местечкового админа, который настраивает его как единственный критерий для discard.
Пользуясь случаем, призываю никогда не делать факт нахождения сервера в любом одном блек-листе фактором решения спам\не спам. 0.1 балла накинуть можно, но не более.
the_vitas
11.10.2024 06:49Уже не один и не два сервера развернул, везде все прекрасно работает. Ничего нет сложного. Ставил и чангу, и постфикс или екзим, и мдаймон. Ничего особо сложного. Настроек в днс для нормальной работы - это прописать заптси MX, spf и dkim (не обязательно). И все получать вы будете абсолютно все письма отправленные вам. Важнее у прова прописать в реверсной зоне запись PTR, иначе добрая половина серверов отфутболит ваши письма.
Vilos
11.10.2024 06:49И всё-таки...Хабр - торт!...ведь появляются хорошие статьи, нечасто, но бывают!
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
Ну и файрволлить все по-максимуму.
avg
https://docs.mailcow.email/
Все уже написано до нас )
MAXH0
Конечно. Но мультиплицированние информации в Интернет - основной способ ее продвижения. Если брать стратегию продвижения, то на эту статью нужно еще 5-6 статей "независимых блогеров", которрые для разных целевых аудиторий на разных ресурсах опишут, как они по этому мануалу настроили свои почты и для чего это нужно, когда есть Майл, Гмайл и Яндекс.
Лично я этот цикл статей считаю одной их редких представителей Хабра-годноты в потоке маркетингового спама.