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

    Команда Simple-Server
    03.06.2026
    13 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

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

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

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

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

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

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

    groupadd -g 1024 vmail useradd -d /home/mail -g 1024 -u 1024 vmail mkdir /home/mail chown vmail:vmail /home/mail

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

    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 и перенесите его исполняемые файлы в папку usr:

    Измените владельца каталога на 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

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

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

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

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

    Установка и настройка 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.

    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 — сервер, который мы будем использовать для авторизации пользователей по протоколу 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

    Чтобы все заработало, разрешите запуск 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

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

    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

    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны