Установка Postfix Ubuntu с Dovecot

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

В этой статье мы рассмотрим, как выполняется установка Postfix Ubuntu 16.04 с аутентификацией через Dovecot и базу данных. Хотя статья ориентирована именно на Ubuntu, но, вся информация может быть применена и для других дистрибутивов.


Что будет сделано?

Мы установим почтовый сервер Postfix и все необходимые компоненты для работы аутентификации пользователей. Учетные записи пользователей мы будем хранить в базе данных MySQL. Аутентификация на сервере для отправки почты будет выполняться по протоколу SMTP, за это отвечает Postfix.

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

Настройка DNS зоны

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

Вам нужно чтобы A и MX записи вашего домена указывали на IP адрес вашего сервера. Обычно это можно настроить в панели управления доменом. На обновление доменной зоны может уйти 1-2 дня.

Дальше вам нужно правильно настроить доменное на вашем VPS. FQDN (Fully Qualified Domain Name) должно состоять из имени хоста и зарегистрированного доменного имени. Сначала установим имя хоста с помощью hostnamectl. Например:

sudo hostnamectl set-hostname vps

Затем нужно добавить строчку с именем домена FQDN в файл /etc/hosts. Здесь нужно указать ваш статический адрес, имя хоста и зарегистрированный домен:

sudo vi /etc/hosts

194.67.215.125 vps.losst.ru vps

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

Установка Postfix и других программ

Перед тем как пойти дальше, нужно установить все необходимое программное обеспечение. Сначала обновите репозитории до самой новой версии:

sudo apt update

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

sudo apt install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mariadb-client mariadb-server

Установка займет некоторое время в зависимости от скорости вашего интернета. Во время установки вам предстоит ответить на несколько вопросов:

Здесь нажмите Ок, затем на следующем шаге выберите Интернет сайт:

Дальше вам нужно ввести ваше доменное имя, например, losst.ru:

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

Настройка баз данных

Я не буду подробно описывать как настроить базу данных MySQL. Об этом вы можете прочитать в отдельной статье. Мы подготовим только нашу базу для Dovecot, создадим нужных пользователей и таблицы.

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

sudo mysql -u root

Создадим новую базу данных:

> CREATE DATABASE EmailServer_db;
> USE EmailServer_db;

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

> CREATE USER 'dba'@'localhost' IDENTIFIED BY 'пароль';
> GRANT ALL PRIVILEGES ON * .* TO 'dba'@'localhost';
> FLUSH PRIVILEGES;

Так мы даем пользователю все необходимые полномочия для доступа к базе данных dba. Создадим таблицу для настроек Postfix:

> CREATE TABLE `Domains_tbl` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;

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

> CREATE TABLE `Users_tbl` (
`UserId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`password` VARCHAR(100) NOT NULL,
`Email` VARCHAR(100) NOT NULL,
PRIMARY KEY (`UserId`),
UNIQUE KEY `Email` (`Email`),
FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

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

> CREATE TABLE `Alias_tbl` (
`AliasId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`Source` varchar(100) NOT NULL,
`Destination` varchar(100) NOT NULL,
PRIMARY KEY (`AliasId`),
FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

Сейчас у вас должна получиться такая структура базы данных:

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

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

Дальше, перейдем к созданию пользователей, который смогут получать и отправлять письма. Создадим пользователя losst@losst.ru и admin@losst.ru. Для этого, нужно добавить две записи в таблицу Users_tbl, а также по записи в Domains_tbl и Aliases_tbl:

> INSERT INTO Domains_tbl (DomainName) VALUES ('losst.ru');
> INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('пароль1', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'losst@losst.ru');
> INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('пароль2', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'admin@losst.ru');
> INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, 'info@losst.ru', 'losst@losst.ru');

Пользователи готовы, дальше рассмотрим как заставить все это работать в Dovecot и Postfix. У нас есть два пользователя, которые относятся к одному домену и один из них имеет один псевдоним.

Настройка Postfix

Все настройки почтового сервера Postfix находятся в каталоге /etc/postfix. Здесь они могут быть разделены на несколько файлов. Основные из них два файла:

  • /etc/postfix/main.cf - основные настройки Postfix;
  • /etc/postfix/master.cf - настройки сервиса Postfix;

Теперь рассмотрим как выполняется настройка postfix ubuntu. Имя хоста устанавливается переменными myhostname и mydestination в файле main.cf:

sudo vi /etc/postfix/main.cf

myhostname = vps
mydestination = $myhostname losst.ru vps.losst.ru localhost localhost.localdomain

Вам нужно найти и добавить такие строки в main.cf для работы с dovecot и smtp. Все строки, которые совпадают с этими из оригинального конфигурационного файла нужно закомментировать:

append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Дальше добавим наши файлы с настройками для работы с ранее созданными таблицами в базе данных. По отдельному файлу на таблицу:

virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

 

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

sudo vi /etc/postfix/mariadb-vdomains.cf

user = dba
password = пароль
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

 

sudo vi /etc/postfix/mariadb-vusers.cf

user = dba
password = пароль
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

 

sudo vi /etc/postfix/mariadb-valias.cf

user = dba
password = пароль
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

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

Дальше установим правильные права на файлы:

sudo chmod 640 /etc/postfix/mariadb-vdomains.cf
$ sudo chmod 640 /etc/postfix/mariadb-vusers.cf
$ sudo chmod 640 /etc/postfix/mariadb-valias.cf

sudo chown root:postfix /etc/postfix/mariadb-vdomains.cf
$ sudo chown root:postfix /etc/postfix/mariadb-vusers.cf
$ sudo chown root:postfix /etc/postfix/mariadb-valias.cf

 

Мы сделали их доступными только для пользователя и группы, а также сменили группу на postfix. Дальше нужно изменить конфигурацию master.cf:

submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
#virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache

Настройка Postfix почти завершена и вам осталось проверить ее корректность:

sudo postfix check

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

dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Если это сделать раньше, то вы получите ошибку bad field count.

sudo systemctl restart postfix

Еще нам нужно проверить имеет ли Postfix доступ к созданным базам данных. Для этого будем использовать команду postmap:

sudo postmap -q losst.ru mysql:/etc/postfix/mariadb-vdomains.cf
$ sudo postmap -q test.ru mysql:/etc/postfix/mariadb-vdomains.cf
$ sudo postmap -q losst@losst.ru mysql:/etc/postfix/mariadb-vusers.cf
$ sudo postmap -q admin@losst.ru mysql:/etc/postfix/mariadb-vusers.cf
$ sudo postmap -q none@losst.ru mysql:/etc/postfix/mariadb-vusers.cf
$ sudo postmap -q info@losst.ru mysql:/etc/postfix/mariadb-valias.cf

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

Настройка Dovecot

Установка Postfix Dovecot в связке используется чаще всего для веб-сайтов. Dovecot - это IMAP/POP3 сервер, который позволяет пользователям работать с почтой через такие клиенты, как Thunderbird. Для начала нам нужно создать группу и пользователя для обработки электронных адресов, поскольку наши ящики не привязаны к системе:

sudo groupadd -g 5000 vmail
$ sudo useradd -g vmail -u 5000 vmail -d /home/vmail -m

 

Настройки Dovecot распределены по нескольким файлам. Сначала приведите файл /etc/dovecot/dovecot.conf к такому виду:

sudo vi /etc/dovecot/dovecot.conf

!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

Затем разрешим аутентификацию пользователей через базу данных MySQL в файле /etc/dovecot/conf.d/10-auth.conf:

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

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

В следующем файле укажем параметры доступа к базе данных:

sudo vi /etc/dovecot/conf.d/auth-sql.conf.ext

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

Мы будем сохранять почту в папке /home/vmail/домен/имя/Maildir. Вам нужно создать папку для домена, если она не существует:

mkdir /home/vmail/losst.ru

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

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

mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

 

И наконец, приведите базовые настройки в 10-master.conf к такому виду:

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

service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
user = dovecot
}
service auth-worker {
user = vmail
}
service dict {
unix_listener dict {
}
}

Для шифрования будем использовать самоподписанный сертификат:

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

ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

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

openssl req -new -x509 -days 1000 -nodes -out "/etc/pki/dovecot/certs/dovecot.pem" -keyout "/etc/pki/dovecot/private/dovecot.pem"

Директории /etc/pki/dovecot/certs и private должны существовать, вы можете использовать другое расположение, но тогда вам нужно будет изменить адреса сертификатов в файлах настройки Postfix и Dovecot. Осталось указать пароль и другие параметры доступа к базе данных mysql:

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

driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=пароль"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

Еще нам может понадобиться информация из логов, поэтому:

sudo vi /etc/dovecot/conf.d/10-logging.conf

log_path = /var/log/dovecot.log

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

sudo systemctl restart dovecot

Завершение настройки

Проверьте правильность настроек Postfix и Dovecot. Вы можете вывести их с помощью следующих команд:

sudo postconf –n
$ sudo postconf –M

А для Dovecot:

sudo doveconf –n

Установите правильные права для папки /home/vmail:

chown –R vmail:vmail /home/vmail

Разрешите все необходимые порты в брандмауэре:

sudo ufw allow 143
$ sudo ufw allow 110
$ sudo ufw allow 587

Теперь осталось только проверить работу почтового сервера с помощью Thunderbird.

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

Дальше вы можете получать и отправлять почту:

Выводы

В этой статье мы рассмотрели как выполняется установка Postfix Ubuntu 16.04, а также как установить и настроить Dovecot. Все это работает через базу данных MySQL, а поэтому имеет очень гибкую архитектуру. На первый взгляд, все может показаться очень сложным, но если разобраться, то установка и настройка Postfix Dovecot вполне выполнима. Если у вас остались вопросы, спрашивайте в комментариях!

38 комментариев

  1. Аватар Сергей 16 января, 2017 Ответить
  2. Аватар Сергей 17 января, 2017 Ответить
    • Аватар Amadeus 19 января, 2017 Ответить
  3. Аватар Сергей 17 января, 2017 Ответить
  4. Аватар Сергей 17 января, 2017 Ответить
    • Аватар Евгений 18 января, 2017 Ответить
      • Аватар Евгений 9 августа, 2017 Ответить
    • Аватар Владимир 16 апреля, 2019 Ответить
  5. Аватар Сергей 18 января, 2017 Ответить
    • Аватар Amadeus 19 января, 2017 Ответить
      • Аватар Сергей 20 января, 2017 Ответить
        • Аватар mao 20 марта, 2017 Ответить
  6. Аватар Жора 2 февраля, 2017 Ответить
    • Аватар Andrei 14 марта, 2018 Ответить
  7. Аватар Макс 10 февраля, 2017 Ответить
  8. Аватар Yakubovich 4 апреля, 2017 Ответить
  9. Аватар psiklop 17 мая, 2017 Ответить
    • Аватар podmigor 19 января, 2018 Ответить
  10. Аватар sasha 3 января, 2018 Ответить
  11. Аватар komron 22 февраля, 2018 Ответить
  12. Аватар komron 22 февраля, 2018 Ответить
  13. Аватар кеаонукк 25 апреля, 2018 Ответить
  14. Аватар fopmaceft 2 июля, 2018 Ответить
    • Аватар Алексей 2 ноября, 2018 Ответить
    • Аватар Алексей 2 ноября, 2018 Ответить
  15. Аватар Алексей 2 ноября, 2018 Ответить
  16. Аватар Евгений 7 декабря, 2018 Ответить
    • Аватар Евгений 8 декабря, 2018 Ответить
  17. Аватар Евгений 8 декабря, 2018 Ответить
  18. Аватар Nikita 21 декабря, 2018 Ответить
  19. Аватар Алексей 5 марта, 2019 Ответить
  20. Аватар Сергей 15 июля, 2019 Ответить
  21. Аватар Александр 18 ноября, 2019 Ответить
    • Аватар admin 18 ноября, 2019 Ответить
    • Аватар Алекс 29 ноября, 2019 Ответить
  22. Аватар Евгений 24 марта, 2020 Ответить
  23. Аватар Павел 20 апреля, 2020 Ответить

Ответить

Сообщить об опечатке

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