Top.Mail.Ru
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация

Установка и настройка Postfix и Dovecot

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
17 января 2022 г.
5196
13 минут чтения
Средний рейтинг статьи: 2.8

Postfix чаще всего используется в качестве почтового сервера сайтов. Он готов к работе сразу после установки, но по умолчанию в нем нет системы авторизации. Это значит, что любой человек может использовать этот почтовый сервер для отправки и приема писем. Чтобы исключить такую ситуацию, используется связка Postfix – Dovecot. Dovecot — плагин, который позволяет настроить авторизацию.

postfix

Подготовка к установке

Вам понадобится:

  • Сервер с готовой конфигурацией. Например, можно заказать его на timeweb.cloud.
  • Учетная запись с правами sudo.

В этом руководстве мы построим Mail Server на основе Ubuntu 20.04. Для хранения данных подключим базу данных MySQL.

Создание отдельного пользователя

Запустите терминал Ubuntu и создайте нового пользователя:

  
adduser postfix

Выдайте новому пользователю права sudo:

  
usermod -aG sudo postfix

Создаем учетную запись, от которой будут выполняться задачи чтения и записи почтовых ящиков в каталоге на сервере. Мы создадим пользователя vmail с одноимённой группой и UID и GID 1024:

  
groupadd -g 1024 vmailuseradd -d /home/mail -g 1024 -u 1024 vmailmkdir /home/mailchown vmail:vmail /home/mail

Мы будем хранить всю почту пользователей в каталоге /home/mail.

Настройка MySQL

MySQL нужен для решения двух задач. Первая — хранение данных пользователей, вторая — хранение конфигурации Roundcube.

Установите MySQL, PHP и Apache:

  
sudo apt install mysql-server mysql-client apache2 libapache2-mod-php php php-imap php-mysql php-mbstring

Запустите и добавьте в автозагрузку базу данных и веб-сервер:

  
sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl start mysql sudo systemctl enable mysql

Задайте пароль для учетной записи root, а также создайте БД для Postfix и Roundcube:

  
sudo mysql -u root -p alter user root@localhost identified by ‘password’; create database postfix; use postfix; create user postfix@localhost identified by 'password'; grant all privileges on *.* to postfix@localhost; create database roundcube; use roundcube; create user roundcube@localhost identified by 'password'; grant all privileges on *.* to roundcube@localhost; flush privileges; exit;

Настройка PostfixAdmin

PostfixAdmin — интерфейс администрирования, который нужен для управления почтовым сервером.

Загрузите PostfixAdmin и перенесите его исполняемые файлы в папку usr:

  
wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz tar -zxf postfixadmin.tar.gz sudo mv postfixadmin-* /usr/share/postfixadmin mkdir /usr/share/postfixadmin/templates_c rm postfixadmin.tar.gz

Измените владельца каталога на www-data, чтобы PostfixAdmin мог с ней работать:

  
sudo chown -R www-data:www-data /usr/share/postfixadmin/

Добавьте символическую ссылку из каталога веб-сервера:

  
sudo ln -s /usr/share/postfixadmin/public/ /var/www/html/postfixadmin

Откройте файл конфигурации PostfixAdmin:

  
sudo nano /usr/share/postfixadmin/config.local.php

Отредактируйте его содержимое:

  
<?php $CONF['configured'] = true; // Доступно конфигурирование $CONF['setup_password'] = 'хэш пароля'; // хэш отображается при первом запуске http://<адрес сервера>/postfixadmin/setup.php $CONF['default_language'] = 'ru'; // язык интерфейса $CONF['database_type'] = 'mysqli'; // тип базы данных $CONF['database_host'] = 'localhost'; // имя сервера, на котором расположена БД $CONF['database_user'] = 'postfix'; // имя пользователя для подключения к БД $CONF['database_password'] = 'password'; // пароль пользователя для подключения к БД $CONF['database_name'] = 'postfix'; // имя БД $CONF['admin_email'] = 'root@domain.ru'; // почта администратора БД $CONF['encrypt'] = 'md5crypt'; // тип шифрования пароля $CONF['default_aliases'] = array (  'abuse' => 'root',  'hostmaster' => 'root',  'postmaster' => 'root',  'webmaster' => 'root' ); // алиасы почтовых адресов пользователей $CONF['domain_path'] = 'YES'; // определение директории, в которой будут храниться письма $CONF['domain_in_mailbox'] = 'YES'; // автоматически определяет директорию для хранения писем пользователей, если она не выставлена в предыдущем параметре ?>

