В этой статье мы подробно рассмотрим процесс установки почтового сервера в связке postfix + postfixadmin+ dovecot на операционной системе РЕД ОС сервер.


Настройка почтового сервера на RED OS

Будет несколько статей по настройке почтового сервера, т.к если описывать всё в рамках одной статьи, она будет слишком большая.
Статья частично основана на статье serveradmin.ru
Статья переработана под операционную систему РЕД.ОС Сервер

Почтовый сервер у нас будет размещен в нашей локальной сети.

Вводная информация:

Для начала, необходимо подготовить наш сервер по данной инструкции. В результате у нас должно быть 3 сайта

Адрес почтового сервера и web-интерфейс у нас будет по адресу: email.srv-adm.ru
Адрес phpMyAdmin – pma.srv-adm.ru
Адрес: PostFixAdmin – pfa.srv-adm.ru
IP адрес сервера: 62.113.119.41

Расположение каталогов:
/web/sites/email.srv-adm.ru
/web/sites/pma.srv-adm.ru
/web/sites/pfa.srv-adm.ru

Все почтовые ящики с письмами будем хранить в папке mail – которую создадим в корне. Если вы будете создавать папку в другом месте, в конфигах не забудьте изменить путь на свой

Важно: для корректной работы почты, необходимо переименовать наш RED-OS сервер, в соответствии с наименованием почтового сервера. В нашем случае это email.srv-adm.ru
Для этого выполняем команду

mcedit /etc/hostname

И файле пишем email.srv-adm.ru

Сохраняем

Содержание статьи:

  1.  Установка и настройка PostFixAdmin
  2. Установка и настройка dovecot.
  3. Проверка работы почтового сервера
  4. Настройка DKIM
  5. Настройка SFP-Записи
  6. Настройка DMARC
  7. Финальная проверка работоспособности почтового сервера

1. Установка и настройка PostFixAdmin

Далее сначала нам нужно установить postfixadmin, в репозиториях РЕД.ОС я его не нашел, поэтому будем скачивать его напрямую с Githab

wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.13.tar.gz

Распаковываем

tar xzvf postfixadmin-3.3.13.tar.gz

Далее копируем содержимое в нашу папку pfa

cp -RT postfixadmin-postfixadmin-3.3.13 /web/sites/pfa.srv-adm.ru/www

Далее даем права nginx на каталог

chown -R nginx:nginx /web/sites/pfa.srv-adm.ru

Копируем конфиг для внесения изменений

cp /web/sites/pfa.srv-adm.ru/www/config.inc.php /web/sites/pfa.srv-adm.ru/www/config.local.php

Далее редактируем файл config.local.php и значения параметров приводим к тем, что указаны ниже. Для подключения я использовал root запись mysql и пароль. Вы можете создать отдельного пользователя. Так же необходимо в pma.srv-adm.ru создать базу данных postfix в кодировке utf8mb4_bin

$CONF['configured'] = true; 
$CONF['default_language'] = 'ru'; 
$CONF['database_type'] = 'mysqli'; 
$CONF['database_host'] = 'localhost'; 
$CONF['database_user'] = 'root'; 
$CONF['database_password'] = 'ПАРОЛЬ ОТ ROOT mssql'; 
$CONF['database_name'] = 'postfix'; 
$CONF['admin_email'] = 'root@srv-adm.ru'; 
$CONF['encrypt'] = 'md5crypt'; 
$CONF['domain_path'] = 'YES'; 
$CONF['domain_in_mailbox'] = 'YES'; 
$CONF['transport_default'] = 'virtual'; 
$CONF['show_footer_text'] = 'YES'; 
$CONF['footer_text'] = 'Return to https://pfa.srv-adm.ru/public/'; 
$CONF['footer_link'] = 'https://pfa.srv-adm.ru/public/'; 
$CONF['default_aliases'] = array ( 'abuse' => 'root',
 'hostmaster' => 'root',
 'postmaster' => 'root',
 'webmaster' => 'root'
);

