Установка веб-сервера и сервера БД
Устанавливаем и настраиваем postfixadmin
Устанавливаем и настраиваем postfix
Устанавливаем и настраиваем dovecot
Мы уже рассказывали о том, как провести подготовительные работы и настроить почтовый сервер с хранением данных пользователей в файле. Теперь рассмотрим второй вариант и разберёмся, как настраивать почтовый сервер с виртуальными пользователями и хранением информации в базе данных.
Установка веб-сервера и сервера БД
Если на сервере уже установлен веб-сервер и БД mysql/mariadb, то установку пакетов нужно пропустить и перейти к пункту «Устанавливаем и настраиваем postfixadmin».
Для Centos:
yum install epel-release -y yum install mariadb mariadb-server php php-imap php-mysqli php-mbstring httpd -y
Устанавливаем пароль root, на все вопросы жмём enter, при запросе нового пароля (шаг 2) придумываем и вводим новый пароль для пользователя root:
/usr/bin/mysql_secure_installation
Запускаем веб-сервер и включаем автозагрузку:
systemctl start httpd systemctl enable httpd
Запускаем сервер БД и включаем автозагрузку:
systemctl start mariadb systemctl enable mariadb
Для Debian/Ubuntu:
apt install mysql-server mysql-client apache2 libapache2-mod-php php php-imap php-mysqli php-mbstring
Для Debian 8:
apt install mysql-server mysql-client apache2 libapache2-mod-php5 php5 php5-imap php5-mysql -y
При установке в Debian 8 и Ubuntu 16.04 нужно будет также придумать и указать, какой пароль root будет у БД:
В Ubuntu 18.04 и Debian 9 пароль пользователя root указывается пустой при установке.
Запускаем веб-сервер и включаем автозагрузку:
systemctl start apache2 systemctl enable apache2
Запускаем сервер БД и включаем автозагрузку:
systemctl start mysql systemctl enable mysql
Устанавливаем и настраиваем postfixadmin
Postfixadmin — это веб-интерфейс управления почтовым сервером. В нём можно создать почтовые домены и почтовые ящики.
Создаём БД:
Подключаемся к консоли mysql, используя пароль пользователя root в mysql:
mysql -uroot -p
В консоли mysql вводим следующие команды:
create database postfix; create user postfix@localhost identified by 'ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ'; grant all privileges on *.* to postfix@localhost; flush privileges; exit;
Устанавливаем postfixadmin:
wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz tar -zxf postfixadmin.tar.gz mv postfixadmin-* /usr/share/postfixadmin mkdir /usr/share/postfixadmin/templates_c
Centos:
chown -R apache:apache /usr/share/postfixadmin/
Debian/Ubuntu:
chown -R www-data:www-data /usr/share/postfixadmin/
Символическая ссылка должна вести в директорию сайта (укажите путь до своего сайта), если на сервере нет сайтов, то нужно оставить текущую команду:
ln -s /usr/share/postfixadmin/public/ /var/www/html/postfixadmin
Создаем локальный файл конфигурации:
touch /usr/share/postfixadmin/config.local.php
И вставляем в него следующий код, предварительно заменив пароль от БД и почтовый домен на свои:
<?php $CONF['configured'] = true; $CONF['setup_password'] = 'changeme'; $CONF['default_language'] = 'ru'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД'; $CONF['database_name'] = 'postfix'; $CONF['admin_email'] = 'root@ВАШ_ПОЧТОВЫЙ_ДОМЕН'; $CONF['encrypt'] = 'md5crypt'; $CONF['default_aliases'] = array ( 'abuse' => 'root', 'hostmaster' => 'root', 'postmaster' => 'root', 'webmaster' => 'root' ); $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'YES'; ?>
Далее переходим по адресу: http://ВАШ_ПОЧТОВЫЙ_ДОМЕН/postfixadmin/setup.php
После чего откроется страница с проверкой настроек — все параметры должны быть OK.
Если по итогам проверки есть замечания, их нужно устранить. Если замечаний нет, придумайте и введите пароль установки в форме внизу страницы (пароль должен содержать обязательно 2 цифры и быть длиннее 5 символов), нажмите кнопку — «Generate password hash». Страница обновится и появится хеш, который выделен красным:
Полученный хеш указываем в локальном файле настроек — /usr/share/postfixadmin/config.local.php
. Нужно заменить значение строки (3 строка):
$CONF['setup_password'] = 'changeme'
на
$CONF['setup_password'] = 'ВАШ_ХЕШ'
Перезагружаем страницу и теперь можем создать учётную запись администратора:
Пишем в первой строке пароль от установки, который вводили ранее, и указываем почтовый ящик root@ВАШ_ПОЧТОВЫЙ_ДОМЕН
и пароль к нему, если все сделано правильно, то пользователь будет добавлен:
Создаём почтовый домен, в интерфейсе postfixadmin — http://ВАШ_ПОЧТОВЫЙ_ДОМЕН/postfixadmin/login.php
. Переходим в меню: Список доменов
— Новый домен
— и создаём почтовый домен.
Создаём почтовый ящик: Обзор
— Создать ящик
:
Устанавливаем и настраиваем postfix
Устанавливаем postfix на сервер:
Для Centos (обычно в Centos 7 он уже установлен):
yum install postfix -y
Для Debian/Ubuntu:
apt install postfix postfix-mysql -y
Далее отобразится окно, где нужно выбрать Internet Site:
И в следующем окне указать ваш домен, с которого будет отправляться почта:
Запускаем и добавляем в автозагрузку службу postfix:
systemctl start postfix systemctl enable postfix
Вносим изменения в настройку postfix, в консоли вводим следующие команды:
postconf -e 'inet_interfaces=all' postconf -e 'mydestination=' postconf -e 'myhostname=mailtest.fvds.ru' postconf -e 'virtual_transport=lmtp:unix:private/dovecot-lmtp' postconf -e 'relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf' postconf -e 'virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf' postconf -e 'virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf' postconf -e 'virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf' postconf -e 'virtual_mailbox_base=/var/mail/vmail/' postconf -e 'local_recipient_maps=$virtual_mailbox_maps' postconf -e 'smtpd_sasl_auth_enable=yes' postconf -e 'smtpd_sasl_type=dovecot' postconf -e 'smtpd_sasl_path=private/auth' postconf -e 'broken_sasl_auth_clients=yes' postconf -e 'smtpd_sasl_security_options=noanonymous' postconf -e 'smtpd_use_tls=yes' postconf -e 'smtpd_tls_cert_file=/etc/postfix/certs/cert.pem' postconf -e 'smtpd_tls_key_file=/etc/postfix/certs/key.pem' postconf -e 'smtpd_sasl_tls_security_options=noanonymous' postconf -e 'smtpd_tls_auth_only=yes' postconf -e 'smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination' postconf -e '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' postconf -e 'smtpd_banner=$myhostname ESMTP' postconf -e 'biff=no' postconf -e 'strict_rfc821_envelopes=yes' postconf -e 'disable_vrfy_command=yes' postconf -e 'smtpd_helo_required=yes'
Конфигурация будет добавлена в файл /etc/postfix/main.cf
.
В конец файла /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
Для Centos в конец этого же файла нужно добавить:
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
Для Debian/Ubuntu в конец этого же файла нужно добавить:
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
Создадим директорию для хранения файлов подключения к mysql:
mkdir /etc/postfix/mysql
Создадим файлы конфигурации mysql:
Создаём файл:
touch /etc/postfix/mysql/relay_domains.cf
В созданный файл добавляем:
hosts = 127.0.0.1 user = postfix password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'
Создаём файл:
touch /etc/postfix/mysql/virtual_alias_domain_maps.cf
В созданный файл добавляем:
hosts = 127.0.0.1 user = postfix 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
Создаём файл:
touch /etc/postfix/mysql/virtual_alias_maps.cf
В созданный файл добавляем:
hosts = 127.0.0.1 user = postfix password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Создаём файл:
touch /etc/postfix/mysql/virtual_mailbox_domains.cf
В созданный файл добавляем:
hosts = 127.0.0.1 user = postfix password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
Создаём файл:
touch /etc/postfix/mysql/virtual_mailbox_maps.cf
В созданный файл добавляем:
hosts = 127.0.0.1 user = postfix password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
Теперь сгенерируем самоподписанный сертификат, чтобы данные не передавались в открытом виде. При генерации сертификата будут заданы несколько вопросов, на них можно ответить все что угодно, особой роли это не играет.
mkdir /etc/postfix/certs openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem
Вот пример выполнения команды:
Если у вас есть платный сертификат на домен с не истекшим сроком
действия, используйте его. Файлы сертификата нужно разместить в
директории /etc/postfix/certs/
и заменить имена файлов на свои в конфигурационном файле postfix /etc/postfix/main.cf
в следующих строках:
smtpd_tls_cert_file smtpd_tls_key_file
Проверить корректность настроек postfix можно через команду:
postfix check
Перезапустим службу, чтобы применились настройки:
systemctl restart postfix
Устанавливаем и настраиваем dovecot
Centos:
yum install dovecot dovecot-mysql -y
Debian/Ubuntu:
apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql -y
Активируем службу и добавляем в автозапуск:
systemctl start dovecot systemctl enable dovecot
Создаём локальный файл настроек:
touch /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 userdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } 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 = [email protected] } 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_dh_parameters_length = 2048 ssl_prefer_server_ciphers = yes
Создадим файл:
touch /etc/dovecot/dovecot-mysql.conf
И внесём в него следующие настройки:
driver = mysql default_pass_scheme = CRYPT connect = host=127.0.0.1 dbname=postfix user=postfix 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'
Сертификат используется тот, что генерировали при настройке postfix, если используете свой сертификат, то нужно указать путь до него в следующих строках конфигурационного файла dovecot /etc/dovecot/local.conf:
ssl_cert ssl_key
Перезапускаем службу, чтобы применились настройки:
systemctl restart dovecot
На этом настройку почтового сервера можно было бы и завершить — получение и отправка писем работают, можно пользоваться. Если бы не одно «но». Почтовые сервисы, вроде gmail.com или yandex.ru, будут отправлять не прошедшие проверку письма в спам, если не выполнить ещё пару настроек, о которых мы расскажем в следующей статье.