Установка контейнера
Установка необходимых контейнеров с использованием 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 на редактирование и заменим всё его содержимое указанным ниже кодом. Ящик «postmaster@example.com» следует заменить на желаемый:
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 <master@dmosk.ru>
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
* в данном файле мы:
- используем базовый образ centos 7;
- в качестве автора образа указываем Dmitriy Mosk;
- задаем временную зону внутри контейнера Europe/Moscow.
- устанавливаем epel-release и nginx;
- чистим систему от метаданных и кэша пакетов после установки;
- указываем nginx запускаться на переднем плане (daemon off);
- в индексном файле меняем первое вхождение nginx на docker-nginx;
- запускаем 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 info@servercow.de 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:
Программные функции включают в себя:
|
Операционная система: 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:admin@example.ru; ruf=mailto:admin@example.ru; sp=quarantine»
итого после всех настроек при проверке вашего DNS через mailcow
должно получиться примерно следующее:
галочки говорят о том, что этот параметр настроен верно, важно помнить, что dns обновляется не мгновенно, а иногда до 72 часов, по этому внимательно прописываем параметры и идем заниматься другими делами, позже проверяем всё ли в порядке