Mailcow: setting up a full featured self hosted mail server

Docker: контейнеры – это просто

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

Установка необходимых контейнеров с использованием docker compose и их настройка будет включать 3 больших шага:

  • Генерируем и настраиваем конфигурационный файл
  • Настраиваем пути директорий volumes
  • Устанавливаем docker-compose mailcow

Генерируем и настраиваем конфигурационный файл

Необходимо создать директорию, где будет храниться mailcow.Переходим в appdata:

Создаем папку:

Переходим в созданную папку:

Клонируем сюда установочные файлы mailcow, как написано в официальной документации:

Смотрим, что у нас появилось:

Видим:

Переходим в нее:

Далее, нам нужно сгенерировать конфиг и внести свои изменения в параметры установки:

В первой строке, нам предлагают ввести наш host name, то есть адрес нашего почтового сервера(mail.myunraid.ru).

Во второй строке временную зону (Europe/Moscow).

Вводим адрес почтового сервера и временную зону

Промежуточный итог:

Результат успешной генерации конфига

Мы сгенерировали конфиг, теперь нужно зайти в него, и поменять порты, так как по умолчанию там:

Эти порты заняты, производим замену. Открываем конфиг файл:

И меняем на свободные:

mailcow.conf

Затем сохраняем CTRL+S и выходим CTRL+X.

Ни в коем случае не используем порты 8081, 9081, 65510

Настраиваем пути для директорий volumes

По умолчанию в docker-compose.yml контейнера mailcow, системные файлы лежат по 2-м путям.

  • ./data, то есть, в той директории, где лежит docker-compose.yml. На скриншоте ниже, этот путь будет отмечен на скриншоте как номер «1″.
  • Путь с названием контейнера на скриншоте подчеркнут как номер «2″. Его мы должны изменить на свой, пример замены на скриншоте подчеркнут как номер «3«.

docker-compose.yml

Открываем в nano:

Делаем замену везде. Где есть, к примеру mysql-vol-1, мы меняем на:

Далее mysql-socket-vol-1, меняем на:

И так во всем docker-compose.yml файле.Затем, идем в конец, и удаляем все переменные volumes и саму «volumes»:

Удаляем все переменные в подвале docker-compose.yml файла

По итогу, сохраняем наши изменения CTRL+S и выходим CTRL+X.

Устанавливаем docker-compose mailcow

Запускаем установку всех связанных контейнеров командой:

Устанавливается не быстро, все таки там 18 контейнеров.Главное, чтоб не было ошибок, и в конечном итоге, все они успешно установились.

Далее, переходим в веб панель, по адресу, который мы указали в docker-compose.yml файле. Ваш ip:port. У меня это 192.168.1.9:880:

Веб-панель mailcow, страница входа

Настройка Dovecot

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

Нам нужно открыть на редактирование файл /etc/postfix/master.cf и добавить в конце следующие ниже строки:

Сохраним для потомков изначальный конфигурационный файл Dovecot:

После чего откроем файл /etc/dovecot/dovecot.conf на редактирование и заменим всё его содержимое указанным ниже кодом. Ящик «[email protected]» следует заменить на желаемый:

MySQL будет сохранять в себе пароли доступа, поэтому мы сохраним копию первоначального /etc/dovecot/dovecot-sql.conf, а потом произведём настройку:

Содержимое исходного файла /etc/dovecot/dovecot-sql.conf полностью заменим на нижеуказанное, не забудем поменять пароль «mail_admin_password» на актуальный:

На этом настройка Dovecot завершена, следует перезагрузить его:

Проверим файл /var/log/mail.log на отсутствие ошибок:

И найдём примерно следующие строки:

Перед началом тестирования следует установить права и владельца на файл конфигурации Dovecot /etc/dovecot/dovecot.conf:

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

После ввода команды в консоли должно отобразиться примерно следующие:

Выйдем из режима терминала, пока он нам больше не нужен:

С Dovecot разобрались, теперь перейдём к настройке алиасов.

Серверная почта на основе Postfix, Dovecot и MySQL для Debian