Для работы панели управления нужна директория templates_c с правами на запись для web сервера nginx.

 mkdir /web/sites/pfa.srv-adm.ru/www/templates_c 
 chown -R nginx:nginx /web/sites/pfa.srv-adm.ru/www/templates_c 

Далее, переходим по адресу: https://pfa.srv-adm.ru/public/setup.php

Если всё сделано правильно, мы увидим вот такую картину

Кроме того, можно посмотреть в phpMyAdmin в базе данных postfix – появились таблицы.

Нам необходимо указать пароль установки, на основе которого будет сгенерирован hash, который нужно будет добавить в config.local.php. Для этого в форму Generate setup_password введите два раза пароль.

После генерации пароля, под формой появится строка конфига:

$CONF['setup_password'] = '$2y$10$44XGC0NF3i5jjFwT1rv7Re.qRf21UVN3RCxUVD2sgIYWROh5GaIOQby';

Значение этой строки нужно вписать в соответствующий пункт $CONF[‘setup_password’] = в файле config.local.php
Далее обновляем страницу в браузере.

Если всё было сделано верно, то отобразится страница

У вас не должно быть замечаний к конфигурации, кроме предупреждений по поводу PostgreSQL, так как мы её не настраивали. А все остальные проверки должны быть пройдены. Если есть какие-то ошибки, то необходимо их исправить. Обычно забывают или неправильно указывают параметры доступа к MySQL и прочее.

Далее в открывшейся форме, в поле Setup password вводим пароль, который мы указывали на предыдущем шаге, когда получали hash
В поле Админ – вводим адрес администратора, у меня он root@srv-adm.ru
В поле пароль, придумываем ваш пароль

В конце, нажимаем “Добавить администратора”. Внизу страницы будет сообщение “Администратор root@srv-adm.ru успешно добавлен!”

После этого открываем в браузере: https://pfa.srv-adm.ru/public/login.php должна открыться форма ввода.
Вводим свои данные и попадаем в панель управления.

Если вы попали в панель управления, то файл /web/sites/pfa.srv-adm.ru/www/public/setup.php – можно переместить или удалить.

Теперь нам необходимо добавить наш домен srv-adm.ru в список почтовых доменов. Идем в раздел Список доменов -> Новый домен и добавляем свой домен.

Далее создадим почтовый ящик администратора — root@srv-adm.ru . Для этого идем в раздел Обзор -> Создать ящик.

Переходим к настройке PostFix

dnf install postfix postfix-mysql ca-certificates

Далее редактируем конфиг postfix /etc/postfix/main.cf При желании, можно сделать резервную копию.

soft_bounce = no
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix

myhostname = email.srv-adm.ru
mydomain = srv-adm.ru
myorigin = $myhostname

inet_interfaces = all
inet_protocols = ipv4

mydestination = localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

smtpd_banner = $myhostname ESMTP $mail_name

debug_peer_level = 2

debugger_command =
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    ddd $daemon_directory/$process_name $process_id & sleep 5

setgid_group = postdrop
html_directory = no

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

smtpd_discard_ehlo_keywords = etrn, silent-discard
smtpd_forbidden_commands = CONNECT GET POST
broken_sasl_auth_clients = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtp_always_send_ehlo = yes
disable_vrfy_command = yes

smtpd_helo_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_helo_hostname,
 reject_invalid_helo_hostname

smtpd_data_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_pipelining,
 reject_multi_recipient_bounce,

smtpd_sender_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_sender,
 reject_unknown_sender_domain

smtpd_recipient_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_recipient,
 reject_unknown_recipient_domain,
 reject_multi_recipient_bounce,
 reject_unauth_destination,

smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache

smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
smtpd_tls_key_file = /etc/letsencrypt/live/email.srv-adm.ru/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/email.srv-adm.ru/fullchain.pem

tls_random_source = dev:/dev/urandom
smtpd_tls_mandatory_ciphers = low
smtpd_tls_ciphers = low
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtp_tls_mandatory_protocols  = !SSLv2,!SSLv3
smtp_tls_ciphers = low
smtp_tls_mandatory_ciphers = low
smtp_tls_protocols = !SSLv2,!SSLv3
smtp_tls_note_starttls_offer = yes
message_size_limit = 20000000
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 15
smtpd_error_sleep_time = 20
anvil_rate_time_unit = 60s
smtpd_client_connection_count_limit = 20
smtpd_client_connection_rate_limit = 30
smtpd_client_message_rate_limit = 30
smtpd_client_event_limit_exceptions = 127.0.0.0/8
smtpd_client_connection_limit_exceptions = 127.0.0.0/8

maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth

# Директория для хранения почты
virtual_mailbox_base = /mail
virtual_minimum_uid = 1100
virtual_uid_maps = static:1100
virtual_gid_maps = static:1100
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

sender_bcc_maps = hash:/etc/postfix/sender_bcc_maps
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_maps

compatibility_level=2

На данном этапе, необходимо обратить внимание на параметры, которые выделил жирным цветом. Это адрес домена, это путь, где будут храниться наши ящики, и пусть до сертфикатов, которые мы выпустили для сайта email.srv-adm.ru

Теперь необходимо создать каталоги и конфигурационное файлы

mkdir /etc/postfix/mysql && cd /etc/postfix/mysql

Далее создаем необходимые файлы. Обращаю внимание, что в них в поле user и поле password необходимо указывать данные от БД postfix, которые мы создавали выше. Все файлы у нас создаются в каталоге /etc/postfix/mysql

Создаем и редактируем файл relay_domains.cf и приводим его к виду:

mcedit /etc/postfix/mysql/relay_domains.cf 
hosts = localhost:3306
user = root
password = пароль от root
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'

Создаем и редактируем файл virtual_alias_domain_maps.cf и приводим его к виду:

mcedit /etc/postfix/mysql/virtual_alias_domain_maps.cf 
hosts = localhost:3306
user = root
password = пароль от root
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1

Создаем и редактируем файл virtual_alias_maps.cf и приводим его к виду:

mcedit /etc/postfix/mysql/virtual_alias_maps.cf 
hosts = localhost:3306
user = root
password = пароль от root
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Создаем и редактируем файл virtual_mailbox_domains.cf и приводим его к виду:

mcedit /etc/postfix/mysql/virtual_mailbox_domains.cf 
hosts = localhost:3306
user = root
password = пароль от root
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'

Создаем и редактируем файл virtual_mailbox_maps.cf и приводим его к виду:

mcedit /etc/postfix/mysql/virtual_mailbox_maps.cf 
hosts = localhost:3306
user = root
password = пароль от root
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

Продолжаем настройку почтового сервера postfix. Редактируем файл /etc/postfix/master.cf Нам надо раскомментировать строки, submission inet n – n – – smtpd чтобы почтовый сервер работал на 587 порту. Приводим данную секцию к следующему виду.

mcedit /etc/postfix/master.cf 
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING  

Добавим еще настройки для поддержки протокола SSL/TLS и порта 465

smtps inet n - n - - smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=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

В этот же файл добавляем еще одну настройку, которая будет указывать postfix, что доставкой почты у нас будет заниматься dovecot

dovecot unix - n n - - pipe
 flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Теперь создадим файлы для информации об ящиках, куда будет собираться вся входящая и исходящая почта.
Для понимания, что мы делаем.
Когда кто-то, будет писать на любой ящик вашего домена, например user@srv-adm.ru – это письмо, по мимо ящика user попадёт в ящик all_in, и наоборот, любое письмо, отправленное с любого ящика будет попадать в общий ящик all_out

 mcedit /etc/postfix/recipient_bcc_maps

В сам файл вносим строку: @srv-adm.ru all_in@srv-adm.ru

mcedit /etc/postfix/sender_bcc_maps

В сам файл вносим строку: @srv-adm.ru all_out@srv-adm.ru

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

postmap /etc/postfix/recipient_bcc_maps /etc/postfix/sender_bcc_maps