Откройте браузер и перейдите по адресу http://<адрес сервера>/postfixadmin/setup.php. Здесь вы сможете задать пароль. Введите его дважды и нажмите «Generate password hash». После обновления страницы будет отображен хэш пароля. Скопируйте его и пропишите в конфигурационном файле config.local.php, который мы рассматривали выше, в строке $CONF['setup_password'].

Теперь перезагрузите страницу, на которой получили хэш, и появится возможность создать администратора.

После вы сможете войти в интерфейс Postfixadmin по ссылке http://<адрес сервера>/postfixadmin с заданным логином и паролем.

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

Облачные серверы

Масштабируемые вычислительные ресурсы
по всему миру с почасовой оплатой

Установка и настройка Postfix

Установите Postfix Ubuntu и postfix-mysql для соединения с базой данных:

  
sudo apt install postfix postfix-mysql -y

После завершения установки в терминале отобразится графический интерфейс. Настройка:

  1. Выберите Internet Site.
  2. Укажите FQDN сервера, на котором запущен почтовый сервер Linux.

Если впоследствии появится необходимость изменить эти параметры, сделать это можно с помощью утилиты dpkg-reconfigure:

  
sudo dpkg-reconfigure postfix

Переходите к настройке Postfix. Откройте главный файл конфигурации:

  
sudo nano /etc/postfix/main.cf

Закомментируйте несколько строк:

  
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_tls_security_level=may #smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

Добавьте следующие строки:

  
virtual_transport=lmtp:unix:private/dovecot-lmtp relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf virtual_mailbox_base=/var/mail/vmail/ local_recipient_maps=$virtual_mailbox_maps smtpd_sasl_auth_enable=yes smtpd_sasl_type=dovecot smtpd_sasl_path=private/auth broken_sasl_auth_clients=yes smtpd_sasl_security_options=noanonymous smtpd_use_tls=yes smtpd_tls_cert_file=/etc/postfix/certs/cert.pem smtpd_tls_key_file=/etc/postfix/certs/key.pem smtpd_sasl_tls_security_options=noanonymous smtpd_tls_auth_only=yes smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_non_fqdn_recipient,reject_unknown_recipient_domain smtpd_banner=$myhostname ESMTP strict_rfc821_envelopes=yes disable_vrfy_command=yes smtpd_helo_required=yes

Затем откройте для редактирования файл master.cf:

  
sudo nano /etc/postfix/master.cf

Добавьте в него строки:

  
submission inet n - n - - smtpd  -o smtpd_tls_security_level=encrypt  -o smtpd_sasl_auth_enable=yes  -o smtpd_sasl_type=dovecot  -o smtpd_sasl_path=private/auth  -o syslog_name=postfix/submission  -o smtpd_tls_wrappermode=no  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject  -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination  -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd  -o smtpd_sasl_auth_enable=yes  -o smtpd_sasl_type=dovecot  -o smtpd_sasl_path=private/auth  -o syslog_name=postfix/smtps  -o smtpd_tls_wrappermode=yes  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject  -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination  -o milter_macro_daemon_name=ORIGINATING dovecot unix - n n - - pipe  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}

Создайте конфигурационные файлы, которые определят порядок обращений Postfix к БД MySQL.

Создайте папку MySQL:

  
sudo mkdir /etc/postfix/mysql

Откройте файл relay_domains.cf:

  
sudo nano /etc/postfix/mysql/relay_domains.cf

Пропишите в нем:

  
hosts = localhost user = postfix password = password dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'

Откройте файл virtual_alias_domain_maps.cf:

  
sudo nano /etc/postfix/mysql/virtual_alias_domain_maps.cf

Пропишите в нем: 

  
hosts = localhost user = postfix password = password dbname = postfix query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1

Откройте файл virtual_alias_maps.cf:

  
sudo nano /etc/postfix/mysql/virtual_alias_maps.cf

Пропишите в нем:

  
hosts = localhost user = postfix password = password dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Откройте файл virtual_mailbox_domains.cf:

  
sudo nano /etc/postfix/mysql/virtual_mailbox_domains.cf

Пропишите в нем:

  
hosts = localhost user = postfix password = password dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'