Postfix — очень мощный почтовый сервер, основанный на идеологии Open Source, его часто называют Postfix MTA — Postfix Mail Transfer Agent. В этом руководстве, собранном из разных источников и дополненных личными переживаниями, я расскажу как установить Postfix в связке с Dovecot (IMAP/POP3) и MySQL на сервер Apache под управлением OC Debian. Руководство было опробовано на Debian 5 Lenny и Debian 6 Squeeze.

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

Установка нужных пакетов

Выполним следующую команду для установки Postfix, Dovecot, OpenSSL и MySQL:

В процессе установки появится несколько диалогов первоначальной настройки пакетов, вот основные шаги:

  • Во время установки сервера MySQL, если он не был установлен ранее, потребуется ввести пароль для пользователя root. Пароль следует выбрать надёжный;
  • Тип используемого Postfix сервера, — в одноимённом диалоге, — «Internet Site»;
  • В диалоге настройки Postfix следует определиться с почтовым именем. Имеется ввиду полное доменное имя сервера, в нашем примере это mysrv.example.com, его ещё называют FQDN (Fully Qualified Domain Name).

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

или, если недоступен первый вариант прораммы:

Итак мы установили все необходимые пакеты и готовы перейти к детальной настройке конфигурации.

Нужно установить SquirrelMail.

И выполните команду для установки:

# yum install squirrelmail

Настройка Squirrelmail  измените параметры в зависимости от требований.

# cd /usr/share/squirrelmail/config/
# ./conf.pl

главное меня Squirrelmail для установки

Начнем по порядку, вводим цифру 1.

конфигурация SquirrelMail

Введите название организации и нажмите Enter:
linux-notes.org

К таким образом, настройте все детали, такие как организация, логотип, название провайдера в приведенном выше мастера. После того как вы закончите, нажмите кнопку «S», чтобы сохранить изменения и нажмите «R», чтобы вернуться обратно в главное меню.

Теперь введите «2» и перейдем к настройкам сервера почты, нужно тут будет ввести доменное имя и почтового агент и т.д.:

конфигурация SquirrelMail, вкладка под номером 2

Введите «1», ввод почтового домена (например у меня это linux-notes.org) и нажмите клавишу ввода.

Введите «3» и перейдите от Sendmail к Postfix (т.е. SMTP):

конфигурация SquirrelMail, вкладка под номером 3

Введите «2», чтобы переключиться с почтовой системы Sendmail на Postfix как показано на рисунке ниже.

переключиться с почтовой системы Sendmail на Postfix

Теперь введите «S», а затем «Q» для сохранения и выхода конфигурацию с Squirrelmail.

Теперь нужно создать squirrelmail виртуальный хост в конфиге апача:

# vim /etc/httpd/conf/httpd.conf

Alias /squirrelmail /usr/share/squirrelmail
<Directory /usr/share/squirrelmail>
Options Indexes FollowSymLinks
RewriteEngine On
AllowOverride All
DirectoryIndex index.php
Order allow,deny
Allow from all
</Directory>
# /etc/init.d/httpd restart

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

# useradd captainua
# passwd captainua

Включим свои iptables:

# /etc/init.d/iptables start
# chkconfig iptables on

Вот и все пока. Мы успешно настроили локальный почтовый сервер, который будет служить для приема / отправки писем в локальной сети. Но если хотите настроить общественный почтовый сервер для отправки и получения почты для внешней вашей сети, то вы должны настроить почтовый сервер с открытым IP и вписать MX- записи вашего почтового сервера в их DNS-сервера, и все, готово! Все будет так же, как я описал выше.На этом я завершу свою тему «Установка почтового сервера Postfix, Dovecot и SquirrelMail в CentOS/Redhat/Fedora». Спасибо что используете мой сайт.

System Setup

The following ingredients are necessary to make your droplet ready to be a mail server:

  • A domain, let’s assume it is “mydomain.com”

  • A hostname for your mail server, let’s assume “mail.mydomain.com”

  • An SSL certificate that is valid for “mail.mydomain.com”

For SSL, you need a certificate and a private key. In this tutorial, we’re going to assume that the certificate is saved in and the key is saved in . Make sure the key is only readable by the root user!

and leaving the default values in by just hitting enter on all questions asked. Don’t use this certificate in production!

Most CAs will require you to submit a certificate signing request. (CSR) You can generate one like this:

Fill in the information queried properly, like in this transcript: (Check with the CA you intend to use on what information needs to be in the CSR)

(Note that this way you cannot create a certificate valid for more than one domain using the field without some additional work — again, check the CA’s documentation!)

Here is how to do it if you’re using DigitalOcean’s DNS:

  • Go to the “DNS” area in your DigitalOcean panel
  • Create a new domain or select one you’ve created before
  • Click the “Add record” button in the top right
  • Add an A record:

Click “Add record” again and add an MX record that points to the A record:

Additional information can be found in the Host Name setup and DNS tips and tricks articles.

DNS will take a few hours to propagate all over the internet, but it should be set on your DNS server after a few minutes. You can check with dig & host:

Сборка нового образа

Сборка начинается с создания файла Dockerfile — он содержит инструкции того, что должно быть в контейнере. В качестве примера, соберем свой веб-сервер nginx.

И так, чтобы создать свой образ с нуля, создаем каталог для размещения Dockerfile:

mkdir -p /opt/docker/mynginx

* где /opt/docker/mynginx — полный путь до каталога, где будем создавать образ.

… переходим в данный каталог:

cd /opt/docker/mynginx

… и создаем Dockerfile:

vi Dockerfile

FROM centos:7
MAINTAINER Dmitriy Mosk <[email protected]>
ENV TZ=Europe/Moscow
RUN yum install -y epel-release && yum install -y nginx
RUN yum clean all
RUN echo «daemon off;» >> /etc/nginx/nginx.conf
RUN sed -i «0,/nginx/s/nginx/docker-nginx/i» /usr/share/nginx/html/index.html
CMD

* в данном файле мы:

  1. используем базовый образ centos 7;
  2. в качестве автора образа указываем Dmitriy Mosk;
  3. задаем временную зону внутри контейнера Europe/Moscow.
  4. устанавливаем epel-release и nginx;
  5. чистим систему от метаданных и кэша пакетов после установки;
  6. указываем nginx запускаться на переднем плане (daemon off); 
  7. в индексном файле меняем первое вхождение nginx на docker-nginx;
  8. запускаем nginx.

* подробное описание инструкций Dockerfile смотрите .

Запускаем сборку:

docker build -t dmosk/nginx:v1 .

* где dmosk — имя автора; nginx — название для сборки; v1 — тег с указанием версии. Точка на конце указывает, что поиск Dockerfile выполняем в текущей директории.

… начнется процесс сборки образа — после его завершения мы должны увидеть что-то на подобие:

Successfully built eae801eaeff2
Successfully tagged dmosk/nginx:v1

Посмотреть список образов можно командой:

docker images

Создаем и запускаем контейнер из образа:

docker run -d -p 8080:80 dmosk/nginx:v1

* в данном примере мы запустим контейнер из образа dmosk/nginx:v1 и укажем, что необходимо опубликовать внешний порт 8080, который будет перенаправлять трафик на порт 80 внутри контейнера.

Открываем браузер и переходим по адресу http://<IP-адрес нашего докера>:8080 — мы должны увидеть страницу приветствия с нашим docker-nginx:

Посмотреть созданные контейнеры можно командой:

docker ps -a

Запустить или остановить контейнеры можно командами:

docker stop 5fe78aca2e1d

docker start 5fe78aca2e1d

* где 5fe78aca2e1d — идентификатор контейнера.

Подготовка.

Прежде чем приступить к установке Mailcow, вам необходимо сделать некоторые приготовления, которые в основном влияют на настройки DNS домена, который вы хотите использовать для получения и отправки электронной почты. Для этого выполните следующие действия:

1.1. Установите hostname вашего сервера на “mail“, таким образом чтобы FQDN была вида “mail.testdomain.com“.

1.2. Добавьте в DNS A-запись для субдомена “mail” (mail.testdomain.com) с IP адресом почтового сервера.

1.3. Добавьте в DNS MX запись для вашего домена со значением созданной A-записи из пункта 2 (mail.testdomain.com) с приоритетом 10.

1.4. Привяжите в DNS CNAME запись для субдоменов “autodiscover” и “autoconfig” и установите назначение обоих CNAME записей на mail субдомен созданной A-записи в пункте 2 (mail.testdomain.com)

1.5. Добавьте в DNS TXT запись для вашего домена со значением “v=spf1 mx ~all“.

1.6. Создайте в DNS PTR запись (Reverse DNS) связывающую IP адреса вашего сервера и установленного значения FQDN на сервере (“mail.testdomain.com“).

Дополнительные команды

В данном подразделе приведем примеры команд, которые могут оказаться полезными при работе с образами.

1. Удалить один образ:

docker rmi <название образа или его ID>

Например:

docker rmi dmosk/nginx:v1

2. Удалить все образы:

docker rmi $(docker images -q)

Мы можем получить ошибки на подобие:

Error response from daemon: conflict: unable to delete 857594f280c1 (must be forced) — image is being used by stopped container …

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

docker rm $(docker ps —filter status=exited -q)

Если нужно, можно остановить все действующие контейнеры командой:

docker stop $(docker ps -a -q)

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

docker rmi -f <название образа или его ID>

* добавлена опция -f.

3. Для выявления проблем при запуске или в работе контейнера очень полезна опция для просмотра логов:

docker logs <имя или идентификатор контейнера>

Например:

docker logs my_nginx

Также можно смотреть логи непрерывно (follow):

docker logs -f my_nginx

Домашний сервер

Очевидно, что для почтового сервера нам нужен комп или его аналог, который будет доступен извне 24/7. Можно было бы посмотреть в сторону чего-нибудь компактного и маломощного типа Raspberry Pi, но т.к. мне нужен задел на будущее для других домашних систем, то я отдал предпочтение полноценному компу. На комп устанавливается гипервизор VMWare ESXi, а на нем уже живут виртуальные машины с необходимыми функциями и в том числе почтовый сервер. Такой подход дает дополнительную гибкость при проведении экспериментов и распределении ресурсов, а в случае чего виртуальные машины можно легко перенести на другое железо. Если нет особых требований к скорости работы, то для компа можно взять обычный HDD, т.к. от разделов подкачки виртуальных машин б/ушный SSD может быстро деградировать. Либо делать виртуальные машины без swap. Либо ставить два диска: основной диск виртуальной машины живет на SSD, а раздел подкачки на HDD. Компьютер я выбрал HP ProDesk 600 G2 SFF с процессором i5-6500: компактный корпус, достаточно низкое энергопотребление и ESXi на него устанавливается как родной. Все это хозяйство в режиме простоя потребляет 25 Вт, под нагрузкой 40-45 Вт. В частных объявлениях такой комп вполне реально найти за вменяемые деньги.

ESXi устанавливается со всеми настройками по умолчанию, затем сетевому интерфейсу присваивается статический IP. Более подробно и с картинками см. .

1 Sloppy.io

Sloppy – это быстро, просто и безопасно.

С Sloppy вы можете запустить несколько Docker контейнеров за считанные секунды.

Sloppy – один из лучших вариантов размещения docker контейнеров и запуска их за считанные секунды.

Проект определен в файле JSON.

Вы можете использовать предоставляемый ими CLI с командами, установленными для развертывания, обслуживания и мониторинга контейнеров.

Он также поставляется с веб-опцией для легкого создания проектов, обслуживания и мониторинга docker контейнеров.

С Sloppy у вас есть множество вариантов использования образов Docker из общедоступных в Docker Hub.

Вы также можете использовать образы из любого другого публичного или частного реестра.

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

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

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

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

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

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

Таким образом, вам не нужно беспокоиться о потере ваших данных вообще.

Вы можете отслеживать все показатели (загрузка ЦП, сетевой трафик, использование памяти и т. д.) с интервалом 5 минут.

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

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

DKIM настройка.

4.1. Войдите в Mailcow web интерфейс и нажмите на “Configuration” в верхнем меню. Выберите “Configuration & Details“.

4.2. Нажмите на “Configuration” вкладку и потом “ARC/DKIM keys“

4.3. Введите Ваш домен в текстовом поле “Domain/s” под “Add ARC/DKIM key“.

4.4. Вы можете оставить DKIM selector (текстовое поле “Selector“) вида “dkim” или можете изменить его если хотите.

