Установка 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 вполне выполнима. Если у вас остались вопросы, спрашивайте в комментариях!

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

  1. Сергей Январь 16, 2017 Ответить
  2. Сергей Январь 17, 2017 Ответить
    • Amadeus Январь 19, 2017 Ответить
  3. Сергей Январь 17, 2017 Ответить
  4. Сергей Январь 17, 2017 Ответить
    • Евгений Январь 18, 2017 Ответить
      • Евгений Август 9, 2017 Ответить
  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 Ответить

Ответить

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

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