Введение
В предыдущей статье мы рассмотрели установку зависимостей, библиотек, DNS-записей и программного обеспечения для работы сервера. Во второй части руководства мы продолжим установку и настройку программного обеспечения. В этой части мы используем быструю развертку с помощью контейнеризации приложений вместо ручной установки. У этого есть свои преимущества и недостатки, поэтому ознакомьтесь с ними, прежде чем принимать решение!
Преимущества установки почтового сервера вручную:
- Гибкость: Ручная установка позволяет вам полностью настроить сервер в соответствии с индивидуальными потребностями. Вы полностью контролируете каждый аспект настройки и можете вносить изменения по мере необходимости;
- Более глубокое понимание: При установке вручную вы получаете более глубокое представление о работе почтового сервера и его компонентов. Это может быть полезно при устранении неполадок и управлении сервером в будущем;
- Меньший размер: Установка без Docker может иметь меньший размер, поскольку она не требует использования дополнительных контейнеров и образов Docker.
Недостатки настройки почтового сервера вручную:
- Сложность настройки: Установка почтового сервера вручную может быть сложной и требовать более глубоких знаний в области системного администрирования и работы с конфигурационными файлами;
- Сложность масштабирования: При установке вручную может оказаться сложнее масштабировать почтовый сервер и управлять большим количеством пользователей или трафиком;
- Больше времени и ресурсов: Установка и настройка почтового сервера вручную может занять больше времени и потребовать больше ресурсов, поскольку вам нужно будет самостоятельно управлять каждым аспектом процесса.
Выбор между установкой почтового сервера вручную или с помощью Docker зависит от ваших конкретных потребностей и уровня опыта. Docker может быть более удобным решением для быстрой установки сервера и управления им, особенно если вам необходимо масштабировать и изолировать контейнеры. Однако ручная установка может обеспечить большую гибкость и глубокое понимание того, как работает сервер.
Требования к установке
- Доменное имя;
- Docker CLI >= версии 20
- Docker Compose >= версии 2.0;
- Права администратора;
- Configured FQDN;
- SSL сертификат.
Продолжим настройку:
Очень важная часть! Если вы хотите использовать только IPv4 или просто не имеете интерфейсов с IPv6-адресом, вам нужно отключить параметры, иначе nginx или вебчасть не запустятся из-за проблемы с подключением по этим адресам. Прежде всего, укажите все IP для режима прослушивания в системе, для этого перейдите в файл mailcow.conf и добавьте параметр BIND, который поможет определить диапазон адресов:
nano /main/mail/mailcow-dockerized/mailcow.conf

HTTP_BIND=0.0.0.0
HTTPS_BIND=0.0.0.0
Установите значение в двух строках равное 0.0.0.0, для сервера nginx укажите использование IP адресов. Для сохранения файла нажмите комбинацию клавиш Ctrl+O и Ctrl+ X для выхода из текстового редактора. Теперь измените конфигурацию Docker в соответствии с требованиями и найдите нужную строку, нажав комбинацию кнопок для поиска Ctrl + W и введите значение enable_ipv6: true. Измените его на false, как показано на рисунке ниже:
nano docker-compose.yml

enable_ipv6: false

Эта настройка позволяет использовать данное решение без добавления интерфейса IPv6.
Затем нам нужно отключить контейнер mailcow-nat, для этого перейдите в каталог и создайте файл override:
nano /main/mail/mailcow-dockerized/docker-compose.override.yml
Это создаст и откроет файл в соответствующем каталоге, затем запишите следующую конфигурацию:
version: '2.1'
services:
ipv6nat-mailcow:
image: bash:latest
restart: "no"
entrypoint: ["echo", "ipv6nat disabled in compose.override.yml"]

В журнале этого контейнера мы не увидим логов о работе:
docker logs -f ipv6nat-mailcow
Запускаем всю систему, ждем пока создастся весь контейнер и затем очищаем остатки конфига IPv6:
cd /main/mail/mailcow-dockerized && docker compose up -d

Это займет некоторое время на установку и проверку всей системы, но когда она завершится, вам нужно будет открыть файл для отключения настроек.
Измените конфигурационный файл data/conf/unbound/unbound.conf, установив для параметра do-ip6 значение no:
nano /main/mail/mailcow-dockerized/data/conf/unbound/unbound.conf

Теперь перезапустите контейнер, который мы модифицировали:
docker compose restart unbound-mailcow
Перейдите к следующему файлу в каталоге data/conf/postfix/ и создайте файл с настройками:
nano /main/mail/mailcow-dockerized/data/conf/postfix/extra.cf
И войти с сохранением необходимого файла:
smtp_address_preference = ipv4
inet_protocols = ipv4

Для применения новых настроек необходимо перезагрузить всю систему:
docker compose restart

Для следующего шага нам нужно удалить все упоминания IPv6 в оставшихся файлах, для этого введите команду ниже:
sed -i '/::/d' ./data/conf/nginx/listen_*
sed -i '/::/d' ./data/conf/nginx/templates/listen*
sed -i '/::/d' ./data/conf/nginx/dynmaps.conf
sed -i 's/,\[::\]//g' ./data/conf/dovecot/dovecot.conf
sed -i 's/\[::\]://g' ./data/conf/phpfpm/php-fpm.d/pools.conf

Для корректной работы всех систем проверки записанных DNS записей с Linux машины, установите dnsutils командой ниже:
apt install dnsutils

И сделайте запрос к NS-серверу, например, так:
dig vdushu.space && dig test.vdushu.space
По умолчанию dig предоставляет вам различную информацию о DNS, такую как время запроса, IP-адрес, связанный с доменом, и дополнительные записи DNS. Для конкретного запроса вам нужно использовать флаг -t следующим образом:
dig -t MX vdushu.space
Символ @ определяет, какой DNS-сервер будет искать доменное имя:
dig vdushu.space @8.8.8.8

Ответ будет в разделе Answer. Для более надежного соединения настройте перенаправление в конфигурации Nginx, нам нужно перейти в каталог data/conf/nginx/redirect.conf :
nano /main/mail/mailcow-dockerized/data/conf/nginx/redirect.conf
Важно! Не забудьте закомментировать строку с IPv6 — это важно для корректной работы Nginx:
server {
root /web;
listen 80 default_server;
#listen [::]:80 default_server;
include /etc/nginx/conf.d/server_name.active;
if ( $request_uri ~* "%0A|%0D" ) { return 403; }
location ^~ /.well-known/acme-challenge/ {
allow all;
default_type "text/plain";
}
location / {
return 301 https://$host$uri$is_args$args;
}
}
Этот код поможет перенаправить весь трафик по протоколу https и зашифровать его независимо от запроса клиента!

Прекрасно! Мы установили всю систему, в следующем эпизоде серии инструкций мы рассмотрим, как настроить защиту от СПАМ почты для почтового сервиса, и введем новые DNS-записи для наших серверов, зайдем через удобные клиенты и рассмотрим насколько валидны наши сообщения!
Вывод
Вторая часть из серии была посвящена установке и настройке почтового сервера с использованием контейнеризации приложений вместо ручной установки. В ней были отмечены преимущества ручной установки, такие как гибкость конфигурации, более глубокое понимание компонентов сервера и потенциально меньший размер. Однако были упомянуты и недостатки, включая сложность конфигурации, трудности масштабирования и повышенные требования к времени и ресурсам.