4.5. Далее выберите “2048 bits” настройки “DKIM key length (bits)” в выпадающем меню.

4.6. Нажмите кнопку “Add” для генерации DKIM ключа для вашего домена.

4.8. В конце, добавьте TXT запись для “dkim._domainkey.testdomain.com” (соответствующее DKIM селектору) в настройках DNS вашего домена и установите ранее скопированное содержимое из текстового поля в качестве значения этой текстовой записи.

Preparation

Get LetsEncrypt certificate

The docker-mailserver container can renew our LetsEncrypt certs for us, but it can’t generate them. To do this, we need to run certbot (from a container) to request the initial certs and create the appropriate directory structure.

In the example below, since I’m already using Traefik to manage the LE certs for my web platforms, I opted to use the DNS challenge to prove my ownership of the domain. The certbot client will prompt you to add a DNS record for domain verification.

Get setup.sh

docker-mailserver comes with a handy bash script for managing the stack (which is just really a wrapper around the container.) It’ll make our setup easier, so download it into the root of your configuration/data directory, and make it executable:

Create DKIM DNS entries

Run to create the necessary DKIM entries. The command returns no output.

Examine the keys created by opendkim to identify the DNS TXT records required:

You’ll end up with something like this:

Create the necessary DNS TXT entries for your domain(s). Note that although opendkim splits the record across two lines, the actual record should be concatenated on creation. I.e., the DNS TXT record above should read:

{{ no such element: dict object }} Docker Swarm config

Fast-track with premix!

I automatically and instantly share (with my sponsors) a private «premix» git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a and a .

Update: Premix now includes an ansible playbook, so that sponsors can deploy an entire stack + recipes, with a single ansible command! (more here)

Note

Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you’re creating/removing stacks a lot. See my list here.

A sample docker-mailserver.env file looks like this:

Настройка VPN подключения

Устанавливаем wireguard на почтовом сервере так же как это делали на VPS несколькими шагами выше:

Создаем файл конфигурации следующего содержания:

Теперь идем по SSH на VPS сервер и в файл конфигурации добавляем:

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

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

Не забываем сделать файл исполняемым командой

На VPS сервере запускаем wireguard:

Возвращаемся на почтовый сервер и запускаем wireguard там:

Состояние подключения можно посмотреть командой . Если хоть какие-то данные в обоих направления пошли, значит все ОК и можно двигаться дальше:

Настройка saslauthd для доступа к MySQL

Saslauthd — это демон аутентификации, который работает посредствам SASL. Нам он нужен, чтобы связать Postfix с MySQL и позволять им совместно работать.

Для начала создадим директорию для saslauthd:

Сохраним начальную версию файла:

Откроем на редактирование файл /etc/default/saslauthd и установим в нём следующие значения:

После этого нам нужно создать файл /etc/pam.d/smtp:

И внести в него следующие строки. Укажите нужный пароль для пользователя «mail_admin», заменив «mail_admin_password» на верное значение:

Создадим файл /etc/postfix/sasl/smtpd.conf:

И внесём в него следующие строки, так же заменив пароль на верный:

Установим права на вновь созданные файлы:

Теперь добавим пользователя postfix в группу sasl и перезапустим сервисы:

На этом конфигурирование saslauthd завершено. Далее мы настроим Dovecot на использование базы данных MySQL для IMAP/POP3 идентификации.

Возможные проблемы

Единственная проблема, замеченная в логах, это несоответствие пакета cmusieve в Debian 6 Squeeze. В файле /home/vmail/ наблюдалось примерно следующее:

Дабы исправить положение установим нужный пакет, который теперь называется sieve, в этом собственно и проблема:

Потом, нужно открыть файл /etc/dovecot/dovecot.conf на редактирование и заменить строку:

На нижеуказанную:

Перезагружаем Dovecot:

После этих несложных действий логи стали чисты.

——

На всякий случай, при возникновении ощибки: «Fatal: Unknown database driver ‘mysql’».
Dovecot требуется пакет dovecot-mysql для MySQL авторизации:

Перезагружаем Dovecot:

AMAVIS + clamav + spamassassin

Установка

apt-get install amavisd-new clamav clamav-daemon spamassassinusermod -a -G amavis clamav

/etc/amavis/conf.d/15-content_filter_mode   отредактировать

...@bypass_virus_checks_maps = (   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);...@bypass_spam_checks_maps = (   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);...

/etc/amavis/conf.d/50-user   добавить

$allowed_header_tests{'multiple'} = 0;$allowed_header_tests{'missing'} = 0;$spam_quarantine_to = "spam\@domain.ru";$virus_quarantine_to = "virus\@domain.ru";
systemctl enable clamav-daemon amavis

Обновить clamav можно вручную, разместив скачанные каким либо с адресов

https://database.clamav.net/main.cvdhttps://database.clamav.net/daily.cvdhttps://database.clamav.net/bytecode.cvd

файлы в /var/lib/clamav

Обновить спам базы

sa-update --nogpg --verbose

Обучение:

# обучение спаму#sa-learn --spam /home/vmail/_spam# обучение ошибочных определений спама#sa-learn --ham /home/vmail/_am# статистика#sa-learn --dump magic

Get support¶

There are two ways to achieve support for your mailcow installation.

Commercial support

For professional and prioritized commercial support you can sign a basic support subscription at . For custom inquiries or questions please contact us at [email protected] instead.

Community support and chat

The other alternative is our free community-support on our various channels below. Please notice, that this support is driven by our awesome community around mailcow. This kind of support is best-effort, voluntary and there is no guarantee for anything.

  • Telegram (Support) @ t.me/mailcow.

  • Telegram (Off-Topic) @ t.me/mailcowOfftopic.

Telegram desktop clients are available for multiple platforms. You can search the groups history for keywords.

For bug tracking, feature requests and code contributions only:

GitHub @ mailcow/mailcow-dockerized

IndiMail

Название: IndiMail

Сайт проекта: indimail.sf.net

Лицензия: GNU GPL

Платформа: *nix

Веб-интерфейс iWebAdmin построен на QmailAdmin

Платформа обмена сообщениями по протоколам SMTP, IMAP, POP3, поддерживающая QMQP, QMTP, DKIM и BATV (Bounce Address Tag Validation) и проверку почты на спам и вирусы. Базируется на нескольких Open Source решениях: Qmail, Courier IMAP/POP3, serialmail (доставка почты через коммутируемые соединения), qmailanalog (списки рассылки), dotforward, fastforward, mess822, daemontools, ucspi-tcp, Bogofilter, Fetchmail и других. Предоставляет набор инструментов для управления виртуальными доменами и учетными записями пользователей собственной разработки. Обеспечивает маршрутизацию для SMTP, IMAP и POP3, что позволяет разместить почтовый домен на нескольких серверах с обменом данными между ними или как прокси. Это очень удобно, если организация состоит из нескольких удаленных офисов. Используя утилиту hostcntrl, можно добавить на обслуживание отдельные адреса из других доменов. Это позволяет использовать IndiMail в гетерогенной среде без необходимости поднятия нескольких доменов или при переходе от проприетарного решения. Несколько серверов с синхронизацией данных позволяют легко наращивать структуру. Чтобы обеспечить лучшую масштабируемость и производительность, некоторые компоненты были изменены (в частности, Qmail). В IndiMail используется несколько так называемых коллекций (queue collection), каждая из которых выполняет свой процесс qmail-send/qmail-todo и может хранить данные на отдельном харде. Такая архитектура позволяет обрабатывать запросы быстрее, чем оригинальный Qmail.

Разработчики дают полную свободу в настройках, практически все параметры можно переопределить через переменные (а их всего около 200). Например, переменная CONTROLDIR указывает на каталог с конфигурационными файлами, QUEUEDIR — каталог с очередями. То есть можно запустить несколько копий IndiMail на одном сервере со своими настройками для каждой очереди, отправителя, получателя и узла. Но разбираться во всех переменных необязательно: чтобы запустить IndiMail, понадобится всего несколько правок. Новички могут управлять установками при помощи меню FLASH (построено на Ncurses). Для хранения данных о виртуальных пользователях используется MySQL, адресные книги могут храниться в OpenLDAP. Последние релизы полностью совместимы с systemd. Много внимания разработчики уделяют безопасности как самого сервера, так и сервисов — минимальное использование SETUID, четкое разделение между программами/адресами/файлами, пятиуровневый trust partitioning, автоматическое распознавание локальных IP, access-list, tcprules, фильтр контента, TLS/SSL и многое другое.

Установить IndiMail можно на любой 32/64 *nix платформе. Для загрузки доступны исходные тексты, пакеты и репозитории для некоторых популярных дистрибутивов Linux (RHEL/CentOS 5/6, Fedora, openSUSE/SLE, Mandriva, Debian и Ubuntu). Для управления сервером предлагается около 45 программ различного назначения (большинство расположено в /var/indimail/bin), учетные записи можно также настраивать при помощи веб-интерфейса iWebAdmin (построен на QmailAdmin), который необходимо устанавливать отдельно.

Логирование

mkdir /var/log/mail

Помечаются логи от dovecot /etc/dovecot/conf.d/10-logging.conf

syslog_facility = local5

/etc/rsyslog.conf отредактировать

mail.info                       -/var/log/mail/mail.infomail.warn                       -/var/log/mail/mail.warnmail.err                        /var/log/mail/mail.errlocal5.*        -/var/log/mail/dovecot.loglocal5.warning;local5.error;local5.crit -/var/log/mail/dovecot-errors.log

/etc/logrotate.d/mail

su root adm/var/log/mail/mail.info /var/log/mail/mail.warn /var/log/mail/mail.err /var/log/mail/*.log {        rotate 30        daily        missingok        notifempty        compress        delaycompress        sharedscripts      postrotate          systemctl restart rsyslog          systemctl restart dovecot          systemctl restart postfix      endscript}

Перезапуск:

# systemctl restart logrotate && systemctl restart rsyslog# systemctl restart amavis && systemctl restart dovecot && systemctl restart postfix

Установка системы и начальная конфигурация

В гостевой ОС вполне можно отказаться от раздела подкачки, особенно если назначить ВМ достаточное количество оперативки, а datastore гипервизора находится на SSD. Я взял Debian 10, процесс установки полностью стандартный за исключением разметки диска. Имя сервера задаем mail, домен example.com. Система ставится в минимальной конфигурации. В разметке дисков я сделал первый раздел под /boot и второй раздел с шифрованием:

После установки системы я делаю несколько базовых вещей. Удаляю созданного при установке пользователя командой .

Задаю статический адрес, если это не было сделано во время установки. Для этого правим файл

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

Чтобы не углубляться в настройку домашних роутеров, VPN туннель мы будем делать сразу с почтового сервера до VPS и завернем туда весь трафик. Поэтому имеет смысл поменять DNS сервера на публичные. Для этого правим файл , конечный вид которого примет вид:

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

Устанавливаем ssh и wget:

Включаю логин по паролю для root по SSH, для этого в файле добавляем строку . Перезагружаем сервер и коннектимся уже по ssh.

Частые команды при работе с Docker

docker ps — выводит список запущенных контейнеров. Также ей можно передать параметр -a, чтобы вывести все контейнеры, а не только запущенные.

docker build — собирает образ Docker из Dockerfile и набора файлов, расположенных по определённому пути.

Параметр -t используется, чтобы задать имя образа, последний параметр. — наименование каталога (в нашем случае текущий каталог).

docker images — выводит список образов в вашей системе.

docker logs — позволяет вывести на консоль логи указанного контейнера. Для этого необходимо указать имя или id контейнера. Можно использовать флаг —follow, чтобы следить за логами работающего контейнера: например, docker logs —follow c5ecc88de8f9.

docker run — запускает контейнер на основе указанного образа.

docker stop — останавливает контейнер. Можно передать опцию $(docker ps -a -q) для остановки всех запущенных контейнеров.

docker rm и docker rmi — команды, удаляющие контейнер и образ соответственно.

Удалить все контейнеры:

Настройка MySQL базы данных доменных имён и пользователей

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

После этого должно появиться приглашение к вводу команд MySQL, вроде этого:

Создадим базу данных для Postfix и выберем её для дальнейшего использования:

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

Создадим пользователя с говорящим именем «mail_admin», он у нас будет главный по почте, поэтому наделим его всему привилегиями на всех локальных доменах

ВАЖНО! Сейчас и ниже «mail_admin_password» следует заменить на пароль для этого пользователя, в первой строке он задаётся впервые:. Далее создаём таблицу в которой будут храниться все активные почтовые домены, доменов может быть сколько угодно и это радует:

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

Создадим таблицу пересылки почты с ящика на ящик:

Создадим таблицу для хранения почтовых аккаунтов:

И наконец создадим таблицу транспортировки:

Работа с MySQL на данном этапе завершена, выходим обратно в консоль:

Проверим, что MySQL связана с localhost (127.0.0.1). Для этого откроем файл /etc/mysql/my.cnf и найдём следующую строку:

Если MySQL на сервере уже настроен на другой IP адрес, следует это учесть в последующих шагах настройки Postfix. Не рекомендуется запускать MySQL сервер на публичном IP адресе — это небезопасно.

Чтобы внесённые нами изменения корректно вступили в силу — перезапустим MySQL сервер:

На следующем этапе мы настроим Postfix на работу с MySQL.

iRedMail

Полнофункциональное решение для почтового сервера на базе Postfix и Dovecot:

Программные функции включают в себя:
  1. Фильтрация спама
  2. TLS / SSL
  3. Управляйте своими календарями (CalDAV), адресными книгами (CardDAV), задачами в удобном веб-интерфейсе или на мобильных устройствах (iOS, Android, BlackBerry 10, Windows Phone)
  4. SpamAssassin, ClamAV, SPF, DKIM, greylisting, белый список, черный список. Карантинирование обнаруженного спама в базе данных SQL для дальнейшего рассмотрения
  5. Хранение почтовых учетных записей в вашем бэкенде favourte: OpenLDAP, MySQL, MariaDB, PostgreSQL
  6. Веб-почта
  7. Панель веб-администрирования
Операционная система: Red Hat Enterprise Linux, CentOS, Debian, Ubuntu, FreeBSD и OpenBSD
Лицензия: GPL v3
Оплаченная поддержка: Да

Возможные проблемы

Единственная проблема, замеченная в логах, это несоответствие пакета cmusieve в Debian 6 Squeeze. В файле /home/vmail/ наблюдалось примерно следующее:

Дабы исправить положение установим нужный пакет, который теперь называется sieve, в этом собственно и проблема:

Потом, нужно открыть файл /etc/dovecot/dovecot.conf на редактирование и заменить строку:

На нижеуказанную:

Перезагружаем Dovecot:

После этих несложных действий логи стали чисты.

——

На всякий случай, при возникновении ощибки: «Fatal: Unknown database driver ‘mysql’».
Dovecot требуется пакет dovecot-mysql для MySQL авторизации:

Перезагружаем Dovecot:

DNS записи

Для работ Mailcow вам необходимо добавить следующие DNS записи для вашего домена? что именно нужно писать указано тут:

Есть базовые настройки, их 3, чтобы их внести, идем в редактор dns вашего домена и прописываем следующие значения:

MX-запись вид DNS-записи, предназначенный для регистрации почтовых SMTP серверов. Именно с ее помощью почтовый агент отправителя определяет smtp сервер, на которые будет выполняться доставку письма.

Дальше нужно внести записи которые позволят не попадать вашей почте в спам, таких важных параметра тоже три!

DKIM-запись

Настоятельно рекомендуется создать запись DKIM TXT в пользовательском интерфейсе mailcow и установить соответствующую запись TXT в записях DNS.

SPF-запись

DMARC-запись

DMARC — предназначенна для снижения количества спамовых и фишинговых электронных писем, основанная на идентификации почтовых доменов отправителя на основании правил и признаков, заданных на почтовом сервере получателя

Пример DMARS-данных в TXT-записи DNS:

#NameTypeValue_dmarcIN TXT«v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; sp=quarantine»

итого после всех настроек при проверке вашего DNS через mailcow

должно получиться примерно следующее:

галочки говорят о том, что этот параметр настроен верно, важно помнить, что dns обновляется не мгновенно, а иногда до 72 часов, по этому внимательно прописываем параметры и идем заниматься другими делами, позже проверяем всё ли в порядке

Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: