В материале было решено собрать все этапы настройки почтового сервера. Как оказалось на практике, задача эта не простая, особенно если у тебя не достаточно понимания работы сетевых связей в процессе работы данного сервиса. Эта инструкция была сформирована мною в процессе практической настройки почтового сервера на виртуальной машине гипервизора Proxmox. В моём арсенале имеется Статический белый ip — адрес, сервер DNS на виртуальной машине этого же гипервизора и роутер с NAT, через которые мои виртуалки смотрят в распределённую сеть.
В итоге мне удалось собрать функциональный почтовый сервер, который способен взаимодействовать с наиболее распространёнными почтовыми клиентами. Проблемы остались лишь с подключением клиента Outlook, и оказалось связанно это с тем что, как мне удалось выяснить, данный клиент требователен к PTR записи, ip — адреса данного почтового домена. Редактировать PTR записи адреса есть возможность только у владельца пула данного адреса.
Мною была предпринята попытка обратиться в службу поддержки моего провайдера, но мне был дан ответ в стиле: «У нас нет технической возможности для данной услуги». В итоге почтовый сервер который мне удалось собрать является не вполне полноценным в глобальной паутине, не смотря на то, что поддерживает такие технологии аутентификации электронной почты как SPF, DMARC и DKIM.
Что такое SPF, DKIM и DMARC на самом деле
Эти три механизма объединяет не «доменные технологии», а email‑аутентификация, основанная на DNS.
- SPF — проверка, какие IP имеют право отправлять почту от имени домена.
- DKIM — криптографическая подпись писем, публичный ключ хранится в DNS.
- DMARC — политика, которая объединяет SPF и DKIM и задаёт правила обработки.
То есть:
- Они используют DNS, но не являются доменными технологиями в широком смысле.
- Они относятся к email security / email authentication.
Как правильно объединить SPF, DKIM и DMARC
Вот корректные зонтичные термины:
1. Технологии email‑аутентификации
Самое точное и общепринятое.
2. Email authentication stack
Если нужен современный, «инженерный» термин.
3. Почтовые технологии безопасности
Если хочешь подчеркнуть аспект защиты.
4. DNS‑основанные механизмы аутентификации почты
Если важно упомянуть DNS.
Приступим:
- Подготовка серверной операционной системы
- Подготовка сервера DNS (в этом случае работает в локальной сети)
- Установка Postfix
- Установка mailutils
- Настройка Postfix, для перемещения почтовых каталогов пользователей расположенных по умолчанию, в их системные каталоги.
nano /etc/postfix/main.cf
Добавляем в конец текста файла строку:
home_mailbox = Maildir/
После данного изменения выполняем:
postconf -e 'home_mailbox = Maildir/'
- Устанавливаем Dovecot
apt install dovecot-imapd dovecot-pop3d
systemctl restart dovecot
- Осуществляем редактирование файла конфигурации dovekot
nano /etc/dovecot/dovecot.conf
В конец текста конфигурации dovecot.conf добавляем строку:
protocols = pop3 pop3s imap imaps
- Возвращаемся к настройкам, подготовленной ранее, нашей доменной зоны для сервера и добавляем TXT записи, предусмотренные для обслуживания почтового доменного имени. Добавляем dmarc и spf записи (MX запись, уже предположительно имеется), примерно:
_dmarc IN TXT "v=DMARC1; p=quarantine; aspf=r; sp=none"
sumuis.ru. IN TXT "v=spf1 ip4:11.22.11.22 a mx ~all"
- Устанавливаем Opendkim следующими командами:
apt install opendkim opendkim-tools
systemctl start opendkim
systemctl enable opendkim
- Создаём каталог для хранения ключей необходимых в работе opendkim
mkdir /etc/opendkim
- Генерируем упомянутый ключ командой:
opendkim-genkey -D /etc/opendkim --domain example.com --selector mail
- Вносим все необходимые изменения в файл конфигурации opendkim.conf
chown -R opendkim:opendkim /etc/opendkim
nano /etc/opendkim.conf
Добавляем, а при наличии знаков комментирования для имеющихся из списка строк, убираем знаки комментирования.
Autorestart yes
AutorestartRate 10/1h
LogWhy yes
Mode sv
UMask 002
#Socket local:/run/opendkim/opendkim.pid
Socket inet:8891@localhost
В итоге файл конфигурации должен соответствовать указанным установкам. Затем добавляем в конец редактируемого файла, пути для остальных файлов необходимых для работы утилиты c указанием алгоритма шифрования.
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
SignatureAlgorithm rsa-sha256
- Теперь создаём файлы указанные в выше обозначенной конфигурации
nano /etc/opendkim/TrustedHosts
В этом файле вписываем стоку с соответствующим синтаксисом, обозначающую доменное имя вашего почтового сервера
example.com
nano /etc/opendkim/KeyTable
В этом файле вписываем стоку с соответствующим синтаксисом, обозначающую тройку параметров, которые OpenDKIM использует для выбора нужного приватного ключа при подписи письма
mail._domainkey.example.com example.com:mail:/etc/opendkim/mail.private
1. mail._domainkey.example.com— селектор + домен (DNS‑имя записи DKIM)
Это полное имя DKIM‑записи, которое будет опубликовано в DNS.
mail— селектор (selector)_domainkey— обязательная DKIM‑зонаexample.com— домен
То есть OpenDKIM будет искать публичный ключ в DNS по адресу:
Код
mail._domainkey.example.com
2. example.com— домен, для которого используется ключ
Это домен, от имени которого OpenDKIM будет подписывать письма.
Если письмо отправляется с @sumuis.ru, OpenDKIM поймёт, что нужно использовать этот ключ.
3. mail — селектор DKIM
Это тот же селектор, который используется в DNS‑записи.
Он попадёт в заголовок DKIM:
Код
s=mail;
4. /etc/opendkim/mail.private — путь к приватному ключу
Это путь к приватному DKIM‑ключу, который OpenDKIM использует для подписи писем.
Публичный ключ должен быть опубликован в DNS в виде TXT‑записи.
Эта строка говорит OpenDKIM:
«Когда нужно подписать письмо от домена
sumuis.ru, используй селектор/etc/opendkim/mail.private, а публичный ключ ищи в DNS по адресуmail._domainkey..»example.com
В этом файле
nano /etc/opendkim/SigningTable
вписываем стоку с соответствующим синтаксисом
*@example.com mail._domainkey.example.com
Что означает каждая часть
1. *@example.com— шаблон адресов отправителя
Это маска, которая говорит OpenDKIM:
«Подписывать все письма, отправленные с любого адреса в домене
sumuis.ru.»
Звёздочка означает «любой локальный пользователь»:
info@example.comadmin@example.comnoreply@example.comroot@example.com- и любые другие
То есть правило применяется ко всем отправителям внутри домена.
2. mail._domainkey.example.com— ссылка на запись в KeyTable
Это идентификатор ключа, который должен совпадать с первой колонкой в /etc/opendkim/KeyTable.
OpenDKIM делает следующее:
- Видит, что письмо отправлено с
*@example.com. - Находит в SigningTable соответствие:Код
*@sumuis.ru → mail._domainkey.sumuis.ru - Идёт в KeyTable и ищет строку с таким же идентификатором:
mail._domainkey.example.com example.com:mail:/etc/opendkim/mail.private - Использует указанный приватный ключ для подписи.
Итоговое значение строки
Эта строка говорит OpenDKIM:
«Все письма, отправленные с любого адреса в домене
sumuis.ru, должны подписываться DKIM‑ключом, который описан в KeyTable под именемmail._domainkey.example.com.»
Как это работает в связке с KeyTable
SigningTable — это правило выбора ключа. KeyTable — это описание ключа.
Вместе они образуют цепочку:
Отправитель → селектор → приватный ключ → DNS‑запись
Важно не забыть в заключении указать пути к сертификатам безопасности в файлах конфигурации postfix и dovecot
Для postfix в файле /etc/postfix/main.cf с синтаксисом:
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem
Для dovecot в файле /etc/dovecot/conf.d/10-ssl.conf с синтаксисом:
ssl = yes
ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem
В случае генерации вами этих ключей с помощью letsencript