Установка и настройка Postfix и Dovecot на Ubuntu 20.04
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@<ваш домен>
Заключение
В статье мы рассмотрели целую группу инструментов для создания полноценного сервиса электронной почты. Самое сложное при реализации подобной задачи — это настройка корректного взаимодействия всех компонентов друг с другом.
Еще одна важная задача при эксплуатации этих инструментов — следить за выходом обновлений для каждого из них и своевременно их применять.