Установка и настройка Postfix и Dovecot на Ubuntu 20.04 - Академия Selectel

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

Тирекс
Тирекс Самый зубастый автор
22 апреля 2021

Postfix — почтовый сервер с открытым исходным кодом, который чаще всего используется как почтовый сервер для веб-сайтов. После установки Postfix уже готов к выполнению своей основной задачи — работе с почтовыми сообщения, однако, в нем нет подсистемы авторизации. То есть любой человек может подключиться к почтовому серверу и отправить или получить сообщения для любого почтового […]

Изображение записи

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

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

Перед началом установки всех необходимых компонентов, подготовим сервер. Это будет выделенный сервер с готовой конфигурацией.

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

На следующем представлении на вкладке Готовые серверы выберем сервер.

Выбираем сервер EL 10-SSD с процессором Intel Xeon E3-1230v5 3.4 ГГц, 4 ядра, памятью 32 ГБ DDR4 и двумя SSD-дисками по 240 ГБ. На сервер установим Ubuntu 20.04 LTS (64-bit).

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

В появившемся pop-up окне также нажимаем кнопку Оплатить.

После заказа сервера мы увидим таймлайн с шагами подготовки сервера: заказ сервера, оплата и настройка. Еще раз проверим конфигурацию и дождемся готовности сервера.

Через несколько минут сервер будет готов к работе.

Теперь можем приступать к установке программного обеспечения. Почтовый сервер Postfix можно установить с хранением учетных данных пользователей в базе данных и на файловой системе. Ниже расскажем про работу Postfix с базой данных MySQL, об установке интерфейса PostfixAdmin для управления почтовым сервером и Dovecot для авторизации. Вы также узнаете про работу с письмами через Roundcube и о повышении доверия почтовых сервисов при помощи SPF, DKIM и DMARC. Поехали!

Подготовительные действия

Перед началом установки пакетов, подготовим учетную запись postfix, от имени которой будем в дальнейшем выполнять все действия. Дополнительно выдадим учетной записи права sudo:

adduser postfix
usermod -aG sudo postfix

Установка и настройка MySQL для Postfix и Roundcube

Базу данных MySQL мы будем использовать сразу для двух целей: хранение учетных данных пользователей Postfix и хранение конфигурации и данных Roundcube.

Установим базу данных MySQL, PHP и веб-сервер Apache:

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

Запускаем MySQL, веб-сервер и добавим их в автозагрузку:

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

После установки базы данных, зададим пароль для учетной записи root и создадим базы данных для Postfix и Roundcube:

sudo mysql -u root -p

В консоли mysql> выполняем следующие команды, подтверждая каждую нажатием Enter:

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

Чтобы веб-сервер мог работать с директорией PostfixAdmin, изменим владельца соответствующей директории (и всех вложенных) на www-data:

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

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

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

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

sudo nano /usr/share/postfixadmin/config.local.php
<?php
$CONF['configured'] = true;
$CONF['setup_password'] = 'нужно изменить после запуска';
$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';
?>

В файле конфигурации PostfixAdmin содержатся следующие параметры:

$CONF[‘configured’] — параметр, который при значении true указывает на то, что в интерфейсе должна быть возможность конфигурирования. После завершения конфигурации значение автоматически изменится на false.

$CONF[‘setup_password’] — в этом параметре нужно указать хэш пароля, который будет использоваться для конфигурирования утилиты. Этот хэш можно получить в веб-интерфейсе по адресу http://<адрес сервера>/postfixadmin/setup.php при его первом запуске.

$CONF[‘default_language’] — параметр задает язык интерфейса.

$CONF[‘database_type’] — параметр задает тип базы данных, в которой будут храниться данные PostfixAdmin. Доступны значения:

  • mysql для MySQL 3.23 и 4.0, 4.1 или 5;
  • mysqli для MySQL 4.1+ или MariaDB;
  • pgsql для PostgreSQL;
  • sqlite для SQLite 3.

$CONF[‘database_host’] — параметр задает имя сервера, на котором расположена база данных.

$CONF[‘database_user’] — параметр задает имя пользователя, которое используется для подключения к базе данных.

$CONF[‘database_password’] — параметр задает пароль, который используется для подключения к базе данных.

$CONF[‘database_name’] — параметр задает имя базы данных, к которой выполняется подключение.

$CONF[‘admin_email’] — электронная почта администратора PostfixAdmin. Можно оставить этот параметр пустым.

$CONF[‘encrypt’] — параметр задает тип шифрования, которым будет зашифрован пароль. Доступные опции:

  • md5crypt;
  • md5;
  • system — учетная запись по умолчанию, от которой работает PHP;
  • cleartext — это простой открытый текст (не рекомендуется, т.к. пропадает смысл использования базы данных для повышения безопасности);
  • mysql_encrypt используется для интеграции с PAM;
  • authlib использует пароли типа courier-authlib и требует установки значения параметра $CONF[‘authlib_default_flavor’];
  • dovecot:CRYPT-METHOD использует зашифрованный пароль из dovecot, например, dovecot:CRAM-MD5;
  • php_crypt:CRYPT-METHOD:DIFFICULTY:PREFIX использует встроенную в PHP функцию шифрования. Пример: php_crypt:SHA512:50000
    • php_crypt CRYPT-METHOD: Поддерживаемые значения DES, MD5, BLOWFISH, SHA256, SHA512;
    • php_crypt DIFFICULTY поддерживает значения BLOWFISH:4-31, SHA256:1000-999999999, SHA512:1000-999999999;

Важно:

  • не используйте методы dovecot:*, которые включают имя пользователя в хэш;
  • минимально допустимая версия dovecot 2.1 (‘doveadm pw’ версии 2.0.x не поддерживают опцию ‘-t’);
  • dovecot 2.0.0 — 2.0.7 не поддерживается.

$CONF[‘default_aliases’] — параметр определяет алиасы для почтовых адресов пользователей. Например:

  • ‘abuse’ => ‘abuse@your.domain.com’;
  • ‘hostmaster’ => ‘hostmaster@your.domain.com’;
  • ‘postmaster’ => ‘postmaster@your.domain.com’;
  • ‘webmaster’ => ‘webmaster@your.domain.com’.

$CONF[‘domain_path’] — параметр определяет директорию, в которой будут храниться письма пользователей.

$CONF[‘domain_in_mailbox’] — параметр автоматически определяет директорию для хранения писем пользователей. Если в предыдущем параметре установлено ‘NO’, то в этом принудительно будет выставлено ‘YES’.

Как только указаны все параметры, можно открывать интерфейс управления PostfixAdmin. После задания установочного пароля на первоначальном экране, вы увидите его хэш. Этот хэш нужно вписать в значение параметра $CONF[‘setup_password’] и обновить интерфейс PostfixAdmin.

Альтернативный способ создать привилегированного пользователя — выполнить специальную команду в консоли:

sudo bash /usr/share/postfixadmin/scripts/postfixadmin-cli admin add postfix@domain.com --superadmin 1 --active 1 --password password --password2 password

После того, как привилегированный пользователь создан, можно входить в систему. Для этого нужно перейти по URL http://<адрес сервера>/postfixadmin и ввести логин и пароль.

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

При тестировании отправки в почтовый ящик на mail.ru приходил ответ, что письмо подозрительное и оно даже не появлялось в почтовом ящике. Gmail отнесся более лояльно и помещал письма в папку Спам. Ниже скриншот из Gmail.

Установка Postfix

Установим из пакетов сам Postfix и коннектор к базе данных MySQL:

sudo apt install postfix postfix-mysql -y

После окончания установки в консоли откроется графический интерфейс первоначальной настройки.

На первом экране настройки выбираем Internet Site:

На следующем экране нужно указать FQDN сервера, на котором работает почтовый сервис:

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

sudo dpkg-reconfigure postfix

Для настройки Postfix, закомментируем в файле /etc/postfix/main.cf следующие строки символом #:

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

Открываем файл конфигурации /etc/postfix/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
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'
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
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'
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'
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'

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

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

Настройка брандмауэра для postfix

Для внесения изменений изменений в правила брандмауэра воспользуемся специальной утилитой ufw (расшифровывается как uncomplicated firewall). По сравнению с известным iptables, у ufw проще синтаксис. Установим и запустим ufw:

sudo apt install ufw
sudo ufw enable

Проверим текущее правило для Postfix:

cat /etc/ufw/applications.d/postfix
[Postfix]
title=Mail server (SMTP)
description=Postfix is a high-performance mail transport agent
ports=25/tcp

[Postfix SMTPS]
title=Mail server (SMTPS)
description=Postfix is a high-performance mail transport agent
ports=465/tcp

[Postfix Submission]
title=Mail server (Submission)
description=Postfix is a high-performance mail transport agent
ports=587/tcp

Разрешаем сетевое взаимодействие с Postfix при помощи следующей команды:

sudo ufw allow Postfix

Настройка почтового сервера Dovecot

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

sudo apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql -y
sudo systemctl start dovecot
sudo systemctl enable dovecot

Создадим специализированную учетную запись для работы с Dovecot и добавим права sudo:

sudo adduser vmail
sudo usermod -aG sudo vmail

Далее создадим конфигурационный файл /etc/dovecot/local.conf, в который впишем настройки сервиса. Обратите внимание, что сертификат из переменных ssl_key и ssl_cert будет использоваться тот же самый, который был сгенерирован для Postfix.

sudo nano /etc/dovecot/local.conf
protocols = pop3 imap lmtp
auth_mechanisms = plain login
mail_gid = vmail
mail_uid = vmail
first_valid_uid = 5000
last_valid_uid = 5000

mail_location = maildir:/var/mail/vmail/%d/%n/

mbox_write_locks = fcntl
disable_plaintext_auth = yes

passdb {
  args = scheme=ssha512 username_format=%u /etc/dovecot/users
  driver = passwd-file
}

userdb {
  args = username_format=%u /etc/dovecot/users
  driver = passwd-file
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
  user = vmail
}
protocol lmtp {
  postmaster_address = postmaster@mailtest.fvds.ru
}

ssl = required
ssl_cert = </etc/postfix/certs/cert.pem
ssl_key = </etc/postfix/certs/key.pem
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

ssl_prefer_server_ciphers = yes

Теперь создадим конфигурацию для подключения к базе данных MySQL:

sudo nano /etc/dovecot/dovecot-mysql.conf
driver = mysql
default_pass_scheme = CRYPT
connect = host = localhost
dbname=postfix
user=postfix
password=password
user_query = SELECT '/var/mail/vmail/%d/%u' as home, 'maildir:/var/mail/vmail/%d/%u' as mail, 5000 AS uid, 5000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password, '/var/mail/vmail/%d/%u' as userdb_home, 'maildir:/var/mail/vmail/%d/%u' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid, concat('*:bytes=', quota) AS userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

Настройки выполнены, остается перезапустить сервис:

sudo systemctl restart dovecot

Настройка брандмауэра для Dovecot

Аналогично Postfix, для настроек будем использовать утилиту ufw. Проверим текущее правило для сервисов Dovecot (их два):

sudo cat /etc/ufw/applications.d/dovecot-imapd
[Dovecot IMAP]
title=Secure mail server (IMAP)
description=Dovecot is a mail server whose major goals are security and extreme
 reliability.
ports=143/tcp

[Dovecot Secure IMAP]
title=Secure mail server (IMAPS)
description=Dovecot is a mail server whose major goals are security and extreme
 reliability.
ports=993/tcp

# sudo cat /etc/ufw/applications.d/dovecot-pop3d
[Dovecot POP3]
title=Secure mail server (POP3)
description=Dovecot is a mail server whose major goals are security and extreme
 reliability.
ports=110/tcp

[Dovecot Secure POP3]
title=Secure mail server (POP3S)
description=Dovecot is a mail server whose major goals are security and extreme
 reliability.
ports=995/tcp

Разрешаем сетевое взаимодействие с Dovecot при помощи следующей команды:

sudo ufw allow 'Dovecot IMAP'
sudo ufw allow 'Dovecot POP3'

Установка веб-интерфейса Roundcube

Веб-сервис Roundcube представляет из себя почтовый клиент, который предназначен для получения и отправки электронной почты. Работает на основе сервера приложений Apache и базы данных MySQL, которые мы уже подготовили к работе.

Начнем с создания конфигурации для Apache:

sudo mkdir /var/www/html/sites
sudo mkdir /var/www/html/sites/roundcube
sudo nano /etc/apache2/sites-available/roundcube.conf
<VirtualHost *:80>
ServerName <ваш домен>
ServerPath /roundcube
ServerAdmin admin@<ваш домен>
DocumentRoot /var/www/html/sites/roundcube
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

После этого перезагрузим Apache:

sudo systemctl restart apache2

Загрузим пакет Roundcube из репозитория на Github, распакуем его и копируем в созданную папку сервера Apache:

sudo wget https://github.com/roundcube/roundcubemail/releases/download/1.5-beta/roundcubemail-1.5-beta-complete.tar.gz -O roundcube.tar.gz
sudo tar xvzf roundcube.tar.gz
cd roundcubemail-1.5-beta
sudo cp -R * /var/www/html/sites/roundcube

Теперь нужно дать веб-серверу права на доступ к директории с файлами Roundcube:

sudo chown -R www-data:www-data /var/www/html/sites/roundcube/
sudo chmod -R 775 /var/www/html/sites/roundcube

Теперь откроем интерфейс Roundcube по адресу http://ip_address/installer и убедимся, что отсутствуют критические ошибки.

Если таковые ошибки присутствуют, то их необходимо исправить. К примеру, мы получили следующие ошибки:

Видим для начала, что в PHP-интерпретаторе не хватает расширения php-xml, отвечающий за поддержку формата XML и программного интерфейса DOM. Также у нас отсутствует расширение функций интернационализации php-intl. Устанавливаем оба недостающих пакета:

sudo apt install php-xml php-intl

Перезагружаем веб-сервер для активации расширений:

sudo systemctl restart apache2

Перезагружаем страничку инсталлятора Roundcube и видим, что ошибки ушли, а требуемые расширения работают корректно.

Желательно также установить и опциональные расширения по той же схеме, например:

sudo apt install php-curl php-ldap php-gd php-imagick php-zip

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

Открываем на редактирование конфигурационный файл PHP:

sudo nano /etc/php/7.4/apache2/php.ini

Нажимаем Ctrl + W и вводим слово timezone. Подтверждаем выполнение поиска нажатием Enter. Раскомментируем строку (убрав символ ;) date.timezone и приводим ее к виду:

date.timezone = Europe/Moscow

Выходим из режима редактирования Ctrl + X, подтверждаем сохранение изменений и еще раз перезагружаем веб-сервер:

sudo systemctl restart apache2

Еще раз обновляем страничку инсталлятора и видим, что переменная date.timezone успешно определена:

В нижней части интерфейса нужно нажать Next и перейти к следующему представлению. Здесь мы укажем настройки базы данных. Имя базы данных, равно как и имя пользователя задаем roundcube. При первой проверке соединения Roundcube сообщит о том, что у нас нет схемы данных. Позволяем ее создать, нажав на кнопку Initialize database.

Далее убедимся, что схема данных корректно создана и отсутствуют критические ошибки.

Переходим по URL http://<ваш домен>/roundcube и авторизуемся при помощи логина и пароль от почтового аккаунта.

На этом настройка Roundcube завершена. Для безопасности не забудьте удалить директорию installer из корня сайта по адресу /var/www/html/sites/roundcube или выставьте переменную enable_installer в config.inc.php в disabled.

Настройка DKIM, SPF и DMARC записей

Настройка DKIM

Для чего нужен DKIM? Этот инструментарий добавляет к заголовкам письма цифровую электронную подпись, что по задумке должно гарантировать подлинность того, что письмо отправлено именно от указанного в заголовках домена. Для генерации DKIM-ключа мы будем использовать утилиту opendkim. Установим утилиту, запустим ее и добавим в автозапуск.

sudo apt install opendkim opendkim-tools -y
sudo systemctl start opendkim
sudo systemctl enable opendkim

Теперь создадим специальную директорию с ключами, сгенерируем ключи (закрытый и открытый), внесем изменения в конфигурационные файлы и перезапустим сервис.

sudo mkdir -p /etc/opendkim/keys/<ваш домен>
sudo opendkim-genkey --directory /etc/opendkim/keys/<ваш домен>/ --domain <ваш домен> --selector dkim
sudo chown -R opendkim:opendkim /etc/opendkim/keys/<ваш домен>
sudo nano /etc/opendkim.conf
AutoRestart             Yes
AutoRestartRate         10/1h
Umask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
UserID                  opendkim:opendkim
Socket                  inet:8891@localhost
sudo nano /etc/opendkim/TrustedHosts
*.<ваш домен>
sudo nano /etc/opendkim/KeyTable
dkim._domainkey.<ваш домен> <ваш домен>:dkim:/etc/opendkim/keys/<ваш домен>/dkim.private
sudo nano /etc/opendkim/SigningTable
*@<ваш домен> dkim._domainkey.<ваш домен>
sudo nano /etc/default/opendkim
SOCKET="inet:8891@localhost"
milter_default_action=accept
milter_protocol=2
smtpd_milters=inet:127.0.0.1:8891
non_smtpd_milters=inet:127.0.0.1:8891
sudo systemctl restart opendkim
sudo systemctl restart postfix

Теперь посмотрим содержимое файла /etc/opendkim/keys/<ваш домен>/dkim.txt. В нем содержится публичный ключ, который необходимо указать в настройках домена.

sudo cat /etc/opendkim/keys/<ваш домен>/dkim.txt
dkim._domainkey	IN	TXT	( "v=DKIM1; h=sha256; k=rsa; "
	  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0gYwtTQCLzrWSUtQ7j77194kM4h3J7mOvsZoh50fzyYWItXC2CATVAjUq29Ki2FM/JOUYKBDxZIQltoaCYINNt6oLxbkPKfkwhMntwVzNxHS9jlS1rXjTyPGW04HM751tvUbxQ5Q5/aC6gkIiaHOywEqt1iec1YCAulHIjbG8caUSSYnNKSzZdoBRz6rtLUMkWkZl/aUDCBcR7"
	  "GnKUy9HmsJPHfKv4MQtjUSQo+5XrQeFIwqBT8e+bDMuo2pOSUT5FgbJBdQOTvSqqk8wpPIqxfKX3e42oFAsLUihL1v2aX1w+kb6vt+bGDBPKkGK4HaNoXhHKQuueQXiVbiERqUGwIDAQAB" )  ; ----- DKIM key dkim for <ваш домен>

Копируем значение без кавычек, которое указано в круглых скобках и вставляем в значение новой TXT-записи в настройках DNS. Для этого в панели управления Selectel перейдем в представление DNS-хостинг, откроем настройки домена и нажмём кнопку Добавить запись. В выпадающем меню нужно выбрать тип записи TXT.

Настройка SPF

Этот инструмент помогает внешним интернет-сервисам (а особенно сервисам электронной почты) однозначно определять серверы, с которых может отправляться почта от домена. Для этого, аналогично примеру выше, нужно создать новую TXT-запись в настройках домена.

v=spf1 ip4:<ip-адрес почтового сервера> a mx ~all

Настройка DMARC

DMARC позволяет настроить указание для других сервисов что делать с теми письмами, которые не были одобрены по итогу проверок DKIM и SPF. Самый оптимальный способ — это ничего не делать и отправить уведомление администратору домена. Именно такую настройку мы и произведем в консоли управления доменом. Для этого также создаем новую TXT-запись.

v=DMARC1; p=none; rua=mailto:dmarc-test@<ваш домен>

Заключение

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

Еще одна важная задача при эксплуатации этих инструментов — следить за выходом обновлений для каждого из них и своевременно их применять.