Теперь необходимо создать два почтовых ящика all_in@srv-adm.ru и all_out@srv-adm.ru через postfixadmin.

2. Установка и настройка dovecot

dovecot — сервер доставки почты по протоколам pop3 и imap.
Устанавливаем необходимые для dovecot пакеты.

dnf install dovecot*

Редактируем файл конфигурации.

mcedit /etc/dovecot/dovecot.conf

Приводим файл к следущему виду:

listen = *

mail_plugins = mailbox_alias acl
protocols = imap pop3 sieve lmtp

mail_uid = 1100
mail_gid = 1100

first_valid_uid = 1100
last_valid_uid = 1100

auth_verbose = yes
log_path = /var/log/dovecot/main.log
info_log_path = /var/log/dovecot/info.log
debug_log_path = /var/log/dovecot/debug.log

ssl_min_protocol = SSLv3
verbose_ssl = yes
ssl_cert = </etc/letsencrypt/live/email.srv-adm.ru/fullchain.pem
ssl_key = </etc/letsencrypt/live/email.srv-adm.ru/privkey.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

disable_plaintext_auth = no

mail_location = maildir:/mail/%d/%u/

auth_default_realm = srv-adm.ru

auth_mechanisms = PLAIN LOGIN

service auth {
 unix_listener /var/spool/postfix/private/dovecot-auth {
 user = postfix
 group = postfix
 mode = 0666
 }
unix_listener auth-master {
 user = vmail
 group = vmail
 mode = 0666
 }

unix_listener auth-userdb {
 user = vmail
 group = vmail
 mode = 0660
 }
}

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

 inet_listener lmtp {
 address = 127.0.0.1
 port = 24
 }
}

userdb {
 args = /etc/dovecot/dovecot-mysql.conf
 driver = sql
 }

passdb {
 args = /etc/dovecot/dovecot-mysql.conf
 driver = sql
 }

auth_master_user_separator = *
 
plugin {
 auth_socket_path = /var/run/dovecot/auth-master

 acl = vfile
 acl_shared_dict = file:/mnt/mail/shared-folders/shared-mailboxes.db
 sieve_dir = ~/.sieve/
 mailbox_alias_old = Sent
 mailbox_alias_new = Sent Messages
 mailbox_alias_old2 = Sent
 mailbox_alias_new2 = Sent Items
}

protocol lda {
 mail_plugins = $mail_plugins sieve
 auth_socket_path = /var/run/dovecot/auth-master
 deliver_log_format = mail from %f: msgid=%m %$
 log_path = /var/log/dovecot/lda-errors.log
 info_log_path = /var/log/dovecot/lda-deliver.log
 lda_mailbox_autocreate = yes
 lda_mailbox_autosubscribe = yes
# postmaster_address = root
}

protocol lmtp {
 info_log_path = /var/log/dovecot/lmtp.log
 mail_plugins = quota sieve
 postmaster_address = postmaster
 lmtp_save_to_detail_mailbox = yes
 recipient_delimiter = +
}

protocol imap {
 mail_plugins = $mail_plugins imap_acl
 imap_client_workarounds = tb-extra-mailbox-sep
 mail_max_userip_connections = 30
}

protocol pop3 {
 mail_plugins = $mail_plugins
 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
 pop3_uidl_format = %08Xu%08Xv
 mail_max_userip_connections = 30
}

service imap-login {
 service_count = 1
 process_limit = 500
 }

service pop3-login {
 service_count = 1
 }

service managesieve-login {
 inet_listener sieve {
 port = 4190
 }
}

service stats {
    unix_listener stats-reader {
        user = vmail
        group = vmail
        mode = 0660
    }

    unix_listener stats-writer {
        user = vmail
        group = vmail
        mode = 0660
    }
}

namespace {
 type = private
 separator = /
 prefix =
 inbox = yes

 mailbox Sent {
 auto = subscribe
 special_use = \Sent
 }
 mailbox "Sent Messages" {
 auto = no
 special_use = \Sent
 }
 mailbox "Sent Items" {
 auto = no
 special_use = \Sent
 }
 mailbox Drafts {
 auto = subscribe
 special_use = \Drafts
 }
 mailbox Trash {
 auto = subscribe
 special_use = \Trash
 }
 mailbox "Deleted Messages" {
 auto = no
 special_use = \Trash
 }
 mailbox Junk {
 auto = subscribe
 special_use = \Junk
 }
 mailbox Spam {
 auto = no
 special_use = \Junk
 }
 mailbox "Junk E-mail" {
 auto = no
 special_use = \Junk
 }
 mailbox Archive {
 auto = no
 special_use = \Archive
 }
 mailbox Archives {
 auto = no
 special_use = \Archive
 }
}

namespace {
 type = shared
 separator = /
 prefix = Shared/%%u/
 location = maildir:%%h:INDEX=%h/shared/%%u
 subscriptions = yes
 list = children
}

Создаем директорию для плагина acl и назначаем необходимые права

mkdir /mail/shared-folders
chown -R vmail:vmail /mail

Создаем группу и пользователя с указанными в конфиге uid 1100 + назначаем права на каталог /mail

groupadd -g 1100 vmail
useradd -d /mail/ -g 1100 -u 1100 vmail
usermod -a -G dovecot vmail
chown vmail:vmail /mail

Создаем конфигурационные файлы для доступа к mysql базе.

mcedit /etc/dovecot/dovecot-mysql.conf

Приводим файл к следующему виду:

driver = mysql
default_pass_scheme = CRYPT
connect = host=127.0.0.1 dbname=postfix user=root password=ВАШ ПАРОЛЬ ОТ root
user_query = SELECT '/mail/%d/%u' as home, 'maildir:/mail/%d/%u' as mail, 1100 AS uid, 1100 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password, '/mail/%d/%u' as userdb_home, 'maildir:/mail/%d/%u' as userdb_mail, 1100 as userdb_uid, 1100 as userdb_gid, concat('*:bytes=', quota) AS userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

Создадим директорию и файлы для логов.

mkdir /var/log/dovecot
cd /var/log/dovecot && touch main.log info.log debug.log lda-errors.log lda-deliver.log lmtp.log
chown -R vmail:dovecot /var/log/dovecot

На этом основная настройка почтового сервера завершена. Выполняем следующей команды для перезапуска и включения служб.

systemctl restart postfix
systemctl start dovecot
systemctl enable postfix
systemctl enable dovecot

Обе службы должны запуститься без ошибок.
Что бы убедиться в этом, можно выполнить команды и посмотреть, что служба запущена и ошибок нет.

systemctl status postfix
systemctl status dovecot

Настройка logrotate для dovecot

Для того, чтобы логи Dovecot не разрослись до бесконечности, их имеет смысл периодически ротировать с помощью logrotate. Для этого создадим файл конфигурации /etc/logrotate.d/dovecot следующего содержания:

mcedit /etc/logrotate.d/dovecot
/var/log/dovecot/*.log {
    weekly
    rotate 3
    compress
    missingok
    notifempty
    postrotate
	doveadm log reopen
    endscript
    create 0644 vmail dovecot
}

3. Проверка работы почтового сервера

Для проверки работы почтового сервера — отправляем на него письмо. Я буду отправлять со своего почтового адреса на адрес root@srv-adm.ru. Вот что должно быть в логе, если у вас все правильно настроено и почтовый сервер нормально работает.

Что бы посмотреть логи postfix в режиме реального времени, выполняем команду

tail -f /var/log/maillog

Вывод лога:


Jun 27 16:02:51 email postfix/smtpd[118651]: connect from mail-lf1-f45.google.com[209.85.167.45]
Jun 27 16:02:51 email postfix/smtpd[118651]: Anonymous TLS connection established from mail-lf1-f45.google.com[209.85.167.45]: TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256
Jun 27 16:02:52 email postfix/smtpd[118651]: 0389C160943: client=mail-lf1-f45.google.com[209.85.167.45]
Jun 27 16:02:52 email postfix/cleanup[118751]: 0389C160943: message-id=<8ada43ba-af2c-95d1-9e85-4e9d10cf1a61@gmail.com>
Jun 27 16:02:52 email postfix/qmgr[118632]: 0389C160943: from=, size=3254, nrcpt=2 (queue active)
Jun 27 16:02:52 email postfix/smtpd[118651]: disconnect from mail-lf1-f45.google.com[209.85.167.45] ehlo=2 starttls=1 mail=1 rcpt=1 bdat=1 quit=1 commands=7
Jun 27 16:02:52 email postfix/pipe[118753]: 0389C160943: to=, relay=dovecot, delay=0.11, delays=0.05/0.01/0/0.05, dsn=2.0.0, status=sent (delivered via dovecot service)
Jun 27 16:02:52 email postfix/pipe[118754]: 0389C160943: to=, relay=dovecot, delay=0.14, delays=0.05/0.04/0/0.06, dsn=2.0.0, status=sent (delivered via dovecot service)
Jun 27 16:02:52 email postfix/qmgr[118632]: 0389C160943: removed


Здесь видно, что было установлена подключение с сервера гугла mail-lf1-f45.google.com[209.85.167.45] Видно, что адрес отправителя from=
так же, в логе мы видим что письмо попало в 2 ящика all_in@srv-adm.ru и root@srv-adm.ru

В директории /mail была создана директория с именем нашего домена srv-adm.ru, а в ней создана папка с именем ящика root@srv-adm.ru и ящика all_in@srv-adm.ru
Непрочитанные письма, лежат здесь – /mail/srv-adm.ru/root@srv-adm.ru/new
Прочитанные письма /mail/srv-adm.ru/root@srv-adm.ru/cur

Теперь попробуем подключиться к нашему серверу через программу Mozilla Thunderbird.
Указываем следующие настройки

Пока письма не отправляем, т.к почтовый сервер до конца ещё не настроен.

4. Настройка DKIM

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

Устанавливаем необходимые пакеты

dnf install opendkim opendkim-tools 

Создаем директорию для хранения ключей:

mkdir -p /etc/postfix/dkim && cd /etc/postfix/dkim

Генерируем ключи для домена srv-adm.ru:

opendkim-genkey -D /etc/postfix/dkim/ -d srv-adm.ru -s email

srv-adm.ru – домен почтового сервера
email – имя почтового сервера, оно у нас везде во всех конфигах email.srv-adm.ru

На выходе получаете пару файлов — закрытый (приватный) и открытый ключ. Закрытый останется на сервере, открытый будет опубликован в DNS. Для удобства сразу переименуем эти 2 файла

mv email.private email.srv-adm.ru.private
mv email.txt email.srv-adm.ru.txt

Создаем файл с таблицей ключей

mcedit keytable
email._domainkey.srv-adm.ru srv-adm.ru:email:/etc/postfix/dkim/email.srv-adm.ru.private

Так же мы создаем еще один файл, в котором будет описано, каким ключом подписывать письма нашего домена

mcedit signingtable
*@srv-adm.ru email._domainkey.srv-adm.ru

Выставляем права доступа на данные все файлы:

chown root:opendkim * 
chmod u=rw,g=r,o= * 

Настраиваем конфиг службы opendkim

mcedit /etc/opendkim.conf

AutoRestart yes
AutoRestartRate 10/1h
Umask 022
Syslog yes
SyslogSuccess yes
LogWhy yes
Mode sv
UserID opendkim:opendkim
Socket inet:8891@localhost
PidFile /var/run/opendkim/opendkim.pid
Canonicalization relaxed/relaxed
Selector default
MinimumKeyBits 1024
KeyFile /etc/postfix/dkim/email.srv-adm.ru.private
KeyTable /etc/postfix/dkim/keytable
SigningTable refile:/etc/postfix/dkim/signingtable

Добавляем в конфигурационный файл postfix следующие параметры:

mcedit /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2

Перезапускаем postfix и dkim + dkim добавляем в автозагрузку.

systemctl restart postfix
systemctl restart opendkim.service
systemctl enable opendkim.service

Теперь необходимо нам добавить открытый ключ в DNS, в панели вашего хостинга.
Добавлять мы будем новую TXT запись.
Ее содержание берем из файла /etc/postfix/dkim/email.srv-adm.ru.txt

Содержимое данного файла, нельзя просто вставить в TXT запись, его нужно отредактировать, убрать “” пробелы.

Вот так выглядит моя запись ДО преобразования

email._domainkey        IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbILChI3QrjYgjppos6IU6Q2DhPUxUcx6/U69OYV/JzoS0ddr+VrxKTpPOwfbW4SIdXWLlMDxvqfSO2CnuIUwRPVISB++NKHa42j3DjAAYxxtlC8ZjfGyBKisjOROHayKLcwhJU2ihY3ZHQQf/bcGJzcn45ETZZ1F0g7SLbEWoQIDAQAB" )  ; ----- DKIM key email for srv-adm.ru

А вот так должна выглядеть после, её мы и вставляем в TXT запись

v=DKIM1; k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbILChI3QrjYgjppos6IU6Q2DhPUxUcx6/U69OYV/JzoS0ddr+VrxKTpPOwfbW4SIdXWLlMDxvqfSO2CnuIUwRPVISB++NKHa42j3DjAAYxxtlC8ZjfGyBKisjOROHayKLcwhJU2ihY3ZHQQf/bcGJzcn45ETZZ1F0g7SLbEWoQIDAQAB

Теперь необходимо проверить корректность отправки.

Запускаем просмотр логов

tail -f /var/log/maillog

и отправляем письмо себе на другую почту. И видим в логе

Jun 27 17:59:07 email opendkim[2866]: 66F21160105: DKIM-Signature field added (s=email, d=srv-adm.ru)

5. Настройка SFP-Записи

SPF — это DNS-запись, содержащая список ваших доверенных серверов, с которых может отправляться почта вашего домена, и сведения о механизме обработки писем, отправленных с других серверов. Корректная настройка SPF позволит снизить вероятность рассылки спама злоумышленниками от вашего имени.

Идём в панель управления dns и добавляем новую TXT запись.

6. Настройка DMARC

Domain-based Message Authentication, Reporting and Conformance (идентификация сообщений, создание отчётов и определение соответствия по доменному имени) или DMARC — это техническая спецификация, созданная группой организаций, предназначенная для снижения количества спамовых и фишинговых электронных писем, основанная на идентификации почтовых доменов отправителя на основании правил и признаков, заданных на почтовом сервере получателя (Wiki). То есть почтовый сервер сам решает, хорошее сообщение или плохое (допустим, исходя из политик выше) и действует согласно DMARC записи.

Для настройки DMARC на самом почтовом сервере необходимо создать ящик dmarc@srv-adm.ru.
Добавляем TXT записи в DNS. Запись будет такая:

v=DMARC1; p=none; rua=mailto:dmarc@srv-adm.ru

7. Финальная проверка работоспособности почтового сервера

Важно: Перед это проверкой, желательно подождать некоторое время, пока обновятся все записи DNS, которые мы сделали. Иногда обновление DNS занимает до суток.

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

Осуществлять проверку, мы будем на сайте https://www.mail-tester.com

Копируем данный адрес, и пишем письмо

Совет: Сайт иногда, если вы в теме или теле письма укажите слово “тест” “проверка” и тп – может посчитать это за ошибку, поэтому пишите что-то нейтральное.

После отправки письма – нажимаем на сайте “Проверить”

По итогу у нас должно получиться следующее

Если у вас иной результат, сайт покажет, какие именно ошибки.
Их обязательно нужно устранить. Без устранения ошибок – не рекомендуется использовать почтовый сервер.

Так же обратите внимание, что данный сайт в сутки позволят выполнить бесплатно проверку только 5 раз, имейте это ввиду.

В Следующей статье рассмотрим установку WEB-Интерфейса roundcube

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *