Как настроить сервер электронной почты для Delta Chat

Delta Chat — это мессенджер, работающий по электронной почте. Это означает, что мы можем использовать любой сервер электронной почты для создания аккаунтов Delta Chat. Одним из простых в настройке и управлении почтовых серверов, который работает с Delta Chat “из коробки”, является Mailcow.

Вы можете запустить его вместе с mailadm, который предлагает вашим пользователям простой способ создать учетную запись электронной почты и сразу же войти в систему с Delta Chat. Это также описано в этом руководстве.

Что вам нужно:

Установка Docker

Прежде чем приступить, необходимо установить docker и docker-compose.

Если доступ к docker.com заблокирован:

В зависимости от страны, в которой находится ваш сервер, доступ к docker.com может быть заблокирован. Вы также можете получить docker & docker-compose из других источников, которые могут быть доступны:

Создание записей DNS

Если у вас ещё нет домена, вы можете использовать такой ​​сервис как njal.la для покупки .net или .org домена за 15€ в год. Вы можете оплачивать через PayPal, Bitcoin или Monero.

Давайте предположим:

Теперь вы можете настроить параметры домена example.org следующим образом:

Type Name Data TTL Priority
A mail.example.org 24.48.100.24 5min  
AAAA mail.example.org 7fe5:2f4:1ba:2381::3 5min  
MX @ mail.example.org 5min 10
CNAME autoconfig.example.org mail.example.org 5min  
CNAME autodiscover.example.org mail.example.org 5min  
CNAME mailadm.example.org mail.example.org 5min  
TXT @ “v=spf1 mx -all” 5min  
TXT _dmarc.example.org v=DMARC1;p=quarantine;rua=mailto:mailadm@example.org 5min  

Вы можете установить ключ DKIM после настройки mailcow, в System>Configuration>Options>ARC/DKIM keys.

Вы можете установить более 5 минут, но если вы заметите, что что-то не так, короткий промежуток времени поможет исправить неправильную запись.

Настройка Mailcow

Настройка параметров Mailcow

Сначала клонируйте репозиторий git mailcow - если ваш сервер не имеет доступа к github.com, вы можете выполнить этот шаг где-то еще и использовать scp для копирования его на ваш сервер.

sudo apt install -y git
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

Теперь вы должны запустить ./generate_config.sh , чтобы сгенерировать файл mailcow.conf. Если ваш сервер не имеет доступа к github.com, вам сначала нужно удалить любые команды git из скрипта. Введите такие параметры:

Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: mail.example.org
Timezone [Europe/Berlin]: UTC
Which branch of mailcow do you want to use?


Available Branches:
- master branch (stable updates) | default, recommended [1]
- nightly branch (unstable updates, testing) | not-production ready [2]
Choose the Branch with it´s number [1/2] 1

В mailcow.conf необходимо указать следующие переменные:

ADDITIONAL_SAN=mailadm.example.org
SKIP_CLAMD=y
SKIP_SOLR=y
SKIP_SOGO=y

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

После этого нам нужно выполнить команду echo '#' > data/conf/dovecot/global_sieve_before.

Mailadm NGINX конфиг

mailadm.example.org/new_email должен быть доступен для работы HTTP-запросов. Итак, нам нужно создать два файла для перенаправления Mailcows Nginx. Сначала мы делаем echo 'mailadm.example.org' > data/conf/nginx/server_name.active а затем мы создаем файл data/conf/nginx/site.mailadm.custom затем добавим в него следующий блок:

  location /new_email {
    proxy_pass http://24.48.100.24:3691/;
  }

Обязательно замените этот пример IP-адреса, на IP-адрес вашего сервера.

Все запросы будут перенаправлены на mailadm.example.org/new_email в контейнер mailadm позже.

Загрузка контейнеров mailcow

Запустите sudo docker compose pull для загрузки контейнеров mailcow. Если у вас нет доступа к docker.com на этом шаге, вы можете использовать HTTP -прокси.

Запуск Mailcow

Теперь запустите mailcow с помощью команды sudo docker compose up -d.

Отключение IPv6 для mailcow

Если у вашего сервера нет адреса IPv6, вам следует отключить IPv6.

Добавление домена в Mailcow

Теперь вы можете войти в веб-интерфейс mailcow по адресу https://mail.example.org. Имя пользователя по умолчанию admin и пароль moohoo. Вы должны изменить этот пароль на более безопасный.

The Mailcow web interface.

Затем добавьте домен в веб-интерфейсе в разделе “E-Mail > Configuration > Domains”. Например, это может быть:

Creating a domain in mailcow

После этого вы можете перейти в раздел “E-Mail > Configuration > Mailboxes” и создать первый аккаунт. Вы можете протестировать его с помощью Delta Chat прямо сейчас.

Рекомендуется: Добавить дополнительные записи DNS

В разделе “E-Mail > Configuration > Domains”, справа от вашего домена, вы можете увидеть синюю кнопку “DNS”. Она предоставляет дополнительные рекомендации по записям DNS, которые могут помочь, если у вас возникнут проблемы с доставкой электронной почты на другие серверы.

Showing DNS settings in Mailcow

Установка mailadm

Теперь мы можем настроить mailadm — с помощью этого инструмента можно генерировать QR-коды, которые люди могут сканировать из Delta Chat, чтобы создать аккаунт электронной почты на вашем сервере. Это вероятно, самый простой способ для пользователей начать использовать Delta Chat.

Загрузка mailadm

Вы можете использовать эти команды для загрузки mailadm:

cd ~
git clone https://github.com/deltachat/mailadm
cd mailadm
mkdir docker-data

Компиляция mailadm

Теперь вы можете создать контейнер Docker для mailadm с помощью sudo docker build . -t mailadm-mailcow.

Если доступ к docker.com или pypi.org заблокирован

Если ваш сервер не может подключиться к docker.com, dl-cdn.alpinelinux.org или pypi.org. Вы можете собрать контейнер Docker на другой машине и скопировать его на VPS:

sudo docker build . -t mailadm-mailcow
sudo docker save -o mailadm-image.tar mailadm-mailcow
scp mailadm-image.tar example.org:
ssh example.org
sudo docker load --import mailadm-image.tar

Получение токена API из веб-интерфейса

Перейдите на https://mail.example.org/admin снова для получения mailcow API ключа.

Вам необходимо активировать API (обязательно используйте “Read-Write Access API” а не “Read-Only Access API”!) и введите в интерфейс br-mailcow вашего сервера в разделе “Allow API access from these IPs/CIDR network notations”. Узнать IP-адрес можно с помощью ip a show br-mailcow.

Установите флажок “Активировать API” и нажмите “Сохранить изменения”, а затем скопируйте ключ API.

Настройка mailadm

Затем в каталоге mailadm, создайте файл .env и сконфигурируйте mailadm следующим образом:

MAIL_DOMAIN=example.org
WEB_ENDPOINT=https://mailadm.example.org/new_email
MAILCOW_ENDPOINT=https://mail.example.org/api/v1/
MAILCOW_TOKEN=238473-081241-7A78B1-B7098C-E798BA

В MAILCOW_TOKEN, введите ключ API, который вы получили из веб-интерфейса mailcow.

Если вы не уверены, как выбрать значения в .env, посмотрите документацию mailadm.

Добавьте алиас mailadm

Теперь, чтобы упростить запуск команд mailadm, добавьте этот алиас:

alias mailadm="$PWD/scripts/mailadm.sh"
echo "alias mailadm=$PWD/scripts/mailadm.sh" >> ~/.bashrc

Запуск mailadm

Затем вы можете инициализировать базу данных и настроить бота mailadm, который будет использоваться для получения команд и поддерживать запросы от ваших пользователей:

mailadm init
mailadm setup-bot

Затем вам будет предложено отсканировать QR-код, чтобы присоединиться к группе Администраторов, подтвержденной группе Delta Chat. Любой участник группы может отправлять команды mailadm через Delta Chat. Вы можете отправить “/help” в группу, чтобы узнать, как ее использовать.

Теперь, когда все настроено, мы можем запустить контейнер mailadm окончательно:

sudo docker run -d -p 3691:3691 --mount type=bind,source=$PWD/docker-data,target=/mailadm/docker-data --name mailadm mailadm-mailcow gunicorn -b :3691 -w 1 mailadm.app:app

Это запустит контейнер Docker mailadm. Вы можете перезапустить его с помощью sudo docker restart mailadm, если потребуется.

Первые шаги с mailadm

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

Рекомендуется: Отключить POP3

Delta Chat использует только SMTP и IMAP, так что если все ваши пользователи используют Delta Chat, вы можете отключить POP3.

Для этого добавьте следующее, в файл mailcow.conf:

POP_PORT=127.0.0.1:110
POPS_PORT=127.0.0.1:995

Затем примените изменения с помощью команды sudo docker compose up -d.

Рекомендуется: Перенаправить весь HTTP-трафик на HTTPS

По умолчанию, сервер nginx также отвечает в незашифрованном виде на port 80. Это может быть плохо, поскольку некоторые пользователи могут вводить пароли через не зашифрованное соединение.

Чтобы этого не произошло, создайте новый файл data/conf/nginx/redirect.conf и добавьте следующую конфигурацию сервера в файл:

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;
  }
}

Затем примените изменения с помощью команды sudo docker compose restart nginx-mailcow.

Рекомендуется: Нет журналов, нет хозяев

Mailcow записывает IP-адреса ваших пользователей в целях отладки, поэтому если вы не хотите хранить эту критическую информацию на вашем сервере, вы можете отключить журналирование. Обратите внимание, что это значительно усложняет отладку проблем. Только вы можете решить, нужно ли это в вашей среде.

Mailcow хранит некоторые журналы в Redis, чтобы вы могли показать их в веб-интерфейсе, если вы добавите command: '--save ""' в контейнер redis-server в docker-compose.yml, он будет хранить их только в ОЗУ, которая, будем надеяться, не будет сохранена потенциальным злоумышленником.

Чтобы направить фактические файлы журналов в /dev/null, также известном как Nirvana, вы можете:

Добавьте следующие строки в каждый контейнер в mailcow-dockerized/docker-compose.yml:

      logging:
        driver: "syslog"
        options:
          syslog-address: "udp://127.0.0.1:514"
          syslog-facility: "local3"

Теперь вы можете настроить rsyslog, чтобы он слушал на этом порту входящие журналы. Разкомментируйте следующие строки в файле /etc/rsyslog.conf:

module(load="imudp")
input(type="imudp" port="514")

И добавьте это в /etc/rsyslog.d/, чтобы отправить все это в Нирвану:

local3.*        /dev/null
& stop

Наконец, перезапустите rsyslog с помощью команды sudo service rsyslog restart и mailcow с помощью команды sudo docker compose up -d.

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

Рекомендуется: Добавьте записи обратного DNS у вашего провайдера

Вы также можете создать обратные DNS-записи для IPv4 и IPv6-адресов вашего сервера, содержащие ваш домен. Обратные записи DNS улучшают доставляемость; они помогают другим почтовым серверам отличать почту ваших пользователей от спама.

Настройка записей rDNS должна быть возможна в веб-интерфейсе вашего хостинг-провайдера. Вы можете прочитать об этом больше в этой статье.