SCROLL
Среднее время на прочтение: 13 мин.

Установка почтового сервера Postfix и Dovecot на Debian 10 Buster

Недавно разбирался как поднять почтовый сервер на Postfix в связке с Dovecot, для памяти опишу как поднять такой сервер на Debian 10. Все действия ниже будут выполняться от root.

 

Настройка DNS записей

# Добавляем DNS-записи для вашего почтового сервера:

@           MX  10  mail.example.com.
mail        A   192.168.1.10

 

Настройка системы

# Задаем имя системы (mail) в файле (/etc/hostname):

echo mail > /etc/hostname

# Указываем в файле (/etc/hosts) строку содержащую IP-адрес с полным доменным именем (FQDN).

127.0.0.1       localhost
192.168.1.10    mail.example.com mail

[stextbox id=’info’]ИНФОРМАЦИЯ: В приведенном выше примере 192.168.1.10 — это IP-адрес машины, mail — это имя локального хоста, а mail.example.com это полное доменное имя.[/stextbox]

 

Настройка MySQL

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

 

# Устанавливаем MySQL сервер.

apt-get install mariadb-server -y

# Выполняем базовую настройку безопасности MySQL сервера и входим на сервер.

mysql_secure_installation

mariadb

 

# Создаем базу данных для работы почтового сервера, пользователя для работы с базой данных и делегируем права на созданную базу данных.

CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfix';
GRANT SELECT ON postfix.* TO 'postfix'@'localhost';
FLUSH PRIVILEGES;

 

# Переключаемся на созданную базу данных, для создания необходимых таблиц.

use postfix;

 

# Создаем таблицу для доменов, которые будут получать почту:

CREATE TABLE `virtual_domains` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
);

# Создаем таблицу для всех адресов электронной почты и паролей:

CREATE TABLE `virtual_users` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `password` varchar(106) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);

# Создаем таблицу для псевдонимов электронной почты:

CREATE TABLE `virtual_aliases` (
`id` int(11) NOT NULL auto_increment,
`domain_id` int(11) NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);

# Создаем таблицу для запрет на подключение к ehlo для внешних хостов:

CREATE TABLE IF NOT EXISTS `helo_access` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `domain` varchar(50) NOT NULL,
  `response` varchar(10) NOT NULL,
  `message`  varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
);

# Создаем таблицу для блокировки внешних отправителей:

CREATE TABLE IF NOT EXISTS `sender_access` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(50) NOT NULL,
  `response` varchar(10) NOT NULL,
  `message`  varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
);

# Создаем таблицу для блокировки внутренних отправителей:

CREATE TABLE IF NOT EXISTS `client_access` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip_address` varchar(50) NOT NULL,
  `response` varchar(10) NOT NULL,
  `message` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
);

 

Добавление домена

INSERT INTO virtual_domains(name) VALUES ('example.com');

 

Добавление адреса электронной почты

INSERT INTO virtual_users (domain_id, password , email)  VALUES  ('1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user@example.com');

[stextbox id=’info’]ИНФОРМАЦИЯ: Значение domain_id (в настоящее время установлено равным ‘1’) ссылается на значение идентификатора таблицы virtual_domain. Если вы добавили более одного домена, замените это значение, чтобы оно соответствовало желаемому домену. Заменить user@example.com с адресом электронной почты, который вы хотите настроить на почтовом сервере. Замените password на безопасный пароль для пользователя почты.[/stextbox]

 

Так же можно альтернативным способом сгенерировать хэш пароля с использованием схемы шифрования SHA512-CRYPT при помощи doveadm (в случае если пакет dovecot-core был ранее уставлен).

# Сгенерируем хэш, используя схему шифрования SHA512-CRYPT, командой:

doveadm pw -s SHA512-CRYPT -p "password" -r 5000

Результат:

{SHA512-CRYPT}$6$Np738E66vzahbman$f8dS11Mx3rIhS2/VhhsPybSjwf9Exo74ebTDJ5csRXFpnYXF6.l4POdBleftqiw4mK6QvD0JWbZjltbPTpJZ/.

 

Скопируем вывод начиная с $6$, игнорируя первые 14 символов {SHA512-CRYPT} и добавляем адрес электронной почты и скопированный хэш пароля в таблицу virtual_users базы данных postfix:

INSERT INTO postfix.virtual_users (domain_id, password , email) VALUES ('1', '$6$Np738E66vzahbman$f8dS11Mx3rIhS2/VhhsPybSjwf9Exo74ebTDJ5csRXFpnYXF6.l4POdBleftqiw4mK6QvD0JWbZjltbPTpJZ/.', 'user@example.com');

 

Изменение пароля адреса электронной почты

update virtual_users set password = '$6$csAuE9s5s14sha6f$ZJEC0JO6/Hqjipxdajups5OcZ0WJcGmLuvPal0gsehakQPei5lVCQoLdawM/g6EgUeWT91g9HShwAppVWXJK.1' where email = 'user@example.com';

 

Удаление адреса электронной почты

delete from virtual_users where email = 'user@example.com';

 

Добавление псевдонима (Alias)

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

# Добавление псевдонима электронной почты:

INSERT INTO virtual_aliases (domain_id, source, destination) VALUES ('1', 'alias@example.com', 'user@example.com');

[stextbox id=’info’]ИНФОРМАЦИЯ: Значение domain_id (в настоящее время установлено равным ‘1’) ссылается на значение идентификатора таблицы virtual_domain. Если вы добавили более одного домена, замените это значение, чтобы оно соответствовало желаемому домену. Заменить alias@example.com с желаемым псевдонимом. Заменить user@example.com с адресом электронной почты, на который вы хотите переслать электронное письмо.[/stextbox]

 

Добавление ограничений (по необходимости)

# Блокировка внешних отправителей (таблица sender_access)

INSERT INTO sender_access (email, response, message) VALUES ('spammer@spam.bad', 'REJECT', 'You are banned');

[stextbox id=’info’]ИНФОРМАЦИЯ: Любой адрес электронной почты, который вы введете в эту таблицу, будет отклонен и отправитель получит ответное электронное письмо c заданным сообщением.[/stextbox]

# Блокировка внутренних отправителей (таблица client_access)

INSERT INTO client_access (ip_address, response, message) VALUES ('192.168.1.1', 'REJECT', 'Your IP is banned. Please contact with system administrator.');

# Запрет на подключение к ehlo для внешних хостов (таблица helo_access)

INSERT INTO helo_access (domain, response, message) VALUES ('xxx.xxx.xxx.xxx', 'REJECT', 'You are not allowed to connect to the mail server'), ('example.1.com', 'REJECT', 'You are not allowed to connect to the mail server'), ('mail.example1.com', 'REJECT', 'You are not allowed to connect to the mail server');

[stextbox id=’info’]ИНФОРМАЦИЯ: Любой, кто попытается подключиться к ehlo с одним из имен хостов, которые указаны в таблице, получят отказ и увидят заданное сообщение.[/stextbox]

 

 

Postfix

# Устанавливаем все необходимые пакеты (включая Dovecot):

apt-get install postfix postfix-mysql postfix-pcre postfix-ldap dovecot-core dovecot-mysql dovecot-gssapi dovecot-imapd dovecot-lmtpd dovecot-ldap dovecot-sieve dovecot-managesieved dovecot-pop3d opendkim opendkim-tools mailutils -y

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

 

Настройка main.cf

# Создаем копию файла конфигурации (main.cf) на всякий случай:

cp /etc/postfix/main.cf /etc/postfix/main.cf.orig

Приводим файл конфигурации (/etc/postfix/main.cf) к виду:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


# SMTP-Auth settings
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# Restrictions
smtpd_helo_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_invalid_helo_hostname,
        reject_unknown_helo_hostname,
        reject_non_fqdn_helo_hostname,
        check_helo_access mysql:/etc/postfix/mysql_helo_access.cf
smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unlisted_recipient,
        reject_unauth_destination,
        check_client_access mysql:/etc/postfix/mysql_client_access.cf
smtpd_sender_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unknown_reverse_client_hostname,
        reject_non_fqdn_sender,
        reject_unknown_sender_domain,
        reject_rhsbl_helo dbl.spamhaus.org,
        reject_rhsbl_reverse_client dbl.spamhaus.org,
        reject_rhsbl_sender dbl.spamhaus.org,
        reject_rbl_client zen.spamhaus.org,
        check_sender_access mysql:/etc/postfix/mysql_sender_access.cf
smtpd_relay_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        defer_unauth_destination

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = mail.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydomain = example.com
myorigin = $mydomain
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
queue_run_delay=5m

# Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp

# Virtual domains, users, and aliases
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf, mysql:/etc/postfix/mysql-virtual-email2email.cf

# Even more Restrictions and MTA params
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
smtpd_etrn_restrictions = reject
smtpd_reject_unlisted_sender = yes
smtpd_reject_unlisted_recipient = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtp_always_send_ehlo = yes
#smtpd_hard_error_limit = 1
smtpd_timeout = 30s
smtp_helo_timeout = 15s
smtp_rcpt_timeout = 15s
smtpd_recipient_limit = 40
minimal_backoff_time = 180s
maximal_backoff_time = 3h

# Reply Rejection Codes
invalid_hostname_reject_code = 550
non_fqdn_reject_code = 550
unknown_address_reject_code = 550
unknown_client_reject_code = 550
unknown_hostname_reject_code = 550
unverified_recipient_reject_code = 550
unverified_sender_reject_code = 550

[stextbox id=’info’]ИНФОРМАЦИЯ: в конфигурационном файле указано использование Let’s Encrypt SSL-сертификата, как его выпустить можно почитать в этой статье — https://sysos.ru/?p=586[/stextbox]

[stextbox id=’warning’]ВНИМАНИЕ: обращаю внимание что вместо example.com (строки помечены), указываем свой домен.[/stextbox]

 

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

cat << EOF > /etc/postfix/mysql-virtual-mailbox-domains.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM virtual_domains WHERE name='%s'
EOF
cat << EOF > /etc/postfix/mysql-virtual-mailbox-maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM virtual_users WHERE email='%s'
EOF
cat << EOF > /etc/postfix/mysql-virtual-alias-maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
query = SELECT destination FROM virtual_aliases WHERE source='%s'
EOF
cat << EOF > /etc/postfix/mysql-virtual-email2email.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
query = SELECT email FROM virtual_users WHERE email='%s'
EOF
cat << EOF > /etc/postfix/mysql_helo_access.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
query = SELECT CONCAT(response, ' ', message) AS 'Postfix Response' FROM helo_access WHERE domain='%s'
EOF
cat << EOF > /etc/postfix/mysql_client_access.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
query = SELECT CONCAT(response, ' ', message) AS 'Postfix Response' FROM client_access WHERE ip_address='%s'
EOF
cat << EOF > /etc/postfix/mysql_sender_access.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
query = SELECT CONCAT(response, ' ', message) AS 'Postfix Response' FROM sender_access WHERE email='%s'
EOF

 

Можно протестировать конфигурацию Postfix с помощью команды postmap, которая может запрашивать таблицы поиска Postfix.

# Для проверки существования домена example.com в таблице virtual_domains (команда должна вернуть 1, если она выполнена успешно):

postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

 

Настройка master.cf

В конфигурационном файле master.cf перечислены все программы и информация о том, как их следует запускать.

# Создаем копию файла конфигурации (master.cf) на всякий случай:

cp /etc/postfix/master.cf /etc/postfix/master.cf.orig

Приводим файл конфигурации (/etc/postfix/master.cf), чтобы он содержал значения в приведенном ниже отрывке. Остальную часть файла оставляем без изменений:

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)    (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd -v
#smtp      inet  n       -       -       -       1       postscreen
#smtpd     pass  -       -       -       -       -       smtpd
#dnsblog   unix  -       -       -       -       0       dnsblog
#tlsproxy  unix  -       -       -       -       0       tlsproxy
submission inet n       -       y      -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  ...

 

Dovecot

Dovecot — это сервер POP3 и IMAP, который предоставляет почтовым клиентам доступ к электронной почте на сервере. Он также действует как локальный агент доставки (LDA), который принимает электронные письма из Postfix (или другого программного обеспечения MTA / почтового сервера) и сохраняет их.

# Создаем копии всех файлов конфигурации с которыми будем работать ниже:

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/auth-sql.conf.ext.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
cp /etc/dovecot/conf.d/15-mailboxes.conf /etc/dovecot/conf.d/15-mailboxes.conf.orig
cp /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.orig
cp /etc/dovecot/conf.d/10-logging.conf /etc/dovecot/conf.d/10-logging.conf.orig

 

Настройка dovecot.conf

В файле (/etc/dovecot/dovecot.conf) указываем какие протоколы будут использоваться (в моем случае я использую только imap, lmtp), указываем электронный адрес postmaster и указываем что слушать будем только IPv4. Остальные параметры оставляем без изменений.

## Dovecot configuration file
...
# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol

protocols = imap lmtp
postmaster_address = postmaster@example.com

# A comma separated list of IPs or hosts where to listen in for connections.
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
listen = *

...

Настройка 10-mail.conf

В файле (/etc/dovecot/conf.d/10-mail.conf) указываем как и в каком формате хранить сообщения. Остальные параметры оставляем без изменений.

...
mail_location = maildir:/var/mail/vhosts/%d/%n/
...
mail_privileged_group = mail
...

# Создайте каталог для домена, заменив example.com с вашим доменным именем. Этот каталог будет служить хранилищем для почты, отправляемой на ваш домен.

mkdir -p /var/mail/vhosts/example.com

# Создаем системного пользователя и группу который будет читать почту с сервера и применяем необходимые права доступа на каталог хранения почты (/var/mail).

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail
chown -R vmail:vmail /var/mail

Настройка 10-auth.conf

В файле (/etc/dovecot/conf.d/10-auth.conf) указываем тип аутентификации пользователя и раскомментируем две переменные. Остальные параметры оставляем без изменений.

...
disable_plaintext_auth = yes
...
auth_mechanisms = plain login
...
!include auth-system.conf.ext
...
!include auth-sql.conf.ext
...

Настройка auth-sql.conf.ext

В файле (/etc/dovecot/conf.d/auth-sql.conf.ext) раскомментируем раздел passdb, раздел userdb, который использует статический (static) драйвер, раскомментирован и обновлен с правильным аргументом. Затем закомментируйте раздел userdb, в котором используется драйвер sql:

...
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
...
#userdb {
#  driver = sql
#  args = /etc/dovecot/dovecot-sql.conf.ext
#}
...
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
...

Настройка dovecot-sql.conf.ext

В файле (/etc/dovecot/dovecot-sql.conf.ext) указываем данные для подключения к MySQL.

...
driver = mysql
...
connect = host=127.0.0.1 dbname=postfix user=postfix password=postfix
...
default_pass_scheme = SHA512-CRYPT
...
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
...

[stextbox id=’warning’]ИНФОРМАЦИЯ. В случае если имя базы данных, пользователь и пароль задавался отличный от тех что описан выше, то замените dbname, user и password вашими значениями базы данных MySQL.[/stextbox]

Настройка 10-master.conf

В файле (/etc/dovecot/conf.d/10-master.conf) находим секцию service imap-login иservice pop3-login, отключаем незашифрованный IMAP и отключаем полностью POP3:

...
service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
  ...
}
...
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    port = 0
    ssl = yes
  }
}
...

Находим секцию service lmtp и приводим к виду:

...
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    # mode = 0666i
    mode = 0600
    user = postfix
    group = postfix
  }
...
}

Находим секцию service auth и приводим к виду:

...
service auth {
  ...
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }

  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
...
  user = dovecot
}
...

В секции service auth-worker, раскомментируем параметр user и укажем в нем — vmail:

...
service auth-worker {
  ...
  user = vmail
}

Настройка 10-ssl.conf

В файле (/etc/dovecot/conf.d/10-ssl.conf) указываем расположение SSL сертификатов (в моем случае указан Let’s Encrypt SSL-сертификат). Остальные параметры оставляем без изменений.

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
ssl_cert = </etc/letsencrypt/live/mail.example.com/cert.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_client_ca_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
...

Настройка 15-mailboxes.conf

В файле (/etc/dovecot/conf.d/15-mailboxes.conf) укажем какие папки почтового языка добавлять автоматически в учетные записи пользователей.

...

# NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf.
namespace inbox {
  # These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  mailbox Archive {
    special_use = \Archive
    auto = subscribe
  }
  # For \Sent mailboxes there are two widely used names. We'll mark both of
  # them as \Sent. User typically deletes one of them if duplicates are created.
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  # If you have a virtual "All messages" mailbox:
  #mailbox virtual/All {
  #  special_use = \All
  #  comment = All my messages
  #}
  # If you have a virtual "Flagged" mailbox:
  #mailbox virtual/Flagged {
  #  special_use = \Flagged
  #  comment = All my flagged messages
  #}
}

Настройка 10-logging.conf

В файле (/etc/dovecot/conf.d/10-logging.conf) укажем параметры логирования.

...
log_path = /var/log/dovecot.log
...
auth_verbose = yes
...
mail_debug = yes
...
# mail_log plugin provides more event logging for mail processes.
plugin {
  # Events to log. Also available: flag_change append
  #mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
  # Available fields: uid, box, msgid, from, subject, size, vsize, flags
  # size and vsize are available only for expunge and copy events.
  #mail_log_fields = uid box msgid size
  mail_log_events = delete undelete expunge
}
...
mail_log_prefix = "%s(%u):(%r): "

# Создаем правило ротации логов (/etc/logrotate.d/dovecot).

cat << EOF > /etc/logrotate.d/dovecot
/var/log/dovecot.log {
        weekly
        rotate 4
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
        doveadm log reopen
        endscript
}
EOF

# Запускаем утилиту logrotate, чтобы обработался текущий файл и убедится что все в порядке.

logrotate -f -v /etc/logrotate.d/dovecot

 

# Добавляем в автозапуск Postfix & Dovecot, перезапускаем службы для применения всех внесенных изменений и проверяем их статус после запуска.

systemctl enable postfix
systemctl enable dovecot

systemctl restart postfix
systemctl restart dovecot

systemctl status postfix
systemctl status dovecot

 

Проверка работоспособности

Отправим тестовое электронное письмо на адрес электронной почты за пределами вашего почтового сервера:

echo "Email body text" | sudo mail -s "Email subject line" recipient@gmail.com -aFrom:user@example.com

Отправим тестовое электронное письмо на свой почтовый сервер с внешнего адреса электронной почты:

mail -f /var/mail/vhosts/example.com/user

"/var/mail/vhosts/example.com/": 2 messages 2 new 2 unread
U   1 John Doe     Wed Jun 27 16:00  57/2788  Test email 1
U   2 John Doe     Wed Jun 27 16:02  56/2761  Test email 2
?

Обсуждение

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

Нет комментариев.