Откройте файл virtual_mailbox_maps.cf:

  
sudo nano /etc/postfix/mysql/virtual_mailbox_maps.cf

Пропишите в нем:

  
hosts = localhost user = postfix password = password dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

Напоследок сгенерируйте самоподписной сертификат.

  
sudo mkdir /etc/postfix/certs sudo openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem

При генерировании сертификата появится несколько вопросов, ответы на них могут быть любыми.

После завершения настройки перезапустите Postfix:

  
sudo postfix check sudo systemctl restart postfix

Установка Dovecot

Dovecot — сервер, который мы будем использовать для авторизации пользователей по протоколу SMTP. 

Установите Dovecot вместе с плагином для работы с MySQL:

  
apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql

Затем настройте способ хранения писем. Для этого откройте файл конфигурации с помощью встроенного редактора nano

  
sudo nano /etc/dovecot/conf.d/10-mail.conf

Добавьте в него строку:

  
mail_location = maildir:/home/mail/%d/%u/

Это строка указывает, что сообщения необходимо хранить в папке MailDir.

Затем настройте слушателя для аутентификации. Откройте другой файл конфигурации:

  
sudo nano /etc/dovecot/conf.d/10-master.conf

Добавьте в него следующие строки:

  
service auth { unix_listener /var/spool/postfix/private/auth {     mode = 0666     user = postfix     group = postfix   }   unix_listener auth-userdb {     mode = 0600     user = vmail     group = vmail   } }

Здесь идут два слушателя: /var/spool/postfix/private/auth нужен, чтобы Постфикс мог проводить авторизацию через Dovecot, а auth-userdb — это сокет авторизации через dovecot-lda.

Затем добавьте в этот же файл конфигурации:

  
service stats { unix_listener stats-reader {         user = vmail         group = vmail         mode = 0660     }     unix_listener stats-writer {         user = vmail         group = vmail         mode = 0660     } }

 Теперь переходите к настройке самой аутентификации. Откройте файл 10-auth.conf:

  
sudo nano /etc/dovecot/conf.d/10-auth.conf

Пропишите в нем:

  
#!include auth-system.conf.ext !include auth-sql.conf.ext

Затем откройте файл 10-ssl.conf:

  
sudo nano /etc/dovecot/conf.d/10-ssl.conf

Настройте в нем шифрование:

  
ssl = required // требование шифрования  ssl_cert = </etc/ssl/mail/public.pem // путь к открытой части сертификата ssl_key = </etc/ssl/mail/private.key // путь к приватному ключу

Настройте автоматическое создание каталогов в файле 15-lda.conf. Откройте его:

  
sudo nano /etc/dovecot/conf.d/15-lda.conf:

И укажите:

  
lda_mailbox_autocreate = yes

Настройте подключение к БД. Откройте файл конфигурации:

  
​sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext

Добавьте в него:

  
passdb { …   args = /etc/dovecot/dovecot-sql.conf.ext } userdb {   …   args = /etc/dovecot/dovecot-sql.conf.ext }

Здесь нужно указать файлы, в которых описываются правила получения пользователей и паролей из базы данных. Их тоже нужно добавить самостоятельно. Откройте файл:

  
sudo nano /etc/dovecot/dovecot-sql.conf.ext

В конце добавьте:

  
driver = mysql connect = host=localhost dbname=postfix user=postfix password=postfix123 default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u' user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'

Это полностью сконфигурированный запрос, который позволит получать данные из БД. Осталось задать интерфейс, который будет слушать Dovecot. Откройте файл:

  
sudo nano /etc/dovecot/dovecot.conf

Пропишите в нем:

  
listen = *

Чтобы все заработало, разрешите запуск Dovecot:

  
systemctl enable dovecot

И перезагрузите процесс:

  
systemctl restart dovecot

Настройка почтового сервера практически завершена.

Настройка Postfix для работы с Dovecot

После настройки Dovecot измените конфигурацию Postfix. Откройте файл main.cf:

  
sudo nano /etc/postfix/main.cf

Внесите изменения:

  
smtp_use_tls = yes smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth

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

  
#virtual_mailbox_base = /home/vmail #virtual_mailbox_maps = hash:/etc/postfix/vmaps #virtual_minimum_uid = 1000 #virtual_uid_maps = static:5000 #virtual_gid_maps = static:5000

Вместо закомментированных параметров добавьте:

  
virtual_transport = lmtp:unix:private/dovecot-lmtp

Измените файл master.cf. Откройте его:

  
sudo nano /etc/postfix/master.cf

Раскомментируйте строку:

  
submission inet n - y - - smtpd

После изменения конфигурации перезагрузите Postfix и Dovecot:

  
sudo systemctl restart postfix sudo systemctl restart dovecot

Теперь у вас есть свой почтовый сервер.

Тестирование почты и настройка брандмауэра

Сначала необходимо убедиться в том, что почта доходит до нового ящика. Сделать это можно с помощью тестового письма:

  
echo "Test mail" | mail -s "Test mail" admin@site.ru

Сообщение должно появиться в папке /home/vmail/site.ru/admin/new/. Если письма нет, проверьте лог Postfix:

  
tail -f /var/log/mail.log

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

Начните с POP3 и POP3S:

  
sudo ufw allow 110 sudo ufw allow 995

Затем откройте IMAP и IMAPS:

  
sudo ufw allow 143 sudo ufw allow 993

И напоследок — доступ к Ubuntu SMTP Server:

  
sudo ufw allow 25 sudo ufw allow 465 sudo ufw allow 587

Разверните свой почтовый сервер
в облаке Timeweb Cloud

  • Premium 3.3 ГГц
  • Dedicated CPU
Москва
Cloud MSK 15

300 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

550 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Для управления почтовыми ящиками можно использовать другой графический интерфейс. Например, Roundcube-почта — клиент для получения и отправки электронных писем. Работает на связке Apache и MySQL, что отлично вписывается в нашу конфигурацию.

Конфигурацию почтового сервера тоже можно менять. Например, добавить Postfix DKIM — инструмент, который добавляет в заголовки писем электронную подпись. Кроме DKIM Postfix, есть SPF и DMARC. Первый инструмент помогает внешним сервисам однозначно определять серверы, которые могут отправлять почту от домена, а второй инструмент позволяет указать другим серверам, что делать с письмами, не получившими одобрение от DKIM и SPF.

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
17 января 2022 г.
5196
13 минут чтения
Средний рейтинг статьи: 2.8
  • Ваш комментарий
  • Предпросмотр
Комментарии 7
Anton Bizyaev
Anton Bizyaev
18.06.2022, 08:20

Спасибо, что забыли написать, что нужно создать юзера vmail 1024:1024. Вы должны мне часа 3 моей жизни....

Команда Timeweb Cloud
Команда Timeweb Cloud
20.06.2022, 06:02

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

Dennym s
Dennym s
22.04.2022, 06:28

<< Откройте браузер и перейдите по адресу http://<адрес сервера>/postfixadmin. Введите логин и пароль.

Какой логин и пароль от чего?

Dennym s
Dennym s
22.04.2022, 07:02

Спасибо, разобрался. Об этом надо было поподробнее...

Команда Timeweb Cloud
Команда Timeweb Cloud
22.04.2022, 08:20

Здравствуйте! Спасибо, что обратили внимание. Мы расписали немного подробнее момент с получением хэша пароля и созданием администратора.

Mikhail B
Mikhail B
23.02.2022, 16:25

Здравствуйте! Вопрос "В этом руководстве мы построим Mail Server на основе Ubuntu 20.04. Для хранения данных подключим базу данных MySQL. Создание отдельного пользователя

Запустите терминал Ubuntu и создайте нового пользователя:"

с первой же строки проблема - в Убунту нет рута по дефолту, что делать?

https://www.cyberciti.biz/faq/ubuntu-linux-root-password-default-password/

Команда Timeweb Cloud
Команда Timeweb Cloud
24.02.2022, 06:15

Здравствуйте, Михаил!

root в Ubuntu присутствует, но у него может быть не задан пароль (пустой пароль). Вы можете задать его командой passwd.

Если вы создавали сервер в Timeweb, то пароль root был указан в письме, которое приходит на почту после установки сервера. Также пароль можно сбросить по нашей инструкции.

Если вы работаете из-под обычного пользователя (не root), то нужно выдать пользователю права на выполнение команд с sudo. Для этого нужно залогиниться под root и добавить пользователю группу admin или root:

usermod -aG admin имя_пользователя
Произошла неизвестная ошибка
Мы используем на сайте куки.
В интернете без них никак