Почтовый сервер

Почтовый сервер своими силами

7.04.23
25.12.25

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

Вначале несколько слов о том как работает почта.

Входящая почта

Все входящие письма, предназначенные для вашего сервера, принимаются MTA у нас это Postfix (SMTP), а затем MDA, у нас это Dovecot, обеспечивает доступ для MUA (Thunderbird/Outlook) по протоколам IMAP и POP3. Схематически можно представить так:

Incoming mail (Входящая почта откуда-либо) -> MTA: Postfix (SMTP) 
-> MDA: Dovecot (LMTP) -> MUA (Thunderbird/Outlook) (локальное хранение)

В общем виде пересылка почтовых сообщений происходит по следующей схеме:
Отправитель использует Mail User Agent (MUA) или почтовый клиент, для отправки сообщения через один или несколько Mail Transfer Agents (MTA). Последний из которых, передает его в почтовый ящик получателя. Далее Mail Delivery Agent (MDA) обеспечивает доступ почтовым клиентам получателя (MUA), обычно через POP3 или IMAP.

Как сказал выше, Dovecot будет через IMAP/POP предоставлять почтовым клиентам доступ к входящий почте.

Исходящая почта

Все исходящие письма должны отправляться с помощью Postfix. Но только с аутентифицированных учетных записей. Схема такая:

Outgoing mail MUA (Thunderbird/Outlook) -> MTA: Postfix (SMTP)
-> Destination (SMTP) типа Яндекс/Майл/Gmail

Начнем

Весь план работ выглядит так:

  • Установка и настройка MTA (Mail Transfer Agent). В нашем случае это Postfix
  • Установка и настройка MDA (Mail Delivery Agent). Это будет Dovecot

Это два обязательных сервиса. Есть ещё дополнительные, но о них позже.

Установка и настройка Postfix

Как уже сказал ранее, роль MTA у нас будет выполнять Postfix. Есть ещё похожие MTA, например exim4, но если вы также используете сервер на базе Ubuntu, то тут Postfix используется по умолчанию. И, соответственно, в Ubuntu 20.04 — 24.04 установка проста:

sudo apt install postfix

Если Postfix установлен ранее, то можно сделать реконфигурацию повторно:

sudo dpkg-reconfigure postfix

Далее, ответьте на вопросы:

Почтовый сервер

Нужно выбрать «Интернет-сайт», затем указать свой домен:

Затем указать имя пользователя, который будет получать системную почту, указать все поддомены для которых вы получаете почту, что-то типа: mail.example.com, localhost.localdomain, localhost и ещё ответить на ряд вопросов. Комментарии там подробные.

Все установки сохраняются в файле:

/etc/postfix/main.cf

Тут надо обратить внимание на две важных установки:

  • myorigin
  • myhostname

Если на сервере несколько почтовых доменов, то нужно выбрать один из них в качестве myorigin. Именно этот домен будет использован в качестве системных ответов, например, Mail Delivery System<MAILER-DAEMON@myorigin>. Обычно myorigin устанавливается в файле /etc/mailname Можно установить в файле в первой строке или можно напрямую установить

myorigin = example.com

myhostname это имя вашего сервера. Это именно то имя, которое должно быть прописано в поле MX в DNS. Это же имя должно быть указано и в поле SPF. Неплохой вариант это:

myhostname = mail.example.com

Следующий шаг — хранилище писем

Разных вариантов много, например, можно установить параметр home_mailbox = Maildir/ и в этом случае почта будет храниться в домашнем каталоге пользователя. Что-то типа: /home/user/Maildir/ Но в этом случае надо всем пользователям создавать домашние каталоги на сервере, если это ваш случай, то выбирайте этот вариант. Не забудьте в конце Maildir/ поставить слеш, тогда письма будут разбиваться на файлы. Иначе будут храниться в одном.

Либо можно хранить все письма в /var/mail или /var/spool/mail Это определяет параметр mail_spool_directory = /var/mail Тогда вся почта будет храниться в этом каталоге.

Если же у вас довольно много абонентов (100 и более), то вероятно, надо посмотреть в сторону БД.

Все эти установки делаем в файле /etc/postfix/main.cf Можно напрямую править конфиг, либо использовать команду postconf например: sudo postconf -e ‘mail_spool_directory = /var/mail’ (кавычки обязательны).

SMTP Authentication

SMTP аутентификация позволяет клиенту идентифицировать себя через механизм аутентификации SASL, используя Transport Layer Security (TLS) для шифрования процесса аутентификации. После аутентификации SMTP-сервер разрешает клиенту передавать почту.

Если рассматривать в связке с Dovecot-ом, то настройки будут такие:

postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_security_options = noanonymous,noplaintext'
postconf -e 'smtpd_sasl_tls_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'smtpd_relay_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

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

Далее, надо выпустить сертификаты. Можно сделать это от Lets’encript либо самоподписные. После чего настраиваем TLS

postconf -e 'smtp_tls_security_level = may'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key'
postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'
postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'

Установка и настройка Dovecot

Чтобы установить базовый сервер Dovecot с общими функциями POP3 и IMAP, выполните следующую команду:

apt install dovecot-imapd dovecot-pop3d

Далее, основной файл конфигурации — /etc/dovecot/dovecot.conf Если в него заглянуть, то можно увидеть два включения: !include conf.d/*.conf и !include_try /usr/share/dovecot/protocols.d/*.protocol

В директории conf.d находятся все файлы настроек. Многое понятно из их названия.
Надо обратить внимание на три файла:

  • /etc/dovecot/conf.d/10-master.conf
  • /etc/dovecot/conf.d/10-ssl.conf
  • /etc/dovecot/conf.d/10-mail.conf

В первом надо установить авторизацию:

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

Во втором задать сертификаты, там всё просто, надо подставить ссылки на сертификаты.

ssl_cert = </etc/dovecot/private/dovecot.pem

ssl_key = </etc/dovecot/private/dovecot.key

В третьем настроить хранилище писем. Там хорошая аннотация, однако, не всё просто. Для начала сделаем почту для тех пользователей, у которых есть аккаунты на сервере (pam-аутентификация). Лучше избрать вариант хранения писем Maildir. Для этого надо выполнить команду для Postfix’a:

postconf -e 'home_mailbox = Maildir/'

Либо просто добавьте «home_mailbox = Maildir/» в файл /etc/postfix/main.cf
Далее, в файле /etc/dovecot/conf.d/10-mail.conf надо добавить или раскомментировать строку:

mail_location = maildir:~/Maildir:LAYOUT=fs

параметр LAYOUT=fs регламентирует формат почты по директориям.

Aliases (синонимы)

Если публикуете свои адреса где-угодно, то довольно скоро ваш ящик будет заваливать спамом. Неплохая идея — создавать синонимы и их публиковать. Когда спама станет нестерпимо много, синоним можно настроить на более жёсткую обработку спам-фильтром (как настроить автоматическое удаление СПАМа), либо вообще удалить.

За синонимы отвечает файл: /etc/aliases Его формат простой: alias: user Пример:

# See man 5 aliases for format
postmaster: alex_pushkin

После редактирования файла надо выполнить команду: postalias /etc/aliases

Надо перезапустить postfix и dovecot:

systemctl restart postfix.service
systemctl restart dovecot.service

На этом базовая настройка закончена и почтовый сервер должен работать. Не забудьте открыть порты.
Для Dovecot это 110, 143, 993, 995 и для Postfix это 25, 465, 587

Следующим этапом можно настроить DKIM запись для всех исходящих писем. Вот краткая инструкция. И, избавиться от некоторых заголовков — вот инструкция